summaryrefslogtreecommitdiff
path: root/src/gui/view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/view.cpp')
-rw-r--r--src/gui/view.cpp59
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;
+}