mirror of
https://github.com/IllusionMan1212/C2048.git
synced 2026-10-24 02:12:31 +00:00
fix(zephr/ui): color picker and small mouse event fixes
- reset pressed state at the end of the frame - correctly place the color picker regardless of window size - make color picker popup border radius consistent regardless of window size - don't draw the color picker popup if it's parent is not visible
This commit is contained in:
@@ -745,12 +745,12 @@ void draw_color_picker_popup(UIConstraints *picker_button_con) {
|
|||||||
UIConstraints popup_con = default_constraints;
|
UIConstraints popup_con = default_constraints;
|
||||||
set_parent_constraint(&popup_con, picker_button_con);
|
set_parent_constraint(&popup_con, picker_button_con);
|
||||||
set_x_constraint(&popup_con, 0, UI_CONSTRAINT_FIXED);
|
set_x_constraint(&popup_con, 0, UI_CONSTRAINT_FIXED);
|
||||||
set_y_constraint(&popup_con, picker_button_con->height + 20, UI_CONSTRAINT_FIXED);
|
set_y_constraint(&popup_con, 1.4f, UI_CONSTRAINT_RELATIVE);
|
||||||
set_width_constraint(&popup_con, 450, UI_CONSTRAINT_RELATIVE_PIXELS);
|
set_width_constraint(&popup_con, 450, UI_CONSTRAINT_RELATIVE_PIXELS);
|
||||||
set_height_constraint(&popup_con, 480, UI_CONSTRAINT_RELATIVE_PIXELS);
|
set_height_constraint(&popup_con, 480, UI_CONSTRAINT_RELATIVE_PIXELS);
|
||||||
UiStyle popup_style = {
|
UiStyle popup_style = {
|
||||||
.bg_color = mult_color(COLOR_WHITE, 0.94f),
|
.bg_color = mult_color(COLOR_WHITE, 0.94f),
|
||||||
.border_radius = 8,
|
.border_radius = popup_con.width * 0.02f,
|
||||||
.align = ALIGN_TOP_LEFT,
|
.align = ALIGN_TOP_LEFT,
|
||||||
};
|
};
|
||||||
draw_quad(&popup_con, popup_style);
|
draw_quad(&popup_con, popup_style);
|
||||||
@@ -782,6 +782,7 @@ void draw_color_picker_popup(UIConstraints *picker_button_con) {
|
|||||||
};
|
};
|
||||||
if (draw_button(&button_con, "Revert", button_style, BUTTON_STATE_ACTIVE)) {
|
if (draw_button(&button_con, "Revert", button_style, BUTTON_STATE_ACTIVE)) {
|
||||||
zephr_ctx->ui.popup_open = false;
|
zephr_ctx->ui.popup_open = false;
|
||||||
|
zephr_ctx->ui.popup_parent_hash = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
button_style.align = ALIGN_BOTTOM_RIGHT;
|
button_style.align = ALIGN_BOTTOM_RIGHT;
|
||||||
@@ -792,9 +793,15 @@ void draw_color_picker_popup(UIConstraints *picker_button_con) {
|
|||||||
if (draw_button(&button_con, "Apply", button_style, BUTTON_STATE_ACTIVE)) {
|
if (draw_button(&button_con, "Apply", button_style, BUTTON_STATE_ACTIVE)) {
|
||||||
*zephr_ctx->ui.popup_revert_color = selected_color;
|
*zephr_ctx->ui.popup_revert_color = selected_color;
|
||||||
zephr_ctx->ui.popup_open = false;
|
zephr_ctx->ui.popup_open = false;
|
||||||
|
zephr_ctx->ui.popup_parent_hash = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
zephr_ctx->ui.popup_rect = (Rect){{popup_con.x, popup_con.y}, {popup_con.width, popup_con.height}};
|
Rect rect = {
|
||||||
|
{popup_con.x, popup_con.y},
|
||||||
|
{popup_con.width, popup_con.height},
|
||||||
|
};
|
||||||
|
|
||||||
|
zephr_ctx->ui.popup_rect = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_color_picker_with_location_and_id(u32 id, const char* file, int line, UIConstraints *constraints, Color *color, Alignment align, ButtonState state) {
|
void draw_color_picker_with_location_and_id(u32 id, const char* file, int line, UIConstraints *constraints, Color *color, Alignment align, ButtonState state) {
|
||||||
@@ -858,8 +865,12 @@ void draw_color_picker_with_location_and_id(u32 id, const char* file, int line,
|
|||||||
zephr_ctx->ui.popup_open = true;
|
zephr_ctx->ui.popup_open = true;
|
||||||
zephr_ctx->ui.popup_parent_constraints = con;
|
zephr_ctx->ui.popup_parent_constraints = con;
|
||||||
zephr_ctx->ui.popup_revert_color = color;
|
zephr_ctx->ui.popup_revert_color = color;
|
||||||
/* zephr_ctx->ui.popup_rect = (Rect){rect.pos, rect.size}; */
|
zephr_ctx->ui.popup_parent_hash = hash;
|
||||||
/* draw_color_picker_overlay(constraints); */
|
}
|
||||||
|
|
||||||
|
if (zephr_ctx->ui.popup_parent_hash == hash) {
|
||||||
|
zephr_ctx->ui.popup_open = true;
|
||||||
|
zephr_ctx->ui.popup_parent_constraints = con;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (is_hovered && state == BUTTON_STATE_ACTIVE && zephr_ctx->mouse.released && zephr_ctx->mouse.button == ZEPHR_MOUSE_BUTTON_LEFT) { */
|
/* if (is_hovered && state == BUTTON_STATE_ACTIVE && zephr_ctx->mouse.released && zephr_ctx->mouse.button == ZEPHR_MOUSE_BUTTON_LEFT) { */
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ typedef struct Rect {
|
|||||||
|
|
||||||
typedef struct UI {
|
typedef struct UI {
|
||||||
bool popup_open;
|
bool popup_open;
|
||||||
|
UiIdHash popup_parent_hash;
|
||||||
Rect popup_rect;
|
Rect popup_rect;
|
||||||
UIConstraints popup_parent_constraints;
|
UIConstraints popup_parent_constraints;
|
||||||
Color *popup_revert_color;
|
Color *popup_revert_color;
|
||||||
|
|||||||
@@ -853,6 +853,7 @@ bool zephr_should_quit(void) {
|
|||||||
|
|
||||||
zephr_ctx->cursor = ZEPHR_CURSOR_ARROW;
|
zephr_ctx->cursor = ZEPHR_CURSOR_ARROW;
|
||||||
zephr_ctx->mouse.released = false;
|
zephr_ctx->mouse.released = false;
|
||||||
|
zephr_ctx->mouse.pressed = false;
|
||||||
|
|
||||||
audio_update();
|
audio_update();
|
||||||
|
|
||||||
@@ -866,6 +867,7 @@ void zephr_swap_buffers(void) {
|
|||||||
if (zephr_ctx->ui.popup_open) {
|
if (zephr_ctx->ui.popup_open) {
|
||||||
draw_color_picker_popup(&zephr_ctx->ui.popup_parent_constraints);
|
draw_color_picker_popup(&zephr_ctx->ui.popup_parent_constraints);
|
||||||
}
|
}
|
||||||
|
zephr_ctx->ui.popup_open = false;
|
||||||
|
|
||||||
glXSwapBuffers(x11_display, x11_window);
|
glXSwapBuffers(x11_display, x11_window);
|
||||||
XDefineCursor(x11_display, x11_window, zephr_ctx->cursors[zephr_ctx->cursor]);
|
XDefineCursor(x11_display, x11_window, zephr_ctx->cursors[zephr_ctx->cursor]);
|
||||||
@@ -1064,10 +1066,6 @@ bool zephr_iter_events(ZephrEvent *event_out) {
|
|||||||
switch (xev.xbutton.button) {
|
switch (xev.xbutton.button) {
|
||||||
case Button1:
|
case Button1:
|
||||||
event_out->mouse.button = ZEPHR_MOUSE_BUTTON_LEFT;
|
event_out->mouse.button = ZEPHR_MOUSE_BUTTON_LEFT;
|
||||||
/* if (!inside_rect(&zephr_ctx->ui.popup_rect, &event_out->mouse.position)) { */
|
|
||||||
/* zephr_ctx->ui.popup_open = false; */
|
|
||||||
/* zephr_ctx->ui.active_element = 0; */
|
|
||||||
/* } */
|
|
||||||
break;
|
break;
|
||||||
case Button2:
|
case Button2:
|
||||||
event_out->mouse.button = ZEPHR_MOUSE_BUTTON_MIDDLE;
|
event_out->mouse.button = ZEPHR_MOUSE_BUTTON_MIDDLE;
|
||||||
|
|||||||
Reference in New Issue
Block a user