textbuttons and text in buttons
This commit is contained in:
parent
27e5ead579
commit
0948708050
@ -28,11 +28,11 @@ static const ug_style_t default_style = {
|
||||
.act = RGB_FORMAT(0x440044),
|
||||
.bg = RGB_FORMAT(0x006600),
|
||||
.fg = RGB_FORMAT(0xffff00),
|
||||
.sel = RGB_FORMAT(0xff0000),
|
||||
.sel = RGB_FORMAT(0x0a0aff),
|
||||
.br = RGB_FORMAT(0xff00ff),
|
||||
},
|
||||
.font_size = SIZE_PX(10),
|
||||
.border = SIZE_PX(11),
|
||||
.border = SIZE_PX(1),
|
||||
},
|
||||
};
|
||||
|
||||
|
11
test/main.c
11
test/main.c
@ -209,13 +209,14 @@ int main(void)
|
||||
ug_layout_row(ctx);
|
||||
|
||||
ug_layout_row(ctx);
|
||||
ug_element_button(ctx, "button 1", "", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 2", "", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 1", "hey", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 2", "lol", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_layout_next_row(ctx);
|
||||
ug_element_button(ctx, "button 3", "", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 4", "", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 3", "L", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 4", "69", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_layout_next_row(ctx);
|
||||
ug_element_button(ctx, "button 5", "", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_button(ctx, "button 5", "lmao", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
ug_element_textbtn(ctx, "text button 1", "foo", (ug_div_t){SQUARE(SIZE_MM(10))});
|
||||
//ug_element_button(ctx, "button 6", "", (ug_div_t){SQUARE(SIZE_MM(10)),.x=SIZE_PX(-10)});
|
||||
|
||||
ug_frame_end(ctx);
|
||||
|
59
ugui.c
59
ugui.c
@ -1283,24 +1283,47 @@ void draw_elements(ug_ctx_t *ctx, ug_container_t *cnt)
|
||||
for (int i = 0; i < cnt->elem_stack.idx; i++) {
|
||||
ug_element_t *e = &(cnt->elem_stack.items[i]);
|
||||
ug_color_t col = RGB_FORMAT(0), bcol = RGB_FORMAT(0);
|
||||
ug_color_t txtcol = RGB_FORMAT(0);
|
||||
ug_rect_t r = e->rca;
|
||||
int eb;
|
||||
int eb = 0, ts = 0;
|
||||
unsigned char draw_bg = 0, draw_fg = 0, draw_txt = 0;
|
||||
|
||||
switch (e->type) {
|
||||
case UG_ELEM_BUTTON:
|
||||
// TODO: draw borders, different color for selected element
|
||||
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;
|
||||
txtcol = s->btn.color.fg;
|
||||
ts = SZ_INT(s->btn.font_size);
|
||||
eb = SZ_INT(ctx->style_px->btn.border);
|
||||
draw_bg = draw_fg = draw_txt = 1;
|
||||
break;
|
||||
case UG_ELEM_TXTBTN:
|
||||
ts = SZ_INT(s->btn.font_size);
|
||||
txtcol = s->color.fg;
|
||||
draw_txt = 1;
|
||||
default: break;
|
||||
}
|
||||
|
||||
if (draw_bg)
|
||||
push_rect_command(ctx, &r, bcol);
|
||||
if (draw_fg) {
|
||||
r = e->rca;
|
||||
r.x += eb;
|
||||
r.y += eb;
|
||||
r.w -= 2*eb;
|
||||
r.h -= 2*eb;
|
||||
push_rect_command(ctx, &r, col);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
if (draw_txt) {
|
||||
push_text_command(ctx,
|
||||
(ug_vec2_t){
|
||||
.x = e->rca.x,
|
||||
.y = e->rca.y+e->rca.h/2
|
||||
},
|
||||
ts,
|
||||
txtcol,
|
||||
e->btn.txt);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1332,3 +1355,33 @@ int ug_element_button(ug_ctx_t *ctx, const char *name, const char *txt, ug_div_t
|
||||
|
||||
return handle_element(ctx, cp, elem);
|
||||
}
|
||||
|
||||
|
||||
// text-only button
|
||||
int ug_element_textbtn(ug_ctx_t *ctx, const char *name, const char *txt, ug_div_t dim)
|
||||
{
|
||||
TEST_CTX(ctx);
|
||||
TEST_STR(name);
|
||||
TEST_STR(txt);
|
||||
|
||||
ug_container_t *cp;
|
||||
GET_SELECTED_CONTAINER(ctx, cp);
|
||||
|
||||
ug_id_t id = hash(name, strlen(name));
|
||||
ug_element_t *elem = get_element(cp, id);
|
||||
|
||||
// FIXME: we don't always need to do everything
|
||||
elem->id = id;
|
||||
elem->type = UG_ELEM_TXTBTN;
|
||||
elem->rect = div_to_rect(ctx, &dim);
|
||||
elem->name = name;
|
||||
elem->btn.txt = txt;
|
||||
|
||||
// FIXME: what about error codes?
|
||||
if (position_element(ctx, cp, elem)) {
|
||||
DELETE_FROM_STACK(cp->elem_stack, elem);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return handle_element(ctx, cp, elem);
|
||||
}
|
||||
|
1
ugui.h
1
ugui.h
@ -260,6 +260,7 @@ int ug_layout_next_column(ug_ctx_t *ctx);
|
||||
|
||||
// elements
|
||||
int ug_element_button(ug_ctx_t *ctx, const char *name, const char *txt, ug_div_t dim);
|
||||
int ug_element_textbtn(ug_ctx_t *ctx, const char *name, const char *txt, ug_div_t dim);
|
||||
|
||||
// Input functions
|
||||
int ug_input_mousemove(ug_ctx_t *ctx, int x, int y);
|
||||
|
Loading…
Reference in New Issue
Block a user