From ea15f69e735fdfff0ab083c37409ae5c1f25b667 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Wed, 24 Jul 2019 13:10:33 +0000 Subject: [PATCH] Render the keyboard to a subsurface of the widget --- eek/eek-renderer.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index eeb7cc3d..0b3f9652 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -147,8 +147,8 @@ create_keyboard_surface_section_callback (EekElement *element, cairo_restore (data->cr); } -static cairo_surface_t * -create_keyboard_surface (EekRenderer *renderer) +void +render_keyboard_surface (EekRenderer *renderer) { EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); EekBounds bounds; @@ -165,14 +165,7 @@ create_keyboard_surface (EekRenderer *renderer) eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds); - /* Create a surface that encompasses the dimensions of the keyboard as well - as the margin around the edge. */ - keyboard_surface = cairo_image_surface_create ( - CAIRO_FORMAT_ARGB32, - ceil(((bounds.x * 2) + bounds.width) * priv->scale), - ceil(((bounds.y * 2) + bounds.height) * priv->scale)); - - data.cr = cairo_create (keyboard_surface); + data.cr = cairo_create (priv->keyboard_surface); data.renderer = renderer; cairo_translate (data.cr, bounds.x * priv->scale, bounds.y * priv->scale); @@ -196,8 +189,6 @@ create_keyboard_surface (EekRenderer *renderer) create_keyboard_surface_section_callback, &data); cairo_destroy (data.cr); - - return keyboard_surface; } static void @@ -706,8 +697,13 @@ eek_renderer_real_render_keyboard (EekRenderer *self, g_return_if_fail (priv->allocation_width > 0.0); g_return_if_fail (priv->allocation_height > 0.0); - if (!priv->keyboard_surface) - priv->keyboard_surface = create_keyboard_surface (self); + if (!priv->keyboard_surface) { + priv->keyboard_surface = cairo_surface_create_for_rectangle ( + cairo_get_target (cr), 0, 0, + priv->allocation_width, priv->allocation_height); + } + + render_keyboard_surface (self); cairo_set_source_surface (cr, priv->keyboard_surface, 0.0, 0.0); source = cairo_get_source (cr);