diff options
| author | navewindre <boneyaard@gmail.com> | 2025-09-03 20:10:09 +0200 |
|---|---|---|
| committer | navewindre <boneyaard@gmail.com> | 2025-09-03 20:10:09 +0200 |
| commit | f8b92ce3aa08b1445c9f956d8166830946562d12 (patch) | |
| tree | 94e63a5aec9f8f52b577f56799e0c9201fd976a5 /src/gui/view.cpp | |
a
Diffstat (limited to 'src/gui/view.cpp')
| -rw-r--r-- | src/gui/view.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/gui/view.cpp b/src/gui/view.cpp new file mode 100644 index 0000000..da470e7 --- /dev/null +++ b/src/gui/view.cpp @@ -0,0 +1,59 @@ +#include "base.h" + +void gui_view_draw_fn( void* ptr ) { + GUI_VIEW* view = (GUI_VIEW*)ptr; + + I32 x = gui_relx( view ); + I32 y = gui_rely( view ); + + gui_draw_push_clip( x, y, view->w, view->h ); + view->children.each( fn( GUI_BASE** childptr ) { + GUI_BASE* child = *childptr; + if( !child->enabled ) return; + + if( child->draw_fn ) child->draw_fn( child ); + else dlog( "gui_view_draw_fn(): child %p no draw_fn\n", child ); + } ); + gui_draw_pop_clip(); +} + +void gui_view_input_fn( void* ptr ) { + GUI_VIEW* view = (GUI_VIEW*)ptr; + + if( view->initheld ) { + U8 m1 = gui_mbutton_down( 0 ); + if( m1 ) + return; + + view->initheld = 0; + } + + gui_base_input_fn( view ); +} + +GUI_VIEW* gui_view( I32 x, I32 y, I32 w, I32 h ) { + GUI_VIEW* view = new GUI_VIEW; + view->x = x; + view->y = y; + view->xbound = view->w = w; + view->ybound = view->h = h; + strcpy( view->name, "BASE_VIEW" ); + + view->draw_fn = gui_view_draw_fn; + view->input_fn = gui_view_input_fn; + + view->initheld = 1; + + GUI_VIEW* curview = gui_get_view(); + if( !curview ) { + view->parent = gui_get_window(); + gui_get_window()->children.push( view ); + } + else { + view->parent = curview; + curview->children.push( view ); + } + + gui_set_view( view ); + return view; +} |
