summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-04-01 05:02:15 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-04-01 05:02:15 +0000
commit63c6af8d13822f0b9875bd99e40091115c449984 (patch)
tree6f0afde849962d92396e35a0dff19467c46b3e97 /gtk
parent9f93464ea49b7d91551a65bbf16e8367bbcb6562 (diff)
parent199a539ae7141f073cbe999db7d708b6c11a95ef (diff)
downloadgtk+-63c6af8d13822f0b9875bd99e40091115c449984.tar.gz
Merge branch 'cursor-aspect-ratio' into 'master'
Add a cursor-aspect-ratio setting See merge request GNOME/gtk!1597
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtksettings.c10
-rw-r--r--gtk/gtkstylecontext.c19
2 files changed, 24 insertions, 5 deletions
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 70bff18de4..7139d57460 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -144,6 +144,7 @@ enum {
PROP_CURSOR_BLINK_TIME,
PROP_CURSOR_BLINK_TIMEOUT,
PROP_SPLIT_CURSOR,
+ PROP_CURSOR_ASPECT_RATIO,
PROP_THEME_NAME,
PROP_ICON_THEME_NAME,
PROP_DND_DRAG_THRESHOLD,
@@ -383,6 +384,15 @@ gtk_settings_class_init (GtkSettingsClass *class)
TRUE,
GTK_PARAM_READWRITE));
g_assert (result == PROP_SPLIT_CURSOR);
+
+ result = settings_install_property_parser (class,
+ g_param_spec_float ("gtk-cursor-aspect-ratio",
+ P_("Cursor Aspect Ratio"),
+ P_("The aspect ratio of the text caret"),
+ 0.0, 1.0, 0.04,
+ GTK_PARAM_READWRITE));
+ g_assert (result == PROP_CURSOR_ASPECT_RATIO);
+
result = settings_install_property_parser (class,
g_param_spec_string ("gtk-theme-name",
P_("Theme Name"),
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 5d9d321f94..c885841799 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -1084,6 +1084,7 @@ draw_insertion_cursor (GtkStyleContext *context,
gdouble x,
gdouble y,
gdouble height,
+ float aspect_ratio,
gboolean is_primary,
PangoDirection direction,
gboolean draw_arrow)
@@ -1099,7 +1100,7 @@ draw_insertion_cursor (GtkStyleContext *context,
_gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
gdk_cairo_set_source_rgba (cr, is_primary ? &primary_color : &secondary_color);
- stem_width = height * CURSOR_ASPECT_RATIO + 1;
+ stem_width = height * aspect_ratio + 1;
/* put (stem_width % 2) on the proper side of the cursor */
if (direction == PANGO_DIRECTION_LTR)
@@ -1146,6 +1147,7 @@ draw_insertion_cursor (GtkStyleContext *context,
static void
get_insertion_cursor_bounds (gdouble height,
+ float aspect_ratio,
PangoDirection direction,
gboolean draw_arrow,
graphene_rect_t *bounds)
@@ -1153,7 +1155,7 @@ get_insertion_cursor_bounds (gdouble height,
gint stem_width;
gint offset;
- stem_width = height * CURSOR_ASPECT_RATIO + 1;
+ stem_width = height * aspect_ratio + 1;
if (direction == PANGO_DIRECTION_LTR)
offset = stem_width / 2;
else
@@ -1186,6 +1188,7 @@ static void
snapshot_insertion_cursor (GtkSnapshot *snapshot,
GtkStyleContext *context,
gdouble height,
+ float aspect_ratio,
gboolean is_primary,
PangoDirection direction,
gboolean draw_arrow)
@@ -1195,10 +1198,10 @@ snapshot_insertion_cursor (GtkSnapshot *snapshot,
cairo_t *cr;
graphene_rect_t bounds;
- get_insertion_cursor_bounds (height, direction, draw_arrow, &bounds);
+ get_insertion_cursor_bounds (height, aspect_ratio, 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, aspect_ratio, is_primary, direction, draw_arrow);
cairo_destroy (cr);
}
@@ -1211,7 +1214,7 @@ snapshot_insertion_cursor (GtkSnapshot *snapshot,
_gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
- stem_width = height * CURSOR_ASPECT_RATIO + 1;
+ stem_width = height * aspect_ratio + 1;
/* put (stem_width % 2) on the proper side of the cursor */
if (direction == PANGO_DIRECTION_LTR)
@@ -1291,6 +1294,7 @@ gtk_render_insertion_cursor (GtkStyleContext *context,
x + PANGO_PIXELS (cursor1->x),
y + PANGO_PIXELS (cursor1->y),
PANGO_PIXELS (cursor1->height),
+ 0.04,
TRUE,
direction,
direction2 != PANGO_DIRECTION_NEUTRAL);
@@ -1302,6 +1306,7 @@ gtk_render_insertion_cursor (GtkStyleContext *context,
x + PANGO_PIXELS (cursor2->x),
y + PANGO_PIXELS (cursor2->y),
PANGO_PIXELS (cursor2->height),
+ 0.04,
FALSE,
direction2,
TRUE);
@@ -1331,6 +1336,7 @@ gtk_snapshot_render_insertion_cursor (GtkSnapshot *snapshot,
{
GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
gboolean split_cursor;
+ float aspect_ratio;
PangoRectangle strong_pos, weak_pos;
PangoRectangle *cursor1, *cursor2;
PangoDirection keymap_direction;
@@ -1343,6 +1349,7 @@ gtk_snapshot_render_insertion_cursor (GtkSnapshot *snapshot,
g_object_get (gtk_settings_get_for_display (priv->display),
"gtk-split-cursor", &split_cursor,
+ "gtk-cursor-aspect-ratio", &aspect_ratio,
NULL);
keymap_direction = gdk_keymap_get_direction (gdk_display_get_keymap (priv->display));
@@ -1374,6 +1381,7 @@ gtk_snapshot_render_insertion_cursor (GtkSnapshot *snapshot,
snapshot_insertion_cursor (snapshot,
context,
PANGO_PIXELS (cursor1->height),
+ aspect_ratio,
TRUE,
direction,
direction2 != PANGO_DIRECTION_NEUTRAL);
@@ -1386,6 +1394,7 @@ gtk_snapshot_render_insertion_cursor (GtkSnapshot *snapshot,
snapshot_insertion_cursor (snapshot,
context,
PANGO_PIXELS (cursor2->height),
+ aspect_ratio,
FALSE,
direction2,
TRUE);