Render the keyboard to a subsurface of the widget
This commit is contained in:
		@ -147,8 +147,8 @@ create_keyboard_surface_section_callback (EekElement *element,
 | 
				
			|||||||
    cairo_restore (data->cr);
 | 
					    cairo_restore (data->cr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static cairo_surface_t *
 | 
					void
 | 
				
			||||||
create_keyboard_surface (EekRenderer *renderer)
 | 
					render_keyboard_surface (EekRenderer *renderer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
					    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
				
			||||||
    EekBounds bounds;
 | 
					    EekBounds bounds;
 | 
				
			||||||
@ -165,14 +165,7 @@ create_keyboard_surface (EekRenderer *renderer)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
					    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Create a surface that encompasses the dimensions of the keyboard as well
 | 
					    data.cr = cairo_create (priv->keyboard_surface);
 | 
				
			||||||
       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.renderer = renderer;
 | 
					    data.renderer = renderer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cairo_translate (data.cr, bounds.x * priv->scale, bounds.y * priv->scale);
 | 
					    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,
 | 
					                                 create_keyboard_surface_section_callback,
 | 
				
			||||||
                                 &data);
 | 
					                                 &data);
 | 
				
			||||||
    cairo_destroy (data.cr);
 | 
					    cairo_destroy (data.cr);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return keyboard_surface;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					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_width > 0.0);
 | 
				
			||||||
    g_return_if_fail (priv->allocation_height > 0.0);
 | 
					    g_return_if_fail (priv->allocation_height > 0.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!priv->keyboard_surface)
 | 
					    if (!priv->keyboard_surface) {
 | 
				
			||||||
        priv->keyboard_surface = create_keyboard_surface (self);
 | 
					        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);
 | 
					    cairo_set_source_surface (cr, priv->keyboard_surface, 0.0, 0.0);
 | 
				
			||||||
    source = cairo_get_source (cr);
 | 
					    source = cairo_get_source (cr);
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user