started working on events
This commit is contained in:
parent
a374a37971
commit
2dcc1b582c
42
ugui.c
42
ugui.c
@ -316,6 +316,7 @@ int ug_frame_begin(UgCtx *ctx)
|
||||
.id = ROOT_ID,
|
||||
.type = ETYPE_DIV,
|
||||
.flags = 0,
|
||||
.event = 0,
|
||||
.rect = space,
|
||||
.div =
|
||||
{
|
||||
@ -697,6 +698,14 @@ static UgRect position_element(UgCtx *ctx, UgElem *parent, UgRect rect, int styl
|
||||
return elem_rect;
|
||||
}
|
||||
|
||||
int is_hovered(UgCtx *ctx, UgElem *elem)
|
||||
{
|
||||
if (ctx == NULL || elem == NULL) {
|
||||
return 0;
|
||||
}
|
||||
return is_point_in_rect(ctx->input.mouse_pos, elem->rect);
|
||||
}
|
||||
|
||||
int ug_button(UgCtx *ctx, const char *label, UgRect size)
|
||||
{
|
||||
if (ctx == NULL || label == NULL) {
|
||||
@ -730,13 +739,23 @@ int ug_button(UgCtx *ctx, const char *label, UgRect size)
|
||||
c_elem->rect = position_element(ctx, parent, size, 1);
|
||||
|
||||
// TODO: 3. Fill the button specific fields
|
||||
} else if (FTEST(parent, ELEM_HASFOCUS)) {
|
||||
if (is_point_in_rect(ctx->input.mouse_pos, c_elem->rect)) {
|
||||
}
|
||||
|
||||
// TODO: Check for interactions
|
||||
if (FTEST(parent, ELEM_HASFOCUS)) {
|
||||
if (is_hovered(ctx, c_elem)) {
|
||||
c_elem->flags |= ELEM_HASFOCUS;
|
||||
c_elem->event |= EVENT_MOUSE_HOVER;
|
||||
bg_color = RGBA(0x00ff00ff);
|
||||
|
||||
if (ctx->input.mouse_down & UG_BTN_LEFT) {
|
||||
c_elem->event |= EVENT_MOUSE_HOLD;
|
||||
} else {
|
||||
c_elem->event &= ~EVENT_MOUSE_HOLD;
|
||||
}
|
||||
} else {
|
||||
c_elem->event &= ~EVENT_MOUSE_HOVER;
|
||||
}
|
||||
} else {
|
||||
// TODO: Check for interactions
|
||||
}
|
||||
|
||||
// Draw the button
|
||||
@ -750,7 +769,7 @@ int ug_button(UgCtx *ctx, const char *label, UgRect size)
|
||||
};
|
||||
ug_fifo_enqueue(&ctx->fifo, &cmd);
|
||||
|
||||
return 0;
|
||||
return c_elem->event;
|
||||
}
|
||||
|
||||
int ug_layout_set_row(UgCtx *ctx)
|
||||
@ -933,11 +952,14 @@ int main(void)
|
||||
ug_div_begin(&ctx, "main", DIV_FILL);
|
||||
{
|
||||
ug_layout_set_column(&ctx);
|
||||
ug_button(
|
||||
&ctx,
|
||||
"button0",
|
||||
(UgRect) {.y = 100, .x = 100, .w = 30, .h = 30}
|
||||
);
|
||||
if (ug_button(
|
||||
&ctx,
|
||||
"button0",
|
||||
(UgRect) {.y = 100, .x = 100, .w = 30, .h = 30}
|
||||
) &
|
||||
EVENT_MOUSE_HOLD) {
|
||||
printf("HOLDING button0\n");
|
||||
}
|
||||
ug_layout_next_column(&ctx);
|
||||
ug_button(&ctx, "button1", (UgRect) {.w = 30, .h = 30});
|
||||
ug_layout_next_column(&ctx);
|
||||
|
11
ugui.h
11
ugui.h
@ -28,9 +28,20 @@ enum UgElemFlags {
|
||||
ELEM_HASFOCUS = 1 << 1,
|
||||
};
|
||||
|
||||
enum UgElemEvent {
|
||||
EVENT_KEY_PRESS = 1 << 0,
|
||||
EVENT_KEY_RELEASE = 1 << 1,
|
||||
EVENT_KEY_HOLD = 1 << 2,
|
||||
EVENT_MOUSE_HOVER = 1 << 3,
|
||||
EVENT_MOUSE_PRESS = 1 << 4,
|
||||
EVENT_MOUSE_RELEASE = 1 << 5,
|
||||
EVENT_MOUSE_HOLD = 1 << 6,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
UgId id;
|
||||
uint32_t flags;
|
||||
uint32_t event;
|
||||
UgRect rect;
|
||||
UgElemType type;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user