[gtksourceview] SpaceDrawer: backward compatibility for old API
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] SpaceDrawer: backward compatibility for old API
- Date: Sun, 25 Sep 2016 17:23:47 +0000 (UTC)
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]