[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);
     }
 }