Skip to content

Commit e56eb07

Browse files
committed
introduce extra query selection state, to allow mouse-driven controls for deselecting a window's query ui, then reselecting it (e.g. to copy things from source view)
1 parent abb2dd7 commit e56eb07

File tree

2 files changed

+44
-21
lines changed

2 files changed

+44
-21
lines changed

src/df/gfx/df_gfx.c

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
15491549
{
15501550
ws->focused_panel = panel;
15511551
ws->menu_bar_focused = 0;
1552+
ws->query_view_selected = 0;
15521553
}
15531554
}break;
15541555

@@ -4943,6 +4944,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
49434944
view->query_mark = txt_pt(1, 1);
49444945
}
49454946
ws->query_view_stack_top = view;
4947+
ws->query_view_selected = 1;
49464948
view->next = &df_g_nil_view;
49474949

49484950
scratch_end(scratch);
@@ -4954,23 +4956,43 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
49544956
//
49554957
{
49564958
F32 rate = 1 - pow_f32(2, (-40.f * df_dt()));
4957-
F32 query_view_t_target = !df_view_is_nil(ws->query_view_stack_top);
4958-
F32 diff = abs_f32(query_view_t_target - ws->query_view_t);
4959-
if(diff > 0.005f)
4959+
4960+
// rjf: animate query view selection transition
49604961
{
4961-
df_gfx_request_frame();
4962+
F32 target = (F32)!!ws->query_view_selected;
4963+
F32 diff = abs_f32(target - ws->query_view_selected_t);
4964+
if(diff > 0.005f)
4965+
{
4966+
df_gfx_request_frame();
4967+
if(diff < 0.005f)
4968+
{
4969+
ws->query_view_selected_t = target;
4970+
}
4971+
ws->query_view_selected_t += (target - ws->query_view_selected_t) * rate;
4972+
}
49624973
}
4963-
if(diff < 0.005f)
4974+
4975+
// rjf: animate query view open/close transition
49644976
{
4965-
ws->query_view_t = query_view_t_target;
4977+
F32 query_view_t_target = !df_view_is_nil(ws->query_view_stack_top);
4978+
F32 diff = abs_f32(query_view_t_target - ws->query_view_t);
4979+
if(diff > 0.005f)
4980+
{
4981+
df_gfx_request_frame();
4982+
}
4983+
if(diff < 0.005f)
4984+
{
4985+
ws->query_view_t = query_view_t_target;
4986+
}
4987+
ws->query_view_t += (query_view_t_target - ws->query_view_t) * rate;
49664988
}
4967-
ws->query_view_t += (query_view_t_target - ws->query_view_t) * rate;
49684989
}
49694990

49704991
////////////////////////////
49714992
//- rjf: build query
49724993
//
4973-
if(!df_view_is_nil(ws->query_view_stack_top)) UI_Focus((window_is_focused && !ui_any_ctx_menu_is_open() && !ws->menu_bar_focused) ? UI_FocusKind_On : UI_FocusKind_Off)
4994+
if(!df_view_is_nil(ws->query_view_stack_top))
4995+
UI_Focus((window_is_focused && !ui_any_ctx_menu_is_open() && !ws->menu_bar_focused && ws->query_view_selected) ? UI_FocusKind_On : UI_FocusKind_Off)
49744996
{
49754997
DF_View *view = ws->query_view_stack_top;
49764998
DF_CmdSpec *cmd_spec = ws->query_cmd_spec;
@@ -5043,8 +5065,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
50435065
str8_lit("###query_text_input"));
50445066
if(sig.pressed)
50455067
{
5046-
DF_CmdParams p = df_cmd_params_from_window(ws);
5047-
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel));
5068+
ws->query_view_selected = 1;
50485069
}
50495070
}
50505071
}
@@ -5059,17 +5080,18 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
50595080
}
50605081

50615082
//- rjf: query submission
5083+
if((ui_is_focus_active() || (window_is_focused && !ui_any_ctx_menu_is_open() && !ws->menu_bar_focused && !ws->query_view_selected)) &&
5084+
os_key_press(events, ws->os, 0, OS_Key_Esc))
5085+
{
5086+
DF_CmdParams params = df_cmd_params_from_window(ws);
5087+
df_push_cmd__root(&params, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CancelQuery));
5088+
}
50625089
if(ui_is_focus_active())
50635090
{
5064-
DF_View *view = ws->query_view_stack_top;
5065-
if(os_key_press(events, ws->os, 0, OS_Key_Esc))
5066-
{
5067-
DF_CmdParams params = df_cmd_params_from_window(ws);
5068-
df_push_cmd__root(&params, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CancelQuery));
5069-
}
5070-
else if(os_key_press(events, ws->os, 0, OS_Key_Return))
5091+
if(os_key_press(events, ws->os, 0, OS_Key_Return))
50715092
{
50725093
Temp scratch = scratch_begin(&arena, 1);
5094+
DF_View *view = ws->query_view_stack_top;
50735095
DF_CmdParams params = df_cmd_params_from_window(ws);
50745096
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view);
50755097
String8 error = df_cmd_params_apply_spec_query(scratch.arena, &ctrl_ctx, &params, ws->query_cmd_spec, str8(view->query_buffer, view->query_string_size));
@@ -5090,13 +5112,12 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
50905112
UI_Signal sig = ui_signal_from_box(query_container_box);
50915113
if(sig.pressed)
50925114
{
5093-
DF_CmdParams p = df_cmd_params_from_window(ws);
5094-
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel));
5115+
ws->query_view_selected = 1;
50955116
}
50965117
}
50975118

50985119
//- rjf: build darkening overlay for rest of screen
5099-
UI_BackgroundColor(mix_4f32(df_rgba_from_theme_color(DF_ThemeColor_InactivePanelOverlay), v4f32(0, 0, 0, 0), 1-ws->query_view_t))
5120+
UI_BackgroundColor(mix_4f32(df_rgba_from_theme_color(DF_ThemeColor_InactivePanelOverlay), v4f32(0, 0, 0, 0), 1-ws->query_view_selected_t))
51005121
UI_Rect(window_rect)
51015122
{
51025123
ui_build_box_from_key(UI_BoxFlag_DrawBackground, ui_key_zero());
@@ -5202,7 +5223,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
52025223
if(!df_panel_is_nil(panel->first)) {continue;}
52035224
B32 panel_is_focused = (window_is_focused &&
52045225
!ws->menu_bar_focused &&
5205-
!query_is_open &&
5226+
(!query_is_open || !ws->query_view_selected) &&
52065227
!ui_any_ctx_menu_is_open() &&
52075228
!hover_eval_is_open &&
52085229
ws->focused_panel == panel);

src/df/gfx/df_gfx.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,8 @@ struct DF_Window
569569
DF_CmdSpec *query_cmd_spec;
570570
DF_CmdParams query_cmd_params;
571571
DF_View *query_view_stack_top;
572+
B32 query_view_selected;
573+
F32 query_view_selected_t;
572574
F32 query_view_t;
573575

574576
// rjf: hover eval stable state

0 commit comments

Comments
 (0)