diff options
| author | kasull <qsullian@gmail.com> | 2026-03-03 12:22:40 -0500 |
|---|---|---|
| committer | kasull <qsullian@gmail.com> | 2026-03-03 12:22:40 -0500 |
| commit | 5c4e9c8b140b14ba9671b8efcc47d71c6c4f2217 (patch) | |
| tree | c011086a55a9fff0130a71a66f1c06029410b135 /src/gui | |
| parent | 413ef78504278d37080b9b59a652e4bbd5e2a0fc (diff) | |
ui header/menu and add undo/redo for creation actions
full-width toolbar/menubar layer
move save into file menu and add edit menu actions for undo/redo
menubar dropdown interaction modal
update header/view-type labels and menu layout behavior
creation-history tracking for walls and polygons
undo (ctrl+z) and redo (ctrl+r) in 2d editor
improve list/button visual states
Diffstat (limited to 'src/gui')
| -rw-r--r-- | src/gui/button.cpp | 5 | ||||
| -rw-r--r-- | src/gui/list.cpp | 32 |
2 files changed, 27 insertions, 10 deletions
diff --git a/src/gui/button.cpp b/src/gui/button.cpp index 1548e0e..e66130b 100644 --- a/src/gui/button.cpp +++ b/src/gui/button.cpp @@ -12,11 +12,12 @@ void gui_button_draw_fn( void* ptr ) { U8 hover = inbounds && !active; CLR border = gui_is_fg_window( btn )? ui_clr.border : ui_clr.border_inactive; - if( active ) - border = { 0.f, 1.f, 0.f, 1.f }; CLR fill = ui_clr.bg_sec; CLR txt = ui_clr.txt; + if( active ) { + fill = CLR::blend( ui_clr.bg_sec, ui_clr.border, 0.22f ); + } if( hover ) { fill = ui_clr.border; txt = CLR::BLACK(); diff --git a/src/gui/list.cpp b/src/gui/list.cpp index 90f2f49..2feff47 100644 --- a/src/gui/list.cpp +++ b/src/gui/list.cpp @@ -10,18 +10,33 @@ void gui_list_draw_fn( void* ptr ) { I32 y = gui_rely( list ); gui_draw_str( x, y, ALIGN_L, FNT_JPN12, ui_clr.txt, list->name ); - y += LIST_TITLE_OFFSET; + I32 panel_y = y + LIST_TITLE_OFFSET; CLR col = gui_is_fg_window( list )? ui_clr.border : ui_clr.border_inactive; - gui_draw_frect( x, y, list->w, list->h, col ); - gui_draw_frect( x+1, y+1, list->w-2, list->h-2, ui_clr.bg_sec ); + gui_draw_frect( x, panel_y, list->w, list->h, col ); + gui_draw_frect( x + 1, panel_y + 1, list->w - 2, list->h - 2, ui_clr.bg_sec ); + + I32 txt_h = 12; + gui_draw_get_str_bounds( 0, &txt_h, FNT_JPN12, "ag" ); I32 yoff = 0; list->plist->each( fn( GUI_LIST_ENTRY* e ) { U8 selected = e->val == *list->pval; - CLR col = selected? ui_clr.txt : ui_clr.txt_inactive; + I32 row_x = x + 1; + I32 row_y = panel_y + 1 + yoff; + I32 row_w = list->w - 2; + if( row_w < 1 ) row_w = 1; + I32 row_h = LIST_ITEM_HEIGHT; + + if( selected ) { + CLR sel_bg = CLR::blend( ui_clr.border, ui_clr.bg, 0.70f ); + gui_draw_frect( row_x, row_y, row_w, row_h, sel_bg ); + } + + CLR col = selected ? ui_clr.txt : ui_clr.txt_inactive; + I32 txt_y = row_y + ( row_h - txt_h ) / 2; - gui_draw_str( x + 4, y + yoff + 6, ALIGN_L, FNT_JPN12, col, e->title ); + gui_draw_str( row_x + 3, txt_y, ALIGN_L, FNT_JPN12, col, e->title ); yoff += LIST_ITEM_HEIGHT; } ); } @@ -31,6 +46,7 @@ void gui_list_input_fn( void* ptr ) { I32 x = gui_relx( list ); I32 y = gui_rely( list ); + I32 panel_y = y + LIST_TITLE_OFFSET; I32 w = list->w; I32 h = list->h; @@ -38,12 +54,12 @@ void gui_list_input_fn( void* ptr ) { I32 mx, my; gui_cursor_pos( &mx, &my ); - U8 inbounds = mx >= x && mx <= x + w && my >= y && my <= y + h; + U8 inbounds = mx >= x && mx <= x + w && my >= panel_y && my <= panel_y + h; if( !inbounds ) return; - I32 diff = my - y; - I32 idx = diff / LIST_ITEM_HEIGHT - 1; + I32 diff = my - panel_y; + I32 idx = diff / LIST_ITEM_HEIGHT; if( idx >= list->plist->size ) idx = list->plist->size - 1; if( idx < 0 ) idx = 0; |
