[gtksourceview/wip/space-drawing] SpaceDrawer: add "enable-matrix" property
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/space-drawing] SpaceDrawer: add "enable-matrix" property
- Date: Fri, 30 Sep 2016 17:54:55 +0000 (UTC)
commit ffe15b035f57a0c6c7f4addb8ff43a002a4181bc
Author: Sébastien Wilmet <swilmet gnome org>
Date: Fri Sep 30 19:25:22 2016 +0200
SpaceDrawer: add "enable-matrix" property
It's useful to keep the matrix state and just disable space drawing.
It'll also be useful in the drawspaces gedit plugin, since it has a
"show-white-space" bool gsetting.
It'll also permit to set a better default value for the matrix property.
docs/reference/gtksourceview-3.0-sections.txt | 2 +
gtksourceview/gtksourcespacedrawer.c | 76 ++++++++++++++++++++++++-
gtksourceview/gtksourcespacedrawer.h | 7 ++
gtksourceview/gtksourceview.c | 10 ++--
tests/test-space-drawing.c | 44 +++-----------
tests/test-widget.c | 38 ++++---------
6 files changed, 110 insertions(+), 67 deletions(-)
---
diff --git a/docs/reference/gtksourceview-3.0-sections.txt b/docs/reference/gtksourceview-3.0-sections.txt
index 4aed8a4..312c793 100644
--- a/docs/reference/gtksourceview-3.0-sections.txt
+++ b/docs/reference/gtksourceview-3.0-sections.txt
@@ -750,6 +750,8 @@ gtk_source_space_drawer_set_types_for_locations
gtk_source_space_drawer_get_types_for_locations
gtk_source_space_drawer_set_matrix
gtk_source_space_drawer_get_matrix
+gtk_source_space_drawer_set_enable_matrix
+gtk_source_space_drawer_get_enable_matrix
<SUBSECTION Standard>
GTK_SOURCE_IS_SPACE_DRAWER
GTK_SOURCE_IS_SPACE_DRAWER_CLASS
diff --git a/gtksourceview/gtksourcespacedrawer.c b/gtksourceview/gtksourcespacedrawer.c
index 0debe5e..17a262c 100644
--- a/gtksourceview/gtksourcespacedrawer.c
+++ b/gtksourceview/gtksourcespacedrawer.c
@@ -79,11 +79,13 @@ struct _GtkSourceSpaceDrawerPrivate
{
GtkSourceSpaceTypeFlags *matrix;
GdkRGBA *color;
+ guint enable_matrix : 1;
};
enum
{
PROP_0,
+ PROP_ENABLE_MATRIX,
PROP_MATRIX,
N_PROPERTIES
};
@@ -218,6 +220,10 @@ gtk_source_space_drawer_get_property (GObject *object,
switch (prop_id)
{
+ case PROP_ENABLE_MATRIX:
+ g_value_set_boolean (value, gtk_source_space_drawer_get_enable_matrix (drawer));
+ break;
+
case PROP_MATRIX:
g_value_set_variant (value, gtk_source_space_drawer_get_matrix (drawer));
break;
@@ -238,6 +244,10 @@ gtk_source_space_drawer_set_property (GObject *object,
switch (prop_id)
{
+ case PROP_ENABLE_MATRIX:
+ gtk_source_space_drawer_set_enable_matrix (drawer, g_value_get_boolean (value));
+ break;
+
case PROP_MATRIX:
gtk_source_space_drawer_set_matrix (drawer, g_value_get_variant (value));
break;
@@ -273,6 +283,21 @@ gtk_source_space_drawer_class_init (GtkSourceSpaceDrawerClass *klass)
object_class->finalize = gtk_source_space_drawer_finalize;
/**
+ * GtkSourceSpaceDrawer:enable-matrix:
+ *
+ * Whether the #GtkSourceSpaceDrawer:matrix property is enabled.
+ *
+ * Since: 3.24
+ */
+ properties[PROP_ENABLE_MATRIX] =
+ g_param_spec_boolean ("enable-matrix",
+ "Enable Matrix",
+ "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS);
+
+ /**
* GtkSourceSpaceDrawer:matrix:
*
* The :matrix property is a #GVariant property to specify where and
@@ -359,6 +384,11 @@ _gtk_source_space_drawer_get_flags (GtkSourceSpaceDrawer *drawer)
g_return_val_if_fail (GTK_SOURCE_IS_SPACE_DRAWER (drawer), 0);
+ if (!drawer->priv->enable_matrix)
+ {
+ return 0;
+ }
+
locations = get_nonzero_locations_for_draw_spaces_flags (drawer);
common_types = gtk_source_space_drawer_get_types_for_locations (drawer, locations);
@@ -464,6 +494,8 @@ _gtk_source_space_drawer_set_flags (GtkSourceSpaceDrawer *drawer,
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);
+
+ gtk_source_space_drawer_set_enable_matrix (drawer, TRUE);
}
/**
@@ -664,6 +696,45 @@ gtk_source_space_drawer_set_matrix (GtkSourceSpaceDrawer *drawer,
}
}
+/**
+ * gtk_source_space_drawer_get_enable_matrix:
+ * @drawer: a #GtkSourceSpaceDrawer.
+ *
+ * Returns: whether the #GtkSourceSpaceDrawer:matrix property is enabled.
+ * Since: 3.24
+ */
+gboolean
+gtk_source_space_drawer_get_enable_matrix (GtkSourceSpaceDrawer *drawer)
+{
+ g_return_val_if_fail (GTK_SOURCE_IS_SPACE_DRAWER (drawer), FALSE);
+
+ return drawer->priv->enable_matrix;
+}
+
+/**
+ * gtk_source_space_drawer_set_enable_matrix:
+ * @drawer: a #GtkSourceSpaceDrawer.
+ * @enable_matrix: the new value.
+ *
+ * Sets whether the #GtkSourceSpaceDrawer:matrix property is enabled.
+ *
+ * Since: 3.24
+ */
+void
+gtk_source_space_drawer_set_enable_matrix (GtkSourceSpaceDrawer *drawer,
+ gboolean enable_matrix)
+{
+ g_return_if_fail (GTK_SOURCE_IS_SPACE_DRAWER (drawer));
+
+ enable_matrix = enable_matrix != FALSE;
+
+ if (drawer->priv->enable_matrix != enable_matrix)
+ {
+ drawer->priv->enable_matrix = enable_matrix;
+ g_object_notify_by_pspec (G_OBJECT (drawer), properties[PROP_ENABLE_MATRIX]);
+ }
+}
+
void
_gtk_source_space_drawer_update_color (GtkSourceSpaceDrawer *drawer,
GtkSourceView *view)
@@ -1084,7 +1155,8 @@ space_needs_drawing (GtkSourceSpaceDrawer *drawer,
}
/* Check the matrix */
- return space_needs_drawing_according_to_matrix (drawer, iter, leading_end, trailing_start);
+ return (drawer->priv->enable_matrix &&
+ space_needs_drawing_according_to_matrix (drawer, iter, leading_end, trailing_start));
}
static void
@@ -1184,7 +1256,7 @@ _gtk_source_space_drawer_draw (GtkSourceSpaceDrawer *drawer,
text_view = GTK_TEXT_VIEW (view);
buffer = gtk_text_view_get_buffer (text_view);
- if (is_zero_matrix (drawer) &&
+ if ((!drawer->priv->enable_matrix || is_zero_matrix (drawer)) &&
!buffer_has_draw_spaces_tag (buffer))
{
return;
diff --git a/gtksourceview/gtksourcespacedrawer.h b/gtksourceview/gtksourcespacedrawer.h
index b6f2e75..3454901 100644
--- a/gtksourceview/gtksourcespacedrawer.h
+++ b/gtksourceview/gtksourcespacedrawer.h
@@ -129,6 +129,13 @@ GTK_SOURCE_AVAILABLE_IN_3_24
void gtk_source_space_drawer_set_matrix (GtkSourceSpaceDrawer *drawer,
GVariant *matrix);
+GTK_SOURCE_AVAILABLE_IN_3_24
+gboolean gtk_source_space_drawer_get_enable_matrix (GtkSourceSpaceDrawer *drawer);
+
+GTK_SOURCE_AVAILABLE_IN_3_24
+void gtk_source_space_drawer_set_enable_matrix (GtkSourceSpaceDrawer *drawer,
+ gboolean enable_matrix);
+
G_END_DECLS
#endif /* GTK_SOURCE_SPACE_DRAWER_H */
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index a422e2c..8e46312 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -1270,9 +1270,9 @@ gtk_source_view_get_property (GObject *object,
}
static void
-space_drawer_notify_matrix_cb (GtkSourceSpaceDrawer *space_drawer,
- GParamSpec *pspec,
- GtkSourceView *view)
+space_drawer_notify_cb (GtkSourceSpaceDrawer *space_drawer,
+ GParamSpec *pspec,
+ GtkSourceView *view)
{
gtk_widget_queue_draw (GTK_WIDGET (view));
g_object_notify (G_OBJECT (view), "draw-spaces");
@@ -1309,8 +1309,8 @@ gtk_source_view_init (GtkSourceView *view)
view->priv->space_drawer = gtk_source_space_drawer_new ();
g_signal_connect_object (view->priv->space_drawer,
- "notify::matrix",
- G_CALLBACK (space_drawer_notify_matrix_cb),
+ "notify",
+ G_CALLBACK (space_drawer_notify_cb),
view,
0);
diff --git a/tests/test-space-drawing.c b/tests/test-space-drawing.c
index 57ccbf6..b7be77d 100644
--- a/tests/test-space-drawing.c
+++ b/tests/test-space-drawing.c
@@ -52,34 +52,6 @@ fill_buffer (GtkTextBuffer *buffer,
}
static void
-enable_matrix (GtkSourceSpaceDrawer *space_drawer)
-{
- gtk_source_space_drawer_set_types_for_locations (space_drawer,
- GTK_SOURCE_SPACE_LOCATION_ALL,
- GTK_SOURCE_SPACE_TYPE_NBSP);
-
- gtk_source_space_drawer_set_types_for_locations (space_drawer,
- GTK_SOURCE_SPACE_LOCATION_TRAILING,
- GTK_SOURCE_SPACE_TYPE_ALL &
~GTK_SOURCE_SPACE_TYPE_NEWLINE);
-}
-
-static void
-matrix_checkbutton_toggled_cb (GtkToggleButton *matrix_checkbutton,
- GtkSourceSpaceDrawer *space_drawer)
-{
- if (gtk_toggle_button_get_active (matrix_checkbutton))
- {
- enable_matrix (space_drawer);
- }
- else
- {
- gtk_source_space_drawer_set_types_for_locations (space_drawer,
- GTK_SOURCE_SPACE_LOCATION_ALL,
- GTK_SOURCE_SPACE_TYPE_NONE);
- }
-}
-
-static void
create_window (void)
{
GtkWidget *window;
@@ -120,7 +92,12 @@ create_window (void)
fill_buffer (GTK_TEXT_BUFFER (buffer), tag);
space_drawer = gtk_source_view_get_space_drawer (view);
- enable_matrix (space_drawer);
+ gtk_source_space_drawer_set_types_for_locations (space_drawer,
+ GTK_SOURCE_SPACE_LOCATION_ALL,
+ GTK_SOURCE_SPACE_TYPE_NBSP);
+ gtk_source_space_drawer_set_types_for_locations (space_drawer,
+ GTK_SOURCE_SPACE_LOCATION_TRAILING,
+ GTK_SOURCE_SPACE_TYPE_ALL &
~GTK_SOURCE_SPACE_TYPE_NEWLINE);
panel_grid = gtk_grid_new ();
gtk_orientable_set_orientation (GTK_ORIENTABLE (panel_grid), GTK_ORIENTATION_VERTICAL);
@@ -131,13 +108,12 @@ create_window (void)
"margin", 6,
NULL);
- matrix_checkbutton = gtk_check_button_new_with_label ("GtkSourceSpaceDrawer matrix");
+ matrix_checkbutton = gtk_check_button_new_with_label ("GtkSourceSpaceDrawer enable-matrix");
gtk_container_add (GTK_CONTAINER (panel_grid), matrix_checkbutton);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (matrix_checkbutton), TRUE);
- g_signal_connect (matrix_checkbutton,
- "toggled",
- G_CALLBACK (matrix_checkbutton_toggled_cb),
- space_drawer);
+ g_object_bind_property (matrix_checkbutton, "active",
+ space_drawer, "enable-matrix",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
tag_set_checkbutton = gtk_check_button_new_with_label ("GtkSourceTag draw-spaces-set");
gtk_container_add (GTK_CONTAINER (panel_grid), tag_set_checkbutton);
diff --git a/tests/test-widget.c b/tests/test-widget.c
index d1c6056..8af7e2f 100644
--- a/tests/test-widget.c
+++ b/tests/test-widget.c
@@ -993,30 +993,10 @@ show_top_border_window_toggled_cb (GtkToggleButton *checkbutton,
}
static void
-draw_spaces_toggled_cb (GtkToggleButton *checkbutton,
- TestWidget *self)
+test_widget_init (TestWidget *self)
{
GtkSourceSpaceDrawer *space_drawer;
- space_drawer = gtk_source_view_get_space_drawer (self->priv->view);
-
- if (gtk_toggle_button_get_active (checkbutton))
- {
- gtk_source_space_drawer_set_types_for_locations (space_drawer,
- GTK_SOURCE_SPACE_LOCATION_ALL,
- GTK_SOURCE_SPACE_TYPE_ALL);
- }
- else
- {
- gtk_source_space_drawer_set_types_for_locations (space_drawer,
- GTK_SOURCE_SPACE_LOCATION_ALL,
- GTK_SOURCE_SPACE_TYPE_NONE);
- }
-}
-
-static void
-test_widget_init (TestWidget *self)
-{
self->priv = test_widget_get_instance_private (self);
gtk_widget_init_template (GTK_WIDGET (self));
@@ -1075,11 +1055,6 @@ test_widget_init (TestWidget *self)
"visible",
G_BINDING_SYNC_CREATE);
- g_signal_connect (self->priv->draw_spaces_checkbutton,
- "toggled",
- G_CALLBACK (draw_spaces_toggled_cb),
- self);
-
g_object_bind_property (self->priv->smart_backspace_checkbutton,
"active",
self->priv->view,
@@ -1091,6 +1066,17 @@ test_widget_init (TestWidget *self)
G_CALLBACK (on_background_pattern_changed),
self);
+ /* White space drawing */
+ space_drawer = gtk_source_view_get_space_drawer (self->priv->view);
+
+ gtk_source_space_drawer_set_types_for_locations (space_drawer,
+ GTK_SOURCE_SPACE_LOCATION_ALL,
+ GTK_SOURCE_SPACE_TYPE_ALL);
+
+ g_object_bind_property (self->priv->draw_spaces_checkbutton, "active",
+ space_drawer, "enable-matrix",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
open_file (self, TOP_SRCDIR "/gtksourceview/gtksourcebuffer.c");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]