Compare commits
3 commits
d8601f23f5
...
996d6fb520
Author | SHA1 | Date | |
---|---|---|---|
|
996d6fb520 | ||
|
802d611650 | ||
|
338e3f2d58 |
3 changed files with 31 additions and 6 deletions
23
src/main.c
23
src/main.c
|
@ -116,6 +116,29 @@ int app_handle(struct UINode *node, void *data, int event_type, size_t d, void *
|
||||||
text_input->text_node = text_node_new(&text_input->node, state->font, UINeutral50, NULL);
|
text_input->text_node = text_node_new(&text_input->node, state->font, UINeutral50, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* a bunch of buttons */
|
||||||
|
{
|
||||||
|
UINode *scroll_container = node_new(node, "buttons_scroll_container");
|
||||||
|
scroll_container->width_policy = UI_SIZE_POLICY_GROW;
|
||||||
|
scroll_container->height_policy = UI_SIZE_POLICY_GROW;
|
||||||
|
|
||||||
|
UIScrollableNode *scroll = scrollable_new(scroll_container, NULL);
|
||||||
|
UINode *buttons = node_new(scroll_container, "buttons");
|
||||||
|
buttons->width_policy = UI_SIZE_POLICY_GROW;
|
||||||
|
buttons->height_policy = UI_SIZE_POLICY_DYNAMIC;
|
||||||
|
scroll->target = buttons;
|
||||||
|
|
||||||
|
box_layout_new(buttons, UI_DIRECTION_VERTICAL);
|
||||||
|
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
UINode *button = node_new(buttons, "button");
|
||||||
|
state_background_node_new(button, UIPurple600, UIPurple700, UIPurple800, 6.0);
|
||||||
|
text_node_new(button, state->font, UINeutral50, "button");
|
||||||
|
dispatcher_new(button, UI_EVENT_UNPRESSED, INCREMENT_COUNT, state, app_handle);
|
||||||
|
button->width_policy = UI_SIZE_POLICY_GROW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SIDEBAR_BEGIN_ANIMATE: {
|
case SIDEBAR_BEGIN_ANIMATE: {
|
||||||
|
|
|
@ -48,10 +48,8 @@ UINode *node_by_point(UINode *root, double x, double y)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < root->nodes_count; i++) {
|
for (int i = 0; i < root->nodes_count; i++) {
|
||||||
UINode *node = root->nodes[i];
|
UINode *node = root->nodes[i];
|
||||||
double local_x = x - node->window_rel_x;
|
if (ui_rect_contains_point(&node->rect, x - node->window_rel_x, y - node->window_rel_y) && !(node->flags & UI_NODE_DISABLED)) {
|
||||||
double local_y = y - node->window_rel_y;
|
return node_by_point(node, x, y);
|
||||||
if (ui_rect_contains_point(&node->rect, local_x, local_y) && !(node->flags & UI_NODE_DISABLED)) {
|
|
||||||
return node_by_point(node, local_x, local_y);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return root;
|
return root;
|
||||||
|
|
|
@ -51,13 +51,17 @@ int scrollable_handle(UINode *node, enum UIEvent ev, size_t d, void *p)
|
||||||
if (target->width_policy == UI_SIZE_POLICY_DYNAMIC) {
|
if (target->width_policy == UI_SIZE_POLICY_DYNAMIC) {
|
||||||
node_dispatch(target, UI_EVENT_GET_WIDTH, 0, &w);
|
node_dispatch(target, UI_EVENT_GET_WIDTH, 0, &w);
|
||||||
target->rect.w = w;
|
target->rect.w = w;
|
||||||
|
} else if (target->width_policy == UI_SIZE_POLICY_GROW) {
|
||||||
|
target->rect.w = node->parent->rect.w;
|
||||||
}
|
}
|
||||||
if (target->height_policy == UI_SIZE_POLICY_DYNAMIC) {
|
if (target->height_policy == UI_SIZE_POLICY_DYNAMIC) {
|
||||||
node_dispatch(target, UI_EVENT_GET_HEIGHT, 0, &h);
|
node_dispatch(target, UI_EVENT_GET_HEIGHT, 0, &h);
|
||||||
target->rect.h = h;
|
target->rect.h = h;
|
||||||
|
} else if (target->height_policy == UI_SIZE_POLICY_GROW) {
|
||||||
|
target->rect.h = node->parent->rect.h;
|
||||||
}
|
}
|
||||||
target->rect.x = -n->x_scroll;
|
target->rect.x = n->x_scroll ? -n->x_scroll : 0;
|
||||||
target->rect.y = -n->y_scroll;
|
target->rect.y = n->y_scroll ? -n->y_scroll : 0;
|
||||||
node_dispatch(target, UI_EVENT_RELAYOUT, 0, NULL);
|
node_dispatch(target, UI_EVENT_RELAYOUT, 0, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue