Draw key with icon if EekSymbol has "icon-name" property.
This commit is contained in:
@ -350,9 +350,8 @@ render_key (EekRenderer *self,
|
||||
EekOutline *outline;
|
||||
cairo_surface_t *outline_surface;
|
||||
EekBounds bounds;
|
||||
PangoLayout *layout;
|
||||
PangoRectangle extents = { 0, };
|
||||
gulong oref;
|
||||
EekSymbol *symbol;
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
|
||||
oref = eek_key_get_oref (key);
|
||||
@ -381,7 +380,7 @@ render_key (EekRenderer *self,
|
||||
bounds.height * priv->scale);
|
||||
cairo_fill (cr);
|
||||
|
||||
render_key_outline (self, cr, key);
|
||||
eek_renderer_render_key_outline (self, cr, key, 1.0, 0);
|
||||
|
||||
g_hash_table_insert (priv->outline_surface_cache,
|
||||
outline,
|
||||
@ -391,31 +390,41 @@ render_key (EekRenderer *self,
|
||||
cairo_set_source_surface (cr, outline_surface, 0.0, 0.0);
|
||||
cairo_paint (cr);
|
||||
|
||||
layout = pango_cairo_create_layout (cr);
|
||||
eek_renderer_real_render_key_label (self, layout, key);
|
||||
pango_layout_get_extents (layout, NULL, &extents);
|
||||
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
|
||||
if (EEK_RENDERER_GET_CLASS(self)->render_key_icon &&
|
||||
symbol && eek_symbol_get_icon_name (symbol)) {
|
||||
eek_renderer_render_key_icon (self, cr, key, 1.0, 0);
|
||||
} else {
|
||||
PangoLayout *layout;
|
||||
PangoRectangle extents = { 0, };
|
||||
|
||||
cairo_save (cr);
|
||||
cairo_move_to
|
||||
(cr,
|
||||
(bounds.width * priv->scale - extents.width / PANGO_SCALE) / 2,
|
||||
(bounds.height * priv->scale - extents.height / PANGO_SCALE) / 2);
|
||||
cairo_set_source_rgba (cr,
|
||||
priv->foreground->red,
|
||||
priv->foreground->green,
|
||||
priv->foreground->blue,
|
||||
priv->foreground->alpha);
|
||||
pango_cairo_show_layout (cr, layout);
|
||||
cairo_restore (cr);
|
||||
g_object_unref (layout);
|
||||
layout = pango_cairo_create_layout (cr);
|
||||
eek_renderer_render_key_label (self, layout, key);
|
||||
pango_layout_get_extents (layout, NULL, &extents);
|
||||
|
||||
cairo_save (cr);
|
||||
cairo_move_to
|
||||
(cr,
|
||||
(bounds.width * priv->scale - extents.width / PANGO_SCALE) / 2,
|
||||
(bounds.height * priv->scale - extents.height / PANGO_SCALE) / 2);
|
||||
cairo_set_source_rgba (cr,
|
||||
priv->foreground->red,
|
||||
priv->foreground->green,
|
||||
priv->foreground->blue,
|
||||
priv->foreground->alpha);
|
||||
|
||||
pango_cairo_show_layout (cr, layout);
|
||||
cairo_restore (cr);
|
||||
g_object_unref (layout);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
prepare_render_key (EekRenderer *self,
|
||||
cairo_t *cr,
|
||||
EekKey *key,
|
||||
gdouble scale,
|
||||
gboolean rotate)
|
||||
void
|
||||
eek_renderer_apply_transformation_for_key (EekRenderer *self,
|
||||
cairo_t *cr,
|
||||
EekKey *key,
|
||||
gdouble scale,
|
||||
gboolean rotate)
|
||||
{
|
||||
EekElement *section;
|
||||
EekBounds bounds, rotated_bounds;
|
||||
@ -500,7 +509,7 @@ eek_renderer_real_render_key_outline (EekRenderer *self,
|
||||
gboolean rotate)
|
||||
{
|
||||
cairo_save (cr);
|
||||
prepare_render_key (self, cr, key, scale, rotate);
|
||||
eek_renderer_apply_transformation_for_key (self, cr, key, scale, rotate);
|
||||
render_key_outline (self, cr, key);
|
||||
cairo_restore (cr);
|
||||
}
|
||||
@ -513,7 +522,7 @@ eek_renderer_real_render_key (EekRenderer *self,
|
||||
gboolean rotate)
|
||||
{
|
||||
cairo_save (cr);
|
||||
prepare_render_key (self, cr, key, scale, rotate);
|
||||
eek_renderer_apply_transformation_for_key (self, cr, key, scale, rotate);
|
||||
render_key (self, cr, key);
|
||||
cairo_restore (cr);
|
||||
}
|
||||
@ -857,6 +866,24 @@ eek_renderer_render_key_outline (EekRenderer *renderer,
|
||||
rotate);
|
||||
}
|
||||
|
||||
void
|
||||
eek_renderer_render_key_icon (EekRenderer *renderer,
|
||||
cairo_t *cr,
|
||||
EekKey *key,
|
||||
gdouble scale,
|
||||
gboolean rotate)
|
||||
{
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (EEK_IS_KEY(key));
|
||||
g_return_if_fail (scale >= 0.0);
|
||||
|
||||
EEK_RENDERER_GET_CLASS(renderer)->render_key_icon (renderer,
|
||||
cr,
|
||||
key,
|
||||
scale,
|
||||
rotate);
|
||||
}
|
||||
|
||||
void
|
||||
eek_renderer_render_key (EekRenderer *renderer,
|
||||
cairo_t *cr,
|
||||
|
||||
Reference in New Issue
Block a user