#include "base.h" #include "../util/profiler.h" void gui_view_draw_fn( void* ptr ) { _profiled 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; }