[glade] GladeDesignView: always render glade log as background using transprent fg color



commit 0b07d924b269f3867d345a321c8b60d88cd17197
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date:   Thu Jan 28 13:01:25 2016 -0300

    GladeDesignView: always render glade log as background using transprent fg color

 gladeui/glade-design-view.c |   98 ++++++++++++++++++++++---------------------
 1 files changed, 50 insertions(+), 48 deletions(-)
---
diff --git a/gladeui/glade-design-view.c b/gladeui/glade-design-view.c
index 3dc18bf..172c17a 100644
--- a/gladeui/glade-design-view.c
+++ b/gladeui/glade-design-view.c
@@ -2,7 +2,7 @@
  * glade-design-view.c
  *
  * Copyright (C)      2006 Vincent Geddes
- *               2011-2013 Juan Pablo Ugarte
+ *               2011-2016 Juan Pablo Ugarte
  *
  * Authors:
  *   Vincent Geddes <vincent geddes gmail com>
@@ -60,6 +60,8 @@ struct _GladeDesignViewPrivate
   GtkWidget *scrolled_window;  /* Main scrolled window */
   GtkWidget *layout_box;       /* Box to pack a GladeDesignLayout for each toplevel in project */
 
+  GdkRGBA fg_color;
+
   _GladeDrag *drag_target;
   GObject *drag_data;
   gboolean drag_highlight;
@@ -302,7 +304,7 @@ glade_design_view_get_property (GObject *object,
 }
 
 static void
-logo_draw (GtkWidget *widget, cairo_t *cr)
+logo_draw (GtkWidget *widget, cairo_t *cr, GdkRGBA *c)
 {
   GtkAllocation alloc;
   gdouble scale;
@@ -311,7 +313,7 @@ logo_draw (GtkWidget *widget, cairo_t *cr)
 
   cairo_save (cr);
   
-  cairo_set_source_rgba (cr, 0, 0, 0, .08);
+  cairo_set_source_rgba (cr, c->red, c->green, c->blue, .06);
 
   scale = MIN ((alloc.width/1.5)/(glade_path_WIDTH), (alloc.height/1.5)/(glade_path_HEIGHT));
 
@@ -325,50 +327,6 @@ logo_draw (GtkWidget *widget, cairo_t *cr)
   cairo_restore (cr);
 }
 
-static gboolean
-glade_design_view_draw (GtkWidget *widget, cairo_t *cr)
-{
-  GladeDesignViewPrivate *priv = GLADE_DESIGN_VIEW (widget)->priv;
-  GdkWindow *window = gtk_widget_get_window (widget);
-  gboolean should_draw = gtk_cairo_should_draw_window (cr, window);
-  gboolean sw_visible = gtk_widget_get_visible (priv->scrolled_window);
-  GtkStyleContext *context = gtk_widget_get_style_context (widget);
-
-  if (should_draw)
-    {
-      if (sw_visible)
-        gtk_render_background (context,
-                               cr, 0, 0,
-                               gtk_widget_get_allocated_width (widget),
-                               gtk_widget_get_allocated_height (widget));
-      else
-        logo_draw (widget, cr);
-    }
-
-  GTK_WIDGET_CLASS (glade_design_view_parent_class)->draw (widget, cr);
-
-  if (should_draw && sw_visible && priv->drag_highlight)
-    {
-      GdkRGBA c;
-
-      gtk_style_context_save (context);
-      gtk_style_context_get_background_color (context,
-                                              gtk_style_context_get_state (context) |
-                                              GTK_STATE_FLAG_SELECTED |
-                                              GTK_STATE_FLAG_FOCUSED, &c);
-      gtk_style_context_restore (context);
-
-      cairo_set_line_width (cr, 2);
-      gdk_cairo_set_source_rgba (cr, &c);
-      cairo_rectangle (cr, 0, 0,
-                       gtk_widget_get_allocated_width (widget),
-                       gtk_widget_get_allocated_height (widget));
-      cairo_stroke (cr);
-    }
-  
-  return FALSE;
-}
-
 static void
 on_chooser_adaptor_selected (_GladeAdaptorChooser *chooser,
                              GladeWidgetAdaptor   *adaptor,
@@ -409,6 +367,37 @@ glade_design_view_viewport_button_press (GtkWidget       *widget,
   return TRUE;
 }
 
+static gboolean
+glade_design_view_viewport_draw (GtkWidget *widget, cairo_t *cr, GladeDesignView *view)
+{
+  GladeDesignViewPrivate *priv = GLADE_DESIGN_VIEW (view)->priv;
+
+  logo_draw (widget, cr, &priv->fg_color);
+
+  if (priv->drag_highlight)
+    {
+      GtkStyleContext *context = gtk_widget_get_style_context (widget);
+      GdkRGBA c;
+
+      gtk_style_context_save (context);
+      gtk_style_context_get_background_color (context,
+                                              gtk_style_context_get_state (context) |
+                                              GTK_STATE_FLAG_SELECTED |
+                                              GTK_STATE_FLAG_FOCUSED, &c);
+      gtk_style_context_restore (context);
+
+      cairo_set_line_width (cr, 2);
+      gdk_cairo_set_source_rgba (cr, &c);
+      cairo_rectangle (cr, 0, 0,
+                       gtk_widget_get_allocated_width (widget),
+                       gtk_widget_get_allocated_height (widget));
+      cairo_stroke (cr);
+    }
+
+  return FALSE;
+}
+
+
 static void
 glade_design_view_init (GladeDesignView *view)
 {
@@ -435,6 +424,9 @@ glade_design_view_init (GladeDesignView *view)
   g_signal_connect (viewport, "button-press-event",
                     G_CALLBACK (glade_design_view_viewport_button_press),
                     view);
+  g_signal_connect (viewport, "draw",
+                    G_CALLBACK (glade_design_view_viewport_draw),
+                    view);
   gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_NONE);
   gtk_container_add (GTK_CONTAINER (viewport), view->priv->layout_box);
   gtk_container_add (GTK_CONTAINER (view->priv->scrolled_window), viewport);
@@ -736,6 +728,16 @@ glade_design_view_drag_init (_GladeDragInterface *iface)
 }
 
 static void
+glade_design_view_style_updated (GtkWidget *widget)
+{
+  GladeDesignViewPrivate *priv = GLADE_DESIGN_VIEW (widget)->priv;
+
+  gtk_style_context_get_color (gtk_widget_get_style_context (widget),
+                               GTK_STATE_FLAG_NORMAL,
+                               &priv->fg_color);
+}
+
+static void
 glade_design_view_class_init (GladeDesignViewClass *klass)
 {
   GObjectClass *object_class;
@@ -753,7 +755,7 @@ glade_design_view_class_init (GladeDesignViewClass *klass)
   widget_class->drag_leave = glade_design_view_drag_leave;
   widget_class->drag_data_received = glade_design_view_drag_data_received;
   widget_class->drag_drop = glade_design_view_drag_drop;
-  widget_class->draw = glade_design_view_draw;
+  widget_class->style_updated = glade_design_view_style_updated;
   
   g_object_class_install_property (object_class,
                                    PROP_PROJECT,


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