[gtksourceview/wip/centertext] Do the deed in size-allocate



commit 18c2cd0147b932c104aa229d0557daeb646f2afe
Author: Paolo Borelli <pborelli gnome org>
Date:   Wed Sep 4 00:20:41 2013 +0200

    Do the deed in size-allocate

 gtksourceview/gtksourceview.c |   59 +++++++++++++++++++++++++++++------------
 1 files changed, 42 insertions(+), 17 deletions(-)
---
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index 22d65bc..9a7046f 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -220,6 +220,8 @@ static void         gtk_source_view_get_lines                       (GtkTextView       
*text_view,
                                                                 gint              *countp);
 static gboolean gtk_source_view_draw                   (GtkWidget         *widget,
                                                                 cairo_t           *cr);
+static void    gtk_source_view_size_allocate           (GtkWidget         *widget,
+                                                                GdkRectangle      *allocation);
 static void    gtk_source_view_move_lines                      (GtkSourceView     *view,
                                                                 gboolean           copy,
                                                                 gint               step);
@@ -285,6 +287,7 @@ gtk_source_view_class_init (GtkSourceViewClass *klass)
 
        widget_class->key_press_event = gtk_source_view_key_press_event;
        widget_class->draw = gtk_source_view_draw;
+       widget_class->size_allocate = gtk_source_view_size_allocate;
        widget_class->style_updated = gtk_source_view_style_updated;
        widget_class->realize = gtk_source_view_realize;
 
@@ -2297,23 +2300,6 @@ gtk_source_view_draw (GtkWidget *widget,
        view = GTK_SOURCE_VIEW (widget);
        text_view = GTK_TEXT_VIEW (widget);
 
-       if (view->priv->cached_right_margin_pos < 0)
-       {
-               view->priv->cached_right_margin_pos =
-                       calculate_real_tab_width (view,
-                                                 view->priv->right_margin_pos,
-                                                 '_');
-       }
-
-       /* FIXME: take into account the gutters size */
-       gint alloc_w = gtk_widget_get_allocated_width (GTK_WIDGET (view));
-       gint left_margin = (alloc_w - view->priv->cached_right_margin_pos) / 2;
-       if (left_margin > 0)
-       {
-               /* FIXME: stop this draw and queua a new one after resize is done? */
-               gtk_source_gutter_set_width_request (view->priv->left_gutter, left_margin);
-       }
-
        window = gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT);
 
        cairo_save (cr);
@@ -2431,6 +2417,45 @@ gtk_source_view_draw (GtkWidget *widget,
        return event_handled;
 }
 
+static void
+gtk_source_view_size_allocate (GtkWidget    *widget,
+                               GdkRectangle *allocation)
+{
+       GtkSourceView *view = GTK_SOURCE_VIEW (widget);
+       int prev_w;
+
+       prev_w = gtk_widget_get_allocated_width (widget);
+
+       if (view->priv->cached_right_margin_pos < 0)
+       {
+               view->priv->cached_right_margin_pos =
+                       calculate_real_tab_width (view,
+                                                 view->priv->right_margin_pos,
+                                                 '_');
+       }
+
+       if (prev_w != allocation->width)
+       {
+               /* FIXME: take into account the gutters size */
+               gint left_margin = (allocation->width - view->priv->cached_right_margin_pos) / 2;
+               if (left_margin > 0)
+               {
+                       GdkFrameClock *clock;
+
+                       clock = gtk_widget_get_frame_clock (widget);
+                       if (clock == NULL)
+                               gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_LAYOUT);
+
+                       gtk_source_gutter_set_width_request (view->priv->left_gutter, left_margin);
+
+                       if (clock == NULL)
+                               gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_LAYOUT);
+               }
+       }
+
+       GTK_WIDGET_CLASS (gtk_source_view_parent_class)->size_allocate (widget, allocation);
+}
+
 /*
  *This is a pretty important function...we call it when the tab_stop is changed,
  *And when the font is changed.


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