struct Custom_Vars{ int32_t initialized; Partition part; }; enum View_Mode{ ViewMode_File, }; struct View_Vars{ int32_t id; View_Mode mode; GUI_Scroll_Vars scroll; i32_Rect scroll_region; int32_t buffer_id; }; inline View_Vars view_vars_zero(){ View_Vars vars = {0}; return(vars); } extern "C" void view_routine(Application_Links *app, int32_t view_id){ Custom_Vars *vars = (Custom_Vars*)app->memory; View_Vars view = {0}; view.id = view_id; int32_t show_scrollbar = 1; if (!vars->initialized){ vars->initialized = 1; vars->part = make_part(app->memory, app->memory_size); push_struct(&vars->part, Custom_Vars); } for(;;){ Event_Message message = {0}; message = app->get_event_message(app); switch (message.type){ case EM_Open_View: { view = view_vars_zero(); view.id = view_id; }break; case EM_Frame: { GUI_Functions *guifn = app->get_gui_functions(app); GUI *gui = app->get_gui(app, view_id); guifn->begin(gui); guifn->top_bar(gui); switch (view.mode){ case ViewMode_File: // TODO(allen): Overlapped widget GUI_id scroll_id; scroll_id.id[1] = view.mode; scroll_id.id[0] = view.buffer_id; guifn->get_scroll_vars(gui, scroll_id, &view.scroll, &view.scroll_region); guifn->begin_scrollable(gui, scroll_id, view.scroll, 144.f, show_scrollbar); guifn->file(gui, view.buffer_id); guifn->end_scrollable(gui); break; } guifn->end(gui); // TODO(allen): Put this code in charge of dispatching // to the command or command coroutine or whatever. // TODO(allen): Put this code in charge of when to process // the GUI with input and retrieve new layout data. }break; case EM_Close_View: {}break; } } }