summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>2022-01-08 11:48:43 -0500
committerCorentin Noël <tintou@noel.tf>2022-06-22 07:22:17 +0000
commit826cc95889b0a5bb2507d32a2960d2e4eac7a476 (patch)
treeb7a7b2207b7edf9f29ff69e6f4d380dc8312f9f5
parent7acad251d07fecc2c8ffbdf98864d02fa5966bde (diff)
downloadlibgnomekbd-826cc95889b0a5bb2507d32a2960d2e4eac7a476.tar.gz
Make all symbol drawings full-width, using alignment to place them
Currently, left-displayed symbols (those produced without AltGr) are drawn on a key rendering in a full-width cell, but right-displayed symbols (those produced with AltGr) are only drawn in half-width cells on the key rendering. This means that left-displayed symbols can still overlap with right-hand symbols if they happen to be wide, but right-hand symbols are more likely to be truncated ("ellipsized"). This change still allows the symbols to overlap, but makes right-displayed symbols less likely to be ellipsized. We do this by using alignment to place right-displayed symbols to the right, instead of using a half-width cell.
-rw-r--r--libgnomekbd/gkbd-keyboard-drawing.c45
1 files changed, 15 insertions, 30 deletions
diff --git a/libgnomekbd/gkbd-keyboard-drawing.c b/libgnomekbd/gkbd-keyboard-drawing.c
index 5d7c5ed..9271c69 100644
--- a/libgnomekbd/gkbd-keyboard-drawing.c
+++ b/libgnomekbd/gkbd-keyboard-drawing.c
@@ -927,6 +927,7 @@ draw_key_label_helper (GkbdKeyboardDrawingRenderContext * context,
gboolean is_pressed)
{
gint label_x, label_y, label_max_width, ycell;
+ PangoAlignment align;
if (keysym == 0)
return;
@@ -935,46 +936,30 @@ draw_key_label_helper (GkbdKeyboardDrawingRenderContext * context,
(unsigned) keysym, (char) keysym, (int) glp);
#endif
+ ycell = ((glp == GKBD_KEYBOARD_DRAWING_POS_BOTTOMLEFT) ||
+ (glp == GKBD_KEYBOARD_DRAWING_POS_BOTTOMRIGHT));
+ rotate_coordinate (x, y, x + padding,
+ y + padding + (height -
+ 2 * padding) *
+ ycell * 4 / 7, angle, &label_x,
+ &label_y);
+ label_max_width = PANGO_SCALE * (width - 2 * padding);
+
switch (glp) {
case GKBD_KEYBOARD_DRAWING_POS_TOPLEFT:
case GKBD_KEYBOARD_DRAWING_POS_BOTTOMLEFT:
- {
- ycell =
- glp == GKBD_KEYBOARD_DRAWING_POS_BOTTOMLEFT;
-
- rotate_coordinate (x, y, x + padding,
- y + padding + (height -
- 2 * padding) *
- ycell * 4 / 7, angle, &label_x,
- &label_y);
- label_max_width =
- PANGO_SCALE * (width - 2 * padding);
- break;
- }
+ align = PANGO_ALIGN_LEFT;
+ break;
case GKBD_KEYBOARD_DRAWING_POS_TOPRIGHT:
case GKBD_KEYBOARD_DRAWING_POS_BOTTOMRIGHT:
- {
- ycell =
- glp == GKBD_KEYBOARD_DRAWING_POS_BOTTOMRIGHT;
-
- rotate_coordinate (x, y,
- x + padding + (width -
- 2 * padding) *
- 4 / 7,
- y + padding + (height -
- 2 * padding) *
- ycell * 4 / 7, angle, &label_x,
- &label_y);
- label_max_width =
- PANGO_SCALE * ((width - 2 * padding) -
- (width - 2 * padding) * 4 / 7);
- break;
- }
+ align = PANGO_ALIGN_RIGHT;
+ break;
default:
return;
}
set_key_label_in_layout (context, keysym);
pango_layout_set_width (context->layout, label_max_width);
+ pango_layout_set_alignment (context->layout, align);
label_y -= (pango_layout_get_line_count (context->layout) - 1) *
(pango_font_description_get_size (context->font_desc) /
PANGO_SCALE);