[gtk/blink-later: 1/3] text: Delay initial cursor blinking



commit a4e427b44acc304b86b6f79d376fe5c55a15ebe0
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Jul 23 21:08:47 2019 -0400

    text: Delay initial cursor blinking
    
    We used to have a solid cursor for 2/3 of the cycle,
    now we start fading after 1/4th. To make up for it,
    add half a cycle of delay.

 gtk/gtktext.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 064447be11..59281d5e99 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -6312,7 +6312,8 @@ static gboolean blink_cb (GtkWidget     *widget,
                           gpointer       user_data);
 
 static void
-add_blink_timeout (GtkText *self)
+add_blink_timeout (GtkText  *self,
+                   gboolean  delay)
 {
   GtkTextPrivate *priv = gtk_text_get_instance_private (self);
   BlinkData *data;
@@ -6325,6 +6326,8 @@ add_blink_timeout (GtkText *self)
 
   data = g_new (BlinkData, 1);
   data->start = priv->blink_start_time;
+  if (delay)
+    data->start += blink_time * 1000 / 2;
   data->end = data->start + blink_time * 1000;
 
   priv->blink_tick = gtk_widget_add_tick_callback (GTK_WIDGET (self),
@@ -6377,6 +6380,7 @@ blink_cb (GtkWidget     *widget,
   int blink_time;
   guint64 now;
   float phase;
+  float alpha;
 
   if (!gtk_widget_has_focus (GTK_WIDGET (self)))
     {
@@ -6407,15 +6411,19 @@ blink_cb (GtkWidget     *widget,
 
   phase = (now - data->start) / (float) (data->end - data->start);
 
-  priv->cursor_alpha = blink_alpha (phase);
-
   if (now >= data->end)
     {
       data->start = data->end;
       data->end = data->start + blink_time * 1000;
     }
 
-  gtk_widget_queue_draw (widget);
+  alpha = blink_alpha (phase);
+
+  if (priv->cursor_alpha != alpha)
+    {
+      priv->cursor_alpha = alpha;
+      gtk_widget_queue_draw (widget);
+    }
 
   return G_SOURCE_CONTINUE;
 }
@@ -6428,7 +6436,7 @@ gtk_text_check_cursor_blink (GtkText *self)
   if (cursor_blinks (self))
     {
       if (!priv->blink_tick)
-        add_blink_timeout (self);
+        add_blink_timeout (self, FALSE);
     }
   else
     {
@@ -6443,7 +6451,7 @@ gtk_text_pend_cursor_blink (GtkText *self)
   if (cursor_blinks (self))
     {
       remove_blink_timeout (self);
-      add_blink_timeout (self);
+      add_blink_timeout (self, TRUE);
     }
 }
 


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