summaryrefslogtreecommitdiff
path: root/src/cairo-directfb-surface.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2008-10-20 22:04:58 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2008-10-20 23:20:25 +0100
commitc7951c4a368baaeeadca4e2a18d3ad45225380a0 (patch)
tree183db074f3bb0173ac6f21a56f99cbf3a39b0d18 /src/cairo-directfb-surface.c
parent98933fd4b8579b68623a8212015769b058db43f5 (diff)
[directfb] Perfom text fallback if emulating clip regions.
Fallback if we have a clip that is not a simple region.
Diffstat (limited to 'src/cairo-directfb-surface.c')
-rw-r--r--src/cairo-directfb-surface.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/cairo-directfb-surface.c b/src/cairo-directfb-surface.c
index ee0e5de48..b2116880e 100644
--- a/src/cairo-directfb-surface.c
+++ b/src/cairo-directfb-surface.c
@@ -38,14 +38,13 @@
#include "cairoint.h"
#include "cairo-directfb.h"
-#include <stdlib.h>
-
#include <directfb.h>
#include <direct/types.h>
#include <direct/debug.h>
#include <direct/memcpy.h>
#include <direct/util.h>
+#include "cairo-clip-private.h"
/*
* Rectangle works fine.
@@ -1704,6 +1703,17 @@ _cairo_directfb_surface_show_glyphs (void *abstract_dst,
if (pattern->type != CAIRO_PATTERN_TYPE_SOLID)
return CAIRO_INT_STATUS_UNSUPPORTED;
+ /* Fallback if we need to emulate clip regions */
+ if (dst->base.clip &&
+ (dst->base.clip->mode != CAIRO_CLIP_MODE_REGION ||
+ dst->base.clip->surface != NULL))
+ {
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+ }
+
+ if (! _cairo_operator_bounded_by_mask (op))
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+
if (! _directfb_get_operator (op, &sblend, &dblend) ||
sblend == DSBF_DESTALPHA || sblend == DSBF_INVDESTALPHA)
{