level: Make keyboard the only source of level data
This commit is contained in:
		@ -79,12 +79,12 @@ extern void _eek_rounded_polygon               (cairo_t     *cr,
 | 
			
		||||
 | 
			
		||||
static void eek_renderer_real_render_key_label (EekRenderer *self,
 | 
			
		||||
                                                PangoLayout *layout,
 | 
			
		||||
                                                EekKey      *key);
 | 
			
		||||
                                                EekKey      *key, guint level);
 | 
			
		||||
 | 
			
		||||
static void invalidate                         (EekRenderer *renderer);
 | 
			
		||||
static void render_key                         (EekRenderer *self,
 | 
			
		||||
                                                cairo_t     *cr,
 | 
			
		||||
                                                EekKey      *key,
 | 
			
		||||
                                                EekKey      *key, guint level,
 | 
			
		||||
                                                gboolean     active);
 | 
			
		||||
static void on_symbol_index_changed            (EekKeyboard *keyboard,
 | 
			
		||||
                                                gint         group,
 | 
			
		||||
@ -94,6 +94,7 @@ static void on_symbol_index_changed            (EekKeyboard *keyboard,
 | 
			
		||||
struct _CreateKeyboardSurfaceCallbackData {
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
    EekRenderer *renderer;
 | 
			
		||||
    uint level;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _CreateKeyboardSurfaceCallbackData CreateKeyboardSurfaceCallbackData;
 | 
			
		||||
 | 
			
		||||
@ -114,7 +115,7 @@ create_keyboard_surface_key_callback (EekElement *element,
 | 
			
		||||
                     bounds.width + 100,
 | 
			
		||||
                     bounds.height + 100);
 | 
			
		||||
    cairo_clip (data->cr);
 | 
			
		||||
    render_key (data->renderer, data->cr, EEK_KEY(element), FALSE);
 | 
			
		||||
    render_key (data->renderer, data->cr, EEK_KEY(element), data->level, FALSE);
 | 
			
		||||
 | 
			
		||||
    cairo_restore (data->cr);
 | 
			
		||||
}
 | 
			
		||||
@ -177,6 +178,7 @@ render_keyboard_surface (EekRenderer *renderer)
 | 
			
		||||
                           foreground.blue,
 | 
			
		||||
                           foreground.alpha);
 | 
			
		||||
 | 
			
		||||
    data.level = eek_element_get_level(EEK_ELEMENT(priv->keyboard));
 | 
			
		||||
    /* draw sections */
 | 
			
		||||
    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
			
		||||
                                 create_keyboard_surface_section_callback,
 | 
			
		||||
@ -218,6 +220,7 @@ static void
 | 
			
		||||
render_key (EekRenderer *self,
 | 
			
		||||
            cairo_t     *cr,
 | 
			
		||||
            EekKey      *key,
 | 
			
		||||
            guint        level,
 | 
			
		||||
            gboolean     active)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
			
		||||
@ -225,7 +228,7 @@ render_key (EekRenderer *self,
 | 
			
		||||
    cairo_surface_t *outline_surface;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    guint oref;
 | 
			
		||||
    EekSymbol *symbol;
 | 
			
		||||
    struct squeek_symbol *symbol;
 | 
			
		||||
    GHashTable *outline_surface_cache;
 | 
			
		||||
    PangoLayout *layout;
 | 
			
		||||
    PangoRectangle extents = { 0, };
 | 
			
		||||
@ -277,12 +280,7 @@ render_key (EekRenderer *self,
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_foreground_color (self, priv->key_context, &foreground);
 | 
			
		||||
    /* render icon (if any) */
 | 
			
		||||
 | 
			
		||||
    EekSection *section = EEK_SECTION(eek_element_get_parent(EEK_ELEMENT(key)));
 | 
			
		||||
    gint group = eek_element_get_group(EEK_ELEMENT(section));
 | 
			
		||||
    gint level = eek_element_get_level(EEK_ELEMENT(section));
 | 
			
		||||
 | 
			
		||||
    symbol = eek_key_get_symbol_at_index (key, group, level, 0, 0);
 | 
			
		||||
    symbol = eek_key_get_symbol_at_index (key, 0, level, 0, 0);
 | 
			
		||||
    if (!symbol)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
@ -318,7 +316,7 @@ render_key (EekRenderer *self,
 | 
			
		||||
 | 
			
		||||
    /* render label */
 | 
			
		||||
    layout = pango_cairo_create_layout (cr);
 | 
			
		||||
    eek_renderer_real_render_key_label (self, layout, key);
 | 
			
		||||
    eek_renderer_real_render_key_label (self, layout, key, level);
 | 
			
		||||
    pango_layout_get_extents (layout, NULL, &extents);
 | 
			
		||||
 | 
			
		||||
    cairo_save (cr);
 | 
			
		||||
@ -385,17 +383,18 @@ eek_renderer_apply_transformation_for_key (EekRenderer *self,
 | 
			
		||||
static void
 | 
			
		||||
eek_renderer_real_render_key_label (EekRenderer *self,
 | 
			
		||||
                                    PangoLayout *layout,
 | 
			
		||||
                                    EekKey      *key)
 | 
			
		||||
                                    EekKey      *key,
 | 
			
		||||
                                    guint        level)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
			
		||||
    EekSymbol *symbol;
 | 
			
		||||
    struct squeek_symbol *symbol;
 | 
			
		||||
    const gchar *label;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    PangoFontDescription *font;
 | 
			
		||||
    PangoLayoutLine *line;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
			
		||||
    symbol = eek_key_get_symbol_at_index(key, 0, level, 0, 0);
 | 
			
		||||
    if (!symbol)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
@ -466,6 +465,7 @@ static void
 | 
			
		||||
eek_renderer_real_render_key (EekRenderer *self,
 | 
			
		||||
                              cairo_t     *cr,
 | 
			
		||||
                              EekKey      *key,
 | 
			
		||||
                              guint        level,
 | 
			
		||||
                              gdouble      scale,
 | 
			
		||||
                              gboolean     rotate)
 | 
			
		||||
{
 | 
			
		||||
@ -482,7 +482,7 @@ eek_renderer_real_render_key (EekRenderer *self,
 | 
			
		||||
    cairo_translate (cr, bounds.x, bounds.y);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_apply_transformation_for_key (self, cr, key, scale, rotate);
 | 
			
		||||
    render_key (self, cr, key, eek_key_is_pressed (key) || eek_key_is_locked (key));
 | 
			
		||||
    render_key (self, cr, key, level, eek_key_is_pressed (key) || eek_key_is_locked (key));
 | 
			
		||||
    cairo_restore (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -942,6 +942,7 @@ void
 | 
			
		||||
eek_renderer_render_key (EekRenderer *renderer,
 | 
			
		||||
                         cairo_t     *cr,
 | 
			
		||||
                         EekKey      *key,
 | 
			
		||||
                         guint        level,
 | 
			
		||||
                         gdouble      scale,
 | 
			
		||||
                         gboolean     rotate)
 | 
			
		||||
{
 | 
			
		||||
@ -950,7 +951,7 @@ eek_renderer_render_key (EekRenderer *renderer,
 | 
			
		||||
    g_return_if_fail (scale >= 0.0);
 | 
			
		||||
 | 
			
		||||
    EEK_RENDERER_GET_CLASS(renderer)->
 | 
			
		||||
        render_key (renderer, cr, key, scale, rotate);
 | 
			
		||||
        render_key (renderer, cr, key, level, scale, rotate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user