[gtk+/rendering-cleanup-next: 16/155] entry: Split else ifs into separate if statements



commit 2054d19f556409e54cfb8ebe8238ab52589e3c6f
Author: Benjamin Otte <otte redhat com>
Date:   Fri Sep 3 17:25:26 2010 +0200

    entry: Split else ifs into separate if statements
    
    Preparation for the draw vfunc

 gtk/gtkentry.c |  120 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 63 insertions(+), 57 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 8ff8397..0aef90e 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -264,9 +264,10 @@ static void   gtk_entry_size_request         (GtkWidget        *widget,
 static void   gtk_entry_size_allocate        (GtkWidget        *widget,
 					      GtkAllocation    *allocation);
 static void   gtk_entry_draw_frame           (GtkWidget        *widget,
-                                              GdkEventExpose   *event);
+                                              cairo_t          *cr);
 static void   gtk_entry_draw_progress        (GtkWidget        *widget,
-                                              GdkEventExpose   *event);
+                                              cairo_t          *cr,
+                                              GdkWindow        *window);
 static gint   gtk_entry_expose               (GtkWidget        *widget,
 					      GdkEventExpose   *event);
 static gint   gtk_entry_button_press         (GtkWidget        *widget,
@@ -416,8 +417,10 @@ static void         gtk_entry_enter_text               (GtkEntry       *entry,
 static void         gtk_entry_set_positions            (GtkEntry       *entry,
 							gint            current_pos,
 							gint            selection_bound);
-static void         gtk_entry_draw_text                (GtkEntry       *entry);
+static void         gtk_entry_draw_text                (GtkEntry       *entry,
+                                                        cairo_t        *cr);
 static void         gtk_entry_draw_cursor              (GtkEntry       *entry,
+                                                        cairo_t        *cr,
 							CursorType      type);
 static PangoLayout *gtk_entry_ensure_layout            (GtkEntry       *entry,
                                                         gboolean        include_preedit);
@@ -3198,6 +3201,7 @@ should_prelight (GtkEntry             *entry,
 
 static void
 draw_icon (GtkWidget            *widget,
+           cairo_t              *cr,
            GtkEntryIconPosition  icon_pos)
 {
   GtkEntry *entry = GTK_ENTRY (widget);
@@ -3205,7 +3209,6 @@ draw_icon (GtkWidget            *widget,
   EntryIconInfo *icon_info = priv->icons[icon_pos];
   GdkPixbuf *pixbuf;
   gint x, y, width, height;
-  cairo_t *cr;
 
   if (!icon_info)
     return;
@@ -3263,10 +3266,8 @@ draw_icon (GtkWidget            *widget,
       pixbuf = temp_pixbuf;
     }
 
-  cr = gdk_cairo_create (icon_info->window);
   gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y);
   cairo_paint (cr);
-  cairo_destroy (cr);
 
   g_object_unref (pixbuf);
 }
@@ -3274,7 +3275,7 @@ draw_icon (GtkWidget            *widget,
 
 static void
 gtk_entry_draw_frame (GtkWidget      *widget,
-                      GdkEventExpose *event)
+                      cairo_t        *cr)
 {
   GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (widget);
   GtkStyle *style;
@@ -3312,12 +3313,12 @@ gtk_entry_draw_frame (GtkWidget      *widget,
   state = gtk_widget_has_focus (widget) ?
     GTK_STATE_ACTIVE : gtk_widget_get_state (widget);
 
-  gtk_paint_shadow (style, window,
+  gtk_cairo_paint_shadow (style, cr,
                     state, priv->shadow_type,
-                    &event->area, widget, "entry", x, y, width, height);
+                    widget, "entry", x, y, width, height);
 
 
-  gtk_entry_draw_progress (widget, event);
+  gtk_entry_draw_progress (widget, cr, window);
 
   if (gtk_widget_has_focus (widget) && !priv->interior_focus)
     {
@@ -3326,9 +3327,9 @@ gtk_entry_draw_frame (GtkWidget      *widget,
       width += 2 * priv->focus_width;
       height += 2 * priv->focus_width;
 
-      gtk_paint_focus (style, window,
+      gtk_cairo_paint_focus (style, cr,
                        gtk_widget_get_state (widget),
-		       &event->area, widget, "entry",
+		       widget, "entry",
 		       0, 0, width, height);
     }
 }
@@ -3419,7 +3420,8 @@ get_progress_area (GtkWidget *widget,
 
 static void
 gtk_entry_draw_progress (GtkWidget      *widget,
-                         GdkEventExpose *event)
+                         cairo_t        *cr,
+                         GdkWindow      *window)
 {
   gint x, y, width, height;
   GtkStateType state;
@@ -3429,11 +3431,11 @@ gtk_entry_draw_progress (GtkWidget      *widget,
   if ((width <= 0) || (height <= 0))
     return;
 
-  if (event->window != gtk_widget_get_window (widget))
+  if (window != gtk_widget_get_window (widget))
     {
       gint pos_x, pos_y;
 
-      gdk_window_get_position (event->window, &pos_x, &pos_y);
+      gdk_window_get_position (window, &pos_x, &pos_y);
 
       x -= pos_x;
       y -= pos_y;
@@ -3443,9 +3445,9 @@ gtk_entry_draw_progress (GtkWidget      *widget,
   if (!gtk_widget_get_sensitive (widget))
     state = GTK_STATE_INSENSITIVE;
 
-  gtk_paint_box (gtk_widget_get_style (widget), event->window,
+  gtk_cairo_paint_box (gtk_widget_get_style (widget), cr,
                  state, GTK_SHADOW_OUT,
-                 &event->area, widget, "entry-progress",
+                 widget, "entry-progress",
                  x, y,
                  width, height);
 }
@@ -3458,6 +3460,12 @@ gtk_entry_expose (GtkWidget      *widget,
   GtkStyle *style;
   GtkStateType state;
   GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry);
+  cairo_t *cr;
+  int i;
+
+  cr = gdk_cairo_create (event->window);
+  gdk_cairo_region (cr, event->region);
+  cairo_clip (cr);
 
   style = gtk_widget_get_style (widget);
 
@@ -3465,60 +3473,57 @@ gtk_entry_expose (GtkWidget      *widget,
     GTK_STATE_ACTIVE : gtk_widget_get_state (widget);
 
   if (gtk_widget_get_window (widget) == event->window)
-    {
-      gtk_entry_draw_frame (widget, event);
-    }
-  else if (entry->text_area == event->window)
+    gtk_entry_draw_frame (widget, cr);
+
+  if (entry->text_area == event->window)
     {
       gint width, height;
 
       gdk_drawable_get_size (entry->text_area, &width, &height);
 
-      gtk_paint_flat_box (style, entry->text_area,
+      gtk_cairo_paint_flat_box (style, cr,
 			  state, GTK_SHADOW_NONE,
-			  &event->area, widget, "entry_bg",
+			  widget, "entry_bg",
 			  0, 0, width, height);
 
-      gtk_entry_draw_progress (widget, event);
+      gtk_entry_draw_progress (widget, cr, entry->text_area);
 
       if (entry->dnd_position != -1)
-	gtk_entry_draw_cursor (GTK_ENTRY (widget), CURSOR_DND);
+	gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_DND);
       
-      gtk_entry_draw_text (GTK_ENTRY (widget));
+      gtk_entry_draw_text (GTK_ENTRY (widget), cr);
 
       /* When no text is being displayed at all, don't show the cursor */
       if (gtk_entry_get_display_mode (entry) != DISPLAY_BLANK &&
 	  gtk_widget_has_focus (widget) &&
 	  entry->selection_bound == entry->current_pos && entry->cursor_visible) 
-        gtk_entry_draw_cursor (GTK_ENTRY (widget), CURSOR_STANDARD);
+        gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_STANDARD);
     }
-  else
+
+  for (i = 0; i < MAX_ICONS; i++)
     {
-      int i;
+      EntryIconInfo *icon_info = priv->icons[i];
 
-      for (i = 0; i < MAX_ICONS; i++)
+      if (icon_info != NULL && event->window == icon_info->window)
         {
-          EntryIconInfo *icon_info = priv->icons[i];
-
-          if (icon_info != NULL && event->window == icon_info->window)
-            {
-              gint width, height;
+          gint width, height;
 
-              gdk_drawable_get_size (icon_info->window, &width, &height);
+          gdk_drawable_get_size (icon_info->window, &width, &height);
 
-              gtk_paint_flat_box (style, icon_info->window,
-                                  state, GTK_SHADOW_NONE,
-                                  NULL, widget, "entry_bg",
-                                  0, 0, width, height);
+          gtk_cairo_paint_flat_box (style, cr,
+                              state, GTK_SHADOW_NONE,
+                              widget, "entry_bg",
+                              0, 0, width, height);
 
-              gtk_entry_draw_progress (widget, event);
-              draw_icon (widget, i);
+          gtk_entry_draw_progress (widget, cr, icon_info->window);
+          draw_icon (widget, cr, i);
 
-              break;
-            }
+          break;
         }
     }
 
+  cairo_destroy (cr);
+
   return FALSE;
 }
 
@@ -5588,10 +5593,10 @@ draw_text_with_color (GtkEntry *entry, cairo_t *cr, GdkColor *default_color)
 }
 
 static void
-gtk_entry_draw_text (GtkEntry *entry)
+gtk_entry_draw_text (GtkEntry *entry,
+                     cairo_t  *cr)
 {
   GtkWidget *widget = GTK_WIDGET (entry);
-  cairo_t *cr;
 
   /* Nothing to display at all */
   if (gtk_entry_get_display_mode (entry) == DISPLAY_BLANK)
@@ -5617,8 +5622,6 @@ gtk_entry_draw_text (GtkEntry *entry)
                          &progress_x, &progress_y,
                          &progress_width, &progress_height);
 
-      cr = gdk_cairo_create (entry->text_area);
-
       /* If the color is the same, or the progress area has a zero
        * size, then we only need to draw once. */
       if ((text_color.pixel == bar_text_color.pixel) ||
@@ -5630,6 +5633,8 @@ gtk_entry_draw_text (GtkEntry *entry)
         {
           gdk_drawable_get_size (entry->text_area, &width, &height);
 
+          cairo_save (cr);
+
           cairo_rectangle (cr, 0, 0, width, height);
           cairo_clip (cr);
           cairo_save (cr);
@@ -5654,14 +5659,15 @@ gtk_entry_draw_text (GtkEntry *entry)
           cairo_clip (cr);
 
           draw_text_with_color (entry, cr, &bar_text_color);
-        }
 
-      cairo_destroy (cr);
+          cairo_restore (cr);
+        }
     }
 }
 
 static void
 draw_insertion_cursor (GtkEntry      *entry,
+                       cairo_t       *cr,
 		       GdkRectangle  *cursor_location,
 		       gboolean       is_primary,
 		       PangoDirection direction,
@@ -5675,13 +5681,14 @@ draw_insertion_cursor (GtkEntry      *entry,
   else
     text_dir = GTK_TEXT_DIR_RTL;
 
-  gtk_draw_insertion_cursor (widget, entry->text_area, NULL,
+  gtk_cairo_draw_insertion_cursor (widget, cr,
 			     cursor_location,
 			     is_primary, text_dir, draw_arrow);
 }
 
 static void
 gtk_entry_draw_cursor (GtkEntry  *entry,
+                       cairo_t   *cr,
 		       CursorType type)
 {
   GtkWidget *widget = GTK_WIDGET (entry);
@@ -5756,14 +5763,14 @@ gtk_entry_draw_cursor (GtkEntry  *entry,
           cursor_location.width = 0;
           cursor_location.height = text_area_height - inner_border.top - inner_border.bottom;
 
-          draw_insertion_cursor (entry,
+          draw_insertion_cursor (entry, cr,
                                  &cursor_location, TRUE, dir1,
                                  dir2 != PANGO_DIRECTION_NEUTRAL);
       
           if (dir2 != PANGO_DIRECTION_NEUTRAL)
             {
               cursor_location.x = xoffset + x2;
-              draw_insertion_cursor (entry,
+              draw_insertion_cursor (entry, cr,
                                      &cursor_location, FALSE, dir2,
                                      TRUE);
             }
@@ -5772,9 +5779,10 @@ gtk_entry_draw_cursor (GtkEntry  *entry,
         {
           GdkColor cursor_color;
           GdkRectangle rect;
-          cairo_t *cr;
           gint x, y;
 
+          cairo_save (cr);
+
           get_layout_position (entry, &x, &y);
 
           rect.x = PANGO_PIXELS (cursor_rect.x) + x;
@@ -5782,8 +5790,6 @@ gtk_entry_draw_cursor (GtkEntry  *entry,
           rect.width = PANGO_PIXELS (cursor_rect.width);
           rect.height = PANGO_PIXELS (cursor_rect.height);
 
-          cr = gdk_cairo_create (entry->text_area);
-
           _gtk_widget_get_cursor_color (widget, &cursor_color);
           gdk_cairo_set_source_color (cr, &cursor_color);
           gdk_cairo_rectangle (cr, &rect);
@@ -5798,7 +5804,7 @@ gtk_entry_draw_cursor (GtkEntry  *entry,
               pango_cairo_show_layout (cr, layout);
             }
 
-          cairo_destroy (cr);
+          cairo_restore (cr);
         }
     }
 }



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