Semantic subtree positioning
This commit is contained in:
1 parent
9ed7d82d09
commit
e787d2dd3a
1 file changed
+21
@@ -172,6 +172,10 @@ struct GUI_Subtree {
|
|||||||
RDIC_Node_Reference relative_to;
|
RDIC_Node_Reference relative_to;
|
||||||
int flat_offset_x;
|
int flat_offset_x;
|
||||||
int flat_offset_y;
|
int flat_offset_y;
|
||||||
|
int offset_relative_node_percentage_x;
|
||||||
|
int offset_relative_node_percentage_y;
|
||||||
|
int offset_own_size_percentage_x;
|
||||||
|
int offset_own_size_percentage_y;
|
||||||
|
|
||||||
GUI_Draw_Command *first_draw_command;
|
GUI_Draw_Command *first_draw_command;
|
||||||
int num_draw_commands;
|
int num_draw_commands;
|
||||||
@@ -641,12 +645,23 @@ void gui_generate_draw_commands(
|
|||||||
x_offset = relative_rectangle->x0;
|
x_offset = relative_rectangle->x0;
|
||||||
y_offset = relative_rectangle->y0;
|
y_offset = relative_rectangle->y0;
|
||||||
//printf("%.*s: %d, %d\n", relative_node->debug_string.length, relative_node->debug_string.cstring, x_offset, y_offset);
|
//printf("%.*s: %d, %d\n", relative_node->debug_string.length, relative_node->debug_string.cstring, x_offset, y_offset);
|
||||||
|
int relative_width = relative_rectangle->x1 - relative_rectangle->x0;
|
||||||
|
int relative_height = relative_rectangle->y1 - relative_rectangle->y0;
|
||||||
|
x_offset +=
|
||||||
|
(relative_width * subtree->offset_relative_node_percentage_x) / 100;
|
||||||
|
y_offset +=
|
||||||
|
(relative_height * subtree->offset_relative_node_percentage_y) / 100;
|
||||||
}
|
}
|
||||||
x_offset += subtree->flat_offset_x;
|
x_offset += subtree->flat_offset_x;
|
||||||
y_offset += subtree->flat_offset_y;
|
y_offset += subtree->flat_offset_y;
|
||||||
|
|
||||||
GUI_Node *root = (GUI_Node*)subtree->rdic.root;
|
GUI_Node *root = (GUI_Node*)subtree->rdic.root;
|
||||||
assert(root != NULL);
|
assert(root != NULL);
|
||||||
|
x_offset +=
|
||||||
|
(root->computed_size[GUI_AXIS2_X] * subtree->offset_own_size_percentage_x) / 100;
|
||||||
|
y_offset +=
|
||||||
|
(root->computed_size[GUI_AXIS2_Y] * subtree->offset_own_size_percentage_y) / 100;
|
||||||
|
|
||||||
assert(draw_command_arena != NULL);
|
assert(draw_command_arena != NULL);
|
||||||
assert(out_num_draw_commands != NULL);
|
assert(out_num_draw_commands != NULL);
|
||||||
*out_num_draw_commands = 0;
|
*out_num_draw_commands = 0;
|
||||||
@@ -1442,6 +1457,7 @@ void test_gui__subtree(
|
|||||||
inner_top = gui_dumb_block(context, inner_top, &outer_style, element_size);
|
inner_top = gui_dumb_block(context, inner_top, &outer_style, element_size);
|
||||||
((GUI_Node*)inner_top.node)->image = &test_image;
|
((GUI_Node*)inner_top.node)->image = &test_image;
|
||||||
} gui_pop_subtree(context);
|
} gui_pop_subtree(context);
|
||||||
|
#if 0
|
||||||
int middle_height =
|
int middle_height =
|
||||||
((GUI_Node*)middle.node)->computed_size[GUI_AXIS2_Y];
|
((GUI_Node*)middle.node)->computed_size[GUI_AXIS2_Y];
|
||||||
int subtree_height =
|
int subtree_height =
|
||||||
@@ -1458,6 +1474,11 @@ void test_gui__subtree(
|
|||||||
{
|
{
|
||||||
middle_subtree.flat_offset_y = 0;
|
middle_subtree.flat_offset_y = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
printf("slider value: %f\n", slider_value);
|
||||||
|
middle_subtree.offset_relative_node_percentage_y = slider_value*100;
|
||||||
|
middle_subtree.offset_own_size_percentage_y = slider_value*-100;
|
||||||
|
#endif
|
||||||
((GUI_Node*)middle_subtree_root.node)->dirty = ((GUI_Node*)slider.node)->dirty;
|
((GUI_Node*)middle_subtree_root.node)->dirty = ((GUI_Node*)slider.node)->dirty;
|
||||||
|
|
||||||
bottom = gui_dumb_block(context, bottom, &outer_style, top_bottom_size);
|
bottom = gui_dumb_block(context, bottom, &outer_style, top_bottom_size);
|
||||||
|
|||||||
Reference in new issue
Block a user