[gtk+/wip/cssvalue] textview: Remove extra magic for drawing children



commit 3e8ca5f6af3790ab958c7a5d9441d5dc56334d37
Author: Benjamin Otte <otte redhat com>
Date:   Tue Apr 3 18:41:25 2012 +0200

    textview: Remove extra magic for drawing children
    
    Instead, just draw the children. The cairo code will keep track of
    things, so there's no need to track things.
    Also, the old code was doing it wrong.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=672544

 gtk/gtktextdisplay.c |   25 ++++---------------------
 gtk/gtktextdisplay.h |    3 +--
 gtk/gtktextutil.c    |    2 +-
 gtk/gtktextview.c    |   30 ++++--------------------------
 4 files changed, 10 insertions(+), 50 deletions(-)
---
diff --git a/gtk/gtktextdisplay.c b/gtk/gtktextdisplay.c
index db88dca..863cb3c 100644
--- a/gtk/gtktextdisplay.c
+++ b/gtk/gtktextdisplay.c
@@ -108,7 +108,6 @@ struct _GtkTextRenderer
   cairo_t *cr;
   
   GdkRGBA *error_color;	/* Error underline color for this widget */
-  GList *widgets;      	/* widgets encountered when drawing */
 
   GdkRGBA rgba[4];
   guint8  rgba_set[4];
@@ -423,12 +422,7 @@ gtk_text_renderer_draw_shape (PangoRenderer   *renderer,
     }
   else if (GTK_IS_WIDGET (attr->data))
     {
-      GtkWidget *widget;
-      
-      widget = GTK_WIDGET (attr->data);
-
-      text_renderer->widgets = g_list_prepend (text_renderer->widgets,
-					       g_object_ref (widget));
+      /* nothing to do */
     }
   else
     g_assert_not_reached (); /* not a pixbuf or widget */
@@ -497,11 +491,10 @@ text_renderer_begin (GtkTextRenderer *text_renderer,
 
 /* Returns a GSList of (referenced) widgets encountered while drawing.
  */
-static GList *
+static void
 text_renderer_end (GtkTextRenderer *text_renderer)
 {
   GtkStyleContext *context;
-  GList *widgets = text_renderer->widgets;
 
   cairo_restore (text_renderer->cr);
 
@@ -512,15 +505,11 @@ text_renderer_end (GtkTextRenderer *text_renderer)
   text_renderer->widget = NULL;
   text_renderer->cr = NULL;
 
-  text_renderer->widgets = NULL;
-
   if (text_renderer->error_color)
     {
       gdk_rgba_free (text_renderer->error_color);
       text_renderer->error_color = NULL;
     }
-
-  return widgets;
 }
 
 static cairo_region_t *
@@ -816,8 +805,7 @@ get_text_renderer (void)
 void
 gtk_text_layout_draw (GtkTextLayout *layout,
                       GtkWidget *widget,
-                      cairo_t *cr,
-                      GList **widgets)
+                      cairo_t *cr)
 {
   GtkStyleContext *context;
   gint offset_y;
@@ -826,7 +814,6 @@ gtk_text_layout_draw (GtkTextLayout *layout,
   gboolean have_selection;
   GSList *line_list;
   GSList *tmp_list;
-  GList *tmp_widgets;
   GdkRectangle clip;
 
   g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout));
@@ -931,11 +918,7 @@ gtk_text_layout_draw (GtkTextLayout *layout,
 
   gtk_text_layout_wrap_loop_end (layout);
 
-  tmp_widgets = text_renderer_end (text_renderer);
-  if (widgets)
-    *widgets = tmp_widgets;
-  else
-    g_list_free_full (tmp_widgets, g_object_unref);
+  text_renderer_end (text_renderer);
 
   g_slist_free (line_list);
 }
diff --git a/gtk/gtktextdisplay.h b/gtk/gtktextdisplay.h
index 3f130b4..c35b133 100644
--- a/gtk/gtktextdisplay.h
+++ b/gtk/gtktextdisplay.h
@@ -92,8 +92,7 @@ G_BEGIN_DECLS
  */
 void gtk_text_layout_draw (GtkTextLayout        *layout,
                            GtkWidget            *widget,
-                           cairo_t              *cr,
-                           GList               **widgets);
+                           cairo_t              *cr);
 
 
 G_END_DECLS
diff --git a/gtk/gtktextutil.c b/gtk/gtktextutil.c
index d5a60c4..f5eae4c 100644
--- a/gtk/gtktextutil.c
+++ b/gtk/gtktextutil.c
@@ -398,7 +398,7 @@ _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
    cairo_save (cr);
 
    cairo_translate (cr, 1 + DRAG_ICON_LAYOUT_BORDER, 1 + DRAG_ICON_LAYOUT_BORDER);
-   gtk_text_layout_draw (layout, widget, cr, NULL);
+   gtk_text_layout_draw (layout, widget, cr);
 
    cairo_restore (cr);
 
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 33f2b5c..b41f1f2 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -4804,8 +4804,6 @@ gtk_text_view_paint (GtkWidget      *widget,
 {
   GtkTextView *text_view;
   GtkTextViewPrivate *priv;
-  GList *child_exposes;
-  GList *tmp_list;
   
   text_view = GTK_TEXT_VIEW (widget);
   priv = text_view->priv;
@@ -4833,33 +4831,14 @@ gtk_text_view_paint (GtkWidget      *widget,
           area->width, area->height);
 #endif
 
-  child_exposes = NULL;
-
   cairo_save (cr);
   cairo_translate (cr, -priv->xoffset, -priv->yoffset);
 
   gtk_text_layout_draw (priv->layout,
                         widget,
-                        cr,
-                        &child_exposes);
+                        cr);
 
   cairo_restore (cr);
-
-  tmp_list = child_exposes;
-  while (tmp_list != NULL)
-    {
-      GtkWidget *child = tmp_list->data;
-  
-      gtk_container_propagate_draw (GTK_CONTAINER (text_view),
-                                    child,
-                                    cr);
-
-      g_object_unref (child);
-      
-      tmp_list = tmp_list->next;
-    }
-
-  g_list_free (child_exposes);
 }
 
 static gboolean
@@ -4894,10 +4873,9 @@ gtk_text_view_draw (GtkWidget *widget,
       /* propagate_draw checks that event->window matches
        * child->window
        */
-      if (!vc->anchor)
-        gtk_container_propagate_draw (GTK_CONTAINER (widget),
-                                      vc->widget,
-                                      cr);
+      gtk_container_propagate_draw (GTK_CONTAINER (widget),
+                                    vc->widget,
+                                    cr);
       
       tmp_list = tmp_list->next;
     }



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