nuclear@6: /* nuclear@6: GoatKit - a themable/animated widget toolkit for games nuclear@6: Copyright (C) 2014 John Tsiombikas nuclear@6: nuclear@6: This program is free software: you can redistribute it and/or modify nuclear@6: it under the terms of the GNU Lesser General Public License as published by nuclear@6: the Free Software Foundation, either version 3 of the License, or nuclear@6: (at your option) any later version. nuclear@6: nuclear@6: This program is distributed in the hope that it will be useful, nuclear@6: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@6: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@6: GNU Lesser General Public License for more details. nuclear@6: nuclear@6: You should have received a copy of the GNU Lesser General Public License nuclear@6: along with this program. If not, see . nuclear@6: */ nuclear@6: #ifndef GOATKIT_WIDGET_H_ nuclear@6: #define GOATKIT_WIDGET_H_ nuclear@6: nuclear@6: #include "vec.h" nuclear@6: #include "event.h" nuclear@6: nuclear@6: namespace goatkit { nuclear@6: nuclear@6: struct BBox { nuclear@6: Vec2 bmin, bmax; nuclear@6: }; nuclear@6: nuclear@6: class Screen; nuclear@6: class Widget; nuclear@6: struct WidgetImpl; nuclear@6: nuclear@6: typedef void (*EventCallback)(Widget*, const Event &ev, void *cls); nuclear@6: nuclear@6: class Widget { nuclear@6: protected: nuclear@6: WidgetImpl *widget; nuclear@6: nuclear@6: virtual void set_screen(Screen *scr); nuclear@6: Screen *get_screen() const; nuclear@6: nuclear@6: public: nuclear@6: Widget(); nuclear@6: virtual ~Widget(); nuclear@6: nuclear@6: virtual const char *get_type_name() const; nuclear@6: nuclear@6: virtual void set_name(const char *name); nuclear@6: virtual const char *get_name() const; nuclear@6: nuclear@6: virtual void set_text(const char *text); nuclear@6: virtual const char *get_text() const; nuclear@6: nuclear@6: virtual void show(); nuclear@6: virtual void hide(); nuclear@6: virtual float get_visibility() const; nuclear@6: virtual bool is_visible() const; nuclear@6: nuclear@6: virtual void activate(); nuclear@6: virtual void deactivate(); nuclear@6: virtual float get_active() const; nuclear@6: virtual bool is_active() const; nuclear@6: nuclear@6: virtual void press(); nuclear@6: virtual void release(); nuclear@6: virtual float get_pressed() const; nuclear@6: virtual bool is_pressed() const; nuclear@6: nuclear@6: virtual void mousein(); nuclear@6: virtual void mouseout(); nuclear@6: virtual float get_under_mouse() const; nuclear@6: virtual bool is_under_mouse() const; nuclear@6: nuclear@6: // input focus, managed by the screen nuclear@6: virtual bool can_focus() const; nuclear@6: virtual void focusin(); nuclear@6: virtual void focusout(); nuclear@6: virtual float get_focus() const; nuclear@6: virtual bool is_focused() const; nuclear@6: nuclear@6: virtual void set_position(float x, float y); nuclear@6: virtual void set_position(const Vec2 &pos); nuclear@6: virtual const Vec2 &get_position() const; nuclear@6: nuclear@6: virtual void set_size(float x, float y); nuclear@6: virtual void set_size(const Vec2 &size); nuclear@6: virtual const Vec2 get_size() const; nuclear@6: nuclear@6: virtual const BBox &get_box() const; nuclear@6: nuclear@6: virtual bool hit_test(const Vec2 &pt) const; nuclear@6: nuclear@6: virtual void draw() const; nuclear@6: nuclear@6: // low level events nuclear@6: virtual void on_mouse_button(const ButtonEvent &ev); nuclear@6: virtual void on_mouse_motion(const MotionEvent &ev); nuclear@6: virtual void on_mouse_focus(const FocusEvent &ev); nuclear@6: virtual void on_key(const KeyEvent &ev); nuclear@6: nuclear@6: // high level events nuclear@6: virtual void on_click(); nuclear@6: virtual void on_double_click(); nuclear@6: virtual void on_change(); nuclear@6: //virtual void on_drag_move(int bn, const Vec2 &pt); nuclear@6: //virtual void on_drag_release(int bn, const Vec2 &pt); nuclear@6: nuclear@6: // event dispatcher nuclear@6: virtual void handle_event(const Event &ev); nuclear@6: nuclear@6: // external callback setting nuclear@6: virtual void set_callback(EventType evtype, EventCallback func, void *cls = 0); nuclear@6: nuclear@6: friend class Screen; nuclear@6: }; nuclear@6: nuclear@6: } nuclear@6: nuclear@6: #endif // GOATKIT_WIDGET_H_