[gtk+] colorswatch: Implement snapshot



commit 613194a2461558abbc08d4f4fdecbcef836450eb
Author: Benjamin Otte <otte redhat com>
Date:   Mon Dec 19 19:30:55 2016 +0100

    colorswatch: Implement snapshot

 gtk/gtkcolorswatch.c |   54 ++++++++++++++++++++++++++++---------------------
 1 files changed, 31 insertions(+), 23 deletions(-)
---
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index 9c95754..a21490d 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -88,20 +88,18 @@ static guint signals[LAST_SIGNAL];
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkColorSwatch, gtk_color_swatch, GTK_TYPE_WIDGET)
 
-static gboolean
-swatch_draw (GtkWidget *widget,
-             cairo_t   *cr)
+static void
+swatch_snapshot (GtkWidget   *widget,
+                 GtkSnapshot *snapshot)
 {
-  gtk_css_gadget_draw (GTK_COLOR_SWATCH (widget)->priv->gadget, cr);
-
-  return FALSE;
+  gtk_css_gadget_snapshot (GTK_COLOR_SWATCH (widget)->priv->gadget, snapshot);
 }
 
 #define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11)
 
 static gboolean
 gtk_color_swatch_render (GtkCssGadget *gadget,
-                         cairo_t      *cr,
+                         GtkSnapshot  *snapshot,
                          int           x,
                          int           y,
                          int           width,
@@ -137,16 +135,19 @@ gtk_color_swatch_render (GtkCssGadget *gadget,
                                         border_allocation.y,
                                         border_allocation.width,
                                         border_allocation.height);
-      gsk_rounded_rect_path (&content_box, cr);
+      gtk_snapshot_push_rounded_clip (snapshot,
+                                      &content_box,
+                                      "ColorSwatchClip");
 
-      if (swatch->priv->use_alpha)
+      if (swatch->priv->use_alpha && !gdk_rgba_is_opaque (&swatch->priv->color))
         {
-          cairo_save (cr);
-
-          cairo_clip_preserve (cr);
+          cairo_t *cr;
 
+          cr = gtk_snapshot_append_cairo_node (snapshot,
+                                               &content_box.bounds,
+                                               "CheckeredBackground");
           cairo_set_source_rgb (cr, 0.33, 0.33, 0.33);
-          cairo_fill_preserve (cr);
+          cairo_paint (cr);
 
           pattern = _gtk_color_chooser_get_checkered_pattern ();
           cairo_matrix_init_scale (&matrix, 0.125, 0.125);
@@ -156,22 +157,29 @@ gtk_color_swatch_render (GtkCssGadget *gadget,
           cairo_mask (cr, pattern);
           cairo_pattern_destroy (pattern);
 
-          cairo_restore (cr);
+          cairo_destroy (cr);
 
-          gdk_cairo_set_source_rgba (cr, &swatch->priv->color);
+          gtk_snapshot_append_color_node (snapshot,
+                                          &swatch->priv->color,
+                                          &content_box.bounds,
+                                          "ColorSwatch Color");
         }
       else
         {
-          cairo_set_source_rgb (cr,
-                                swatch->priv->color.red,
-                                swatch->priv->color.green,
-                                swatch->priv->color.blue);
+          GdkRGBA color = swatch->priv->color;
+
+          color.alpha = 1.0;
+
+          gtk_snapshot_append_color_node (snapshot,
+                                          &color,
+                                          &content_box.bounds,
+                                          "ColorSwatch Opaque Color");
         }
 
-      cairo_fill (cr);
+      gtk_snapshot_pop_and_append (snapshot);
     }
 
-  gtk_css_gadget_draw (swatch->priv->overlay_gadget, cr);
+  gtk_css_gadget_snapshot (swatch->priv->overlay_gadget, snapshot);
 
   return gtk_widget_has_visible_focus (widget);
 }
@@ -671,7 +679,7 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
   object_class->dispose = swatch_dispose;
 
   widget_class->measure = gtk_color_swatch_measure_;
-  widget_class->draw = swatch_draw;
+  widget_class->snapshot = swatch_snapshot;
   widget_class->drag_begin = swatch_drag_begin;
   widget_class->drag_data_get = swatch_drag_data_get;
   widget_class->drag_data_received = swatch_drag_data_received;
@@ -743,8 +751,8 @@ gtk_color_swatch_init (GtkColorSwatch *swatch)
                                                              GTK_WIDGET (swatch),
                                                              gtk_color_swatch_measure,
                                                              NULL,
-                                                             gtk_color_swatch_render,
                                                              NULL,
+                                                             gtk_color_swatch_render,
                                                              NULL,
                                                              NULL);
   gtk_css_gadget_add_class (swatch->priv->gadget, "activatable");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]