[gnome-builder/wip/chergert/gutter] adjust size calculation based on properties



commit 260ef300d9d455494b0418e5c8d376d7352e9f1a
Author: Christian Hergert <chergert redhat com>
Date:   Sun Sep 17 23:43:26 2017 -0700

    adjust size calculation based on properties

 libide/sourceview/ide-omni-gutter-renderer.c |   40 ++++++++++++++-----------
 1 files changed, 22 insertions(+), 18 deletions(-)
---
diff --git a/libide/sourceview/ide-omni-gutter-renderer.c b/libide/sourceview/ide-omni-gutter-renderer.c
index b3f8467..b2a61d2 100644
--- a/libide/sourceview/ide-omni-gutter-renderer.c
+++ b/libide/sourceview/ide-omni-gutter-renderer.c
@@ -373,6 +373,7 @@ ide_omni_gutter_renderer_recalculate_size (IdeOmniGutterRenderer *self)
   GtkTextIter end;
   guint line;
   int height;
+  gint size = 0;
 
   g_assert (IDE_IS_OMNI_GUTTER_RENDERER (self));
 
@@ -400,20 +401,23 @@ ide_omni_gutter_renderer_recalculate_size (IdeOmniGutterRenderer *self)
   pango_layout_get_pixel_size (layout, &self->number_width, &height);
   g_clear_object (&layout);
 
-  /*
-   * The spacing for the different items in the gutter looks like:
-   *
-   * Spacing (2px) Diagnostics (16px) Numbers(N) Changes(2) Spacing(2px)
+  size = 2;
+
+  if (self->show_line_diagnostics)
+    size += DIAGNOSTICS_SIZE + 2;
+
+  if (self->show_line_numbers)
+    size += self->number_width + 2;
+
+  /* The arrow overlaps the changes if we can have breakpoints,
+   * otherwise we just need the space for the line changes.
    */
+  if (self->breakpoints != NULL)
+    size += ARROW_WIDTH + 2;
+  else if (self->show_line_changes)
+    size += CHANGE_WIDTH + 2;
 
-  gtk_source_gutter_renderer_set_size (GTK_SOURCE_GUTTER_RENDERER (self),
-                                       (2 +
-                                        DIAGNOSTICS_SIZE +
-                                        2 +
-                                        self->number_width +
-                                        2 +
-                                        ARROW_WIDTH +
-                                        2));
+  gtk_source_gutter_renderer_set_size (GTK_SOURCE_GUTTER_RENDERER (self), size );
 
   gtk_source_gutter_renderer_queue_draw (GTK_SOURCE_GUTTER_RENDERER (self));
 }
@@ -1163,18 +1167,15 @@ ide_omni_gutter_renderer_set_property (GObject      *object,
   switch (prop_id)
     {
     case PROP_SHOW_LINE_CHANGES:
-      self->show_line_changes = g_value_get_boolean (value);
-      ide_omni_gutter_renderer_recalculate_size (self);
+      ide_omni_gutter_renderer_set_show_line_changes (self, g_value_get_boolean (value));
       break;
 
     case PROP_SHOW_LINE_DIAGNOSTICS:
-      self->show_line_diagnostics = g_value_get_boolean (value);
-      ide_omni_gutter_renderer_recalculate_size (self);
+      ide_omni_gutter_renderer_set_show_line_diagnostics (self, g_value_get_boolean (value));
       break;
 
     case PROP_SHOW_LINE_NUMBERS:
-      self->show_line_numbers = g_value_get_boolean (value);
-      ide_omni_gutter_renderer_recalculate_size (self);
+      ide_omni_gutter_renderer_set_show_line_numbers (self, g_value_get_boolean (value));
       break;
 
     default:
@@ -1310,6 +1311,7 @@ ide_omni_gutter_renderer_set_show_line_changes (IdeOmniGutterRenderer *self,
     {
       self->show_line_changes = show_line_changes;
       g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_SHOW_LINE_CHANGES]);
+      ide_omni_gutter_renderer_recalculate_size (self);
     }
 }
 
@@ -1325,6 +1327,7 @@ ide_omni_gutter_renderer_set_show_line_diagnostics (IdeOmniGutterRenderer *self,
     {
       self->show_line_diagnostics = show_line_diagnostics;
       g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_SHOW_LINE_DIAGNOSTICS]);
+      ide_omni_gutter_renderer_recalculate_size (self);
     }
 }
 
@@ -1340,5 +1343,6 @@ ide_omni_gutter_renderer_set_show_line_numbers (IdeOmniGutterRenderer *self,
     {
       self->show_line_numbers = show_line_numbers;
       g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_SHOW_LINE_NUMBERS]);
+      ide_omni_gutter_renderer_recalculate_size (self);
     }
 }


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