diff options
Diffstat (limited to 'src/gui/button.cpp')
| -rw-r--r-- | src/gui/button.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/gui/button.cpp b/src/gui/button.cpp index 2b57772..e66130b 100644 --- a/src/gui/button.cpp +++ b/src/gui/button.cpp @@ -5,15 +5,31 @@ void gui_button_draw_fn( void* ptr ) { I32 x = gui_relx( btn ); I32 y = gui_rely( btn ); + I32 mx, my; + gui_cursor_pos( &mx, &my ); + U8 inbounds = mx >= x && mx <= x + btn->w && my >= y && my <= y + btn->h; + U8 active = btn->held && inbounds && gui_mbutton_down( GUI_MBTNLEFT ); + U8 hover = inbounds && !active; + + CLR border = gui_is_fg_window( btn )? ui_clr.border : ui_clr.border_inactive; + + 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(); + } - CLR col = gui_is_fg_window( btn )? ui_clr.border : ui_clr.border_inactive; - gui_draw_frect( x, y, btn->w, btn->h, col ); - gui_draw_frect( x+1, y+1, btn->w-2, btn->h-2, ui_clr.bg_sec ); + gui_draw_frect( x, y, btn->w, btn->h, border ); + gui_draw_frect( x+1, y+1, btn->w-2, btn->h-2, fill ); I32 middle = x + btn->w/2; I32 middle_y = y + btn->h/2 - 7; - gui_draw_str( middle, middle_y, ALIGN_C, FNT_JPN12, ui_clr.txt, btn->name ); + gui_draw_str( middle, middle_y, ALIGN_C, FNT_JPN12, txt, btn->name ); } void gui_button_input_fn( void* ptr ) { |
