Make tooltip disappear on mouse leave
This commit is contained in:
parent
b4797dcd2d
commit
3bcbc76662
|
@ -72,12 +72,13 @@ static void oc_update_mouse_move(oc_input_state* state, f32 x, f32 y, f32 deltaX
|
||||||
mouse->wheel = (oc_vec2){ 0, 0 };
|
mouse->wheel = (oc_vec2){ 0, 0 };
|
||||||
mouse->lastUpdate = frameCounter;
|
mouse->lastUpdate = frameCounter;
|
||||||
}
|
}
|
||||||
|
mouse->posValid = true;
|
||||||
mouse->pos = (oc_vec2){ x, y };
|
mouse->pos = (oc_vec2){ x, y };
|
||||||
mouse->delta.x += deltaX;
|
mouse->delta.x += deltaX;
|
||||||
mouse->delta.y += deltaY;
|
mouse->delta.y += deltaY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void oc_update_mouse_wheel(oc_input_state* state, f32 deltaX, f32 deltaY)
|
static void oc_update_mouse_leave(oc_input_state* state)
|
||||||
{
|
{
|
||||||
u64 frameCounter = state->frameCounter;
|
u64 frameCounter = state->frameCounter;
|
||||||
oc_mouse_state* mouse = &state->mouse;
|
oc_mouse_state* mouse = &state->mouse;
|
||||||
|
@ -87,6 +88,21 @@ static void oc_update_mouse_wheel(oc_input_state* state, f32 deltaX, f32 deltaY)
|
||||||
mouse->wheel = (oc_vec2){ 0, 0 };
|
mouse->wheel = (oc_vec2){ 0, 0 };
|
||||||
mouse->lastUpdate = frameCounter;
|
mouse->lastUpdate = frameCounter;
|
||||||
}
|
}
|
||||||
|
mouse->posValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void oc_update_mouse_wheel(oc_input_state* state, f32 deltaX, f32 deltaY)
|
||||||
|
{
|
||||||
|
oc_log_info("wheel");
|
||||||
|
u64 frameCounter = state->frameCounter;
|
||||||
|
oc_mouse_state* mouse = &state->mouse;
|
||||||
|
if(mouse->lastUpdate != frameCounter)
|
||||||
|
{
|
||||||
|
mouse->posValid = false;
|
||||||
|
mouse->delta = (oc_vec2){ 0, 0 };
|
||||||
|
mouse->wheel = (oc_vec2){ 0, 0 };
|
||||||
|
mouse->lastUpdate = frameCounter;
|
||||||
|
}
|
||||||
mouse->wheel.x += deltaX;
|
mouse->wheel.x += deltaX;
|
||||||
mouse->wheel.y += deltaY;
|
mouse->wheel.y += deltaY;
|
||||||
}
|
}
|
||||||
|
@ -143,6 +159,10 @@ void oc_input_process_event(oc_input_state* state, oc_event* event)
|
||||||
oc_update_mouse_move(state, event->mouse.x, event->mouse.y, event->mouse.deltaX, event->mouse.deltaY);
|
oc_update_mouse_move(state, event->mouse.x, event->mouse.y, event->mouse.deltaX, event->mouse.deltaY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OC_EVENT_MOUSE_LEAVE:
|
||||||
|
oc_update_mouse_leave(state);
|
||||||
|
break;
|
||||||
|
|
||||||
case OC_EVENT_MOUSE_WHEEL:
|
case OC_EVENT_MOUSE_WHEEL:
|
||||||
oc_update_mouse_wheel(state, event->mouse.deltaX, event->mouse.deltaY);
|
oc_update_mouse_wheel(state, event->mouse.deltaX, event->mouse.deltaY);
|
||||||
break;
|
break;
|
||||||
|
@ -305,7 +325,14 @@ oc_keymod_flags oc_key_mods(oc_input_state* input)
|
||||||
|
|
||||||
oc_vec2 oc_mouse_position(oc_input_state* input)
|
oc_vec2 oc_mouse_position(oc_input_state* input)
|
||||||
{
|
{
|
||||||
|
if(input->mouse.posValid)
|
||||||
|
{
|
||||||
return (input->mouse.pos);
|
return (input->mouse.pos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ((oc_vec2){ -1, -1 });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
oc_vec2 oc_mouse_delta(oc_input_state* input)
|
oc_vec2 oc_mouse_delta(oc_input_state* input)
|
||||||
|
|
23
src/ui/ui.c
23
src/ui/ui.c
|
@ -1679,7 +1679,7 @@ oc_ui_sig oc_ui_checkbox(const char* name, bool* checked)
|
||||||
oc_ui_theme* theme = ui->theme;
|
oc_ui_theme* theme = ui->theme;
|
||||||
|
|
||||||
oc_ui_box* box;
|
oc_ui_box* box;
|
||||||
if (*checked)
|
if(*checked)
|
||||||
{
|
{
|
||||||
oc_ui_style defaultStyle = { .size.width = { OC_UI_SIZE_PIXELS, 16 },
|
oc_ui_style defaultStyle = { .size.width = { OC_UI_SIZE_PIXELS, 16 },
|
||||||
.size.height = { OC_UI_SIZE_PIXELS, 16 },
|
.size.height = { OC_UI_SIZE_PIXELS, 16 },
|
||||||
|
@ -1820,7 +1820,6 @@ oc_ui_box* oc_ui_slider(const char* label, f32* value)
|
||||||
trackStyle.floatTarget.c[trackAxis] = 0;
|
trackStyle.floatTarget.c[trackAxis] = 0;
|
||||||
trackStyle.floatTarget.c[secondAxis] = (thumbSize - trackThickness) / 2;
|
trackStyle.floatTarget.c[secondAxis] = (thumbSize - trackThickness) / 2;
|
||||||
|
|
||||||
|
|
||||||
oc_ui_style_mask styleMask = OC_UI_STYLE_SIZE
|
oc_ui_style_mask styleMask = OC_UI_STYLE_SIZE
|
||||||
| OC_UI_STYLE_BG_COLOR
|
| OC_UI_STYLE_BG_COLOR
|
||||||
| OC_UI_STYLE_ROUNDNESS;
|
| OC_UI_STYLE_ROUNDNESS;
|
||||||
|
@ -2196,21 +2195,25 @@ void oc_ui_tooltip(const char* label)
|
||||||
oc_ui_theme* theme = ui->theme;
|
oc_ui_theme* theme = ui->theme;
|
||||||
|
|
||||||
oc_vec2 p = oc_ui_mouse_position();
|
oc_vec2 p = oc_ui_mouse_position();
|
||||||
|
oc_ui_style containerStyle = { .floating.x = true,
|
||||||
oc_ui_container(label, 0)
|
.floating.y = true,
|
||||||
|
.floatTarget.x = p.x,
|
||||||
|
.floatTarget.y = p.y };
|
||||||
|
oc_ui_style_next(&containerStyle, OC_UI_STYLE_FLOAT);
|
||||||
|
oc_ui_container(label, OC_UI_FLAG_OVERLAY)
|
||||||
{
|
{
|
||||||
oc_ui_style arrowStyle = { .size.width = { OC_UI_SIZE_PIXELS, 24 },
|
oc_ui_style arrowStyle = { .size.width = { OC_UI_SIZE_PIXELS, 24 },
|
||||||
.size.height = { OC_UI_SIZE_PIXELS, 24 },
|
.size.height = { OC_UI_SIZE_PIXELS, 24 },
|
||||||
.floating.x = true,
|
.floating.x = true,
|
||||||
.floating.y = true,
|
.floating.y = true,
|
||||||
.floatTarget = { p.x, p.y + 5},
|
.floatTarget = { 0, 5 },
|
||||||
.bgColor = theme->palette->grey7 };
|
.bgColor = theme->palette->grey7 };
|
||||||
oc_ui_style_mask arrowMask = OC_UI_STYLE_SIZE
|
oc_ui_style_mask arrowMask = OC_UI_STYLE_SIZE
|
||||||
| OC_UI_STYLE_FLOAT
|
| OC_UI_STYLE_FLOAT
|
||||||
| OC_UI_STYLE_BG_COLOR;
|
| OC_UI_STYLE_BG_COLOR;
|
||||||
oc_ui_style_next(&arrowStyle, arrowMask);
|
oc_ui_style_next(&arrowStyle, arrowMask);
|
||||||
|
|
||||||
oc_ui_box* arrow = oc_ui_box_make("arrow", OC_UI_FLAG_OVERLAY | OC_UI_FLAG_DRAW_PROC);
|
oc_ui_box* arrow = oc_ui_box_make("arrow", OC_UI_FLAG_DRAW_PROC);
|
||||||
oc_ui_box_set_draw_proc(arrow, oc_ui_tooltip_arrow_draw, 0);
|
oc_ui_box_set_draw_proc(arrow, oc_ui_tooltip_arrow_draw, 0);
|
||||||
|
|
||||||
oc_ui_style contentsStyle = { .size.width = { OC_UI_SIZE_CHILDREN },
|
oc_ui_style contentsStyle = { .size.width = { OC_UI_SIZE_CHILDREN },
|
||||||
|
@ -2219,7 +2222,7 @@ void oc_ui_tooltip(const char* label)
|
||||||
.layout.margin.y = 8,
|
.layout.margin.y = 8,
|
||||||
.floating.x = true,
|
.floating.x = true,
|
||||||
.floating.y = true,
|
.floating.y = true,
|
||||||
.floatTarget = { p.x + 24, p.y },
|
.floatTarget = { 24, 0 },
|
||||||
.bgColor = theme->palette->grey7,
|
.bgColor = theme->palette->grey7,
|
||||||
.color = theme->bg0,
|
.color = theme->bg0,
|
||||||
.roundness = 6 };
|
.roundness = 6 };
|
||||||
|
@ -2231,7 +2234,7 @@ void oc_ui_tooltip(const char* label)
|
||||||
| OC_UI_STYLE_ROUNDNESS;
|
| OC_UI_STYLE_ROUNDNESS;
|
||||||
oc_ui_style_next(&contentsStyle, contentsMask);
|
oc_ui_style_next(&contentsStyle, contentsMask);
|
||||||
|
|
||||||
oc_ui_box* contents = oc_ui_box_begin("contents", OC_UI_FLAG_OVERLAY | OC_UI_FLAG_DRAW_BACKGROUND);
|
oc_ui_box* contents = oc_ui_box_begin("contents", OC_UI_FLAG_DRAW_BACKGROUND);
|
||||||
|
|
||||||
oc_ui_label(label);
|
oc_ui_label(label);
|
||||||
|
|
||||||
|
@ -2280,7 +2283,7 @@ void oc_ui_menu_begin(const char* label)
|
||||||
.size.height = { OC_UI_SIZE_CHILDREN },
|
.size.height = { OC_UI_SIZE_CHILDREN },
|
||||||
.layout.margin.x = 8,
|
.layout.margin.x = 8,
|
||||||
.layout.margin.y = 4,
|
.layout.margin.y = 4,
|
||||||
.bgColor = {0, 0, 0, 0} },
|
.bgColor = { 0, 0, 0, 0 } },
|
||||||
OC_UI_STYLE_SIZE | OC_UI_STYLE_LAYOUT_MARGINS | OC_UI_STYLE_BG_COLOR);
|
OC_UI_STYLE_SIZE | OC_UI_STYLE_LAYOUT_MARGINS | OC_UI_STYLE_BG_COLOR);
|
||||||
|
|
||||||
oc_ui_pattern hoverPattern = { 0 };
|
oc_ui_pattern hoverPattern = { 0 };
|
||||||
|
@ -2435,7 +2438,7 @@ void oc_ui_select_popup_draw_arrow(oc_ui_box* box, void* data)
|
||||||
oc_matrix_pop();
|
oc_matrix_pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void oc_ui_select_popup_draw_checkmark(oc_ui_box *box, void *data)
|
void oc_ui_select_popup_draw_checkmark(oc_ui_box* box, void* data)
|
||||||
{
|
{
|
||||||
oc_mat2x3 matrix = {
|
oc_mat2x3 matrix = {
|
||||||
box->rect.w, 0, box->rect.x,
|
box->rect.w, 0, box->rect.x,
|
||||||
|
|
Loading…
Reference in New Issue