New predicate. (_cairo_xlib_surface_set_filter): Skip filterless servers. (_cairo_xlib_surface_clone_similar): Fix typo.

This commit is contained in:
Graydon Hoare 2004-02-02 11:20:44 +00:00
parent b66bbf4879
commit 34e0e7eec8
3 changed files with 17 additions and 6 deletions

View file

@ -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.

View file

@ -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);

View file

@ -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);