otk/widget.hh (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifndef __widget_hh #define __widget_hh #include "rect.hh" #include "point.hh" #include "texture.hh" #include "style.hh" #include "eventdispatcher.hh" #include "display.hh" extern "C" { #include <assert.h> } #include <string> #include <list> namespace otk { class Widget : public EventHandler { public: enum Direction { Horizontal, Vertical }; typedef std::list<Widget *> WidgetList; Widget(Widget *parent, Direction = Horizontal); Widget(EventDispatcher *event_dispatcher, Style *style, Direction direction = Horizontal, Cursor cursor = 0, int bevel_width = 1, bool override_redirect = false); virtual ~Widget(); virtual void update(void); void exposeHandler(const XExposeEvent &e); void configureHandler(const XConfigureEvent &e); inline Window window(void) const { return _window; } inline const Widget *parent(void) const { return _parent; } inline const WidgetList &children(void) const { return _children; } inline unsigned int screen(void) const { return _screen; } inline const Rect &rect(void) const { return _rect; } void move(const Point &to); void move(int x, int y); virtual void setWidth(int); virtual void setHeight(int); virtual int width() const { return _rect.width(); } virtual int height() const { return _rect.height(); } virtual void resize(const Point &to); virtual void resize(int x, int y); virtual void setGeometry(const Rect &new_geom); virtual void setGeometry(const Point &topleft, int width, int height); virtual void setGeometry(int x, int y, int width, int height); inline bool isVisible(void) const { return _visible; }; virtual void show(bool recursive = false); virtual void hide(bool recursive = false); inline bool isFocused(void) const { return _focused; }; virtual void focus(void); virtual void unfocus(void); inline bool hasGrabbedMouse(void) const { return _grabbed_mouse; } bool grabMouse(void); void ungrabMouse(void); inline bool hasGrabbedKeyboard(void) const { return _grabbed_keyboard; } bool grabKeyboard(void); void ungrabKeyboard(void); inline Texture *texture(void) const { return _texture; } virtual void setTexture(Texture *texture) { _texture = texture; _dirty = true; } inline const Color *borderColor(void) const { return _bcolor; } virtual void setBorderColor(const Color *color) { assert(color); _bcolor = color; XSetWindowBorder(Display::display, _window, color->pixel()); } inline int borderWidth(void) const { return _bwidth; } void setBorderWidth(int width) { _bwidth = width; XSetWindowBorderWidth(Display::display, _window, width); } virtual void addChild(Widget *child, bool front = false); virtual void removeChild(Widget *child); inline bool isStretchableHorz(void) const { return _stretchable_horz; } void setStretchableHorz(bool s_horz = true) { _stretchable_horz = s_horz; } inline bool isStretchableVert(void) const { return _stretchable_vert; } void setStretchableVert(bool s_vert = true) { _stretchable_vert = s_vert; } inline Cursor cursor(void) const { return _cursor; } void setCursor(Cursor cursor) { _cursor = cursor; XDefineCursor(Display::display, _window, _cursor); } inline int bevelWidth(void) const { return _bevel_width; } void setBevelWidth(int bevel_width) { assert(bevel_width > 0); _bevel_width = bevel_width; } inline Direction direction(void) const { return _direction; } void setDirection(Direction dir) { _direction = dir; } inline Style *style(void) const { return _style; } virtual void setStyle(Style *style); inline EventDispatcher *eventDispatcher(void) { return _event_dispatcher; } void setEventDispatcher(EventDispatcher *disp); protected: bool _dirty; bool _focused; virtual void adjust(void); virtual void create(bool override_redirect = false); virtual void adjustHorz(void); virtual void adjustVert(void); virtual void internalResize(int width, int height); virtual void render(void); Window _window; Widget *_parent; WidgetList _children; Style *_style; Direction _direction; Cursor _cursor; int _bevel_width; int _ignore_config; bool _visible; bool _grabbed_mouse; bool _grabbed_keyboard; bool _stretchable_vert; bool _stretchable_horz; Texture *_texture; Pixmap _bg_pixmap; unsigned int _bg_pixel; const Color *_bcolor; unsigned int _bwidth; Rect _rect; unsigned int _screen; bool _fixed_width; bool _fixed_height; EventDispatcher *_event_dispatcher; }; } #endif // __widget_hh |