diff options
Diffstat (limited to 'src/ui/ui.h')
-rw-r--r-- | src/ui/ui.h | 99 |
1 files changed, 61 insertions, 38 deletions
diff --git a/src/ui/ui.h b/src/ui/ui.h index a555e97..eb2d4e0 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -12,73 +12,96 @@ #include "ui/widget.h" #include "ui/window.h" -namespace ui { +namespace ui +{ -class UI : public Window { +class UI : public Window +{ public: /// constructor UI(); - + /// destructor ~UI(); - + /// list widgets - void list(); - + void list() const; + /// list meus - void list_menus(); - + void list_menus() const; + /// reload menu files void load(); - + /// make a window the active window void show_window(const char *label); - + /// hide the active window void hide_window(); - + /// show previous window void previous_window(); - + /// return the active window - Window *active() { return ui_active_window; } - - /// mouse cursor input - void input_mouse(float x, float y); - - /// keyboard input - void input_key(bool pressed, unsigned int key, unsigned int modifier); - + Window *active() { + return ui_active_window; + } + + /// return the widget with global mouse focus + inline Widget *mouse_focus() const { + return ui_mouse_focus; + } + + /// return the widget with global input focus + inline Widget *input_focus() const { + return ui_input_focus; + } + + /// receive global mouse movement + void input_mouse(const float x, const float y); + + /// receive global key input + void input_key(const bool pressed, const int key, const unsigned int modifier); + /// run a user interface frame void frame(); - - /// return the widget which has the focus - inline Widget *focus() { return ui_focus; } - - /* -- Fonts ------------------------------------------------ */ + + /* -- fonts ------------------------------------------------ */ + /// default small font - inline Font *font_small() { return ui_font_small; } - + inline const Font *font_small() const { + return ui_font_small; + } + /// default medium font - inline Font *font_large() { return ui_font_large; } - + inline const Font *font_large() const { + return ui_font_large; + } + protected: - Window *find_window(const char *label); - + Window *find_window(const char *label) const; + virtual void add_window(Window *window); virtual void remove_window(Window *window); - - /// handle keyboard input - virtual bool keypress(unsigned int key, unsigned int modifier); - virtual bool keyrelease(unsigned int key, unsigned int modifier); - + + /* -- event handlers --------------------------------------- */ + + /// handle keypress events + virtual bool on_keypress(const int key, const unsigned int modifier); + + /// handle key release events + virtual bool on_keyrelease(const int key, const unsigned int modifier); + private: Palette *ui_palette; Font *ui_font_small; Font *ui_font_large; - + Window *ui_active_window; - Widget *ui_focus; + Widget *ui_mouse_focus; + Widget *ui_input_focus; + + /// TODO move to separate object to handle mouse cursor drawing math::Vector2f mouse_cursor; }; |