[gtksourceview] view: short-circuit when painting background marks
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] view: short-circuit when painting background marks
- Date: Wed, 4 Sep 2019 03:58:25 +0000 (UTC)
commit 112bf4682ec8192664d4efd2871cbd7a3f43ec6d
Author: Christian Hergert <chergert redhat com>
Date: Tue Sep 3 20:57:58 2019 -0700
view: short-circuit when painting background marks
Often times we do not have any source marks. We can use that information
to avoid walking the buffer during our draw_layer operations.
This is a minor performance improvement in the common case.
gtksourceview/gtksourcebuffer-private.h | 3 +++
gtksourceview/gtksourcebuffer.c | 13 +++++++++++++
gtksourceview/gtksourceview.c | 1 +
3 files changed, 17 insertions(+)
---
diff --git a/gtksourceview/gtksourcebuffer-private.h b/gtksourceview/gtksourcebuffer-private.h
index 51a6a310..87c77970 100644
--- a/gtksourceview/gtksourcebuffer-private.h
+++ b/gtksourceview/gtksourcebuffer-private.h
@@ -80,6 +80,9 @@ void _gtk_source_buffer_restore_selection (GtkSourceBuffer
*buffer);
GTK_SOURCE_INTERNAL
gboolean _gtk_source_buffer_is_undo_redo_enabled (GtkSourceBuffer *buffer);
+GTK_SOURCE_INTERNAL
+gboolean _gtk_source_buffer_has_source_marks (GtkSourceBuffer *buffer);
+
G_END_DECLS
#endif /* GTK_SOURCE_BUFFER_PRIVATE_H */
diff --git a/gtksourceview/gtksourcebuffer.c b/gtksourceview/gtksourcebuffer.c
index 2341a6b3..98670c5d 100644
--- a/gtksourceview/gtksourcebuffer.c
+++ b/gtksourceview/gtksourcebuffer.c
@@ -2325,6 +2325,19 @@ gtk_source_buffer_remove_source_marks (GtkSourceBuffer *buffer,
g_slist_free (list);
}
+gboolean
+_gtk_source_buffer_has_source_marks (GtkSourceBuffer *buffer)
+{
+ g_return_val_if_fail (GTK_SOURCE_IS_BUFFER (buffer), FALSE);
+
+ if (buffer->priv->all_source_marks != NULL)
+ {
+ return !_gtk_source_marks_sequence_is_empty (buffer->priv->all_source_marks);
+ }
+
+ return FALSE;
+}
+
static GtkTextTag *
get_context_class_tag (GtkSourceBuffer *buffer,
const gchar *context_class)
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index eec9ce57..a146ccfa 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -2464,6 +2464,7 @@ gtk_source_view_paint_marks_background (GtkSourceView *view,
gint i;
if (view->priv->source_buffer == NULL ||
+ !_gtk_source_buffer_has_source_marks (view->priv->source_buffer) ||
!gdk_cairo_get_clip_rectangle (cr, &clip))
{
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]