scaling: Keep proportions of labels and icons when stretching layouts
Before this change, the labels and icons were stretched along with the layout. Part-of: <https://gitlab.gnome.org/World/Phosh/squeekboard/-/merge_requests/686>
This commit is contained in:
committed by
Marge Bot
parent
96824b7c6e
commit
95be96d27e
@ -56,13 +56,20 @@ render_outline (cairo_t *cr,
|
||||
position.x, position.y, position.width, position.height);
|
||||
}
|
||||
|
||||
float get_scale(cairo_t *cr) {
|
||||
double get_scale_width(cairo_t *cr) {
|
||||
double width = 1;
|
||||
double height = 1;
|
||||
cairo_user_to_device_distance (cr, &width, &height);
|
||||
return width;
|
||||
}
|
||||
|
||||
double get_scale_height(cairo_t *cr) {
|
||||
double width = 1;
|
||||
double height = 1;
|
||||
cairo_user_to_device_distance (cr, &width, &height);
|
||||
return height;
|
||||
}
|
||||
|
||||
/// Rust interface
|
||||
void eek_render_button_in_context(uint32_t scale_factor,
|
||||
cairo_t *cr,
|
||||
@ -79,11 +86,15 @@ void eek_render_button_in_context(uint32_t scale_factor,
|
||||
|
||||
/* render icon (if any) */
|
||||
if (icon_name) {
|
||||
int context_scale = ceil (get_scale (cr));
|
||||
int context_scale = ceil (get_scale_width (cr));
|
||||
|
||||
double scale_x = get_scale_width (cr);
|
||||
double scale_y = get_scale_height (cr);
|
||||
|
||||
cairo_surface_t *icon_surface =
|
||||
eek_renderer_get_icon_surface (icon_name, 16, scale_factor * context_scale);
|
||||
if (icon_surface) {
|
||||
double width = cairo_image_surface_get_width (icon_surface);
|
||||
double width = cairo_image_surface_get_width (icon_surface) * scale_y / scale_x ;
|
||||
double height = cairo_image_surface_get_height (icon_surface);
|
||||
|
||||
cairo_save (cr);
|
||||
@ -96,6 +107,9 @@ void eek_render_button_in_context(uint32_t scale_factor,
|
||||
GdkRGBA color = {0};
|
||||
gtk_style_context_get_color (ctx, GTK_STATE_FLAG_NORMAL, &color);
|
||||
|
||||
// Unstretch icons, when the layout is stretched.
|
||||
cairo_scale (cr, scale_y / scale_x, 1.0);
|
||||
|
||||
cairo_set_source_rgba (cr, color.red,
|
||||
color.green,
|
||||
color.blue,
|
||||
@ -190,6 +204,13 @@ render_button_label (cairo_t *cr,
|
||||
GdkRGBA color = {0};
|
||||
gtk_style_context_get_color (ctx, GTK_STATE_FLAG_NORMAL, &color);
|
||||
|
||||
double scale_x = get_scale_width (cr);
|
||||
double scale_y = get_scale_height (cr);
|
||||
|
||||
// Unstretch labels, when the layout is stretched.
|
||||
cairo_scale (cr, scale_y / scale_x, 1.0);
|
||||
pango_cairo_update_layout (cr, layout);
|
||||
|
||||
cairo_set_source_rgba (cr,
|
||||
color.red,
|
||||
color.green,
|
||||
|
||||
Reference in New Issue
Block a user