Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/ui/ui.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/ui.h')
-rw-r--r--src/ui/ui.h99
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;
};