levelkeyboard: Use a layer for managing keyboard views
This commit is contained in:
		@ -32,7 +32,6 @@
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
    PROP_KEYBOARD,
 | 
			
		||||
    PROP_PCONTEXT,
 | 
			
		||||
    PROP_STYLE_CONTEXT,
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
@ -40,7 +39,7 @@ enum {
 | 
			
		||||
 | 
			
		||||
typedef struct _EekRendererPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    LevelKeyboard *keyboard;
 | 
			
		||||
    PangoContext *pcontext;
 | 
			
		||||
    GtkCssProvider *css_provider;
 | 
			
		||||
    GtkStyleContext *scontext;
 | 
			
		||||
@ -149,7 +148,7 @@ render_keyboard_surface (EekRenderer *renderer)
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_foreground_color (renderer, priv->scontext, &foreground);
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)), &bounds);
 | 
			
		||||
 | 
			
		||||
    data.cr = cairo_create (priv->keyboard_surface);
 | 
			
		||||
    data.renderer = renderer;
 | 
			
		||||
@ -176,7 +175,7 @@ render_keyboard_surface (EekRenderer *renderer)
 | 
			
		||||
 | 
			
		||||
    data.level = priv->keyboard->level;
 | 
			
		||||
    /* draw sections */
 | 
			
		||||
    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
			
		||||
    eek_container_foreach_child (EEK_CONTAINER(level_keyboard_current(priv->keyboard)),
 | 
			
		||||
                                 create_keyboard_surface_section_callback,
 | 
			
		||||
                                 &data);
 | 
			
		||||
    cairo_restore (data.cr);
 | 
			
		||||
@ -196,7 +195,7 @@ render_key_outline (EekRenderer *renderer,
 | 
			
		||||
    guint oref;
 | 
			
		||||
 | 
			
		||||
    oref = eek_key_get_oref (key);
 | 
			
		||||
    outline = eek_keyboard_get_outline (priv->keyboard, oref);
 | 
			
		||||
    outline = level_keyboard_get_outline (priv->keyboard, oref);
 | 
			
		||||
    if (outline == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
@ -231,7 +230,7 @@ render_key (EekRenderer *self,
 | 
			
		||||
    EekColor foreground;
 | 
			
		||||
 | 
			
		||||
    oref = eek_key_get_oref (key);
 | 
			
		||||
    outline = eek_keyboard_get_outline (priv->keyboard, oref);
 | 
			
		||||
    outline = level_keyboard_get_outline (priv->keyboard, oref);
 | 
			
		||||
    if (outline == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
@ -524,10 +523,6 @@ eek_renderer_set_property (GObject      *object,
 | 
			
		||||
		    EEK_RENDERER(object));
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEYBOARD:
 | 
			
		||||
        priv->keyboard = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->keyboard);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_PCONTEXT:
 | 
			
		||||
        priv->pcontext = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->pcontext);
 | 
			
		||||
@ -548,13 +543,7 @@ eek_renderer_get_property (GObject    *object,
 | 
			
		||||
                           GValue     *value,
 | 
			
		||||
                           GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (
 | 
			
		||||
		    EEK_RENDERER(object));
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEYBOARD:
 | 
			
		||||
        g_value_set_object (value, priv->keyboard);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        break;
 | 
			
		||||
@ -568,7 +557,6 @@ eek_renderer_dispose (GObject *object)
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
    if (priv->keyboard) {
 | 
			
		||||
        g_object_unref (priv->keyboard);
 | 
			
		||||
        priv->keyboard = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    if (priv->pcontext) {
 | 
			
		||||
@ -612,15 +600,6 @@ eek_renderer_class_init (EekRendererClass *klass)
 | 
			
		||||
    gobject_class->dispose = eek_renderer_dispose;
 | 
			
		||||
    gobject_class->finalize = eek_renderer_finalize;
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("keyboard",
 | 
			
		||||
                                 "Keyboard",
 | 
			
		||||
                                 "Keyboard",
 | 
			
		||||
                                 EEK_TYPE_KEYBOARD,
 | 
			
		||||
                                 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_KEYBOARD,
 | 
			
		||||
                                     pspec);
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("pango-context",
 | 
			
		||||
                                 "Pango Context",
 | 
			
		||||
                                 "Pango Context",
 | 
			
		||||
@ -712,15 +691,17 @@ invalidate (EekRenderer *renderer)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EekRenderer *
 | 
			
		||||
eek_renderer_new (EekKeyboard  *keyboard,
 | 
			
		||||
eek_renderer_new (LevelKeyboard  *keyboard,
 | 
			
		||||
                  PangoContext *pcontext,
 | 
			
		||||
                  GtkStyleContext *scontext)
 | 
			
		||||
{
 | 
			
		||||
    return g_object_new (EEK_TYPE_RENDERER,
 | 
			
		||||
                         "keyboard", keyboard,
 | 
			
		||||
    EekRenderer *renderer = g_object_new (EEK_TYPE_RENDERER,
 | 
			
		||||
                         "pango-context", pcontext,
 | 
			
		||||
                         "style-context", scontext,
 | 
			
		||||
                         NULL);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
    priv->keyboard = keyboard;
 | 
			
		||||
    return renderer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@ -741,7 +722,7 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
 | 
			
		||||
 | 
			
		||||
    /* Calculate a scale factor to use when rendering the keyboard into the
 | 
			
		||||
       available space. */
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)), &bounds);
 | 
			
		||||
 | 
			
		||||
    gdouble w = (bounds.x * 2) + bounds.width;
 | 
			
		||||
    gdouble h = (bounds.y * 2) + bounds.height;
 | 
			
		||||
@ -766,7 +747,7 @@ eek_renderer_get_size (EekRenderer *renderer,
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)), &bounds);
 | 
			
		||||
    if (width)
 | 
			
		||||
        *width = bounds.width;
 | 
			
		||||
    if (height)
 | 
			
		||||
@ -794,7 +775,7 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(key), bounds);
 | 
			
		||||
    eek_element_get_bounds (section, §ion_bounds);
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard),
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)),
 | 
			
		||||
                            &keyboard_bounds);
 | 
			
		||||
 | 
			
		||||
    if (!rotate) {
 | 
			
		||||
@ -1085,7 +1066,7 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)), &bounds);
 | 
			
		||||
 | 
			
		||||
    /* Transform from widget coordinates to keyboard coordinates */
 | 
			
		||||
    x = (x - priv->origin_x)/priv->scale - bounds.x;
 | 
			
		||||
@ -1104,7 +1085,7 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
 | 
			
		||||
    data.key = NULL;
 | 
			
		||||
    data.renderer = renderer;
 | 
			
		||||
 | 
			
		||||
    eek_container_find (EEK_CONTAINER(priv->keyboard),
 | 
			
		||||
    eek_container_find (EEK_CONTAINER(level_keyboard_current(priv->keyboard)),
 | 
			
		||||
                        find_key_by_position_section_callback,
 | 
			
		||||
                        &data);
 | 
			
		||||
    return data.key;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user