summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@redhat.com>2004-02-02 11:20:44 +0000
committerGraydon Hoare <graydon@redhat.com>2004-02-02 11:20:44 +0000
commit34e0e7eec8a1a8434c5ad52fb754f2bbaf224ced (patch)
tree3f551f14b6312534cf8497ca73f4d0bbb172b0a2
parentb66bbf48790238174efd1491bfcd8c0d77f43f13 (diff)
New predicate. (_cairo_xlib_surface_set_filter): Skip filterless servers. (_cairo_xlib_surface_clone_similar): Fix typo.
-rw-r--r--ChangeLog7
-rw-r--r--src/cairo-xlib-surface.c8
-rw-r--r--src/cairo_xlib_surface.c8
3 files changed, 17 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 71124bc1c..37f780641 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-02-02 Graydon Hoare <graydon@redhat.com>
+
+ * src/cairo_xlib_surface.c
+ (CAIRO_SURFACE_RENDER_HAS_FILTERS): New predicate.
+ (_cairo_xlib_surface_set_filter): Skip filterless servers.
+ (_cairo_xlib_surface_clone_similar): Fix typo.
+
2004-01-27 Graydon Hoare <graydon@redhat.com>
* src/cairoint.h (cairo_surface): New "filter" field.
diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c
index f5923d2af..1630447f4 100644
--- a/src/cairo-xlib-surface.c
+++ b/src/cairo-xlib-surface.c
@@ -90,6 +90,7 @@ typedef struct cairo_xlib_surface {
#define CAIRO_SURFACE_RENDER_HAS_TRIFAN(surface) CAIRO_SURFACE_RENDER_AT_LEAST((surface), 0, 4)
#define CAIRO_SURFACE_RENDER_HAS_PICTURE_TRANSFORM(surface) CAIRO_SURFACE_RENDER_AT_LEAST((surface), 0, 6)
+#define CAIRO_SURFACE_RENDER_HAS_FILTERS(surface) CAIRO_SURFACE_RENDER_AT_LEAST((surface), 0, 6)
static int
_CAIRO_FORMAT_DEPTH (cairo_format_t format)
@@ -320,9 +321,10 @@ _cairo_xlib_surface_set_filter (void *abstract_surface, cairo_filter_t filter)
cairo_xlib_surface_t *surface = abstract_surface;
char *render_filter;
- if (!surface->picture)
+ if (!(surface->picture
+ && CAIRO_SURFACE_RENDER_HAS_FILTERS(surface)))
return CAIRO_STATUS_SUCCESS;
-
+
switch (filter) {
case CAIRO_FILTER_FAST:
render_filter = FilterFast;
@@ -386,7 +388,7 @@ _cairo_xlib_surface_clone_similar (cairo_surface_t *src,
if (clone == NULL)
return NULL;
- _cairo_xlib_surface_set_filter (clone, cairo_surface_get_filter(src_image));
+ _cairo_xlib_surface_set_filter (clone, cairo_surface_get_filter(src));
_cairo_xlib_surface_set_image (clone, src_image);
diff --git a/src/cairo_xlib_surface.c b/src/cairo_xlib_surface.c
index f5923d2af..1630447f4 100644
--- a/src/cairo_xlib_surface.c
+++ b/src/cairo_xlib_surface.c
@@ -90,6 +90,7 @@ typedef struct cairo_xlib_surface {
#define CAIRO_SURFACE_RENDER_HAS_TRIFAN(surface) CAIRO_SURFACE_RENDER_AT_LEAST((surface), 0, 4)
#define CAIRO_SURFACE_RENDER_HAS_PICTURE_TRANSFORM(surface) CAIRO_SURFACE_RENDER_AT_LEAST((surface), 0, 6)
+#define CAIRO_SURFACE_RENDER_HAS_FILTERS(surface) CAIRO_SURFACE_RENDER_AT_LEAST((surface), 0, 6)
static int
_CAIRO_FORMAT_DEPTH (cairo_format_t format)
@@ -320,9 +321,10 @@ _cairo_xlib_surface_set_filter (void *abstract_surface, cairo_filter_t filter)
cairo_xlib_surface_t *surface = abstract_surface;
char *render_filter;
- if (!surface->picture)
+ if (!(surface->picture
+ && CAIRO_SURFACE_RENDER_HAS_FILTERS(surface)))
return CAIRO_STATUS_SUCCESS;
-
+
switch (filter) {
case CAIRO_FILTER_FAST:
render_filter = FilterFast;
@@ -386,7 +388,7 @@ _cairo_xlib_surface_clone_similar (cairo_surface_t *src,
if (clone == NULL)
return NULL;
- _cairo_xlib_surface_set_filter (clone, cairo_surface_get_filter(src_image));
+ _cairo_xlib_surface_set_filter (clone, cairo_surface_get_filter(src));
_cairo_xlib_surface_set_image (clone, src_image);