[gnome-builder/wip/gtk4-port] plugins/omni-gutter: redraw when cursor line changes



commit 9204ae37915227091367b7cbbdf5c027794adcdc
Author: Christian Hergert <chergert redhat com>
Date:   Wed Apr 27 13:30:53 2022 -0700

    plugins/omni-gutter: redraw when cursor line changes

 src/plugins/omni-gutter/gbp-omni-gutter-renderer.c | 23 ++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
---
diff --git a/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c 
b/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
index 6044b6c22..e8f277842 100644
--- a/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
+++ b/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
@@ -100,6 +100,9 @@ struct _GbpOmniGutterRenderer
   /* Tracks changes to the buffer to give us line marks */
   IdeBufferChangeMonitor *change_monitor;
 
+  /* The last line that was cursor to help avoid redraws */
+  guint last_cursor_line;
+
   /*
    * We need to reuse a single pango layout while drawing all the lines
    * to keep the overhead low. We don't have pixel caching on the gutter
@@ -1365,10 +1368,26 @@ static void
 gbp_omni_gutter_renderer_cursor_moved (GbpOmniGutterRenderer *self,
                                        GtkTextBuffer         *buffer)
 {
+  GtkTextMark *mark;
+  GtkTextIter iter;
+  guint line;
+
   g_assert (GBP_IS_OMNI_GUTTER_RENDERER (self));
+  g_assert (IDE_IS_BUFFER (buffer));
+
+  mark = gtk_text_buffer_get_insert (buffer);
+  gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark);
+  line = gtk_text_iter_get_line (&iter);
 
-  if (self->show_relative_line_numbers)
-    gtk_widget_queue_draw (GTK_WIDGET (self));
+  if (line != self->last_cursor_line)
+    {
+      self->last_cursor_line = line;
+      gtk_widget_queue_draw (GTK_WIDGET (self));
+    }
+  else if (self->show_relative_line_numbers)
+    {
+      gtk_widget_queue_draw (GTK_WIDGET (self));
+    }
 }
 
 static void


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