move Rect and PointerAssassin into the toolkit
authorDana Jansens <danakj@orodu.net>
Sun, 3 Nov 2002 10:38:14 +0000 (10:38 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 3 Nov 2002 10:38:14 +0000 (10:38 +0000)
otk/Makefile.am
otk/assassin.hh [new file with mode: 0644]
otk/gccache.cc
otk/image.hh
otk/imagecontrol.cc
otk/rect.cc [new file with mode: 0644]
otk/rect.hh [new file with mode: 0644]
otk/screeninfo.hh

index e626fff..4a2b9f8 100644 (file)
@@ -5,7 +5,7 @@ INCLUDES= -I../src
 noinst_LIBRARIES=libotk.a
 
 libotk_a_SOURCES= color.cc display.cc font.cc gccache.cc image.cc \
-                  imagecontrol.cc texture.cc
+                  imagecontrol.cc rect.cc texture.cc
 
 MAINTAINERCLEANFILES= Makefile.in
 
diff --git a/otk/assassin.hh b/otk/assassin.hh
new file mode 100644 (file)
index 0000000..89e9815
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __assassin_hh
+#define __assassin_hh
+
+namespace otk {
+
+struct PointerAssassin {
+  template<typename T>
+  inline void operator()(const T ptr) const {
+    delete ptr;
+  }
+};
+
+}
+
+#endif // __assassin_hh
index d741c71..44aca79 100644 (file)
@@ -10,7 +10,7 @@ extern "C" {
 
 #include "gccache.hh"
 #include "color.hh"
-#include "util.hh"
+#include "assassin.hh"
 #include "screeninfo.hh"
 
 namespace otk {
index 8816560..eedd651 100644 (file)
@@ -9,9 +9,9 @@ extern "C" {
 
 #include <list>
 
-#include "timer.hh"
 #include "color.hh"
 #include "screeninfo.hh"
+#include "src/timer.hh"
 
 namespace otk {
 
@@ -66,7 +66,7 @@ public:
 };
 
 
-class BImageControl : public TimeoutHandler {
+class BImageControl : public ob::TimeoutHandler {
 public:
   struct CachedImage {
     Pixmap pixmap;
@@ -116,7 +116,7 @@ public:
 private:
   bool dither;
   const ScreenInfo *screeninfo;
-  BTimer *timer;
+  ob::BTimer *timer;
 
   Colormap colormap;
 
index 8378b65..062c959 100644 (file)
@@ -58,7 +58,7 @@ BImageControl::BImageControl(const ScreenInfo *scrn,
     timer->setTimeout(cache_timeout);
     timer->start();*/
   } else {
-    timer = (BTimer *) 0;
+    timer = (ob::BTimer *) 0;
   }
 
   colors = (XColor *) 0;
diff --git a/otk/rect.cc b/otk/rect.cc
new file mode 100644 (file)
index 0000000..db53b37
--- /dev/null
@@ -0,0 +1,96 @@
+#include "rect.hh"
+
+namespace otk {
+
+void Rect::setX(int x) {
+  _x2 += x - _x1;
+  _x1 = x;
+}
+
+
+void Rect::setY(int y)
+{
+  _y2 += y - _y1;
+  _y1 = y;
+}
+
+
+void Rect::setPos(int x, int y) {
+  _x2 += x - _x1;
+  _x1 = x;
+  _y2 += y - _y1;
+  _y1 = y;
+}
+
+
+void Rect::setWidth(unsigned int w) {
+  _x2 = w + _x1 - 1;
+}
+
+
+void Rect::setHeight(unsigned int h) {
+  _y2 = h + _y1 - 1;
+}
+
+
+void Rect::setSize(unsigned int w, unsigned int h) {
+  _x2 = w + _x1 - 1;
+  _y2 = h + _y1 - 1;
+}
+
+
+void Rect::setRect(int x, int y, unsigned int w, unsigned int h) {
+  *this = Rect(x, y, w, h);
+}
+
+
+void Rect::setCoords(int l, int t, int r, int b) {
+  _x1 = l;
+  _y1 = t;
+  _x2 = r;
+  _y2 = b;
+}
+
+
+Rect Rect::operator|(const Rect &a) const {
+  Rect b;
+
+  b._x1 = std::min(_x1, a._x1);
+  b._y1 = std::min(_y1, a._y1);
+  b._x2 = std::max(_x2, a._x2);
+  b._y2 = std::max(_y2, a._y2);
+
+  return b;
+}
+
+
+Rect Rect::operator&(const Rect &a) const {
+  Rect b;
+
+  b._x1 = std::max(_x1, a._x1);
+  b._y1 = std::max(_y1, a._y1);
+  b._x2 = std::min(_x2, a._x2);
+  b._y2 = std::min(_y2, a._y2);
+
+  return b;
+}
+
+
+bool Rect::intersects(const Rect &a) const {
+  return std::max(_x1, a._x1) <= std::min(_x2, a._x2) &&
+         std::max(_y1, a._y1) <= std::min(_y2, a._y2);
+}
+
+
+bool Rect::contains(int x, int y) const {
+  return x >= _x1 && x <= _x2 &&
+         y >= _y1 && y <= _y2;
+}
+
+
+bool Rect::contains(const Rect& a) const {
+  return a._x1 >= _x1 && a._x2 <= _x2 &&
+         a._y1 >= _y1 && a._y2 <= _y2;
+}
+
+}
diff --git a/otk/rect.hh b/otk/rect.hh
new file mode 100644 (file)
index 0000000..a11f3a2
--- /dev/null
@@ -0,0 +1,66 @@
+// -*- mode: C++; indent-tabs-mode: nil; -*-
+#ifndef   __rect_hh
+#define   __rect_hh
+
+extern "C" {
+#include <X11/Xlib.h>
+}
+
+#include <vector>
+
+namespace otk {
+
+class Rect {
+public:
+  inline Rect(void) : _x1(0), _y1(0), _x2(0), _y2(0) { }
+  inline Rect(int __x, int __y, unsigned int __w, unsigned int __h)
+    : _x1(__x), _y1(__y), _x2(__w + __x - 1), _y2(__h + __y - 1) { }
+  inline explicit Rect(const XRectangle& xrect)
+    : _x1(xrect.x), _y1(xrect.y), _x2(xrect.width + xrect.x - 1),
+      _y2(xrect.height + xrect.y - 1) { }
+
+  inline int left(void) const { return _x1; }
+  inline int top(void) const { return _y1; }
+  inline int right(void) const { return _x2; }
+  inline int bottom(void) const { return _y2; }
+
+  inline int x(void) const { return _x1; }
+  inline int y(void) const { return _y1; }
+  void setX(int __x);
+  void setY(int __y);
+  void setPos(int __x, int __y);
+
+  inline unsigned int width(void) const { return _x2 - _x1 + 1; }
+  inline unsigned int height(void) const { return _y2 - _y1 + 1; }
+  void setWidth(unsigned int __w);
+  void setHeight(unsigned int __h);
+  void setSize(unsigned int __w, unsigned int __h);
+
+  void setRect(int __x, int __y, unsigned int __w, unsigned int __h);
+
+  void setCoords(int __l, int __t, int __r, int __b);
+
+  inline bool operator==(const Rect &a)
+  { return _x1 == a._x1 && _y1 == a._y1 && _x2 == a._x2 && _y2 == a._y2; }
+  inline bool operator!=(const Rect &a) { return ! operator==(a); }
+
+  Rect operator|(const Rect &a) const;
+  Rect operator&(const Rect &a) const;
+  inline Rect &operator|=(const Rect &a) { *this = *this | a; return *this; }
+  inline Rect &operator&=(const Rect &a) { *this = *this & a; return *this; }
+
+  inline bool valid(void) const { return _x2 > _x1 && _y2 > _y1; }
+
+  bool intersects(const Rect &a) const;
+  bool contains(int __x, int __y) const;
+  bool contains(const Rect &a) const;
+
+private:
+  int _x1, _y1, _x2, _y2;
+};
+
+typedef std::vector<Rect> RectList;
+
+}
+
+#endif // __rect_hh
index 5cb2f79..3bb5605 100644 (file)
@@ -2,7 +2,7 @@
 #ifndef   __screeninfo_hh
 #define   __screeninfo_hh
 
-#include "util.hh"
+#include "rect.hh"
 
 extern "C" {
 #include <X11/Xlib.h>