[gtk+] themingbackground: Restructure code some more



commit ccaf1c2c678c774ad4d839c7bff09f34495578ea
Author: Benjamin Otte <otte redhat com>
Date:   Sat Oct 27 01:39:30 2012 +0200

    themingbackground: Restructure code some more
    
    Move variable initialization outside the first code with side effects.
    This allows adding some more early returns, including one for code that
    used to trigger g_return_if_fail() in certain corner cases.

 gtk/gtkthemingbackground.c |   23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkthemingbackground.c b/gtk/gtkthemingbackground.c
index 0453f82..bf7a6b5 100644
--- a/gtk/gtkthemingbackground.c
+++ b/gtk/gtkthemingbackground.c
@@ -154,16 +154,9 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg,
   double image_width, image_height;
   double width, height;
 
-  if (layer->image == NULL
-      || layer->image_rect.width <= 0
-      || layer->image_rect.height <= 0)
+  if (layer->image == NULL)
     return;
 
-  cairo_save (cr);
-
-  _gtk_rounded_box_path (&layer->clip_box, cr);
-  cairo_clip (cr);
-
   pos = _gtk_css_array_value_get_nth (_gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_POSITION), layer->idx);
   repeat = _gtk_css_array_value_get_nth (_gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_REPEAT), layer->idx);
   hrepeat = _gtk_css_background_repeat_value_get_x (repeat);
@@ -171,6 +164,9 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg,
   width = layer->image_rect.width;
   height = layer->image_rect.height;
 
+  if (width <= 0 || height <= 0)
+    return;
+
   _gtk_css_bg_size_value_compute_size (_gtk_css_array_value_get_nth (_gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_SIZE), layer->idx),
                                        layer->image,
                                        width,
@@ -178,12 +174,22 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg,
                                        &image_width,
                                        &image_height);
 
+  if (image_width <= 0 || image_height <= 0)
+    return;
+
   /* optimization */
   if (image_width == width)
     hrepeat = GTK_CSS_REPEAT_STYLE_NO_REPEAT;
   if (image_height == height)
     vrepeat = GTK_CSS_REPEAT_STYLE_NO_REPEAT;
 
+
+  cairo_save (cr);
+
+  _gtk_rounded_box_path (&layer->clip_box, cr);
+  cairo_clip (cr);
+
+
   cairo_translate (cr, layer->image_rect.x, layer->image_rect.y);
 
   if (hrepeat == GTK_CSS_REPEAT_STYLE_NO_REPEAT && vrepeat == GTK_CSS_REPEAT_STYLE_NO_REPEAT)
@@ -301,6 +307,7 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg,
       cairo_fill (cr);
     }
 
+
   cairo_restore (cr);
 }
 



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