mouse buttons
This commit is contained in:
parent
5427b191c2
commit
a374a37971
70
ugui.c
70
ugui.c
@ -20,9 +20,10 @@
|
|||||||
|
|
||||||
#define MARK() \
|
#define MARK() \
|
||||||
do { \
|
do { \
|
||||||
printf("lmao\n"); \
|
printf("================== lmao ==================\n"); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define BIT(x) (1 << (x))
|
||||||
#define FTEST(e, f) ((e)->flags & (f))
|
#define FTEST(e, f) ((e)->flags & (f))
|
||||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||||
@ -343,6 +344,10 @@ int ug_frame_begin(UgCtx *ctx)
|
|||||||
// 2. Get the root element from the cache and update it
|
// 2. Get the root element from the cache and update it
|
||||||
UgElem *c_elem;
|
UgElem *c_elem;
|
||||||
int is_new = search_or_insert(ctx, &c_elem, root.id);
|
int is_new = search_or_insert(ctx, &c_elem, root.id);
|
||||||
|
|
||||||
|
// flags always need to be set to the new flags
|
||||||
|
c_elem->flags = root.flags;
|
||||||
|
|
||||||
if (is_new || FTEST(&root, ELEM_UPDATED)) {
|
if (is_new || FTEST(&root, ELEM_UPDATED)) {
|
||||||
*c_elem = root;
|
*c_elem = root;
|
||||||
}
|
}
|
||||||
@ -377,6 +382,25 @@ int ug_frame_end(UgCtx *ctx)
|
|||||||
// 2. clear input fields
|
// 2. clear input fields
|
||||||
ctx->input.flags = 0;
|
ctx->input.flags = 0;
|
||||||
|
|
||||||
|
// draw mouse position
|
||||||
|
#if 1
|
||||||
|
UgCmd cmd = {
|
||||||
|
.type = CMD_RECT,
|
||||||
|
.rect =
|
||||||
|
{
|
||||||
|
.rect =
|
||||||
|
{
|
||||||
|
.x = ctx->input.mouse_pos.x - 2,
|
||||||
|
.y = ctx->input.mouse_pos.y - 2,
|
||||||
|
.w = 4,
|
||||||
|
.h = 4,
|
||||||
|
},
|
||||||
|
.color = RGBA(0xff00ffff),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
ug_fifo_enqueue(&(ctx->fifo), &cmd);
|
||||||
|
#endif
|
||||||
|
|
||||||
printf("##### Frame End #####\n\n");
|
printf("##### Frame End #####\n\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -421,6 +445,43 @@ int ug_input_changefoucs(UgCtx *ctx, int has_focus)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ug_mouse_buttons {
|
||||||
|
UG_BTN_LEFT = BIT(0),
|
||||||
|
UG_BTN_MIDDLE = BIT(1),
|
||||||
|
UG_BTN_RIGHT = BIT(2),
|
||||||
|
UG_BTN_4 = BIT(3),
|
||||||
|
UG_BTN_5 = BIT(4),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint32_t mouse_supported_mask =
|
||||||
|
UG_BTN_LEFT | UG_BTN_MIDDLE | UG_BTN_RIGHT | UG_BTN_4 | UG_BTN_5;
|
||||||
|
|
||||||
|
// Mouse Button moved
|
||||||
|
int ug_input_mouse_button(UgCtx *ctx, uint32_t button_mask)
|
||||||
|
{
|
||||||
|
if (ctx == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (button_mask & ~mouse_supported_mask) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->input.mouse_updated = ctx->input.mouse_down ^ button_mask;
|
||||||
|
ctx->input.mouse_down = button_mask;
|
||||||
|
ctx->input.flags |= INPUT_CTX_MOUSEBTN;
|
||||||
|
|
||||||
|
printf(
|
||||||
|
"Mouse Down: %s%s%s%s%s\n",
|
||||||
|
button_mask & UG_BTN_LEFT ? "BTN_LEFT " : "",
|
||||||
|
button_mask & UG_BTN_RIGHT ? "BTN_RIGHT " : "",
|
||||||
|
button_mask & UG_BTN_MIDDLE ? "BTN_MIDDLE " : "",
|
||||||
|
button_mask & UG_BTN_4 ? "BTN_4 " : "",
|
||||||
|
button_mask & UG_BTN_5 ? "BTN_5 " : ""
|
||||||
|
);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Mouse was moved, report absolute position
|
// Mouse was moved, report absolute position
|
||||||
int ug_input_mouse_abs(UgCtx *ctx, int x, int y) { return 1; }
|
int ug_input_mouse_abs(UgCtx *ctx, int x, int y) { return 1; }
|
||||||
|
|
||||||
@ -855,6 +916,13 @@ int main(void)
|
|||||||
if (mousedelta.x || mousedelta.y) {
|
if (mousedelta.x || mousedelta.y) {
|
||||||
ug_input_mouse_delta(&ctx, mousedelta.x, mousedelta.y);
|
ug_input_mouse_delta(&ctx, mousedelta.x, mousedelta.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t mask = 0;
|
||||||
|
mask |= IsMouseButtonDown(MOUSE_BUTTON_LEFT) ? UG_BTN_LEFT : 0;
|
||||||
|
mask |= IsMouseButtonDown(MOUSE_BUTTON_RIGHT) ? UG_BTN_RIGHT : 0;
|
||||||
|
mask |= IsMouseButtonDown(MOUSE_BUTTON_MIDDLE) ? UG_BTN_MIDDLE : 0;
|
||||||
|
ug_input_mouse_button(&ctx, mask);
|
||||||
|
|
||||||
timer_partial(PARTIAL_INPUT);
|
timer_partial(PARTIAL_INPUT);
|
||||||
/*** End Input Handling ***/
|
/*** End Input Handling ***/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user