stylecontext: Draw arrow-less insertion cursors as color nodes
authorTimm Bäder <mail@baedert.org>
Fri, 4 May 2018 18:20:09 +0000 (20:20 +0200)
committerTimm Bäder <mail@baedert.org>
Sat, 5 May 2018 05:25:10 +0000 (07:25 +0200)
This lets us avoid an often used cairo node.

gtk/gtkstylecontext.c

index c26ab4136eb81b0012ac1c7d18a627c0ff5e3f57..d01602cc82f7ca4684edf13fb3cab334b4c5c0df 100644 (file)
@@ -1787,15 +1787,39 @@ snapshot_insertion_cursor (GtkSnapshot     *snapshot,
                            PangoDirection   direction,
                            gboolean         draw_arrow)
 {
-  graphene_rect_t bounds;
-  cairo_t *cr;
-  
-  get_insertion_cursor_bounds (height, direction, draw_arrow, &bounds);
-  cr = gtk_snapshot_append_cairo (snapshot, &bounds);
+  if (draw_arrow)
+    {
+      cairo_t *cr;
+      graphene_rect_t bounds;
+
+      get_insertion_cursor_bounds (height, direction, draw_arrow, &bounds);
+      cr = gtk_snapshot_append_cairo (snapshot, &bounds);
+
+      draw_insertion_cursor (context, cr, 0, 0, height, is_primary, direction, draw_arrow);
 
-  draw_insertion_cursor (context, cr, 0, 0, height, is_primary, direction, draw_arrow);
+      cairo_destroy (cr);
+    }
+  else
+    {
+      GdkRGBA primary_color;
+      GdkRGBA secondary_color;
+      int stem_width;
+      int offset;
 
-  cairo_destroy (cr);
+      _gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
+
+      stem_width = height * CURSOR_ASPECT_RATIO + 1;
+
+      /* put (stem_width % 2) on the proper side of the cursor */
+      if (direction == PANGO_DIRECTION_LTR)
+        offset = stem_width / 2;
+      else
+        offset = stem_width - stem_width / 2;
+
+      gtk_snapshot_append_color (snapshot,
+                                 is_primary ? &primary_color : &secondary_color,
+                                 &GRAPHENE_RECT_INIT (- offset, 0, stem_width, height));
+    }
 }
 
 /**