Simplify layout and rendering
Remove pre-scaling of the bounds for the keyboard and its contents. Calculate the scale factor based on the allocation and the desired width and height of each keyboard, using the lower value of the horizontal and vertical scale factors. Apply scaling in the renderer and prepare to perform centering there.
This commit is contained in:
@ -129,60 +129,8 @@ eek_layout_place_sections(EekKeyboard *keyboard)
|
||||
eek_element_set_bounds(EEK_ELEMENT(keyboard), &keyboard_bounds);
|
||||
}
|
||||
|
||||
static void scale_bounds_callback (EekElement *element,
|
||||
gpointer user_data);
|
||||
|
||||
static void
|
||||
scale_bounds (EekElement *element,
|
||||
gdouble scale)
|
||||
{
|
||||
EekBounds bounds;
|
||||
|
||||
eek_element_get_bounds (element, &bounds);
|
||||
bounds.x *= scale;
|
||||
bounds.y *= scale;
|
||||
bounds.width *= scale;
|
||||
bounds.height *= scale;
|
||||
eek_element_set_bounds (element, &bounds);
|
||||
|
||||
if (EEK_IS_CONTAINER(element))
|
||||
eek_container_foreach_child (EEK_CONTAINER(element),
|
||||
scale_bounds_callback,
|
||||
&scale);
|
||||
}
|
||||
|
||||
static void
|
||||
scale_bounds_callback (EekElement *element,
|
||||
gpointer user_data)
|
||||
{
|
||||
scale_bounds (element, *(gdouble *)user_data);
|
||||
}
|
||||
|
||||
void
|
||||
eek_layout_scale_keyboard(EekKeyboard *keyboard, gdouble scale)
|
||||
{
|
||||
gsize n_outlines;
|
||||
|
||||
scale_bounds (EEK_ELEMENT(keyboard), scale);
|
||||
|
||||
n_outlines = eek_keyboard_get_n_outlines (keyboard);
|
||||
for (guint i = 0; i < n_outlines; i++) {
|
||||
EekOutline *outline = eek_keyboard_get_outline (keyboard, i);
|
||||
gint j;
|
||||
|
||||
for (j = 0; j < outline->num_points; j++) {
|
||||
outline->points[j].x *= scale;
|
||||
outline->points[j].y *= scale;
|
||||
}
|
||||
}
|
||||
|
||||
keyboard->scale = scale;
|
||||
}
|
||||
|
||||
void
|
||||
eek_layout_update_layout(EekKeyboard *keyboard)
|
||||
{
|
||||
eek_layout_scale_keyboard(keyboard, 1.0 / keyboard->scale);
|
||||
eek_layout_place_sections(keyboard);
|
||||
eek_layout_scale_keyboard(keyboard, 1.0 / keyboard->scale);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user