cleanup
This commit is contained in:
parent
6fe3ce8787
commit
8d6235221f
@ -13,7 +13,7 @@ static const ug_style_t default_style = {
|
|||||||
.margin = SIZE_PX(3),
|
.margin = SIZE_PX(3),
|
||||||
.border = {
|
.border = {
|
||||||
.color = RGB_FORMAT(0xf50a00),
|
.color = RGB_FORMAT(0xf50a00),
|
||||||
.size = SIZE_PX(10),
|
.size = SIZE_PX(2),
|
||||||
},
|
},
|
||||||
.title = {
|
.title = {
|
||||||
.color = {
|
.color = {
|
||||||
|
@ -192,7 +192,7 @@ int main(void)
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
ug_container_floating(ctx, "stupid name", (ug_div_t){.x=SIZE_PX(0), .y=SIZE_PX(0), .w=SIZE_PX(100), .h=SIZE_MM(75.0)});
|
ug_container_floating(ctx, "stupid name", (ug_div_t){.x=SIZE_PX(0), .y=SIZE_PX(0), .w=SIZE_PX(100), .h=SIZE_MM(75.0)});
|
||||||
|
ug_element_button(ctx, "float", "", (ug_div_t){SQUARE(SIZE_MM(5))});
|
||||||
//ug_container_floating(ctx, "floating windoooooooow", (ug_div_t){.x=SIZE_PX(100), .y=SIZE_PX(0), .w=SIZE_PX(100), .h=SIZE_MM(75.0)});
|
//ug_container_floating(ctx, "floating windoooooooow", (ug_div_t){.x=SIZE_PX(100), .y=SIZE_PX(0), .w=SIZE_PX(100), .h=SIZE_MM(75.0)});
|
||||||
|
|
||||||
//ug_container_sidebar(ctx, "Right Sidebar", (ug_size_t)SIZE_PX(300), UG_SIDE_RIGHT);
|
//ug_container_sidebar(ctx, "Right Sidebar", (ug_size_t)SIZE_PX(300), UG_SIDE_RIGHT);
|
||||||
|
64
ugui.c
64
ugui.c
@ -259,7 +259,7 @@ ug_ctx_t *ug_ctx_new(void)
|
|||||||
ctx->style_px = &style_cache;
|
ctx->style_px = &style_cache;
|
||||||
// NOTE: this fixes a bug where for the first frame the container stack
|
// NOTE: this fixes a bug where for the first frame the container stack
|
||||||
// doesn't get sorted, but it is kind of a botch
|
// doesn't get sorted, but it is kind of a botch
|
||||||
ctx->last_active.cnt = 1;
|
ctx->last_active_cnt = 1;
|
||||||
ug_ctx_set_displayinfo(ctx, DEF_SCALE, DEF_PPI);
|
ug_ctx_set_displayinfo(ctx, DEF_SCALE, DEF_PPI);
|
||||||
|
|
||||||
// TODO: allocate stacks
|
// TODO: allocate stacks
|
||||||
@ -431,7 +431,7 @@ static void sort_containers(ug_ctx_t *ctx)
|
|||||||
ug_container_t *s = ctx->cnt_stack.items;
|
ug_container_t *s = ctx->cnt_stack.items;
|
||||||
ug_container_t c = *cnt;
|
ug_container_t c = *cnt;
|
||||||
|
|
||||||
if (ctx->active.cnt != c.id)
|
if (ctx->active_cnt != c.id)
|
||||||
for (; y > 0 && TEST(s[y-1].flags, UG_CNT_FLOATING); y--);
|
for (; y > 0 && TEST(s[y-1].flags, UG_CNT_FLOATING); y--);
|
||||||
|
|
||||||
if (i >= y)
|
if (i >= y)
|
||||||
@ -540,7 +540,7 @@ static int handle_container(ug_ctx_t *ctx, ug_container_t *cnt)
|
|||||||
{
|
{
|
||||||
// if we are not the currently active container than definately we are not
|
// if we are not the currently active container than definately we are not
|
||||||
// being moved or resized
|
// being moved or resized
|
||||||
if (ctx->active.cnt != cnt->id) {
|
if (ctx->active_cnt != cnt->id) {
|
||||||
cnt->flags &= ~CNT_STATE_ALL;
|
cnt->flags &= ~CNT_STATE_ALL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -582,6 +582,24 @@ static int handle_container(ug_ctx_t *ctx, ug_container_t *cnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// lower diagonal resize
|
||||||
|
if (TEST(cnt->flags, UG_CNT_RESIZE_BOTTOM) && TEST(cnt->flags, UG_CNT_RESIZE_RIGHT)) {
|
||||||
|
clip = (ug_rect_t){
|
||||||
|
.x = R_MARGIN((*rca), m),
|
||||||
|
.y = B_MARGIN((*rca), m),
|
||||||
|
.w = b + m,
|
||||||
|
.h = b + m,
|
||||||
|
};
|
||||||
|
if (STATEIS(cnt, CNT_STATE_RESIZE_D) ||
|
||||||
|
(STATEIS(cnt, 0) && INTERSECTS(mpos, clip))) {
|
||||||
|
cnt->flags |= CNT_STATE_RESIZE_D;
|
||||||
|
rect->h = MAX(10, rect->h + ctx->mouse.delta.y);
|
||||||
|
rca->h = MAX(10, rca->h + ctx->mouse.delta.y);
|
||||||
|
rect->w = MAX(10, rect->w + ctx->mouse.delta.x);
|
||||||
|
rca->w = MAX(10, rca->w + ctx->mouse.delta.x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// right border resize
|
// right border resize
|
||||||
if (TEST(cnt->flags, UG_CNT_RESIZE_RIGHT)) {
|
if (TEST(cnt->flags, UG_CNT_RESIZE_RIGHT)) {
|
||||||
clip = (ug_rect_t){
|
clip = (ug_rect_t){
|
||||||
@ -662,24 +680,6 @@ static int handle_container(ug_ctx_t *ctx, ug_container_t *cnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// lower diagonal resize
|
|
||||||
if (TEST(cnt->flags, UG_CNT_RESIZE_BOTTOM | UG_CNT_RESIZE_RIGHT)) {
|
|
||||||
clip = (ug_rect_t){
|
|
||||||
.x = R_MARGIN((*rca), -m),
|
|
||||||
.y = B_MARGIN((*rca), m),
|
|
||||||
.w = b + m,
|
|
||||||
.h = b + m,
|
|
||||||
};
|
|
||||||
if (STATEIS(cnt, CNT_STATE_RESIZE_D) ||
|
|
||||||
(STATEIS(cnt, 0) && INTERSECTS(mpos, clip))) {
|
|
||||||
cnt->flags |= CNT_STATE_RESIZE_D;
|
|
||||||
rect->h = MAX(10, rect->h + ctx->mouse.delta.y);
|
|
||||||
rca->h = MAX(10, rca->h + ctx->mouse.delta.y);
|
|
||||||
rect->w = MAX(10, rect->w + ctx->mouse.delta.x);
|
|
||||||
rca->w = MAX(10, rca->w + ctx->mouse.delta.x);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we were not resized but we are still active it means we are doing
|
// if we were not resized but we are still active it means we are doing
|
||||||
// something to the contained elements, as such set state to none
|
// something to the contained elements, as such set state to none
|
||||||
if (STATEIS(cnt, 0))
|
if (STATEIS(cnt, 0))
|
||||||
@ -1003,7 +1003,7 @@ int ug_frame_begin(ug_ctx_t *ctx)
|
|||||||
ctx->origin.h = ctx->size.h;
|
ctx->origin.h = ctx->size.h;
|
||||||
|
|
||||||
// update hover index
|
// update hover index
|
||||||
printf("Container Stack: active %x\n", ctx->active.cnt);
|
printf("Container Stack: active %x\n", ctx->active_cnt);
|
||||||
ug_vec2_t v = ctx->mouse.pos;
|
ug_vec2_t v = ctx->mouse.pos;
|
||||||
for (int i = 0; i < ctx->cnt_stack.idx; i++) {
|
for (int i = 0; i < ctx->cnt_stack.idx; i++) {
|
||||||
ug_container_t *c = &ctx->cnt_stack.items[i];
|
ug_container_t *c = &ctx->cnt_stack.items[i];
|
||||||
@ -1019,19 +1019,19 @@ int ug_frame_begin(ug_ctx_t *ctx)
|
|||||||
ug_rect_t r = c->rca;
|
ug_rect_t r = c->rca;
|
||||||
EXPAND(r, SZ_INT(ctx->style_px->border.size));
|
EXPAND(r, SZ_INT(ctx->style_px->border.size));
|
||||||
if (INTERSECTS(v, r))
|
if (INTERSECTS(v, r))
|
||||||
ctx->hover.cnt = c->id;
|
ctx->hover_cnt = c->id;
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
if (ctx->last_active.cnt && ctx->active.cnt != ctx->last_active.cnt)
|
if (ctx->last_active_cnt && ctx->active_cnt != ctx->last_active_cnt)
|
||||||
ctx->cnt_stack.sorted = 0;
|
ctx->cnt_stack.sorted = 0;
|
||||||
|
|
||||||
// update active container
|
// update active container
|
||||||
if (MOUSEDOWN(ctx, UG_BTN_LEFT)) {
|
if (MOUSEDOWN(ctx, UG_BTN_LEFT)) {
|
||||||
ctx->active.cnt = ctx->hover.cnt;
|
ctx->active_cnt = ctx->hover_cnt;
|
||||||
} else if (MOUSEUP(ctx, UG_BTN_LEFT)) {
|
} else if (MOUSEUP(ctx, UG_BTN_LEFT)) {
|
||||||
ctx->last_active.cnt = ctx->active.cnt;
|
ctx->last_active_cnt = ctx->active_cnt;
|
||||||
ctx->active.cnt = 0;
|
ctx->active_cnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1072,10 +1072,8 @@ int ug_frame_end(ug_ctx_t *ctx)
|
|||||||
ctx->mouse.last_pos = ctx->mouse.pos;
|
ctx->mouse.last_pos = ctx->mouse.pos;
|
||||||
|
|
||||||
// reset hover, it has to be calculated at frame beginning
|
// reset hover, it has to be calculated at frame beginning
|
||||||
ctx->hover.cnt_last = ctx->hover.cnt;
|
// FIXME: reeeeeally?
|
||||||
ctx->hover.elem_last = ctx->hover.elem;
|
//ctx->hover_cnt = 0;
|
||||||
ctx->hover.cnt = 0;
|
|
||||||
ctx->hover.elem = 0;
|
|
||||||
|
|
||||||
ctx->last_ppi = ctx->ppi;
|
ctx->last_ppi = ctx->ppi;
|
||||||
ctx->last_ppm = ctx->ppm;
|
ctx->last_ppm = ctx->ppm;
|
||||||
@ -1307,7 +1305,7 @@ int handle_element(ug_ctx_t *ctx, ug_container_t *cnt, ug_element_t *elem)
|
|||||||
{
|
{
|
||||||
// if the contaniner is not the current hover then do nothing, think about
|
// if the contaniner is not the current hover then do nothing, think about
|
||||||
// floating cont. over bodies
|
// floating cont. over bodies
|
||||||
if (ctx->hover.cnt != cnt->id)
|
if (ctx->hover_cnt != cnt->id)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (INTERSECTS(ctx->mouse.pos, elem->rca)) {
|
if (INTERSECTS(ctx->mouse.pos, elem->rca)) {
|
||||||
@ -1340,7 +1338,7 @@ void draw_elements(ug_ctx_t *ctx, ug_container_t *cnt)
|
|||||||
switch (e->type) {
|
switch (e->type) {
|
||||||
case UG_ELEM_BUTTON:
|
case UG_ELEM_BUTTON:
|
||||||
col = cnt->hover_elem == e->id ? s->btn.color.act : s->btn.color.bg;
|
col = cnt->hover_elem == e->id ? s->btn.color.act : s->btn.color.bg;
|
||||||
bcol = cnt->selected_elem == e->id ? s->btn.color.sel : s->btn.color.br;
|
bcol = cnt->selected_elem == e->id && ctx->hover_cnt == cnt->id ? s->btn.color.sel : s->btn.color.br;
|
||||||
txtcol = s->btn.color.fg;
|
txtcol = s->btn.color.fg;
|
||||||
ts = SZ_INT(s->btn.font_size);
|
ts = SZ_INT(s->btn.font_size);
|
||||||
eb = SZ_INT(ctx->style_px->btn.border);
|
eb = SZ_INT(ctx->style_px->btn.border);
|
||||||
|
12
ugui.h
12
ugui.h
@ -177,20 +177,12 @@ typedef struct {
|
|||||||
ug_vec2_t size;
|
ug_vec2_t size;
|
||||||
ug_rect_t origin;
|
ug_rect_t origin;
|
||||||
// which context and element we are hovering
|
// which context and element we are hovering
|
||||||
struct {
|
ug_id_t hover_cnt;
|
||||||
ug_id_t cnt, elem;
|
|
||||||
ug_id_t cnt_last, elem_last;
|
|
||||||
} hover;
|
|
||||||
// active is updated on mousedown and released on mouseup
|
// active is updated on mousedown and released on mouseup
|
||||||
// the id of the "active" element, active means different things for
|
// the id of the "active" element, active means different things for
|
||||||
// different elements, for exaple active for a button means to be pressed,
|
// different elements, for exaple active for a button means to be pressed,
|
||||||
// and for a text box it means to be focused
|
// and for a text box it means to be focused
|
||||||
struct {
|
ug_id_t active_cnt, last_active_cnt;
|
||||||
ug_id_t cnt, elem;
|
|
||||||
} active;
|
|
||||||
struct {
|
|
||||||
ug_id_t cnt, elem;
|
|
||||||
} last_active;
|
|
||||||
// id of the selected container, used for layout
|
// id of the selected container, used for layout
|
||||||
// NOTE: since the stacks can be relocated with realloc it is better not
|
// NOTE: since the stacks can be relocated with realloc it is better not
|
||||||
// to use a pointer here, even tough it would be better for efficiency
|
// to use a pointer here, even tough it would be better for efficiency
|
||||||
|
Loading…
Reference in New Issue
Block a user