From d49e0eaa1b997823541fbd4d9ed9828f90407f76 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Fri, 26 Jul 2019 22:27:56 +0000 Subject: [PATCH] Center the keyboard in landscape orientation --- eek/eek-gtk-keyboard.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 317f1b60..20718597 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -57,6 +57,9 @@ typedef struct _EekGtkKeyboardPrivate EekKeyboard *keyboard; EekTheme *theme; + int origin_x; + int origin_y; + GdkEventSequence *sequence; // unowned reference } EekGtkKeyboardPrivate; @@ -108,6 +111,9 @@ eek_gtk_keyboard_real_draw (GtkWidget *self, gtk_widget_get_allocation (self, &allocation); + cairo_save (cr); + cairo_translate (cr, priv->origin_x, priv->origin_y); + if (!priv->renderer) { PangoContext *pcontext; @@ -125,6 +131,8 @@ eek_gtk_keyboard_real_draw (GtkWidget *self, eek_renderer_render_keyboard (priv->renderer, cr); + cairo_restore (cr); + /* redraw pressed key */ list = eek_keyboard_get_pressed_keys (priv->keyboard); for (head = list; head; head = g_list_next (head)) { @@ -149,6 +157,9 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self, EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self)); + priv->origin_x = (allocation->width - 360) / 2; + priv->origin_y = 0; + if (priv->renderer) eek_renderer_set_allocation_size (priv->renderer, allocation->width, @@ -161,7 +172,9 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self, static void depress(EekGtkKeyboard *self, gdouble x, gdouble y, guint32 time) { EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); - EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y); + EekKey *key = eek_renderer_find_key_by_position (priv->renderer, + x - priv->origin_x, y - priv->origin_y); + if (key) { eek_keyboard_press_key(priv->keyboard, key, time); on_key_pressed(key, self); @@ -171,7 +184,8 @@ static void depress(EekGtkKeyboard *self, static void drag(EekGtkKeyboard *self, gdouble x, gdouble y, guint32 time) { EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); - EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y); + EekKey *key = eek_renderer_find_key_by_position (priv->renderer, + x - priv->origin_x, y - priv->origin_y); if (key) { GList *list, *head; @@ -488,6 +502,8 @@ render_pressed_key (GtkWidget *widget, GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region); cairo_t *cr = gdk_drawing_context_get_cairo_context (context); + cairo_translate (cr, priv->origin_x, priv->origin_y); + eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE); magnify_bounds (widget, &bounds, &large_bounds, 1.5); @@ -519,6 +535,8 @@ render_locked_key (GtkWidget *widget, GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region); cairo_t *cr = gdk_drawing_context_get_cairo_context (context); + cairo_translate (cr, priv->origin_x, priv->origin_y); + eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE); cairo_translate (cr, bounds.x, bounds.y); @@ -542,6 +560,8 @@ render_released_key (GtkWidget *widget, GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region); cairo_t *cr = gdk_drawing_context_get_cairo_context (context); + cairo_translate (cr, priv->origin_x, priv->origin_y); + eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE); magnify_bounds (widget, &bounds, &large_bounds, 1.5);