summaryrefslogtreecommitdiff
path: root/otk
diff options
context:
space:
mode:
authorMarius Nita <marius@cs.pdx.edu>2002-11-16 02:15:49 +0000
committerMarius Nita <marius@cs.pdx.edu>2002-11-16 02:15:49 +0000
commita3d036f60ed2333622ee9b61dbddcdc8fbc497c3 (patch)
treedae05770ec9c7aab9529e57361cb7b87f956de0f /otk
parente53fbcf092c40b22ccc4c5f23795e12c9862c338 (diff)
added otkapplication and event stuff, changed other files to accomodate for this, changed the test.
no idea if anything runs yet. it compiles =)
Diffstat (limited to 'otk')
-rw-r--r--otk/Makefile.am6
-rw-r--r--otk/button.cc8
-rw-r--r--otk/button.hh11
-rw-r--r--otk/focuswidget.cc11
-rw-r--r--otk/focuswidget.hh4
-rw-r--r--otk/otk_test.cc65
-rw-r--r--otk/widget.cc31
-rw-r--r--otk/widget.hh14
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 <iostream>
-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 <string>
#include <list>
@@ -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<OtkWidget *> 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; }