summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-screen.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-09-02 00:34:37 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-09-02 00:34:37 +0100
commit59c4fe93ee30c8182ae1a29267b9c08602e2f6c5 (patch)
treea7be9ea3690aa81a1ab255db0bb7963cd7068229 /src/cairo-xlib-screen.c
parent075fc5666abe006c434bf7ec28d2d4f0226a1d3a (diff)
[xlib] Eliminate GC clipping
Eradicate the use of clipping with GC. By never using clipping, we never have to worry about retrieving a dirty clip from the GC cache.
Diffstat (limited to 'src/cairo-xlib-screen.c')
-rw-r--r--src/cairo-xlib-screen.c50
1 files changed, 18 insertions, 32 deletions
diff --git a/src/cairo-xlib-screen.c b/src/cairo-xlib-screen.c
index 38e64af3..800c6d2e 100644
--- a/src/cairo-xlib-screen.c
+++ b/src/cairo-xlib-screen.c
@@ -380,9 +380,8 @@ _cairo_xlib_screen_get (Display *dpy,
#if HAS_ATOMIC_OPS
GC
_cairo_xlib_screen_get_gc (cairo_xlib_screen_t *info,
- unsigned int depth,
- Drawable drawable,
- unsigned int *dirty)
+ int depth,
+ Drawable drawable)
{
XGCValues gcv;
int i, new, old;
@@ -394,13 +393,13 @@ _cairo_xlib_screen_get_gc (cairo_xlib_screen_t *info,
if (old == 0)
break;
- if (((old >> 0) & 0x7f) == depth)
+ if (((old >> 0) & 0xff) == depth)
i = 0;
- else if (((old >> 8) & 0x7f) == depth)
+ else if (((old >> 8) & 0xff) == depth)
i = 1;
- else if (((old >> 16) & 0x7f) == depth)
+ else if (((old >> 16) & 0xff) == depth)
i = 2;
- else if (((old >> 24) & 0x7f) == depth)
+ else if (((old >> 24) & 0xff) == depth)
i = 3;
else
break;
@@ -411,10 +410,6 @@ _cairo_xlib_screen_get_gc (cairo_xlib_screen_t *info,
if (likely (gc != NULL)) {
(void) _cairo_atomic_ptr_cmpxchg (&info->gc[i], gc, NULL);
-
- if (old & 0x80 << (8 * i))
- *dirty |= CAIRO_XLIB_SURFACE_CLIP_DIRTY_GC;
-
return gc;
}
@@ -426,25 +421,23 @@ _cairo_xlib_screen_get_gc (cairo_xlib_screen_t *info,
void
_cairo_xlib_screen_put_gc (cairo_xlib_screen_t *info,
- unsigned int depth,
- GC gc,
- cairo_bool_t reset_clip)
+ int depth,
+ GC gc)
{
int i, old, new;
- depth |= reset_clip ? 0x80 : 0;
do {
do {
i = -1;
old = info->gc_depths;
- if (((old >> 0) & 0x7f) == 0)
+ if (((old >> 0) & 0xff) == 0)
i = 0;
- else if (((old >> 8) & 0x7f) == 0)
+ else if (((old >> 8) & 0xff) == 0)
i = 1;
- else if (((old >> 16) & 0x7f) == 0)
+ else if (((old >> 16) & 0xff) == 0)
i = 2;
- else if (((old >> 24) & 0x7f) == 0)
+ else if (((old >> 24) & 0xff) == 0)
i = 3;
else
goto out;
@@ -468,19 +461,15 @@ out:
#else
GC
_cairo_xlib_screen_get_gc (cairo_xlib_screen_t *info,
- unsigned int depth,
- Drawable drawable,
- unsigned int *dirty)
+ int depth,
+ Drawable drawable)
{
GC gc = NULL;
int i;
CAIRO_MUTEX_LOCK (info->mutex);
for (i = 0; i < ARRAY_LENGTH (info->gc); i++) {
- if (((info->gc_depths >> (8*i)) & 0x7f) == depth) {
- if (info->gc_depths & 0x80 << (8*i))
- *dirty |= CAIRO_XLIB_SURFACE_CLIP_DIRTY_GC;
-
+ if (((info->gc_depths >> (8*i)) & 0xff) == depth) {
info->gc_depths &= ~(0xff << (8*i));
gc = info->gc[i];
break;
@@ -502,17 +491,14 @@ _cairo_xlib_screen_get_gc (cairo_xlib_screen_t *info,
void
_cairo_xlib_screen_put_gc (cairo_xlib_screen_t *info,
- unsigned int depth,
- GC gc,
- cairo_bool_t reset_clip)
+ int depth,
+ GC gc)
{
int i;
- depth |= reset_clip ? 0x80 : 0;
-
CAIRO_MUTEX_LOCK (info->mutex);
for (i = 0; i < ARRAY_LENGTH (info->gc); i++) {
- if (((info->gc_depths >> (8*i)) & 0x7f) == 0)
+ if (((info->gc_depths >> (8*i)) & 0xff) == 0)
break;
}