/* ui/ui.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_UI_H__ #define __INCLUDED_UI_H__ #include "ui/console.h" #include "ui/font.h" #include "ui/palette.h" #include "ui/widget.h" #include "ui/window.h" namespace ui { class UI : public Window { public: /// constructor UI(); /// destructor ~UI(); /// list widgets void list() const; /// list visible widgets void list_visible() const; /// the console inline Console *console() { return ui_console; } /// 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 mouse button events bool input_mouse_button(const bool pressed, unsigned int button); /// receive global mouse wheel events bool input_mouse_wheel(const math::Vector2f & direction); /// receive global keyboard events bool input_key(const bool pressed, const int key, const unsigned int modifier); /// run a user interface frame void frame(); /// load settings from ui.ini void load_settings(); /* -- fonts ------------------------------------------------ */ /// default tiny font inline const Font *font_tiny() const { return ui_font_tiny; } /// default small font inline const Font *font_small() const { return ui_font_small; } /// default medium font inline const Font *font_large() const { return ui_font_large; } inline const math::Vector2f & global_mouse_coords() { return mouse_cursor; } /* -- mouse pointer ---------------------------------------- */ /// set mouse pointer bitmap void set_pointer(const char *pointerbitmap = 0, const Palette::Color color = Palette::Highlight, const bool animated = false); static bool ui_debug; /** * global size of a ui element, used by resize() functions * */ static math::Vector2f elementsize; /** * global padding between ui elements, used by resize() functions * */ static float padding; /** * global margin for frames and widgets, used by resize() functions * see @Widget::resize(); * */ static float margin; static float pointer_size; protected: /* -- 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: void draw_pointer(); Palette *ui_palette; Font *ui_font_tiny; Font *ui_font_small; Font *ui_font_large; Widget *ui_mouse_focus; Widget *ui_input_focus; Console *ui_console; /// TODO move to separate object to handle mouse cursor drawing math::Vector2f mouse_cursor; std::string mouse_pointer_bitmap; Palette::Color mouse_pointer_color; bool mouse_pointer_animated; bool mouse_buttonleft_pressed; }; /// initialize the user interface void init(); /// shutdown the user interface void shutdown(); /// the global root window UI *root(); /// the console inline Console *console() { return root()->console(); } /// debug mode inline bool debug() { return UI::ui_debug; } } #endif // __INCLUDED_UI_H__