finally convert input help menu to ui lib

main
Patrick Cleaveliln 2025-07-23 00:34:24 +00:00
parent 91a44aa884
commit b9c4cf1fcc
3 changed files with 41 additions and 74 deletions

View File

@ -94,61 +94,44 @@ draw :: proc(state: ^State) {
panel->render(state) panel->render(state)
} }
} }
{
if state.mode != .Insert && state.current_input_map.show_help {
@(thread_local)
layout: ui.UI_Layout
ui.open_element(new_ui, nil,
{
dir = .TopToBottom,
kind = {ui.Fit{}, ui.Fit{}},
pos = {state.screen_width - layout.size.x - state.source_font_width, state.screen_height - layout.size.y - state.source_font_height},
floating = true,
},
style = {
border = {.Left, .Right, .Top, .Bottom},
border_color = .Background4,
background_color = .Background3
}
)
{
for key, action in state.current_input_map.key_actions {
ui.open_element(new_ui, fmt.tprintf("%s - %s", key, action.description), {})
ui.close_element(new_ui)
}
for key, action in state.current_input_map.ctrl_key_actions {
ui.open_element(new_ui, fmt.tprintf("<C>-%s - %s", key, action.description), {})
ui.close_element(new_ui)
}
}
layout = ui.close_element(new_ui)
}
}
} }
ui.close_element(new_ui) ui.close_element(new_ui)
ui.compute_layout(new_ui) ui.compute_layout(new_ui)
ui.draw(new_ui, state) ui.draw(new_ui, state)
if state.mode != .Insert && state.current_input_map.show_help {
longest_description := 0;
for key, action in state.current_input_map.key_actions {
if len(action.description) > longest_description {
longest_description = len(action.description);
}
}
for key, action in state.current_input_map.ctrl_key_actions {
if len(action.description) > longest_description {
longest_description = len(action.description);
}
}
longest_description += 8;
helper_height := state.source_font_height * (len(state.current_input_map.key_actions) + len(state.current_input_map.ctrl_key_actions));
offset_from_bottom := state.source_font_height * 2;
core.draw_rect(
state,
state.screen_width - longest_description * state.source_font_width,
state.screen_height - helper_height - offset_from_bottom,
longest_description*state.source_font_width,
helper_height,
.Background2
);
index := 0;
for key, action in state.current_input_map.key_actions {
core.draw_text(
state,
fmt.tprintf("%s - %s", key, action.description),
state.screen_width - longest_description * state.source_font_width,
state.screen_height - helper_height + index * state.source_font_height - offset_from_bottom
);
index += 1;
}
for key, action in state.current_input_map.ctrl_key_actions {
core.draw_text(
state,
fmt.tprintf("<C>-%s - %s", key, action.description),
state.screen_width - longest_description * state.source_font_width,
state.screen_height - helper_height + index * state.source_font_height - offset_from_bottom
);
index += 1;
}
}
sdl2.RenderPresent(state.sdl_renderer); sdl2.RenderPresent(state.sdl_renderer);
} }

View File

@ -269,8 +269,9 @@ file_buffer_input_actions :: proc(input_map: ^core.InputActions) {
} }
}, "Save file") }, "Save file")
core.register_key_action(input_map, .G, core.new_input_actions(), "Go commands"); go_actions := core.new_input_actions(show_help = true)
file_buffer_go_actions(&(&input_map.key_actions[.G]).action.(core.InputActions)); file_buffer_go_actions(&go_actions);
core.register_key_action(input_map, .G, go_actions, "Go commands");
core.register_key_action(input_map, .V, proc(state: ^core.State, user_data: rawptr) { core.register_key_action(input_map, .V, proc(state: ^core.State, user_data: rawptr) {
buffer := &(&(transmute(^core.Panel)user_data).type.(core.FileBufferPanel)).buffer buffer := &(&(transmute(^core.Panel)user_data).type.(core.FileBufferPanel)).buffer
@ -492,7 +493,7 @@ file_buffer_text_input_actions :: proc(input_map: ^core.InputActions) {
// Copy-Paste // Copy-Paste
{ {
{ {
yank_actions := core.new_input_actions() yank_actions := core.new_input_actions(show_help = true)
defer core.register_key_action(input_map, .Y, yank_actions) defer core.register_key_action(input_map, .Y, yank_actions)
core.register_key_action(&yank_actions, .Y, proc(state: ^core.State, user_data: rawptr) { core.register_key_action(&yank_actions, .Y, proc(state: ^core.State, user_data: rawptr) {

View File

@ -193,7 +193,11 @@ close_element :: proc(state: ^State, loc := #caller_location) -> UI_Layout {
} }
} }
} }
case Grow: { /* Done in the Grow pass */ } case Grow: {
if _, ok := e.parent.?; !ok {
e.layout.size = state.max_size
}
}
} }
state.current_open_element = e.parent state.current_open_element = e.parent
@ -422,22 +426,6 @@ draw :: proc(state: ^State, core_state: ^core.State) {
switch v in e.kind { switch v in e.kind {
case nil: { case nil: {
// core.draw_rect(
// core_state,
// e.layout.pos.x,
// e.layout.pos.y,
// e.layout.size.x,
// e.layout.size.y,
// e.style.background_color,
// );
// core.draw_rect_outline(
// core_state,
// e.layout.pos.x,
// e.layout.pos.y,
// e.layout.size.x,
// e.layout.size.y,
// .Background4
// );
} }
case UI_Element_Kind_Text: { case UI_Element_Kind_Text: {
core.draw_text(core_state, string(v), e.layout.pos.x, e.layout.pos.y); core.draw_text(core_state, string(v), e.layout.pos.x, e.layout.pos.y);
@ -449,11 +437,6 @@ draw :: proc(state: ^State, core_state: ^core.State) {
v.fn(core_state, e^, v.user_data) v.fn(core_state, e^, v.user_data)
} }
} }
}
// Separate loop done to draw border over elements
for i in 0..<state.num_curr {
e := &state.curr_elements[i]
if .Left in e.style.border { if .Left in e.style.border {
core.draw_line( core.draw_line(