add hovered box ratio
This commit is contained in:
parent
051f166663
commit
f7be7a9297
34
src/pp/pp.c
34
src/pp/pp.c
@ -1993,8 +1993,7 @@ void PP_UpdateUser(void)
|
|||||||
// window_border_color = LerpSrgbU32(base_border_color, Color_White, 0.25);
|
// window_border_color = LerpSrgbU32(base_border_color, Color_White, 0.25);
|
||||||
|
|
||||||
// u32 highlight = LerpSrgbU32(base_border_color, Rgb32F(0.25, 0.25, 0.25), rep.hot);
|
// u32 highlight = LerpSrgbU32(base_border_color, Rgb32F(0.25, 0.25, 0.25), rep.hot);
|
||||||
u32 highlight = LerpSrgbU32(base_border_color, Rgb32F(0.5, 0.5, 0.5), rep.hot);
|
window_border_color = LerpSrgbU32(window_border_color, Rgb32F(0.5, 0.5, 0.5), rep.hot);
|
||||||
window_border_color = highlight;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2018,7 +2017,7 @@ void PP_UpdateUser(void)
|
|||||||
UI_Push(Rounding, UI_RPIX(0));
|
UI_Push(Rounding, UI_RPIX(0));
|
||||||
UI_Push(ChildLayoutAxis, Axis_X);
|
UI_Push(ChildLayoutAxis, Axis_X);
|
||||||
UI_Push(Width, UI_FILL(1, 0));
|
UI_Push(Width, UI_FILL(1, 0));
|
||||||
UI_Push(Height, UI_FNT(2, 0));
|
UI_Push(Height, UI_FNT(2, 1));
|
||||||
UI_SetNext(Flags, UI_BoxFlag_DrawText | UI_BoxFlag_Interactable);
|
UI_SetNext(Flags, UI_BoxFlag_DrawText | UI_BoxFlag_Interactable);
|
||||||
UI_PushCP(UI_BuildBox(titlebar_key));
|
UI_PushCP(UI_BuildBox(titlebar_key));
|
||||||
{
|
{
|
||||||
@ -2047,29 +2046,42 @@ void PP_UpdateUser(void)
|
|||||||
UI_SetNext(Rounding, 0);
|
UI_SetNext(Rounding, 0);
|
||||||
UI_PushCP(UI_BuildRow(UI_NilKey));
|
UI_PushCP(UI_BuildRow(UI_NilKey));
|
||||||
{
|
{
|
||||||
UI_BuildSpacer(UI_PIX(window_border + 1, 0));
|
f32 padding = window_border;
|
||||||
|
UI_BuildSpacer(UI_PIX(padding, 1));
|
||||||
{
|
{
|
||||||
UI_SetNext(Tint, 0);
|
UI_SetNext(Tint, 0);
|
||||||
UI_SetNext(Rounding, 0);
|
UI_SetNext(Rounding, 0);
|
||||||
|
UI_SetNext(Width, UI_FILL(1, 0));
|
||||||
UI_PushCP(UI_BuildColumn(UI_NilKey));
|
UI_PushCP(UI_BuildColumn(UI_NilKey));
|
||||||
{
|
{
|
||||||
u32 count = 10;
|
u32 count = 10;
|
||||||
for (u32 i = 0; i < count; ++i)
|
for (u32 i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
UI_BuildDivider(UI_PIX(1, 0), divider_color);
|
UI_BuildDivider(UI_PIX(1, 1), divider_color);
|
||||||
|
|
||||||
UI_Key btn_key = UI_KeyF("btn%F", FmtSint(i));
|
UI_Key btn_key = UI_KeyF("btn%F", FmtSint(i));
|
||||||
UI_Report rep = UI_ReportFromKey(btn_key);
|
UI_Report rep = UI_ReportFromKey(btn_key);
|
||||||
u32 color = LerpSrgbU32(0, Rgb32(0x10, 0x3c, 0x4c), rep.hot);
|
|
||||||
u32 border_color = LerpSrgbU32(0, Rgb32(0x00, 0x79, 0xa6), rep.hot);
|
u32 hovered_color = Rgb32(0x10, 0x3c, 0x4c);
|
||||||
|
u32 pressed_color = Alpha32F(hovered_color, 0.25);
|
||||||
|
|
||||||
|
f32 hot = rep.hot;
|
||||||
|
f32 active = rep.active;
|
||||||
|
f32 hovered = rep.hovered;
|
||||||
|
|
||||||
|
u32 color = 0;
|
||||||
|
u32 border_color = 0;
|
||||||
|
color = LerpSrgbU32(color, hovered_color, hot);
|
||||||
|
color = LerpSrgbU32(color, pressed_color, active * hovered);
|
||||||
|
border_color = LerpSrgbU32(border_color, Rgb32(0x00, 0x79, 0xa6), hot);
|
||||||
|
|
||||||
String button_text = UI_StringF("Button %F", FmtSint(i));
|
String button_text = UI_StringF("Button %F", FmtSint(i));
|
||||||
|
|
||||||
UI_SetNext(BorderColor, border_color);
|
UI_SetNext(BorderColor, border_color);
|
||||||
UI_SetNext(BackgroundColor, color);
|
UI_SetNext(BackgroundColor, color);
|
||||||
UI_SetNext(Rounding, UI_RPIX(2));
|
UI_SetNext(Rounding, UI_RPIX(5));
|
||||||
UI_SetNext(Width, UI_FILL(1, 0));
|
UI_SetNext(Width, UI_FILL(1, 0));
|
||||||
UI_SetNext(Height, UI_FNT(1.5, 0));
|
UI_SetNext(Height, UI_FNT(1.5, 1));
|
||||||
UI_SetNext(Text, button_text);
|
UI_SetNext(Text, button_text);
|
||||||
UI_SetNext(ChildAlignment, UI_Alignment_Center);
|
UI_SetNext(ChildAlignment, UI_Alignment_Center);
|
||||||
UI_SetNext(Flags, UI_BoxFlag_DrawText | UI_BoxFlag_Interactable);
|
UI_SetNext(Flags, UI_BoxFlag_DrawText | UI_BoxFlag_Interactable);
|
||||||
@ -2080,11 +2092,11 @@ void PP_UpdateUser(void)
|
|||||||
LogInfoF("%F pressed", FmtString(button_text));
|
LogInfoF("%F pressed", FmtString(button_text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
UI_BuildSpacer(UI_PIX(padding, 1));
|
||||||
}
|
}
|
||||||
UI_PopCP();
|
UI_PopCP();
|
||||||
}
|
}
|
||||||
UI_BuildSpacer(UI_PIX(window_border + 1, 0));
|
UI_BuildSpacer(UI_PIX(padding, 1));
|
||||||
}
|
}
|
||||||
UI_PopCP();
|
UI_PopCP();
|
||||||
|
|
||||||
|
|||||||
@ -562,10 +562,10 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
if (g->build_arena != 0 && g->back_build_arena != 0)
|
if (g->build_arena != 0 && g->back_build_arena != 0)
|
||||||
{
|
{
|
||||||
/* Locate boxes */
|
/* Locate boxes */
|
||||||
UI_Box *old_active_box = UI_FrontBoxFromKey(g->active_box);
|
|
||||||
UI_Box *old_hovered_box = UI_FrontBoxFromKey(g->hovered_box);
|
UI_Box *old_hovered_box = UI_FrontBoxFromKey(g->hovered_box);
|
||||||
|
UI_Box *old_active_box = UI_FrontBoxFromKey(g->active_box);
|
||||||
|
UI_Box *hovered_box = 0;
|
||||||
UI_Box *active_box = old_active_box;
|
UI_Box *active_box = old_active_box;
|
||||||
UI_Box *hovered_box = active_box;
|
|
||||||
|
|
||||||
/* Update cursor pos */
|
/* Update cursor pos */
|
||||||
for (u64 cev_index = 0; cev_index < controller_events.count; ++cev_index)
|
for (u64 cev_index = 0; cev_index < controller_events.count; ++cev_index)
|
||||||
@ -588,8 +588,9 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
hovered_box = box;
|
hovered_box = box;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
box->report.m1_ups = 0;
|
||||||
|
box->report.m1_downs = 0;
|
||||||
box->report.m1_presses = 0;
|
box->report.m1_presses = 0;
|
||||||
box->report.m1_releases = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update state from controller events */
|
/* Update state from controller events */
|
||||||
@ -604,13 +605,12 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
{
|
{
|
||||||
if (cev.button == Btn_M1)
|
if (cev.button == Btn_M1)
|
||||||
{
|
{
|
||||||
UI_Box *box = hovered_box;
|
if (hovered_box)
|
||||||
if (box)
|
|
||||||
{
|
{
|
||||||
++box->report.m1_presses;
|
++hovered_box->report.m1_downs;
|
||||||
box->report.m1_held = 1;
|
hovered_box->report.m1_held = 1;
|
||||||
box->report.last_m1_offset = SubVec2(g->cursor_pos, box->p0);
|
hovered_box->report.last_m1_offset = SubVec2(g->cursor_pos, hovered_box->p0);
|
||||||
active_box = box;
|
active_box = hovered_box;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@ -619,11 +619,14 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
{
|
{
|
||||||
if (cev.button == Btn_M1)
|
if (cev.button == Btn_M1)
|
||||||
{
|
{
|
||||||
UI_Box *box = active_box;
|
if (active_box)
|
||||||
if (box)
|
|
||||||
{
|
{
|
||||||
++box->report.m1_releases;
|
if (active_box == hovered_box)
|
||||||
box->report.m1_held = 0;
|
{
|
||||||
|
++active_box->report.m1_presses;
|
||||||
|
}
|
||||||
|
++active_box->report.m1_ups;
|
||||||
|
active_box->report.m1_held = 0;
|
||||||
active_box = 0;
|
active_box = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -636,28 +639,15 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
{
|
{
|
||||||
UI_Box *box = g->boxes_pre[pre_index];
|
UI_Box *box = g->boxes_pre[pre_index];
|
||||||
UI_Report *report = &box->report;
|
UI_Report *report = &box->report;
|
||||||
f32 target_hot = 0;
|
f32 target_hot = box == active_box || (box == hovered_box && (box == active_box || active_box == 0));
|
||||||
f32 target_active = 0;
|
f32 target_active = box == active_box;
|
||||||
f32 hot_blend_rate = 1;
|
f32 target_hovered = box == hovered_box;
|
||||||
f32 active_blend_rate = 1;
|
f32 hot_blend_rate = target_hot == 1 ? 1 : (15 * dt);
|
||||||
if (box == hovered_box)
|
f32 active_blend_rate = target_active == 1 ? 1 : (15 * dt);
|
||||||
{
|
f32 hovered_blend_rate = target_hovered == 1 ? 1 : (15 * dt);
|
||||||
target_hot = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hot_blend_rate = 15 * dt;
|
|
||||||
}
|
|
||||||
if (box == active_box)
|
|
||||||
{
|
|
||||||
target_active = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
active_blend_rate = 15 * dt;
|
|
||||||
}
|
|
||||||
report->hot = LerpF32(report->hot, target_hot, hot_blend_rate);
|
report->hot = LerpF32(report->hot, target_hot, hot_blend_rate);
|
||||||
report->active = LerpF32(report->active, target_active, active_blend_rate);
|
report->active = LerpF32(report->active, target_active, active_blend_rate);
|
||||||
|
report->hovered = LerpF32(report->hovered, target_hovered, hovered_blend_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
g->hovered_box = hovered_box ? hovered_box->key : UI_NilKey;
|
g->hovered_box = hovered_box ? hovered_box->key : UI_NilKey;
|
||||||
|
|||||||
@ -177,11 +177,13 @@ Struct(UI_Report)
|
|||||||
{
|
{
|
||||||
b32 m1_held;
|
b32 m1_held;
|
||||||
|
|
||||||
|
f32 hovered;
|
||||||
f32 hot;
|
f32 hot;
|
||||||
f32 active;
|
f32 active;
|
||||||
|
|
||||||
|
b32 m1_downs;
|
||||||
|
b32 m1_ups;
|
||||||
b32 m1_presses;
|
b32 m1_presses;
|
||||||
b32 m1_releases;
|
|
||||||
Vec2 last_m1_offset;
|
Vec2 last_m1_offset;
|
||||||
|
|
||||||
/* Where was this box last rendered in screen coordinates */
|
/* Where was this box last rendered in screen coordinates */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user