]> Pileus Git - ~andy/gtk/commitdiff
Implement.
authorRichard Hult <richard@imendio.com>
Fri, 21 Jul 2006 15:17:59 +0000 (15:17 +0000)
committerRichard Hult <rhult@src.gnome.org>
Fri, 21 Jul 2006 15:17:59 +0000 (15:17 +0000)
2006-07-21  Richard Hult  <richard@imendio.com>

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

ChangeLog
ChangeLog.pre-2-10
gdk/quartz/gdkgc-quartz.c
gdk/quartz/gdkwindow-quartz.c

index 5ffe7b94f818f6c72224c08a057f1bba8a47a012..0c2248871f23c06684f0da97521484cd42459300 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-07-21  Richard Hult  <richard@imendio.com>
+
+       * 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  <mclasen@redhat.com>
 
        * gtk/gtkstyle.c: 
index 5ffe7b94f818f6c72224c08a057f1bba8a47a012..0c2248871f23c06684f0da97521484cd42459300 100644 (file)
@@ -1,3 +1,12 @@
+2006-07-21  Richard Hult  <richard@imendio.com>
+
+       * 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  <mclasen@redhat.com>
 
        * gtk/gtkstyle.c: 
index 2f687e768b68da684d0d77b3a554935807eccb30..e8fd0ced5ec8eb9414335a2a3cb7015804a862b2 100644 (file)
@@ -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);
     }
 }
index 65fc970813e792f280ff9086da2b46db10c3a7e4..b5dfffa620c514f8ce39d151cd8650990f73d685 100644 (file)
@@ -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