Honor the outputs scale factor
This commit is contained in:
@ -124,6 +124,8 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
|
|||||||
eek_renderer_set_allocation_size (priv->renderer,
|
eek_renderer_set_allocation_size (priv->renderer,
|
||||||
allocation.width,
|
allocation.width,
|
||||||
allocation.height);
|
allocation.height);
|
||||||
|
eek_renderer_set_scale_factor (priv->renderer,
|
||||||
|
gtk_widget_get_scale_factor (self));
|
||||||
}
|
}
|
||||||
|
|
||||||
eek_renderer_render_keyboard (priv->renderer, cr);
|
eek_renderer_render_keyboard (priv->renderer, cr);
|
||||||
|
|||||||
@ -48,6 +48,7 @@ typedef struct _EekRendererPrivate
|
|||||||
gdouble allocation_width;
|
gdouble allocation_width;
|
||||||
gdouble allocation_height;
|
gdouble allocation_height;
|
||||||
gdouble scale;
|
gdouble scale;
|
||||||
|
gint scale_factor; /* the outputs scale factor */
|
||||||
|
|
||||||
PangoFontDescription *ascii_font;
|
PangoFontDescription *ascii_font;
|
||||||
PangoFontDescription *font;
|
PangoFontDescription *font;
|
||||||
@ -499,20 +500,20 @@ render_key (EekRenderer *self,
|
|||||||
|
|
||||||
#define SCALE 0.4
|
#define SCALE 0.4
|
||||||
if (eek_symbol_get_icon_name (symbol)) {
|
if (eek_symbol_get_icon_name (symbol)) {
|
||||||
|
gint scale = priv->scale_factor;
|
||||||
cairo_surface_t *icon_surface =
|
cairo_surface_t *icon_surface =
|
||||||
eek_renderer_get_icon_surface (self,
|
eek_renderer_get_icon_surface (self,
|
||||||
eek_symbol_get_icon_name (symbol),
|
eek_symbol_get_icon_name (symbol),
|
||||||
MIN(bounds.width, bounds.height),
|
MIN(bounds.width, bounds.height),
|
||||||
1);
|
scale);
|
||||||
if (icon_surface) {
|
if (icon_surface) {
|
||||||
gint width = cairo_image_surface_get_width (icon_surface);
|
gint width = cairo_image_surface_get_width (icon_surface);
|
||||||
gint height = cairo_image_surface_get_height (icon_surface);
|
gint height = cairo_image_surface_get_height (icon_surface);
|
||||||
|
|
||||||
cairo_save (cr);
|
cairo_save (cr);
|
||||||
cairo_translate (cr,
|
cairo_translate (cr,
|
||||||
(bounds.width - width * SCALE) / 2,
|
(bounds.width - width * SCALE / scale) / 2,
|
||||||
(bounds.height - height * SCALE) / 2);
|
(bounds.height - height * SCALE / scale) / 2);
|
||||||
cairo_rectangle (cr, 0, 0, width, height);
|
cairo_rectangle (cr, 0, 0, width, height);
|
||||||
cairo_scale (cr, SCALE, SCALE);
|
cairo_scale (cr, SCALE, SCALE);
|
||||||
cairo_clip (cr);
|
cairo_clip (cr);
|
||||||
@ -845,6 +846,7 @@ eek_renderer_init (EekRenderer *self)
|
|||||||
priv->allocation_width = 0.0;
|
priv->allocation_width = 0.0;
|
||||||
priv->allocation_height = 0.0;
|
priv->allocation_height = 0.0;
|
||||||
priv->scale = 1.0;
|
priv->scale = 1.0;
|
||||||
|
priv->scale_factor = 1;
|
||||||
priv->font = NULL;
|
priv->font = NULL;
|
||||||
priv->outline_surface_cache =
|
priv->outline_surface_cache =
|
||||||
g_hash_table_new_full (g_direct_hash,
|
g_hash_table_new_full (g_direct_hash,
|
||||||
@ -1029,6 +1031,15 @@ eek_renderer_get_scale (EekRenderer *renderer)
|
|||||||
return priv->scale;
|
return priv->scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
eek_renderer_set_scale_factor (EekRenderer *renderer, gint scale)
|
||||||
|
{
|
||||||
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
priv->scale_factor = scale;
|
||||||
|
}
|
||||||
|
|
||||||
PangoLayout *
|
PangoLayout *
|
||||||
eek_renderer_create_pango_layout (EekRenderer *renderer)
|
eek_renderer_create_pango_layout (EekRenderer *renderer)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -82,6 +82,8 @@ void eek_renderer_get_key_bounds (EekRenderer *renderer,
|
|||||||
gboolean rotate);
|
gboolean rotate);
|
||||||
|
|
||||||
gdouble eek_renderer_get_scale (EekRenderer *renderer);
|
gdouble eek_renderer_get_scale (EekRenderer *renderer);
|
||||||
|
void eek_renderer_set_scale_factor (EekRenderer *renderer,
|
||||||
|
gint scale);
|
||||||
|
|
||||||
PangoLayout *eek_renderer_create_pango_layout
|
PangoLayout *eek_renderer_create_pango_layout
|
||||||
(EekRenderer *renderer);
|
(EekRenderer *renderer);
|
||||||
|
|||||||
Reference in New Issue
Block a user