]> Dogcows Code - chaz/openbox/commitdiff
resizes
authorDana Jansens <danakj@orodu.net>
Fri, 15 Nov 2002 03:10:34 +0000 (03:10 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 15 Nov 2002 03:10:34 +0000 (03:10 +0000)
otk/button.cc
otk/button.hh
otk/otk_test.cc
otk/widget.cc
otk/widget.hh

index 1e8a4f03277873de917c4ca51fa0713d412ea3eb..410f00838bcf37eb7179ad0e8b978a4e15855eaa 100644 (file)
@@ -57,7 +57,6 @@ void OtkButton::update(void)
 
     OtkFocusWidget::resize(ft.measureString(_text) + bevel * 2,
                            ft.height() + bevel * 2);
-
     OtkFocusWidget::update();
 
     ft.drawString(getWindow(), bevel, bevel, *text_color, _text);
@@ -73,4 +72,10 @@ bool OtkButton::expose(const XExposeEvent &e)
   return OtkFocusWidget::expose(e);
 }
 
+bool OtkButton::configure(const XConfigureEvent &e)
+{
+  _dirty = true;
+  return OtkFocusWidget::configure(e);
+}
+
 }
index 48a0f8136df861bc8b3d68bb9d3225e428a89f44..f25f731d9d1c63cdcfb63edf529eb7da6a4c4e9c 100644 (file)
@@ -35,6 +35,7 @@ public:
 
   virtual void update(void);
   virtual bool expose(const XExposeEvent &e);
+  virtual bool configure(const XConfigureEvent &e);
 
 private:
 
index f36fcf99adda0204879596ac236e95e8fab84fde..e81b777d4d6eb300f275da1b89e860417ee7fbcf 100644 (file)
@@ -5,6 +5,7 @@
 #include "timerqueuemanager.hh"
 #include "image.hh"
 #include "style.hh"
+#include <iostream>
 
 int main(void) {
   otk::OBDisplay::initialize(NULL);
@@ -59,8 +60,12 @@ int main(void) {
     if (XPending(otk::OBDisplay::display)) {
       XEvent e;
       XNextEvent(otk::OBDisplay::display, &e);
-      if (e.type == Expose)
+      if (e.type == Expose) {
         foo.expose(e.xexpose);
+      } else if (e.type == ConfigureNotify) {
+        std::cout << "configure\n";
+        foo.configure(e.xconfigure);
+      }
     } 
   }
 
index 3ff484bca546dd0b36a6b72792530cafb77fd3fc..9d8c37a0fd2976b0a89d51ad89bacfe8344000a1 100644 (file)
@@ -11,6 +11,7 @@ namespace otk {
 OtkWidget::OtkWidget(OtkWidget *parent, Direction direction)
   : _parent(parent), _style(parent->getStyle()), _direction(direction),
     _cursor(parent->getCursor()), _bevel_width(parent->getBevelWidth()),
+    _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),
@@ -24,7 +25,7 @@ OtkWidget::OtkWidget(OtkWidget *parent, Direction direction)
 OtkWidget::OtkWidget(Style *style, Direction direction,
                      Cursor cursor, int bevel_width)
   : _parent(0), _style(style), _direction(direction), _cursor(cursor),
-    _bevel_width(bevel_width), _visible(false),
+    _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(style->getScreen()),
@@ -124,6 +125,7 @@ void OtkWidget::setGeometry(int x, int y, int width, int height)
 {
   _rect = Rect(x, y, width, height);
   _dirty = true;
+  _ignore_config++;
 
   XMoveResizeWindow(otk::OBDisplay::display, _window, x, y, width, height);
 }
@@ -208,11 +210,9 @@ void OtkWidget::ungrabKeyboard(void)
 
 void OtkWidget::render(void)
 {
-  Pixmap old = _bg_pixmap;
-
   _bg_pixmap = _texture->render(_rect.width(), _rect.height(), _bg_pixmap);
 
-  if (_bg_pixmap && _bg_pixmap != old)
+  if (_bg_pixmap)
     XSetWindowBackgroundPixmap(otk::OBDisplay::display, _window, _bg_pixmap);
   else {
     unsigned int pix = _texture->color().pixel();
@@ -405,4 +405,24 @@ bool OtkWidget::expose(const XExposeEvent &e)
   return false;
 }
 
+bool OtkWidget::configure(const XConfigureEvent &e)
+{
+  if (e.window == _window) {
+    if (_ignore_config) {
+      _ignore_config--;
+    } else {
+      _dirty = true;
+      _rect.setRect(e.x, e.y, e.width, e.height);
+      update();
+    }
+    return true;
+  } else {
+    OtkWidgetList::iterator it = _children.begin(), end = _children.end();
+    for (; it != end; ++it)
+      if ((*it)->configure(e))
+        return true;
+  }
+  return false;
+}
+
 }
index ca65730c1a5b795800bfde0e34f983f203c48297..60fd2ddbea98ffbf75cfb7538ca00bda7a469bf6 100644 (file)
@@ -28,6 +28,7 @@ public:
   virtual void update(void);
 
   virtual bool expose(const XExposeEvent &e);
+  virtual bool configure(const XConfigureEvent &e);
 
   inline Window getWindow(void) const { return _window; }
   inline const OtkWidget *getParent(void) const { return _parent; }
@@ -41,6 +42,9 @@ public:
   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);
 
@@ -106,6 +110,7 @@ private:
   Direction _direction;
   Cursor _cursor;
   int _bevel_width;
+  int _ignore_config;
 
   bool _visible;
   bool _focused;
@@ -126,7 +131,6 @@ private:
   bool _fixed_width;
   bool _fixed_height;
 
-protected:
   bool _dirty;
 };
 
This page took 0.032086 seconds and 4 git commands to generate.