From a3d036f60ed2333622ee9b61dbddcdc8fbc497c3 Mon Sep 17 00:00:00 2001 From: Marius Nita Date: Sat, 16 Nov 2002 02:15:49 +0000 Subject: [PATCH] added otkapplication and event stuff, changed other files to accomodate for this, changed the test. no idea if anything runs yet. it compiles =) --- otk/Makefile.am | 6 ++++- otk/button.cc | 8 +++--- otk/button.hh | 11 +++++--- otk/focuswidget.cc | 11 ++++++++ otk/focuswidget.hh | 4 +++ otk/otk_test.cc | 65 ++++++++++++---------------------------------- otk/widget.cc | 31 +++++++++++++++++----- otk/widget.hh | 14 ++++++---- 8 files changed, 82 insertions(+), 68 deletions(-) diff --git a/otk/Makefile.am b/otk/Makefile.am index 959a8433..6f363b25 100644 --- a/otk/Makefile.am +++ b/otk/Makefile.am @@ -7,7 +7,8 @@ noinst_LIBRARIES=libotk.a libotk_a_SOURCES= color.cc display.cc font.cc gccache.cc image.cc property.cc \ imagecontrol.cc rect.cc screeninfo.cc texture.cc timer.cc \ timerqueuemanager.cc style.cc configuration.cc util.cc \ - widget.cc focuswidget.cc button.cc + widget.cc focuswidget.cc button.cc eventhandler.cc \ + eventdispatcher.cc application.cc MAINTAINERCLEANFILES= Makefile.in @@ -55,3 +56,6 @@ util.o: util.cc util.hh widget.o: widget.cc widget.hh rect.hh point.hh texture.hh color.hh \ util.hh style.hh font.hh image.hh screeninfo.hh timer.hh \ configuration.hh display.hh assassin.hh +eventhandler.o: eventhandler.cc eventhandler.hh +eventdispatcher.o: eventdispatcher.cc eventdispatcher.hh +application.o: application.cc application.hh diff --git a/otk/button.cc b/otk/button.cc index e93762ec..fd40f7d5 100644 --- a/otk/button.cc +++ b/otk/button.cc @@ -66,17 +66,17 @@ void OtkButton::update(void) _dirty = false; } -bool OtkButton::expose(const XExposeEvent &e) +int OtkButton::exposeHandler(const XExposeEvent &e) { _dirty = true; - return OtkFocusWidget::expose(e); + return OtkFocusWidget::exposeHandler(e); } -bool OtkButton::configure(const XConfigureEvent &e) +int OtkButton::configureHandler(const XConfigureEvent &e) { if (!(e.width == width() && e.height == height())) _dirty = true; - return OtkFocusWidget::configure(e); + return OtkFocusWidget::configureHandler(e); } } diff --git a/otk/button.hh b/otk/button.hh index f25f731d..e73b1f12 100644 --- a/otk/button.hh +++ b/otk/button.hh @@ -1,3 +1,6 @@ +#ifndef __button_hh +#define __button_hh + #include "focuswidget.hh" //#include "pixmap.hh" @@ -33,9 +36,9 @@ public: void press(void); void release(void); - virtual void update(void); - virtual bool expose(const XExposeEvent &e); - virtual bool configure(const XConfigureEvent &e); + void update(void); + int exposeHandler(const XExposeEvent &e); + int configureHandler(const XConfigureEvent &e); private: @@ -52,3 +55,5 @@ private: }; } + +#endif diff --git a/otk/focuswidget.cc b/otk/focuswidget.cc index 6ad19c6e..ffbaeb7e 100644 --- a/otk/focuswidget.cc +++ b/otk/focuswidget.cc @@ -8,6 +8,13 @@ OtkFocusWidget::OtkFocusWidget(OtkWidget *parent, Direction direction) _focus_texture = parent->getTexture(); } +OtkFocusWidget::OtkFocusWidget(OtkApplication *app, Direction direction, + Cursor cursor, int bevel_width) + : OtkWidget(app, direction, cursor, bevel_width), + _unfocus_texture(0), _focused(true) +{ +} + OtkFocusWidget::OtkFocusWidget(Style *style, Direction direction, Cursor cursor, int bevel_width) : OtkWidget(style, direction, cursor, bevel_width), @@ -15,6 +22,10 @@ OtkFocusWidget::OtkFocusWidget(Style *style, Direction direction, { } +OtkFocusWidget::~OtkFocusWidget() +{ +} + void OtkFocusWidget::focus(void) { if (_focused) diff --git a/otk/focuswidget.hh b/otk/focuswidget.hh index 8397734d..e6bcb876 100644 --- a/otk/focuswidget.hh +++ b/otk/focuswidget.hh @@ -2,6 +2,7 @@ #define __focuswidget_hh #include "widget.hh" +#include "application.hh" namespace otk { @@ -10,8 +11,11 @@ class OtkFocusWidget : public OtkWidget { public: OtkFocusWidget(OtkWidget *parent, Direction = Horizontal); + OtkFocusWidget(OtkApplication *app, Direction direction = Horizontal, + Cursor cursor = 0, int bevel_width = 1); OtkFocusWidget(Style *style, Direction direction = Horizontal, Cursor cursor = 0, int bevel_width = 1); + virtual ~OtkFocusWidget(); virtual void focus(void); virtual void unfocus(void); diff --git a/otk/otk_test.cc b/otk/otk_test.cc index ccef19fa..ec352f9f 100644 --- a/otk/otk_test.cc +++ b/otk/otk_test.cc @@ -1,32 +1,15 @@ +#include "application.hh" #include "focuswidget.hh" #include "button.hh" -#include "display.hh" -#include "configuration.hh" -#include "timerqueuemanager.hh" -#include "image.hh" -#include "style.hh" -#include -int main(void) { - otk::OBDisplay::initialize(NULL); - otk::Configuration style_conf(False); - otk::OBTimerQueueManager *tm = new otk::OBTimerQueueManager(); - const otk::ScreenInfo *s_info = - otk::OBDisplay::screenInfo(DefaultScreen(otk::OBDisplay::display)); - otk::BImageControl *ctrl = new otk::BImageControl(tm, s_info, True, 4, 5, 200); +int main(int argc, char **argv) { + otk::OtkApplication app(argc, argv); - otk::Style *my_style = new otk::Style(ctrl); - - style_conf.setFile("/usr/local/share/openbox/styles/artwiz"); - style_conf.load(); - - my_style->load(style_conf); - - otk::OtkFocusWidget foo(my_style); + otk::OtkFocusWidget foo(&app); foo.resize(600, 500); - foo.setTexture(my_style->getTitleFocus()); - foo.setUnfocusTexture(my_style->getTitleUnfocus()); + foo.setTexture(app.getStyle()->getTitleFocus()); + foo.setUnfocusTexture(app.getStyle()->getTitleUnfocus()); foo.setBevelWidth(2); foo.setDirection(otk::OtkWidget::Horizontal); @@ -37,15 +20,15 @@ int main(void) { left.setDirection(otk::OtkWidget::Horizontal); left.setStretchableVert(true); left.setStretchableHorz(true); - left.setTexture(my_style->getTitleFocus()); - left.setUnfocusTexture(my_style->getTitleUnfocus()); + left.setTexture(app.getStyle()->getTitleFocus()); + left.setUnfocusTexture(app.getStyle()->getTitleUnfocus()); right.setDirection(otk::OtkWidget::Vertical); right.setBevelWidth(10); right.setStretchableVert(true); right.setWidth(300); - right.setTexture(my_style->getTitleFocus()); - right.setUnfocusTexture(my_style->getTitleUnfocus()); + right.setTexture(app.getStyle()->getTitleFocus()); + right.setUnfocusTexture(app.getStyle()->getTitleUnfocus()); otk::OtkButton iconb(&left); otk::OtkFocusWidget label(&left); @@ -60,8 +43,8 @@ int main(void) { //label.setHeight(20); label.setStretchableVert(true); label.setStretchableHorz(true); - label.setTexture(my_style->getLabelFocus()); - label.setUnfocusTexture(my_style->getLabelUnfocus()); + label.setTexture(app.getStyle()->getLabelFocus()); + label.setUnfocusTexture(app.getStyle()->getLabelUnfocus()); // fixed size maxb.setText("bar"); @@ -75,34 +58,18 @@ int main(void) { rblef.setStretchableHorz(true); rblef.setHeight(50); - rblef.setTexture(my_style->getHandleFocus()); - rblef.setUnfocusTexture(my_style->getHandleUnfocus()); + rblef.setTexture(app.getStyle()->getHandleFocus()); + rblef.setUnfocusTexture(app.getStyle()->getHandleUnfocus()); rbutt1.setText("this is fucking tight"); rbutt2.setText("heh, WOOP"); // will recursively unfocus its children //foo.unfocus(); - foo.update(); + foo.show(); - while (1) { - if (XPending(otk::OBDisplay::display)) { - XEvent e; - XNextEvent(otk::OBDisplay::display, &e); - if (e.type == Expose) { - foo.expose(e.xexpose); - } else if (e.type == ConfigureNotify) { - foo.configure(e.xconfigure); - } - } - } - - delete my_style; - delete tm; - delete ctrl; - - otk::OBDisplay::destroy(); + app.exec(); return 0; } diff --git a/otk/widget.cc b/otk/widget.cc index 691c0968..50314775 100644 --- a/otk/widget.cc +++ b/otk/widget.cc @@ -9,7 +9,8 @@ namespace otk { OtkWidget::OtkWidget(OtkWidget *parent, Direction direction) - : _parent(parent), _style(parent->getStyle()), _direction(direction), + : OtkEventHandler(), + _parent(parent), _style(parent->getStyle()), _direction(direction), _cursor(parent->getCursor()), _bevel_width(parent->getBevelWidth()), _ignore_config(0), _visible(false), _focused(false), _grabbed_mouse(false), @@ -22,9 +23,25 @@ OtkWidget::OtkWidget(OtkWidget *parent, Direction direction) create(); } +OtkWidget::OtkWidget(OtkApplication *app, Direction direction, + Cursor cursor, int bevel_width) + : OtkEventHandler(), + _parent(0), _style(app->getStyle()), _direction(direction), _cursor(cursor), + _bevel_width(bevel_width), _ignore_config(0), _visible(false), + _focused(false), _grabbed_mouse(false), _grabbed_keyboard(false), + _stretchable_vert(false), _stretchable_horz(false), _texture(0), + _bg_pixmap(0), _bg_pixel(0), _screen(app->getStyle()->getScreen()), + _fixed_width(false), _fixed_height(false), _dirty(false) +{ + assert(app); + create(); + app->registerHandler(_window, this); +} + OtkWidget::OtkWidget(Style *style, Direction direction, Cursor cursor, int bevel_width) - : _parent(0), _style(style), _direction(direction), _cursor(cursor), + : OtkEventHandler(), + _parent(0), _style(style), _direction(direction), _cursor(cursor), _bevel_width(bevel_width), _ignore_config(0), _visible(false), _focused(false), _grabbed_mouse(false), _grabbed_keyboard(false), _stretchable_vert(false), _stretchable_horz(false), _texture(0), @@ -396,8 +413,9 @@ void OtkWidget::removeChild(OtkWidget *child) _children.erase(it); } -bool OtkWidget::expose(const XExposeEvent &e) +int OtkWidget::exposeHandler(const XExposeEvent &e) { + OtkEventHandler::exposeHandler(e); if (e.window == _window) { _dirty = true; update(); @@ -405,14 +423,15 @@ bool OtkWidget::expose(const XExposeEvent &e) } else { OtkWidgetList::iterator it = _children.begin(), end = _children.end(); for (; it != end; ++it) - if ((*it)->expose(e)) + if ((*it)->exposeHandler(e)) return true; } return false; } -bool OtkWidget::configure(const XConfigureEvent &e) +int OtkWidget::configureHandler(const XConfigureEvent &e) { + OtkEventHandler::configureHandler(e); if (e.window == _window) { if (_ignore_config) { _ignore_config--; @@ -428,7 +447,7 @@ bool OtkWidget::configure(const XConfigureEvent &e) } else { OtkWidgetList::iterator it = _children.begin(), end = _children.end(); for (; it != end; ++it) - if ((*it)->configure(e)) + if ((*it)->configureHandler(e)) return true; } return false; diff --git a/otk/widget.hh b/otk/widget.hh index 60fd2ddb..473aa812 100644 --- a/otk/widget.hh +++ b/otk/widget.hh @@ -1,5 +1,5 @@ -#ifndef __focus_hh -#define __focus_hh +#ifndef __widget_hh +#define __widget_hh #include #include @@ -8,10 +8,12 @@ #include "point.hh" #include "texture.hh" #include "style.hh" +#include "eventhandler.hh" +#include "application.hh" namespace otk { -class OtkWidget { +class OtkWidget : public OtkEventHandler { public: @@ -20,6 +22,8 @@ public: typedef std::list OtkWidgetList; OtkWidget(OtkWidget *parent, Direction = Horizontal); + OtkWidget(OtkApplication *app, Direction direction = Horizontal, + Cursor cursor = 0, int bevel_width = 1); OtkWidget(Style *style, Direction direction = Horizontal, Cursor cursor = 0, int bevel_width = 1); @@ -27,8 +31,8 @@ public: virtual void update(void); - virtual bool expose(const XExposeEvent &e); - virtual bool configure(const XConfigureEvent &e); + int exposeHandler(const XExposeEvent &e); + int configureHandler(const XConfigureEvent &e); inline Window getWindow(void) const { return _window; } inline const OtkWidget *getParent(void) const { return _parent; } -- 2.39.2