Start to refactor keyboard section layout
This commit is contained in:
@ -1162,12 +1162,37 @@ static void section_placer(EekElement *element, gpointer user_data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void section_counter(EekElement *element, gpointer user_data) {
|
static void section_counter(EekElement *element, gpointer user_data) {
|
||||||
|
|
||||||
double *total_height = user_data;
|
double *total_height = user_data;
|
||||||
EekBounds section_bounds = {0};
|
EekBounds section_bounds = {0};
|
||||||
eek_element_get_bounds(element, §ion_bounds);
|
eek_element_get_bounds(element, §ion_bounds);
|
||||||
*total_height += section_bounds.height + section_spacing;
|
*total_height += section_bounds.height + section_spacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void place_sections(EekKeyboard *keyboard)
|
||||||
|
{
|
||||||
|
/* Order rows */
|
||||||
|
// This needs to be done after outlines, because outlines define key sizes
|
||||||
|
// TODO: do this only for rows without bounds
|
||||||
|
|
||||||
|
// The keyboard width is given by the user via screen size. The height will be given dynamically.
|
||||||
|
// TODO: calculate max line width beforehand for button centering. Leave keyboard centering to the renderer later
|
||||||
|
EekBounds keyboard_bounds = {0};
|
||||||
|
eek_element_get_bounds(EEK_ELEMENT(keyboard), &keyboard_bounds);
|
||||||
|
|
||||||
|
struct place_data placer_data = {
|
||||||
|
.desired_width = keyboard_bounds.width,
|
||||||
|
.current_offset = 0,
|
||||||
|
.keyboard = keyboard,
|
||||||
|
};
|
||||||
|
eek_container_foreach_child(EEK_CONTAINER(keyboard), section_placer, &placer_data);
|
||||||
|
|
||||||
|
double total_height = 0;
|
||||||
|
eek_container_foreach_child(EEK_CONTAINER(keyboard), section_counter, &total_height);
|
||||||
|
keyboard_bounds.height = total_height;
|
||||||
|
eek_element_set_bounds(EEK_ELEMENT(keyboard), &keyboard_bounds);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
parse_geometry (const gchar *path, EekKeyboard *keyboard, GError **error)
|
parse_geometry (const gchar *path, EekKeyboard *keyboard, GError **error)
|
||||||
{
|
{
|
||||||
@ -1222,26 +1247,7 @@ parse_geometry (const gchar *path, EekKeyboard *keyboard, GError **error)
|
|||||||
}
|
}
|
||||||
g_hash_table_destroy (oref_hash);
|
g_hash_table_destroy (oref_hash);
|
||||||
|
|
||||||
/* Order rows */
|
place_sections(keyboard);
|
||||||
// This needs to be done after outlines, because outlines define key sizes
|
|
||||||
// TODO: do this only for rows without bounds
|
|
||||||
|
|
||||||
// The keyboard width is given by the user via screen size. The height will be given dynamically.
|
|
||||||
// TODO: calculate max line width beforehand for button centering. Leave keyboard centering to the renderer later
|
|
||||||
EekBounds keyboard_bounds = {0};
|
|
||||||
eek_element_get_bounds(EEK_ELEMENT(keyboard), &keyboard_bounds);
|
|
||||||
|
|
||||||
struct place_data placer_data = {
|
|
||||||
.desired_width = keyboard_bounds.width,
|
|
||||||
.current_offset = 0,
|
|
||||||
.keyboard = keyboard,
|
|
||||||
};
|
|
||||||
eek_container_foreach_child(EEK_CONTAINER(keyboard), section_placer, &placer_data);
|
|
||||||
|
|
||||||
double total_height = 0;
|
|
||||||
eek_container_foreach_child(EEK_CONTAINER(keyboard), section_counter, &total_height);
|
|
||||||
keyboard_bounds.height = total_height;
|
|
||||||
eek_element_set_bounds(EEK_ELEMENT(keyboard), &keyboard_bounds);
|
|
||||||
|
|
||||||
geometry_parse_data_free (data);
|
geometry_parse_data_free (data);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
Reference in New Issue
Block a user