[Commit] Xc/src Xc.h,1.8,1.9 xcint.h,1.4,1.5 xcsurface.c,1.2,1.3
Carl Worth
commit@keithp.com
Wed, 14 May 2003 18:16:19 -0700
Committed by: cworth
Update of /local/src/CVS/Xc/src
In directory home.keithp.com:/tmp/cvs-serv9102/src
Modified Files:
Xc.h xcint.h xcsurface.c
Log Message:
Added XcSurfaceGetTransform, XcSurfaceSetFilter
Index: Xc.h
===================================================================
RCS file: /local/src/CVS/Xc/src/Xc.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- Xc.h 23 Apr 2003 14:18:26 -0000 1.8
+++ Xc.h 15 May 2003 01:16:16 -0000 1.9
@@ -73,6 +73,22 @@
XTransform *transform);
void
+XcSurfaceGetTransform (XcSurface *surface,
+ XTransform *transform);
+
+typedef enum {
+ XcFilterFast = IcFilterFast,
+ XcFilterGood = IcFilterGood,
+ XcFilterBest = IcFilterBest,
+ XcFilterNearest = IcFilterNearest,
+ XcFilterBilinear = IcFilterBilinear
+} XcFilter;
+
+void
+XcSurfaceSetFilter (XcSurface *surface,
+ XcFilter filter);
+
+void
XcSurfaceSetRepeat (XcSurface *surface,
int repeat);
Index: xcint.h
===================================================================
RCS file: /local/src/CVS/Xc/src/xcint.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- xcint.h 17 Apr 2003 15:55:43 -0000 1.4
+++ xcint.h 15 May 2003 01:16:16 -0000 1.5
@@ -52,8 +52,11 @@
typedef enum { XC_SURFACE_TYPE_DRAWABLE, XC_SURFACE_TYPE_ICIMAGE } XcSurfaceType;
struct _XcSurface {
+ /* For any type */
XcSurfaceType type;
+ XTransform transform;
+ /* For TYPE_DRAWABLE */
Display *dpy;
GC gc;
Drawable drawable;
@@ -64,6 +67,7 @@
Picture picture;
+ /* For TYPE_ICIMAGE */
IcImage *icimage;
};
Index: xcsurface.c
===================================================================
RCS file: /local/src/CVS/Xc/src/xcsurface.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- xcsurface.c 25 Apr 2003 20:24:35 -0000 1.2
+++ xcsurface.c 15 May 2003 01:16:16 -0000 1.3
@@ -28,6 +28,17 @@
#include "xcint.h"
+static const XTransform XC_XTRANSFORM_IDENTITY = {
+ {
+ {65536, 0, 0},
+ { 0, 65536, 0},
+ { 0, 0, 65536}
+ }
+};
+
+static char *
+_XcRenderFilterName (XcFilter filter);
+
XcSurface *
XcSurfaceCreateForDrawable (Display *dpy,
Drawable drawable,
@@ -42,6 +53,7 @@
return NULL;
surface->type = XC_SURFACE_TYPE_DRAWABLE;
+ surface->transform = XC_XTRANSFORM_IDENTITY;
surface->dpy = dpy;
surface->gc = 0;
@@ -76,6 +88,7 @@
return NULL;
surface->type = XC_SURFACE_TYPE_ICIMAGE;
+ surface->transform = XC_XTRANSFORM_IDENTITY;
surface->dpy = NULL;
surface->gc = 0;
@@ -135,6 +148,8 @@
XcSurfaceSetTransform (XcSurface *surface,
XTransform *transform)
{
+ surface->transform = *transform;
+
if (surface->picture) {
if (XC_SURFACE_RENDER_HAS_PICTURE_TRANSFORM (surface))
XRenderSetPictureTransform (surface->dpy, surface->picture, transform);
@@ -149,6 +164,13 @@
}
void
+XcSurfaceGetTransform (XcSurface *surface,
+ XTransform *transform)
+{
+ *transform = surface->transform;
+}
+
+void
XcSurfaceSetRepeat (XcSurface *surface,
int repeat)
{
@@ -164,6 +186,41 @@
if (surface->icimage) {
IcImageSetRepeat (surface->icimage, repeat);
+ }
+}
+
+/* XXX: The Render specification has capitalized versions of these
+ strings. However, the current implementation is case-sensitive and
+ expects lowercase versions. */
+static char *
+_XcRenderFilterName (XcFilter filter)
+{
+ switch (filter) {
+ case XcFilterFast:
+ return "fast";
+ case XcFilterGood:
+ return "good";
+ case XcFilterBest:
+ return "best";
+ case XcFilterNearest:
+ return "nearest";
+ case XcFilterBilinear:
+ return "bilinear";
+ default:
+ return "best";
+ }
+}
+
+void
+XcSurfaceSetFilter (XcSurface *surface,
+ XcFilter filter)
+{
+ if (surface->picture) {
+ XRenderSetPictureFilter (surface->dpy, surface->picture, _XcRenderFilterName (filter), NULL, 0);
+ }
+
+ if (surface->icimage) {
+ IcImageSetFilter (surface->icimage, filter);
}
}