section: Moved bounds to row

This commit is contained in:
Dorota Czaplejewicz
2019-08-15 17:57:33 +00:00
parent 4f8de42598
commit 0d33179727
6 changed files with 56 additions and 34 deletions

View File

@ -60,17 +60,21 @@ section_placer(EekElement *element, gpointer user_data)
{
struct place_data *data = (struct place_data*)user_data;
EekBounds section_bounds = {0};
eek_element_get_bounds(element, &section_bounds);
section_bounds.width = data->desired_width;
eek_element_set_bounds(element, &section_bounds);
EekSection *section = EEK_SECTION(element);
EekBounds section_bounds = {
.x = 0,
.y = 0,
.width = data->desired_width,
.height = 0,
};
eek_section_set_bounds(section, section_bounds);
// Sections are rows now. Gather up all the keys and adjust their bounds.
eek_section_place_keys(EEK_SECTION(element), data->keyboard);
eek_element_get_bounds(element, &section_bounds);
section_bounds = eek_section_get_bounds(section);
section_bounds.y = data->current_offset;
eek_element_set_bounds(element, &section_bounds);
eek_section_set_bounds(section, section_bounds);
data->current_offset += section_bounds.height + section_spacing;
}
@ -78,8 +82,7 @@ static void
section_counter(EekElement *element, gpointer user_data) {
double *total_height = user_data;
EekBounds section_bounds = {0};
eek_element_get_bounds(element, &section_bounds);
EekBounds section_bounds = eek_section_get_bounds(EEK_SECTION(element));
*total_height += section_bounds.height + section_spacing;
}

View File

@ -122,19 +122,18 @@ create_keyboard_surface_section_callback (EekElement *element,
gpointer user_data)
{
CreateKeyboardSurfaceCallbackData *data = user_data;
EekBounds bounds;
EekSection *section = EEK_SECTION(element);
EekBounds bounds = eek_section_get_bounds(section);
gint angle;
cairo_save (data->cr);
eek_element_get_bounds (element, &bounds);
cairo_translate (data->cr, bounds.x, bounds.y);
angle = eek_section_get_angle (EEK_SECTION(element));
angle = eek_section_get_angle (section);
cairo_rotate (data->cr, angle * G_PI / 180);
data->section = EEK_SECTION(element);
eek_section_foreach(EEK_SECTION(element),
data->section = section;
eek_section_foreach(section,
create_keyboard_surface_button_callback,
data);
@ -761,7 +760,7 @@ eek_renderer_get_button_bounds (EekRenderer *renderer,
EekBounds *bounds,
gboolean rotate)
{
EekBounds section_bounds, keyboard_bounds;
EekBounds keyboard_bounds;
gint angle = 0;
EekPoint points[4], min, max;
@ -772,7 +771,7 @@ eek_renderer_get_button_bounds (EekRenderer *renderer,
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
EekBounds button_bounds = squeek_button_get_bounds(place->button);
eek_element_get_bounds (EEK_ELEMENT(place->section), &section_bounds);
EekBounds section_bounds = eek_section_get_bounds (place->section);
eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)),
&keyboard_bounds);
@ -792,7 +791,7 @@ eek_renderer_get_button_bounds (EekRenderer *renderer,
points[3].y = points[2].y;
if (rotate)
angle = eek_section_get_angle (EEK_SECTION(place->section));
angle = eek_section_get_angle (place->section);
min = points[2];
max = points[0];
@ -1028,14 +1027,13 @@ find_button_by_position_section_callback (EekElement *element,
{
EekSection *section = EEK_SECTION(element);
FindKeyByPositionCallbackData *data = user_data;
EekBounds bounds;
EekBounds bounds = eek_section_get_bounds(section);
EekPoint origin;
origin = data->origin;
eek_element_get_bounds (element, &bounds);
data->origin.x += bounds.x;
data->origin.y += bounds.y;
data->angle = eek_section_get_angle (EEK_SECTION(element));
data->angle = eek_section_get_angle(section);
eek_section_foreach(section, find_button_by_position_key_callback, data);
data->origin = origin;

View File

@ -164,14 +164,6 @@ eek_section_get_row (EekSection *section)
return priv->row;
}
const double keyspacing = 4.0;
struct keys_info {
uint count;
double total_width;
double biggest_height;
};
EekBounds eek_get_outline_size(LevelKeyboard *keyboard, uint32_t oref) {
EekOutline *outline = level_keyboard_get_outline (keyboard, oref);
if (outline && outline->num_points > 0) {
@ -206,7 +198,13 @@ EekBounds eek_get_outline_size(LevelKeyboard *keyboard, uint32_t oref) {
}
void eek_section_set_bounds(EekSection *section, EekBounds bounds) {
eek_element_set_bounds(EEK_ELEMENT(section), &bounds);
EekSectionPrivate *priv = eek_section_get_instance_private (section);
squeek_row_set_bounds(priv->row, bounds);
}
EekBounds eek_section_get_bounds(EekSection *section) {
EekSectionPrivate *priv = eek_section_get_instance_private (section);
return squeek_row_get_bounds(priv->row);
}
void
@ -214,15 +212,14 @@ eek_section_place_keys(EekSection *section, LevelKeyboard *keyboard)
{
EekSectionPrivate *priv = eek_section_get_instance_private (section);
EekBounds section_size = squeek_row_place_keys(priv->row, keyboard);
EekBounds section_bounds = {0};
eek_element_get_bounds(EEK_ELEMENT(section), &section_bounds);
EekBounds section_bounds = eek_section_get_bounds(section);
// FIXME: do centering of each section based on keyboard dimensions,
// one level up the iterators
// now centering by comparing previous width to the new, calculated one
section_bounds.x = (section_bounds.width - section_size.width) / 2;
section_bounds.width = section_size.width;
section_bounds.height = section_size.height;
eek_element_set_bounds(EEK_ELEMENT(section), &section_bounds);
eek_section_set_bounds(section, section_bounds);
}
void eek_section_foreach (EekSection *section,

View File

@ -83,5 +83,7 @@ gboolean eek_section_find(EekSection *section,
struct squeek_button *eek_section_find_key(EekSection *section,
struct squeek_key *key);
void eek_section_set_bounds(EekSection *section, EekBounds bounds);
EekBounds eek_section_get_bounds(EekSection *section);
G_END_DECLS
#endif /* EEK_SECTION_H */