|
|
|
@ -20,9 +20,10 @@ |
|
|
|
|
|
|
|
|
|
#define MARK() \ |
|
|
|
|
do { \
|
|
|
|
|
printf("lmao\n"); \
|
|
|
|
|
printf("================== lmao ==================\n"); \
|
|
|
|
|
} while (0) |
|
|
|
|
|
|
|
|
|
#define BIT(x) (1 << (x)) |
|
|
|
|
#define FTEST(e, f) ((e)->flags & (f)) |
|
|
|
|
#define MAX(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
|
|
|
|
|
UgElem *c_elem; |
|
|
|
|
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)) { |
|
|
|
|
*c_elem = root; |
|
|
|
|
} |
|
|
|
@ -377,6 +382,25 @@ int ug_frame_end(UgCtx *ctx) |
|
|
|
|
// 2. clear input fields
|
|
|
|
|
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"); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
@ -421,6 +445,43 @@ int ug_input_changefoucs(UgCtx *ctx, int has_focus) |
|
|
|
|
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
|
|
|
|
|
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) { |
|
|
|
|
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); |
|
|
|
|
/*** End Input Handling ***/ |
|
|
|
|
|
|
|
|
|