nuclear@4: #ifndef GOATKIT_WIDGET_H_ nuclear@4: #define GOATKIT_WIDGET_H_ nuclear@0: nuclear@3: #include "vec.h" nuclear@3: #include "event.h" nuclear@3: nuclear@4: namespace goatkit { nuclear@0: nuclear@3: struct BBox { nuclear@0: Vec2 bmin, bmax; nuclear@0: }; nuclear@0: nuclear@2: struct WidgetImpl; nuclear@0: nuclear@0: class Widget { nuclear@0: private: nuclear@3: WidgetImpl *widget; nuclear@3: nuclear@3: void set_type_string(const char *type_str); nuclear@0: nuclear@0: public: nuclear@0: Widget(); nuclear@0: virtual ~Widget(); nuclear@0: nuclear@0: virtual void show(); nuclear@0: virtual void hide(); nuclear@0: virtual float get_visibility() const; nuclear@3: virtual bool is_visible() const; nuclear@0: nuclear@0: virtual void activate(); nuclear@0: virtual void deactivate(); nuclear@0: virtual float get_active() const; nuclear@3: virtual bool is_active() const; nuclear@3: nuclear@3: virtual void press(); nuclear@3: virtual void release(); nuclear@3: virtual float get_pressed() const; nuclear@3: virtual bool is_pressed() const; nuclear@3: nuclear@3: virtual void mousein(); nuclear@3: virtual void mouseout(); nuclear@3: virtual float get_under_mouse() const; nuclear@3: virtual bool is_under_mouse() const; nuclear@3: nuclear@3: virtual void set_position(float x, float y); nuclear@3: virtual void set_position(const Vec2 &pos); nuclear@3: virtual const Vec2 &get_position() const; nuclear@3: nuclear@3: virtual void set_size(float x, float y); nuclear@3: virtual void set_size(const Vec2 &size); nuclear@3: virtual const Vec2 get_size() const; nuclear@0: nuclear@0: virtual const BBox &get_box() const; nuclear@0: nuclear@0: virtual bool hit_test(const Vec2 &pt) const; nuclear@0: nuclear@3: virtual void draw() const; nuclear@3: nuclear@3: // low level events nuclear@3: virtual void on_mouse_button(const ButtonEvent &ev); nuclear@3: virtual void on_mouse_motion(const MotionEvent &ev); nuclear@3: virtual void on_mouse_focus(const FocusEvent &ev); nuclear@3: virtual void on_key(const KeyEvent &ev); nuclear@3: nuclear@3: // high level events nuclear@3: virtual void on_click(); nuclear@3: virtual void on_double_click(); nuclear@3: virtual void on_change(); nuclear@3: //virtual void on_drag_move(int bn, const Vec2 &pt); nuclear@3: //virtual void on_drag_release(int bn, const Vec2 &pt); nuclear@3: nuclear@3: // event dispatcher nuclear@3: virtual void handle_event(const Event &ev); nuclear@0: }; nuclear@0: nuclear@0: } nuclear@0: nuclear@4: #endif // GOATKIT_WIDGET_H_