gui nodes now end up where they are supposed to
This commit is contained in:
1 parent
592b26fc10
commit
ebbf17cb42
1 file changed
+111
-10
@@ -266,8 +266,7 @@ typedef struct {
|
|||||||
#if 1
|
#if 1
|
||||||
void print_node_tree(GUI_Node *node, int level)
|
void print_node_tree(GUI_Node *node, int level)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < level; i++)
|
for(int i = 0; i < level; i++) {
|
||||||
{
|
|
||||||
printf("-");
|
printf("-");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,13 +277,33 @@ void print_node_tree(GUI_Node *node, int level)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
GUI_Node *child = GUI_NODE_FIRST_CHILD(node);
|
GUI_Node *child = GUI_NODE_FIRST_CHILD(node);
|
||||||
while(child != NULL)
|
while(child != NULL) {
|
||||||
{
|
|
||||||
print_node_tree(child, level+1);
|
print_node_tree(child, level+1);
|
||||||
child = GUI_NODE_SIBLING(child);
|
child = GUI_NODE_SIBLING(child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if 1
|
||||||
|
void print_subtree_tree(GUI_Subtree *node, int level, bool print_nodes)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < level; i++) {
|
||||||
|
printf("=");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" (%p)", node);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
if(print_nodes) {
|
||||||
|
print_node_tree((GUI_Node*)node->rdic.root, level+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GUI_Subtree *child = GUI_SUBTREE_FIRST_CHILD(node);
|
||||||
|
while(child != NULL) {
|
||||||
|
print_subtree_tree(child, level+1, print_nodes);
|
||||||
|
child = GUI_SUBTREE_SIBLING(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
@@ -463,7 +482,11 @@ GUI_Node_Reference gui_get_node(
|
|||||||
return (GUI_Node_Reference){0};
|
return (GUI_Node_Reference){0};
|
||||||
}
|
}
|
||||||
GUI_Subtree *current_subtree =
|
GUI_Subtree *current_subtree =
|
||||||
(GUI_Subtree*)current_layer->subtree_rdic.frame_current_node;
|
//(GUI_Subtree*)current_layer->subtree_rdic.frame_current_node;
|
||||||
|
// TODO(Zelaven): This has to do with me always pushing the newest subtree
|
||||||
|
// as a parent, which honestly doesn't sound ideal to me. I should look
|
||||||
|
// into what what my options are.
|
||||||
|
(GUI_Subtree*)current_layer->subtree_rdic.current_parent;
|
||||||
int get_node_flags = 0;
|
int get_node_flags = 0;
|
||||||
GUI_Node_Reference new_reference = {
|
GUI_Node_Reference new_reference = {
|
||||||
.rdic_ref = rdic_get_node(
|
.rdic_ref = rdic_get_node(
|
||||||
@@ -1614,7 +1637,7 @@ void test_gui__subtree(
|
|||||||
GUI_Context *context,
|
GUI_Context *context,
|
||||||
GUI_Rectangle full_gui_rectangle)
|
GUI_Rectangle full_gui_rectangle)
|
||||||
{
|
{
|
||||||
static GUI_Style root_style = {0x44,0x44,0x44, 0x00999999,2,0};
|
static GUI_Style root_style = {0x44,0x33,0x33, 0x00999999,2,0};
|
||||||
static GUI_Style element_style = {0,0x33,0x33, 0x00009999,2,0};
|
static GUI_Style element_style = {0,0x33,0x33, 0x00009999,2,0};
|
||||||
static GUI_Size element_size[2] = {
|
static GUI_Size element_size[2] = {
|
||||||
{GUI_SIZERULE_PERCENTOFPARENT, 100, 100},
|
{GUI_SIZERULE_PERCENTOFPARENT, 100, 100},
|
||||||
@@ -1645,6 +1668,8 @@ void test_gui__subtree(
|
|||||||
|
|
||||||
static GUI_Node_Reference slider = {0};
|
static GUI_Node_Reference slider = {0};
|
||||||
static float slider_value = 0.25f;
|
static float slider_value = 0.25f;
|
||||||
|
bool should_dirty = false;
|
||||||
|
bool set_pixels = false;
|
||||||
top = gui_layout(
|
top = gui_layout(
|
||||||
context, top, GUI_LAYOUT_HORIZONTAL, &outer_style, top_bottom_size);
|
context, top, GUI_LAYOUT_HORIZONTAL, &outer_style, top_bottom_size);
|
||||||
gui_push_parent(context, top);
|
gui_push_parent(context, top);
|
||||||
@@ -1663,10 +1688,31 @@ void test_gui__subtree(
|
|||||||
// variable, then there is no issue, though.
|
// variable, then there is no issue, though.
|
||||||
gui_slider(context, &slider, &slider_inner,
|
gui_slider(context, &slider, &slider_inner,
|
||||||
&slider_value, &slider_background, &slider_bar, slider_size);
|
&slider_value, &slider_background, &slider_bar, slider_size);
|
||||||
|
|
||||||
|
static GUI_Node_Reference dirty_button = {0};
|
||||||
|
static GUI_Style button_style = {0x99,0x99,0x99, 0x00222222,2,0};
|
||||||
|
static GUI_Size button_size[2] = {
|
||||||
|
{GUI_SIZERULE_PIXELS, 200, 100},
|
||||||
|
{GUI_SIZERULE_PIXELS, 40, 100}};
|
||||||
|
if(gui_dumb_button(
|
||||||
|
context, &dirty_button, GUI_STRING("Dirty middle"),
|
||||||
|
&button_style, button_size))
|
||||||
|
{
|
||||||
|
should_dirty = true;
|
||||||
|
}
|
||||||
|
static GUI_Node_Reference dirty_button2 = {0};
|
||||||
|
if(gui_dumb_button(
|
||||||
|
context, &dirty_button2, GUI_STRING("Set Pixels"),
|
||||||
|
&button_style, button_size))
|
||||||
|
{
|
||||||
|
set_pixels = true;
|
||||||
|
printf("Setting pixels.\n");
|
||||||
|
}
|
||||||
} gui_pop_parent(context); // middle.
|
} gui_pop_parent(context); // middle.
|
||||||
|
|
||||||
middle = gui_dumb_block(context, middle, &outer_style, middle_size);
|
middle = gui_dumb_block(context, middle, &outer_style, middle_size);
|
||||||
|
|
||||||
|
#if 1
|
||||||
static GUI_Subtree_Reference middle_subtree = {0};
|
static GUI_Subtree_Reference middle_subtree = {0};
|
||||||
middle_subtree = gui_get_subtree(context, middle_subtree);
|
middle_subtree = gui_get_subtree(context, middle_subtree);
|
||||||
static GUI_Node_Reference middle_subtree_root = {0};
|
static GUI_Node_Reference middle_subtree_root = {0};
|
||||||
@@ -1695,6 +1741,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);
|
||||||
|
#endif
|
||||||
#if 0
|
#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];
|
||||||
@@ -1713,20 +1760,73 @@ void test_gui__subtree(
|
|||||||
middle_subtree.flat_offset_y = 0;
|
middle_subtree.flat_offset_y = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
printf("slider value: %f\n", slider_value);
|
//printf("slider value: %f\n", slider_value);
|
||||||
middle_subtree.node->offset_relative_node_percentage_y = slider_value*100;
|
middle_subtree.node->offset_relative_node_percentage_y = slider_value*100;
|
||||||
middle_subtree.node->offset_own_size_percentage_y = slider_value*-100;
|
middle_subtree.node->offset_own_size_percentage_y = slider_value*-100;
|
||||||
#endif
|
#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, &element_style, top_bottom_size);
|
||||||
|
|
||||||
|
middle.node->dirty |= should_dirty;
|
||||||
|
|
||||||
|
if(set_pixels)
|
||||||
|
{
|
||||||
|
#define SET_PIXEL(pixel_buffer, x, y, color) (pixel_buffer)->pixels[(y)*(pixel_buffer)->width + (x)] = (color)
|
||||||
|
Pixel_Buffer *pixbuf = context->background_layer.pixel_buffer;
|
||||||
|
SET_PIXEL(pixbuf, 500, 500, 0x00ff0000);
|
||||||
|
SET_PIXEL(pixbuf, 500, 501, 0);
|
||||||
|
SET_PIXEL(pixbuf, 501, 500, 0);
|
||||||
|
SET_PIXEL(pixbuf, 501, 501, 0);
|
||||||
|
|
||||||
|
SET_PIXEL(pixbuf, 500, 900, 0x00ff0000);
|
||||||
|
SET_PIXEL(pixbuf, 500, 901, 0);
|
||||||
|
SET_PIXEL(pixbuf, 501, 900, 0);
|
||||||
|
SET_PIXEL(pixbuf, 501, 901, 0);
|
||||||
|
#undef SET_PIXEL
|
||||||
|
}
|
||||||
|
|
||||||
gui_context_finish_frame(context);
|
gui_context_finish_frame(context);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void test_gui__tmp(
|
||||||
|
GUI_Context *context,
|
||||||
|
GUI_Rectangle full_gui_rectangle)
|
||||||
|
{
|
||||||
|
static GUI_Style root_style = {0x44,0x33,0x33, 0x00999999,2,0};
|
||||||
|
static GUI_Style block_style = {0x33,0x33,0x33, 0x00999999,2,0};
|
||||||
|
static GUI_Size block_size[2] = {
|
||||||
|
{GUI_SIZERULE_PIXELS, 200, 100},
|
||||||
|
{GUI_SIZERULE_PIXELS, 200, 100}};
|
||||||
|
|
||||||
|
static GUI_Node_Reference root = {0};
|
||||||
|
root = gui_context_start_frame(
|
||||||
|
context, root,
|
||||||
|
full_gui_rectangle.x1-full_gui_rectangle.x0,
|
||||||
|
full_gui_rectangle.y1-full_gui_rectangle.y0,
|
||||||
|
GUI_LAYOUT_VERTICAL,
|
||||||
|
&root_style);
|
||||||
|
|
||||||
|
|
||||||
|
static GUI_Node_Reference block1 = {0};
|
||||||
|
static GUI_Node_Reference empty_layout = {0};
|
||||||
|
static GUI_Node_Reference block2 = {0};
|
||||||
|
|
||||||
|
block1 = gui_dumb_block(context, block1, &block_style, block_size);
|
||||||
|
|
||||||
|
empty_layout = gui_layout(
|
||||||
|
context, empty_layout, GUI_LAYOUT_HORIZONTAL, &block_style, block_size);
|
||||||
|
gui_push_parent(context, empty_layout);
|
||||||
|
{
|
||||||
|
} gui_pop_parent(context);
|
||||||
|
|
||||||
|
block2 = gui_dumb_block(context, block2, &block_style, block_size);
|
||||||
|
|
||||||
|
gui_context_finish_frame(context);
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
void test_gui_layout(
|
void test_gui_layout(
|
||||||
GUI_Context *context,
|
GUI_Context *context,
|
||||||
@@ -3278,6 +3378,7 @@ int main(void)
|
|||||||
//gui = test_gui__scrollbars;
|
//gui = test_gui__scrollbars;
|
||||||
//gui = test_gui__draw_command_using_sliders;
|
//gui = test_gui__draw_command_using_sliders;
|
||||||
gui = test_gui__subtree;
|
gui = test_gui__subtree;
|
||||||
|
//gui = test_gui__tmp;
|
||||||
|
|
||||||
X11_Window xwindow = {0};
|
X11_Window xwindow = {0};
|
||||||
int xinit_status = init_x11(&xwindow);
|
int xinit_status = init_x11(&xwindow);
|
||||||
@@ -3446,8 +3547,8 @@ int main(void)
|
|||||||
{
|
{
|
||||||
gui(&context, screen_rectangle);
|
gui(&context, screen_rectangle);
|
||||||
if(0)print_node_tree(
|
if(0)print_node_tree(
|
||||||
(GUI_Node*)((GUI_Subtree*)context.background_layer.subtree_rdic.root)->rdic.root
|
(GUI_Node*)((GUI_Subtree*)context.background_layer.subtree_rdic.root)->rdic.root, 1);
|
||||||
, 1);
|
if(1)print_subtree_tree((GUI_Subtree*)context.background_layer.subtree_rdic.root, 1, true);
|
||||||
//gui_layout_nodes(&context);
|
//gui_layout_nodes(&context);
|
||||||
#if 1
|
#if 1
|
||||||
gui_layout_and_draw(&context);
|
gui_layout_and_draw(&context);
|
||||||
|
|||||||
Reference in new issue
Block a user