diff --git a/ChangeLog b/ChangeLog index 5ffe7b94f8..0c2248871f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-07-21 Richard Hult + + * gdk/quartz/gdkgc-quartz.c: (gdk_quartz_gc_get_values), + (gdk_quartz_gc_set_values), (_gdk_windowing_gc_copy), + (gdk_gc_get_screen): Implement. + + * gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_back_pixmap): + Implement. + 2006-07-21 Matthias Clasen * gtk/gtkstyle.c: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5ffe7b94f8..0c2248871f 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2006-07-21 Richard Hult + + * gdk/quartz/gdkgc-quartz.c: (gdk_quartz_gc_get_values), + (gdk_quartz_gc_set_values), (_gdk_windowing_gc_copy), + (gdk_gc_get_screen): Implement. + + * gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_back_pixmap): + Implement. + 2006-07-21 Matthias Clasen * gtk/gtkstyle.c: diff --git a/gdk/quartz/gdkgc-quartz.c b/gdk/quartz/gdkgc-quartz.c index 2f687e768b..e8fd0ced5e 100644 --- a/gdk/quartz/gdkgc-quartz.c +++ b/gdk/quartz/gdkgc-quartz.c @@ -27,15 +27,38 @@ static gpointer parent_class = NULL; static void gdk_quartz_gc_get_values (GdkGC *gc, - GdkGCValues *values) + GdkGCValues *values) { - /* FIXME: Implement */ + GdkGCQuartz *private; + + private = GDK_GC_QUARTZ (gc); + + memset (values, 0, sizeof (GdkGCValues)); + + /* FIXME: Fill in more value as/if they are added. */ + + values->foreground.pixel = _gdk_gc_get_fg_pixel (gc); + values->background.pixel = _gdk_gc_get_bg_pixel (gc); + + values->function = GDK_COPY; + + values->fill = _gdk_gc_get_fill (gc); + values->tile = _gdk_gc_get_tile (gc); + values->stipple = _gdk_gc_get_stipple (gc); + + /* The X11 backend always returns a NULL clip_mask. */ + values->clip_mask = NULL; + + values->ts_x_origin = gc->ts_x_origin; + values->ts_y_origin = gc->ts_y_origin; + values->clip_x_origin = gc->clip_x_origin; + values->clip_y_origin = gc->clip_y_origin; } static void gdk_quartz_gc_set_values (GdkGC *gc, - GdkGCValues *values, - GdkGCValuesMask mask) + GdkGCValues *values, + GdkGCValuesMask mask) { GdkGCQuartz *private = GDK_GC_QUARTZ (gc); @@ -160,13 +183,29 @@ void _gdk_windowing_gc_copy (GdkGC *dst_gc, GdkGC *src_gc) { - /* FIXME: Implement */ + GdkGCQuartz *dst_quartz_gc = GDK_GC_QUARTZ (dst_gc); + GdkGCQuartz *src_quartz_gc = GDK_GC_QUARTZ (src_gc); + + dst_quartz_gc->values_mask = src_quartz_gc->values_mask; + + dst_quartz_gc->have_clip_region = src_quartz_gc->have_clip_region; + dst_quartz_gc->have_clip_mask = src_quartz_gc->have_clip_mask; + + if (dst_quartz_gc->values_mask & GDK_GC_CLIP_MASK && dst_quartz_gc->clip_mask) + { + CGImageRelease (dst_quartz_gc->clip_mask); + dst_quartz_gc->clip_mask = NULL; + } + + if (src_quartz_gc->values_mask & GDK_GC_CLIP_MASK && src_quartz_gc->clip_mask) + dst_quartz_gc->clip_mask = + CGImageCreateCopy (GDK_PIXMAP_IMPL_QUARTZ (GDK_PIXMAP_OBJECT (src_quartz_gc->clip_mask)->impl)->image); } GdkScreen * gdk_gc_get_screen (GdkGC *gc) { - return NULL; + return _gdk_screen; } void @@ -210,13 +249,13 @@ _gdk_quartz_update_context_from_gc (CGContextRef context, GdkGC *gc) } else if (private->have_clip_mask && private->clip_mask) { - /* FIXME: This is 10.4 only. For lower versions, we need to transform the + /* Note: This is 10.4 only. For lower versions, we need to transform the * mask into a region. */ CGContextClipToMask (context, - CGRectMake(gc->clip_x_origin, gc->clip_y_origin, - CGImageGetWidth (private->clip_mask), - CGImageGetHeight (private->clip_mask)), + CGRectMake (gc->clip_x_origin, gc->clip_y_origin, + CGImageGetWidth (private->clip_mask), + CGImageGetHeight (private->clip_mask)), private->clip_mask); } } diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index 65fc970813..b5dfffa620 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -128,7 +128,6 @@ gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass) drawable_class->get_visible_region = gdk_window_impl_quartz_get_visible_region; } - static void gdk_window_impl_quartz_init (GdkWindowImplQuartz *impl) { @@ -887,11 +886,37 @@ gdk_window_set_back_pixmap (GdkWindow *window, GdkPixmap *pixmap, gboolean parent_relative) { + GdkWindowObject *private = (GdkWindowObject *)window; + g_return_if_fail (GDK_IS_WINDOW (window)); g_return_if_fail (pixmap == NULL || !parent_relative); g_return_if_fail (pixmap == NULL || gdk_drawable_get_depth (window) == gdk_drawable_get_depth (pixmap)); - /* FIXME: Implement */ + if (GDK_WINDOW_DESTROYED (window)) + return; + + if (private->bg_pixmap && + private->bg_pixmap != GDK_PARENT_RELATIVE_BG && + private->bg_pixmap != GDK_NO_BG) + g_object_unref (private->bg_pixmap); + + if (parent_relative) + { + private->bg_pixmap = GDK_PARENT_RELATIVE_BG; + GDK_NOTE (MISC, g_print (G_STRLOC ": setting background pixmap to parent_relative\n")); + } + else + { + if (pixmap) + { + g_object_ref (pixmap); + private->bg_pixmap = pixmap; + } + else + { + private->bg_pixmap = GDK_NO_BG; + } + } } void