[gtksourceview] SpaceDrawer: backward compatibility for old API



commit 3a7f3b552653a6ff247acdd91dc701e85222edcd
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun Sep 25 16:13:03 2016 +0200

    SpaceDrawer: backward compatibility for old API
    
    Lots of boring code.

 gtksourceview/gtksourcespacedrawer-private.h |    2 +-
 gtksourceview/gtksourcespacedrawer.c         |  139 ++++++++++++++++++++++++--
 gtksourceview/gtksourceview.c                |    7 +-
 3 files changed, 131 insertions(+), 17 deletions(-)
---
diff --git a/gtksourceview/gtksourcespacedrawer-private.h b/gtksourceview/gtksourcespacedrawer-private.h
index 00bda95..642d110 100644
--- a/gtksourceview/gtksourcespacedrawer-private.h
+++ b/gtksourceview/gtksourcespacedrawer-private.h
@@ -37,7 +37,7 @@ GtkSourceDrawSpacesFlags
                        _gtk_source_space_drawer_get_flags              (GtkSourceSpaceDrawer *drawer);
 
 GTK_SOURCE_INTERNAL
-gboolean               _gtk_source_space_drawer_set_flags              (GtkSourceSpaceDrawer     *drawer,
+void                   _gtk_source_space_drawer_set_flags              (GtkSourceSpaceDrawer     *drawer,
                                                                         GtkSourceDrawSpacesFlags  flags);
 
 GTK_SOURCE_INTERNAL
diff --git a/gtksourceview/gtksourcespacedrawer.c b/gtksourceview/gtksourcespacedrawer.c
index fec2b82..c39ec3c 100644
--- a/gtksourceview/gtksourcespacedrawer.c
+++ b/gtksourceview/gtksourcespacedrawer.c
@@ -50,7 +50,6 @@
 struct _GtkSourceSpaceDrawerPrivate
 {
        GtkSourceSpaceTypeFlags *matrix;
-       GtkSourceDrawSpacesFlags flags;
        GdkRGBA *color;
 };
 
@@ -290,29 +289,147 @@ _gtk_source_space_drawer_new (void)
        return g_object_new (GTK_SOURCE_TYPE_SPACE_DRAWER, NULL);
 }
 
+static GtkSourceSpaceLocationFlags
+get_nonzero_locations_for_draw_spaces_flags (GtkSourceSpaceDrawer *drawer)
+{
+       GtkSourceSpaceLocationFlags locations = GTK_SOURCE_SPACE_LOCATION_NONE;
+       GtkSourceSpaceTypeFlags types;
+
+       types = gtk_source_space_drawer_get_types_for_locations (drawer, GTK_SOURCE_SPACE_LOCATION_LEADING);
+       if (types != GTK_SOURCE_SPACE_TYPE_NONE)
+       {
+               locations |= GTK_SOURCE_SPACE_LOCATION_LEADING;
+       }
+
+       types = gtk_source_space_drawer_get_types_for_locations (drawer, 
GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT);
+       if (types != GTK_SOURCE_SPACE_TYPE_NONE)
+       {
+               locations |= GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT;
+       }
+
+       types = gtk_source_space_drawer_get_types_for_locations (drawer, GTK_SOURCE_SPACE_LOCATION_TRAILING);
+       if (types != GTK_SOURCE_SPACE_TYPE_NONE)
+       {
+               locations |= GTK_SOURCE_SPACE_LOCATION_TRAILING;
+       }
+
+       return locations;
+}
+
 GtkSourceDrawSpacesFlags
 _gtk_source_space_drawer_get_flags (GtkSourceSpaceDrawer *drawer)
 {
+       GtkSourceSpaceLocationFlags locations;
+       GtkSourceSpaceTypeFlags common_types;
+       GtkSourceDrawSpacesFlags flags = 0;
+
        g_return_val_if_fail (GTK_SOURCE_IS_SPACE_DRAWER (drawer), 0);
 
-       return drawer->priv->flags;
+       locations = get_nonzero_locations_for_draw_spaces_flags (drawer);
+       common_types = gtk_source_space_drawer_get_types_for_locations (drawer, locations);
+
+       if (locations & GTK_SOURCE_SPACE_LOCATION_LEADING)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_LEADING;
+       }
+       if (locations & GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_TEXT;
+       }
+       if (locations & GTK_SOURCE_SPACE_LOCATION_TRAILING)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_TRAILING;
+       }
+
+       if (common_types & GTK_SOURCE_SPACE_TYPE_SPACE)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_SPACE;
+       }
+       if (common_types & GTK_SOURCE_SPACE_TYPE_TAB)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_TAB;
+       }
+       if (common_types & GTK_SOURCE_SPACE_TYPE_NEWLINE)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_NEWLINE;
+       }
+       if (common_types & GTK_SOURCE_SPACE_TYPE_NBSP)
+       {
+               flags |= GTK_SOURCE_DRAW_SPACES_NBSP;
+       }
+
+       return flags;
 }
 
-gboolean
-_gtk_source_space_drawer_set_flags (GtkSourceSpaceDrawer     *drawer,
-                                   GtkSourceDrawSpacesFlags  flags)
+static GtkSourceSpaceLocationFlags
+get_locations_from_draw_spaces_flags (GtkSourceDrawSpacesFlags flags)
 {
-       gboolean changed = FALSE;
+       GtkSourceSpaceLocationFlags locations = GTK_SOURCE_SPACE_LOCATION_NONE;
 
-       g_return_val_if_fail (GTK_SOURCE_IS_SPACE_DRAWER (drawer), changed);
+       if (flags & GTK_SOURCE_DRAW_SPACES_LEADING)
+       {
+               locations |= GTK_SOURCE_SPACE_LOCATION_LEADING;
+       }
+       if (flags & GTK_SOURCE_DRAW_SPACES_TEXT)
+       {
+               locations |= GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT;
+       }
+       if (flags & GTK_SOURCE_DRAW_SPACES_TRAILING)
+       {
+               locations |= GTK_SOURCE_SPACE_LOCATION_TRAILING;
+       }
+
+       if (locations == GTK_SOURCE_SPACE_LOCATION_NONE)
+       {
+               locations = (GTK_SOURCE_SPACE_LOCATION_LEADING |
+                            GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT |
+                            GTK_SOURCE_SPACE_LOCATION_TRAILING);
+       }
+
+       return locations;
+}
+
+static GtkSourceSpaceTypeFlags
+get_space_types_from_draw_spaces_flags (GtkSourceDrawSpacesFlags flags)
+{
+       GtkSourceSpaceTypeFlags types = GTK_SOURCE_SPACE_TYPE_NONE;
 
-       if (drawer->priv->flags != flags)
+       if (flags & GTK_SOURCE_DRAW_SPACES_SPACE)
        {
-               drawer->priv->flags = flags;
-               changed = TRUE;
+               types |= GTK_SOURCE_SPACE_TYPE_SPACE;
        }
+       if (flags & GTK_SOURCE_DRAW_SPACES_TAB)
+       {
+               types |= GTK_SOURCE_SPACE_TYPE_TAB;
+       }
+       if (flags & GTK_SOURCE_DRAW_SPACES_NEWLINE)
+       {
+               types |= GTK_SOURCE_SPACE_TYPE_NEWLINE;
+       }
+       if (flags & GTK_SOURCE_DRAW_SPACES_NBSP)
+       {
+               types |= GTK_SOURCE_SPACE_TYPE_NBSP;
+       }
+
+       return types;
+}
+
+void
+_gtk_source_space_drawer_set_flags (GtkSourceSpaceDrawer     *drawer,
+                                   GtkSourceDrawSpacesFlags  flags)
+{
+       GtkSourceSpaceLocationFlags locations;
+       GtkSourceSpaceTypeFlags types;
+
+       g_return_if_fail (GTK_SOURCE_IS_SPACE_DRAWER (drawer));
+
+       gtk_source_space_drawer_set_types_for_locations (drawer,
+                                                        GTK_SOURCE_SPACE_LOCATION_ALL,
+                                                        GTK_SOURCE_SPACE_TYPE_NONE);
 
-       return changed;
+       locations = get_locations_from_draw_spaces_flags (flags);
+       types = get_space_types_from_draw_spaces_flags (flags);
+       gtk_source_space_drawer_set_types_for_locations (drawer, locations, types);
 }
 
 /**
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index 16eb83a..5fcb8dd 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -1269,6 +1269,7 @@ space_drawer_notify_matrix_cb (GtkSourceSpaceDrawer *space_drawer,
                               GtkSourceView        *view)
 {
        gtk_widget_queue_draw (GTK_WIDGET (view));
+       g_object_notify (G_OBJECT (view), "draw-spaces");
 }
 
 static void
@@ -4479,11 +4480,7 @@ gtk_source_view_set_draw_spaces (GtkSourceView            *view,
                return;
        }
 
-       if (_gtk_source_space_drawer_set_flags (view->priv->space_drawer, flags))
-       {
-               gtk_widget_queue_draw (GTK_WIDGET (view));
-               g_object_notify (G_OBJECT (view), "draw-spaces");
-       }
+       _gtk_source_space_drawer_set_flags (view->priv->space_drawer, flags);
 }
 
 /**


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