From e1db89e2d7d56afca5335550ee1c9ff87fd54ba4 Mon Sep 17 00:00:00 2001
From: Mathias Gumz <akira at fluxbox dot org>
Date: Mon, 14 Jan 2008 23:27:00 +0100
Subject: moved code a bit around, cleaned up some classes

---
 src/FbTk/FbPixmap.cc      | 43 ++++++++++++++++++++++++-------------------
 src/FbTk/FbPixmap.hh      | 17 +++++------------
 src/FbTk/ImageControl.cc  | 23 +++++++++++++++++------
 src/FbTk/ImageControl.hh  | 42 +++++++++++-------------------------------
 src/FbTk/Text.cc          | 16 ++++++++--------
 src/FbTk/Text.hh          | 10 ++++------
 src/FbTk/TextButton.cc    |  2 +-
 src/FbTk/TextureRender.cc |  1 +
 util/fbsetroot.cc         |  1 +
 9 files changed, 72 insertions(+), 83 deletions(-)

diff --git a/src/FbTk/FbPixmap.cc b/src/FbTk/FbPixmap.cc
index bfd3ead..9d90c5a 100644
--- a/src/FbTk/FbPixmap.cc
+++ b/src/FbTk/FbPixmap.cc
@@ -38,21 +38,34 @@ using std::cerr;
 
 namespace FbTk {
 
-Pixmap *FbPixmap::m_root_pixmaps = 0;
+namespace {
 
-const char* FbPixmap::root_prop_ids[] = {
+Pixmap *root_pixmaps = 0;
+
+const char* root_prop_ids[] = {
     "_XROOTPMAP_ID",
     "_XSETROOT_ID",
     0
 };
 
 // same number as in root_prop_ids
-Atom FbPixmap::root_prop_atoms[] = {
+Atom root_prop_atoms[] = {
     None,
     None,
     None
 };
 
+void checkAtoms() {
+
+    Display* display = FbTk::App::instance()->display();
+    for (int i=0; root_prop_ids[i] != 0; ++i) {
+        if (root_prop_atoms[i] == None) {
+            root_prop_atoms[i] = XInternAtom(display, root_prop_ids[i], False);
+        }
+    }
+}
+
+}; // end of anonymous namespace
 
 FbPixmap::FbPixmap():m_pm(0),
                      m_width(0), m_height(0),
@@ -389,14 +402,14 @@ bool FbPixmap::rootwinPropertyNotify(int screen_num, Atom atom) {
 
 // returns whether or not the background was changed
 bool FbPixmap::setRootPixmap(int screen_num, Pixmap pm) {
-    if (!m_root_pixmaps) {
-        m_root_pixmaps = new Pixmap[ScreenCount(display())];
+    if (!root_pixmaps) {
+        root_pixmaps = new Pixmap[ScreenCount(display())];
         for (int i=0; i < ScreenCount(display()); ++i)
-            m_root_pixmaps[i] = None;
+            root_pixmaps[i] = None;
     }
 
-    if (m_root_pixmaps[screen_num] != pm) {
-        m_root_pixmaps[screen_num] = pm;
+    if (root_pixmaps[screen_num] != pm) {
+        root_pixmaps[screen_num] = pm;
         FbWindow::updatedAlphaBackground(screen_num);
         return true;
     }
@@ -410,8 +423,8 @@ Pixmap FbPixmap::getRootPixmap(int screen_num, bool force_update) {
     */
 
     // check and see if if we have the pixmaps in cache
-    if (m_root_pixmaps && !force_update)
-        return m_root_pixmaps[screen_num];
+    if (root_pixmaps && !force_update)
+        return root_pixmaps[screen_num];
 
     // else setup pixmap cache
     int numscreens = ScreenCount(display());
@@ -460,15 +473,7 @@ Pixmap FbPixmap::getRootPixmap(int screen_num, bool force_update) {
         setRootPixmap(i, root_pm);
     }
 
-    return m_root_pixmaps[screen_num];
-}
-
-void FbPixmap::checkAtoms() {
-    for (int i=0; root_prop_ids[i] != 0; ++i) {
-        if (root_prop_atoms[i] == None) {
-            root_prop_atoms[i] = XInternAtom(display(), root_prop_ids[i], False);
-        }
-    }
+    return root_pixmaps[screen_num];
 }
 
 void FbPixmap::free() {
diff --git a/src/FbTk/FbPixmap.hh b/src/FbTk/FbPixmap.hh
index 7b3c8de..5c2e2b8 100644
--- a/src/FbTk/FbPixmap.hh
+++ b/src/FbTk/FbPixmap.hh
@@ -23,22 +23,22 @@
 #define FBTK_FBPIXMAP_HH
 
 #include "FbDrawable.hh"
-#include "Text.hh"
+#include "Text.hh" // for Orientation
 
 namespace FbTk {
 
 /// a wrapper for X Pixmap
 class FbPixmap:public FbDrawable {
-public:    
+public:
     FbPixmap();
-    /// copy pixmap 
+    /// copy pixmap
     FbPixmap(const FbPixmap &copy);
     /// creates a FbPixmap from X pixmap
     explicit FbPixmap(Pixmap pm);
-    FbPixmap(const FbDrawable &src, 
+    FbPixmap(const FbDrawable &src,
              unsigned int width, unsigned int height,
              unsigned int depth);
-    FbPixmap(Drawable src, 
+    FbPixmap(Drawable src,
              unsigned int width, unsigned int height,
              unsigned int depth);
 
@@ -86,13 +86,6 @@ private:
     // if pixmap not *owned* by this object (eg assigned from cache object)
     bool m_dont_free;
 
-    /// Functions relating to the maintenance of root window pixmap caching
-    static void checkAtoms();
-
-    // array of pixmaps: 1 per screen
-    static Pixmap *m_root_pixmaps;
-    static const char *root_prop_ids[];
-    static Atom  root_prop_atoms[];
 };
 
 } // end namespace FbTk
diff --git a/src/FbTk/ImageControl.cc b/src/FbTk/ImageControl.cc
index 1281b56..1fa2f65 100644
--- a/src/FbTk/ImageControl.cc
+++ b/src/FbTk/ImageControl.cc
@@ -25,6 +25,7 @@
 #include "ImageControl.hh"
 
 #include "TextureRender.hh"
+#include "Texture.hh"
 #include "App.hh"
 #include "SimpleCommand.hh"
 #include "I18n.hh"
@@ -67,15 +68,17 @@ using std::list;
 
 namespace FbTk {
 
-// lookup table for texture
-unsigned long *ImageControl::sqrt_table = 0;
+namespace { // anonymous
+
+static unsigned long *sqrt_table = 0; /// lookup table
+
 #ifdef TIMEDCACHE
-bool ImageControl::s_timed_cache = true;
+bool s_timed_cache = true;
 #else
-bool ImageControl::s_timed_cache = false;
+bool s_timed_cache = false;
 #endif // TIMEDCACHE
 
-namespace { // anonymous
+
 
 inline unsigned long bsqrt(unsigned long x) {
     if (x <= 0) return 0;
@@ -93,6 +96,14 @@ inline unsigned long bsqrt(unsigned long x) {
 
 }; // end anonymous namespace
 
+struct ImageControl::Cache {
+    Pixmap pixmap;
+    Pixmap texture_pixmap;
+    Orientation orient;
+    unsigned int count, width, height;
+    unsigned long pixel1, pixel2, texture;
+};
+
 ImageControl::ImageControl(int screen_num, bool dither,
                            int cpc, unsigned long cache_timeout, unsigned long cmax):
     m_dither(dither),
@@ -148,7 +159,7 @@ ImageControl::~ImageControl() {
         delete [] m_colors;
     }
 
-    if (cache.size() > 0) {
+    if (!cache.empty()) {
         CacheList::iterator it = cache.begin();
         CacheList::iterator it_end = cache.end();
         for (; it != it_end; ++it) {
diff --git a/src/FbTk/ImageControl.hh b/src/FbTk/ImageControl.hh
index d754a07..3c3cbb1 100644
--- a/src/FbTk/ImageControl.hh
+++ b/src/FbTk/ImageControl.hh
@@ -25,16 +25,17 @@
 #ifndef FBTK_IMAGECONTROL_HH
 #define FBTK_IMAGECONTROL_HH
 
-// actually, Text is rather tool like, that's where orientation comes from
-#include "Text.hh" 
-#include "Texture.hh"
+#include "Text.hh" // actually, Text is rather tool like, that's where orientation comes from
 #include "Timer.hh"
 #include "NotCopyable.hh"
 
+#include <X11/Xlib.h> // for Visual* etc
 #include <list>
 
 namespace FbTk {
 
+class Texture;
+
 /// Holds screen info, color tables and caches textures
 class ImageControl: private NotCopyable {
 public:
@@ -47,7 +48,7 @@ public:
     int bitsPerPixel() const { return bits_per_pixel; }
 #endif
     int depth() const { return m_screen_depth; }
-    int colorsPerChannel() const	{ return m_colors_per_channel; }
+    int colorsPerChannel() const { return m_colors_per_channel; }
     int screenNumber() const { return m_screen_num; }
     Visual *visual() const { return m_visual; }
     unsigned long getSqrt(unsigned int val) const;
@@ -103,39 +104,18 @@ private:
     int m_colors_per_channel; ///< number of colors per channel
     int m_screen_depth; ///< bit depth of screen
     int m_screen_num;  ///< screen number
-    unsigned char red_color_table[256], green_color_table[256],
-        blue_color_table[256];
+    unsigned char red_color_table[256];
+    unsigned char green_color_table[256];
+    unsigned char blue_color_table[256];
+
     unsigned int *grad_xbuffer, *grad_ybuffer, grad_buffer_width,
         grad_buffer_height;
 
-    static unsigned long *sqrt_table; /// sqrt lookup table
-
-    typedef struct Cache {
-        Pixmap pixmap;
-        Pixmap texture_pixmap;
-        Orientation orient;
-        unsigned int count, width, height;
-        unsigned long pixel1, pixel2, texture;
-    } Cache;
-
-    struct ltCacheEntry {
-        bool operator()(const Cache* s1, const Cache* s2) const {
-            return (s1->orient  < s2->orient || s1->orient == s2->orient 
-                    && (s1->width  < s2->width || s1->width == s2->width 
-                    && (s1->height < s2->height || s1->height == s2->height
-                    && (s1->texture < s2->texture || s1->texture == s2->texture
-                    && (s1->pixel1 < s2->pixel1 || s1->pixel1 == s2->pixel1
-                    && ((s1->texture & FbTk::Texture::GRADIENT) && s1->pixel2 < s2->pixel2)
-                        )))));
-        }
-    };
-
-	
-    unsigned long cache_max;
+    struct Cache;
     typedef std::list<Cache *> CacheList;
 
     mutable CacheList cache;
-    static bool s_timed_cache;
+    unsigned long cache_max;
 };
 
 } // end namespace FbTk
diff --git a/src/FbTk/Text.cc b/src/FbTk/Text.cc
index 1e2851e..710b48a 100644
--- a/src/FbTk/Text.cc
+++ b/src/FbTk/Text.cc
@@ -28,15 +28,15 @@
 
 namespace FbTk {
 
-int doAlignment(int max_width, int bevel, FbTk::Justify justify, 
-                const FbTk::Font &font, const char * const text, 
-                size_t textlen, size_t &newlen) {
+int doAlignment(int max_width, int bevel, FbTk::Justify justify,
+                const FbTk::Font &font, const char * const text,
+                unsigned int textlen, unsigned int &newlen) {
 
     if (text == 0 || textlen == 0)
         return 0;
 
     int l = font.textWidth(text, textlen) + bevel;
-    size_t dlen = textlen;
+    unsigned int dlen = textlen;
     int dx = bevel;
     if (l > max_width) {
         for (; dlen > 0; dlen--) {
@@ -51,14 +51,14 @@ int doAlignment(int max_width, int bevel, FbTk::Justify justify,
     switch (justify) {
     case FbTk::RIGHT:
         dx = max_width - l - bevel;
-	break;
+    break;
     case FbTk::CENTER:
         dx = (max_width - l)/2;
-	break;
+    break;
     case FbTk::LEFT:
-	break;
+    break;
     }
-	
+
     return dx;
 }
 
diff --git a/src/FbTk/Text.hh b/src/FbTk/Text.hh
index f2b4162..494d365 100644
--- a/src/FbTk/Text.hh
+++ b/src/FbTk/Text.hh
@@ -22,8 +22,6 @@
 #ifndef FBTK_TEXT_HH
 #define FBTK_TEXT_HH
 
-#include <sys/types.h>
-
 namespace FbTk {
 
 class Font;
@@ -37,7 +35,7 @@ enum Orientation { ROT0=0, ROT90, ROT180, ROT270 };
  */
 int doAlignment(int max_width, int bevel, FbTk::Justify justify, 
                 const FbTk::Font &font, const char * const text, 
-                size_t textlen, size_t &newlen);
+                unsigned int textlen, unsigned int &newlen);
 
 /**
    There are 3 interesting translations:
@@ -76,7 +74,7 @@ inline void translateCoords(Orientation orient, int &x, int &y, unsigned int w,
 }
 
 // still require w and h in ROT0 coords
-inline void untranslateCoords(Orientation orient, int &orig_x, int &orig_y, unsigned int w, unsigned int h) {
+inline void untranslateCoords(Orientation orient, int orig_x, int orig_y, unsigned int w, unsigned int h) {
 
     int x = orig_x;
     int y = orig_y;
@@ -102,7 +100,7 @@ inline void untranslateCoords(Orientation orient, int &orig_x, int &orig_y, unsi
 
 // When positioning an X11 box inside another area, we need to
 // relocate the x,y coordinates
-inline void translatePosition(Orientation orient, int &x, int &y, unsigned int w, unsigned int h, unsigned int bw) {
+inline void translatePosition(Orientation orient, int x, int y, unsigned int w, unsigned int h, unsigned int bw) {
 
     switch(orient) {
     case ROT0:
@@ -121,7 +119,7 @@ inline void translatePosition(Orientation orient, int &x, int &y, unsigned int w
 
 }
 
-inline void translateSize(Orientation orient, unsigned int &w, unsigned int &h) {
+inline void translateSize(Orientation orient, unsigned int w, unsigned int h) {
     if (orient == ROT0 || orient == ROT180)
         return;
 
diff --git a/src/FbTk/TextButton.cc b/src/FbTk/TextButton.cc
index 922eb74..85ac5c8 100644
--- a/src/FbTk/TextButton.cc
+++ b/src/FbTk/TextButton.cc
@@ -150,7 +150,7 @@ void TextButton::renderForeground(FbWindow &win, FbDrawable &drawable) {
 }
 
 void TextButton::drawText(int x_offset, int y_offset, FbDrawable *drawable) {
-    size_t textlen = text().size();
+    unsigned int textlen = text().size();
     // do text alignment
 
     unsigned int textw = width(), texth = height();
diff --git a/src/FbTk/TextureRender.cc b/src/FbTk/TextureRender.cc
index 3f35951..c7c29c1 100644
--- a/src/FbTk/TextureRender.cc
+++ b/src/FbTk/TextureRender.cc
@@ -25,6 +25,7 @@
 #include "TextureRender.hh"
 
 #include "ImageControl.hh"
+#include "Texture.hh"
 #include "App.hh"
 #include "FbPixmap.hh"
 #include "GContext.hh"
diff --git a/util/fbsetroot.cc b/util/fbsetroot.cc
index a859480..2312e37 100644
--- a/util/fbsetroot.cc
+++ b/util/fbsetroot.cc
@@ -22,6 +22,7 @@
 
 #include "../src/FbTk/I18n.hh"
 #include "../src/FbTk/ImageControl.hh"
+#include "../src/FbTk/Texture.hh"
 #include "../src/FbTk/GContext.hh"
 #include "../src/FbRootWindow.hh"
 
-- 
cgit v0.11.2


From f6c292a406f183a12b2e327716aad5de4c0abcca Mon Sep 17 00:00:00 2001
From: Mathias Gumz <akira at fluxbox dot org>
Date: Tue, 15 Jan 2008 08:45:57 +0100
Subject: split Text.hh into Orientation.hh and TextUtils.{cc,hh}

---
 src/ClockTool.cc          |   1 +
 src/FbTk/Button.hh        |   2 +-
 src/FbTk/Container.cc     |  32 +----------
 src/FbTk/Container.hh     |   5 +-
 src/FbTk/FbPixmap.cc      |   1 +
 src/FbTk/FbPixmap.hh      |   2 +-
 src/FbTk/Font.hh          |   2 +-
 src/FbTk/FontImp.hh       |   2 +-
 src/FbTk/ImageControl.hh  |   2 +-
 src/FbTk/Makefile.am      |   2 +-
 src/FbTk/MenuTheme.hh     |   1 -
 src/FbTk/Orientation.hh   |  34 ++++++++++++
 src/FbTk/Text.cc          |  87 ------------------------------
 src/FbTk/Text.hh          | 135 ----------------------------------------------
 src/FbTk/TextButton.cc    |   1 +
 src/FbTk/TextButton.hh    |   1 -
 src/FbTk/TextTheme.hh     |   2 +-
 src/FbTk/TextUtils.cc     |  87 ++++++++++++++++++++++++++++++
 src/FbTk/TextUtils.hh     | 133 +++++++++++++++++++++++++++++++++++++++++++++
 src/FbTk/TextureRender.cc |   1 +
 src/FbTk/TextureRender.hh |   2 +-
 src/FbTk/XmbFontImp.cc    |   1 +
 src/FbWinFrame.cc         |   1 +
 src/IconButton.cc         |   1 +
 src/SystemTray.cc         |   1 +
 src/Toolbar.cc            |   1 +
 src/ToolbarItem.hh        |   2 +-
 27 files changed, 274 insertions(+), 268 deletions(-)
 create mode 100644 src/FbTk/Orientation.hh
 delete mode 100644 src/FbTk/Text.cc
 delete mode 100644 src/FbTk/Text.hh
 create mode 100644 src/FbTk/TextUtils.cc
 create mode 100644 src/FbTk/TextUtils.hh

diff --git a/src/ClockTool.cc b/src/ClockTool.cc
index ae78266..1dd07cd 100644
--- a/src/ClockTool.cc
+++ b/src/ClockTool.cc
@@ -30,6 +30,7 @@
 
 #include "FbTk/SimpleCommand.hh"
 #include "FbTk/ImageControl.hh"
+#include "FbTk/TextUtils.hh"
 #include "FbTk/Menu.hh"
 #include "FbTk/MenuItem.hh"
 #include "FbTk/I18n.hh"
diff --git a/src/FbTk/Button.hh b/src/FbTk/Button.hh
index bcf909b..99d8ee9 100644
--- a/src/FbTk/Button.hh
+++ b/src/FbTk/Button.hh
@@ -28,7 +28,7 @@
 #include "FbWindow.hh"
 #include "Command.hh"
 #include "Color.hh"
-#include "Text.hh"
+#include "Orientation.hh"
 
 namespace FbTk {
 
diff --git a/src/FbTk/Container.cc b/src/FbTk/Container.cc
index 9da25c6..0c9b6ac 100644
--- a/src/FbTk/Container.cc
+++ b/src/FbTk/Container.cc
@@ -23,6 +23,7 @@
 #include "Container.hh"
 
 #include "Button.hh"
+#include "TextUtils.hh"
 #include "EventManager.hh"
 #include "CompareEqual.hh"
 
@@ -62,37 +63,6 @@ void Container::moveResize(int x, int y,
     repositionItems();
 }
 
-#ifdef NOT_USED
-void Container::insertItems(ItemList &item_list, int pos) {
-
-    // make sure all items have parent == this
-    ItemList::iterator it = m_item_list.begin();
-    ItemList::iterator it_end = m_item_list.end();
-    for (; it != it_end; ++it) {
-        if ((*it)->parent() != this)
-            return;
-    }
-
-    if (pos > size() || pos < 0) {
-        // insert last
-        m_item_list.splice(m_item_list.end(), item_list);
-    } else if (pos == 0) {
-        // insert first
-        m_item_list.splice(m_item_list.begin(), item_list);
-    } else {
-        // find insert point
-        for (it = m_item_list.begin(); pos != 0; ++it, --pos)
-            continue;
-        m_item_list.splice(it, item_list);
-    }
-
-    m_item_list.unique();
-
-    // update position
-    repositionItems();
-}
-#endif
-
 void Container::insertItem(Item item, int pos) {
     if (find(item) != -1)
         return;
diff --git a/src/FbTk/Container.hh b/src/FbTk/Container.hh
index 954f929..d2b826c 100644
--- a/src/FbTk/Container.hh
+++ b/src/FbTk/Container.hh
@@ -26,7 +26,7 @@
 #include "FbWindow.hh"
 #include "EventHandler.hh"
 #include "NotCopyable.hh"
-#include "Text.hh" // for Orientation
+#include "Orientation.hh"
 
 #include <list>
 
@@ -52,9 +52,6 @@ public:
     void moveResize(int x, int y,
                     unsigned int width, unsigned int height);
 
-#ifdef NOT_USED
-    void insertItems(ItemList &list, int position=-1);
-#endif
     void insertItem(Item item, int pos = -1);
     bool removeItem(int item); // return true if something was removed
     bool removeItem(Item item); // return true if something was removed
diff --git a/src/FbTk/FbPixmap.cc b/src/FbTk/FbPixmap.cc
index 9d90c5a..7c1d674 100644
--- a/src/FbTk/FbPixmap.cc
+++ b/src/FbTk/FbPixmap.cc
@@ -24,6 +24,7 @@
 #include "GContext.hh"
 #include "Transparent.hh"
 #include "FbWindow.hh"
+#include "TextUtils.hh"
 
 #include <X11/Xutil.h>
 #include <X11/Xatom.h>
diff --git a/src/FbTk/FbPixmap.hh b/src/FbTk/FbPixmap.hh
index 5c2e2b8..256f6b6 100644
--- a/src/FbTk/FbPixmap.hh
+++ b/src/FbTk/FbPixmap.hh
@@ -23,7 +23,7 @@
 #define FBTK_FBPIXMAP_HH
 
 #include "FbDrawable.hh"
-#include "Text.hh" // for Orientation
+#include "Orientation.hh"
 
 namespace FbTk {
 
diff --git a/src/FbTk/Font.hh b/src/FbTk/Font.hh
index 8fb493e..28bbf22 100644
--- a/src/FbTk/Font.hh
+++ b/src/FbTk/Font.hh
@@ -30,7 +30,7 @@
 
 #include "FbString.hh"
 #include "Color.hh"
-#include "Text.hh"
+#include "Orientation.hh"
 
 namespace FbTk {
 
diff --git a/src/FbTk/FontImp.hh b/src/FbTk/FontImp.hh
index bdbab48..d903a4e 100644
--- a/src/FbTk/FontImp.hh
+++ b/src/FbTk/FontImp.hh
@@ -22,7 +22,7 @@
 #ifndef FBTK_FONTIMP_HH
 #define FBTK_FONTIMP_HH
 
-#include "Text.hh"
+#include "Orientation.hh"
 #include "FbString.hh"
 
 #include <X11/Xlib.h>
diff --git a/src/FbTk/ImageControl.hh b/src/FbTk/ImageControl.hh
index 3c3cbb1..a8e18b7 100644
--- a/src/FbTk/ImageControl.hh
+++ b/src/FbTk/ImageControl.hh
@@ -25,7 +25,7 @@
 #ifndef FBTK_IMAGECONTROL_HH
 #define FBTK_IMAGECONTROL_HH
 
-#include "Text.hh" // actually, Text is rather tool like, that's where orientation comes from
+#include "Orientation.hh"
 #include "Timer.hh"
 #include "NotCopyable.hh"
 
diff --git a/src/FbTk/Makefile.am b/src/FbTk/Makefile.am
index 0fdb155..6fa874a 100644
--- a/src/FbTk/Makefile.am
+++ b/src/FbTk/Makefile.am
@@ -30,7 +30,7 @@ libFbTk_a_SOURCES = App.hh App.cc Color.cc Color.hh Command.hh \
 	MenuTheme.hh MenuTheme.cc NotCopyable.hh \
 	BorderTheme.hh BorderTheme.cc TextTheme.hh TextTheme.cc \
 	RefCount.hh SimpleCommand.hh SignalHandler.cc SignalHandler.hh \
-	Text.hh Text.cc \
+	TextUtils.hh TextUtils.cc Orientation.hh \
 	Texture.cc Texture.hh TextureRender.hh TextureRender.cc \
 	Shape.hh Shape.cc \
 	Theme.hh Theme.cc ThemeItems.cc Timer.hh Timer.cc \
diff --git a/src/FbTk/MenuTheme.hh b/src/FbTk/MenuTheme.hh
index 273104c..70fc9b8 100644
--- a/src/FbTk/MenuTheme.hh
+++ b/src/FbTk/MenuTheme.hh
@@ -27,7 +27,6 @@
 #include "Font.hh"
 #include "Shape.hh"
 #include "Texture.hh"
-#include "Text.hh"
 #include "PixmapWithMask.hh"
 #include "GContext.hh"
 
diff --git a/src/FbTk/Orientation.hh b/src/FbTk/Orientation.hh
new file mode 100644
index 0000000..bf6bd69
--- /dev/null
+++ b/src/FbTk/Orientation.hh
@@ -0,0 +1,34 @@
+// Orientation.hh for FbTk
+// Copyright (c) 2008 Henrik Kinnunen (fluxgen at fluxbox dot org)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef FBTK_ORIENTATION_HH
+#define FBTK_ORIENTATION_HH
+
+namespace FbTk {
+
+enum Justify {LEFT, RIGHT, CENTER};
+
+// clockwise
+enum Orientation { ROT0=0, ROT90, ROT180, ROT270 };
+
+} // end namespace FbTk
+
+#endif // FBTK_ORIENTATION_HH
diff --git a/src/FbTk/Text.cc b/src/FbTk/Text.cc
deleted file mode 100644
index 710b48a..0000000
--- a/src/FbTk/Text.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Text.cc for FbTk - text utils
-// Copyright (c) 2002 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include "Text.hh"
-
-#include "Font.hh"
-#include "Theme.hh"
-
-#include <strings.h>
-
-namespace FbTk {
-
-int doAlignment(int max_width, int bevel, FbTk::Justify justify,
-                const FbTk::Font &font, const char * const text,
-                unsigned int textlen, unsigned int &newlen) {
-
-    if (text == 0 || textlen == 0)
-        return 0;
-
-    int l = font.textWidth(text, textlen) + bevel;
-    unsigned int dlen = textlen;
-    int dx = bevel;
-    if (l > max_width) {
-        for (; dlen > 0; dlen--) {
-            l = font.textWidth(text, dlen) + bevel;
-            if (l<=max_width)
-                break;
-        }
-    }
-
-    newlen = dlen;
-
-    switch (justify) {
-    case FbTk::RIGHT:
-        dx = max_width - l - bevel;
-    break;
-    case FbTk::CENTER:
-        dx = (max_width - l)/2;
-    break;
-    case FbTk::LEFT:
-    break;
-    }
-
-    return dx;
-}
-
-
-/// specialization for Justify
-template <>
-void ThemeItem<FbTk::Justify>::setDefaultValue() {
-    m_value = LEFT;
-}
-
-template <>
-void ThemeItem<FbTk::Justify>::setFromString(const char *value) {
-    if (strcasecmp("center", value) == 0)
-        m_value = FbTk::CENTER;
-    else if (strcasecmp("right", value) == 0)
-        m_value = FbTk::RIGHT;
-    else // default
-        setDefaultValue();
-}
-
-// do nothing
-template <>
-void ThemeItem<FbTk::Justify>::load(const std::string *name, const std::string *altname) {
-}
-
-}; // end namespace FbTk
diff --git a/src/FbTk/Text.hh b/src/FbTk/Text.hh
deleted file mode 100644
index 494d365..0000000
--- a/src/FbTk/Text.hh
+++ /dev/null
@@ -1,135 +0,0 @@
-// Text.hh for FbTk - text utils
-// Copyright (c) 2002 - 2003 Henrik Kinnunen (fluxgen at fluxbox dot org)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef FBTK_TEXT_HH
-#define FBTK_TEXT_HH
-
-namespace FbTk {
-
-class Font;
-
-enum Justify {LEFT, RIGHT, CENTER};
-// clockwise
-enum Orientation { ROT0=0, ROT90, ROT180, ROT270 };
-
-/**
-   Aligns the text after max width and bevel
- */
-int doAlignment(int max_width, int bevel, FbTk::Justify justify, 
-                const FbTk::Font &font, const char * const text, 
-                unsigned int textlen, unsigned int &newlen);
-
-/**
-   There are 3 interesting translations:
-   1) Coords = simple rotation of coordinates
-   2) Position = adjusting (x,y) coordinates to use to position a box with X coords
-   3) Size = swapping of width and height if necessary
- */
-
-
-// translate coordinates from ROT0 into different orientations
-// coords are relative to rot0 0,0 position
-// Need width and height of the area being rotated (in ROT0 coords)
-
-inline void translateCoords(Orientation orient, int &x, int &y, unsigned int w, unsigned int h) {
-
-    int orig_x = x;
-    int orig_y = y;
-
-    switch(orient) {
-    case ROT0:
-        break;
-    case ROT90:
-        x = h - orig_y;
-        y = orig_x;
-        break;
-    case ROT180:
-        x = w - orig_x;
-        y = h - orig_y;
-        break;
-    case ROT270:
-        x = orig_y;
-        y = w - orig_x;
-        break;
-    }
-
-}
-
-// still require w and h in ROT0 coords
-inline void untranslateCoords(Orientation orient, int orig_x, int orig_y, unsigned int w, unsigned int h) {
-
-    int x = orig_x;
-    int y = orig_y;
-
-    switch(orient) {
-    case ROT0:
-        break;
-    case ROT90:
-        orig_y = h - x;
-        orig_x = y;
-        break;
-    case ROT180:
-        orig_x = w - x;
-        orig_y = h - y;
-        break;
-    case ROT270:
-        orig_y = x;
-        orig_x = w - y;
-        break;
-    }
-
-}
-
-// When positioning an X11 box inside another area, we need to
-// relocate the x,y coordinates
-inline void translatePosition(Orientation orient, int x, int y, unsigned int w, unsigned int h, unsigned int bw) {
-
-    switch(orient) {
-    case ROT0:
-        break;
-    case ROT90:
-        x -= h + 2*bw;
-        break;
-    case ROT180:
-        x -= w + 2*bw;
-        y -= h + 2*bw;
-        break;
-    case ROT270:
-        y -= w + 2*bw;
-        break;
-    }
-
-}
-
-inline void translateSize(Orientation orient, unsigned int w, unsigned int h) {
-    if (orient == ROT0 || orient == ROT180)
-        return;
-
-    unsigned int tmp;
-    tmp = w;
-    w = h;
-    h = tmp;
-
-}
-
-} // end namespace FbTk
-
-#endif // FBTK_TEXT_HH
diff --git a/src/FbTk/TextButton.cc b/src/FbTk/TextButton.cc
index 85ac5c8..5a7afa6 100644
--- a/src/FbTk/TextButton.cc
+++ b/src/FbTk/TextButton.cc
@@ -20,6 +20,7 @@
 // DEALINGS IN THE SOFTWARE.
 
 #include "TextButton.hh"
+#include "TextUtils.hh"
 #include "Font.hh"
 #include "GContext.hh"
 
diff --git a/src/FbTk/TextButton.hh b/src/FbTk/TextButton.hh
index 50d509b..eb48e61 100644
--- a/src/FbTk/TextButton.hh
+++ b/src/FbTk/TextButton.hh
@@ -23,7 +23,6 @@
 #define FBTK_TEXTBUTTON_HH
 
 #include "Button.hh"
-#include "Text.hh"
 
 #include <string>
 
diff --git a/src/FbTk/TextTheme.hh b/src/FbTk/TextTheme.hh
index 9a83788..02adf92 100644
--- a/src/FbTk/TextTheme.hh
+++ b/src/FbTk/TextTheme.hh
@@ -26,7 +26,7 @@
 #include "Theme.hh"
 #include "Font.hh"
 #include "Color.hh"
-#include "Text.hh"
+#include "Orientation.hh"
 #include "GContext.hh"
 
 namespace FbTk {
diff --git a/src/FbTk/TextUtils.cc b/src/FbTk/TextUtils.cc
new file mode 100644
index 0000000..2b47531
--- /dev/null
+++ b/src/FbTk/TextUtils.cc
@@ -0,0 +1,87 @@
+// Text.cc for FbTk - text utils
+// Copyright (c) 2002 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#include "TextUtils.hh"
+
+#include "Font.hh"
+#include "Theme.hh"
+
+#include <strings.h>
+
+namespace FbTk {
+
+int doAlignment(int max_width, int bevel, FbTk::Justify justify,
+                const FbTk::Font &font, const char * const text,
+                unsigned int textlen, unsigned int &newlen) {
+
+    if (text == 0 || textlen == 0)
+        return 0;
+
+    int l = font.textWidth(text, textlen) + bevel;
+    unsigned int dlen = textlen;
+    int dx = bevel;
+    if (l > max_width) {
+        for (; dlen > 0; dlen--) {
+            l = font.textWidth(text, dlen) + bevel;
+            if (l<=max_width)
+                break;
+        }
+    }
+
+    newlen = dlen;
+
+    switch (justify) {
+    case FbTk::RIGHT:
+        dx = max_width - l - bevel;
+    break;
+    case FbTk::CENTER:
+        dx = (max_width - l)/2;
+    break;
+    case FbTk::LEFT:
+    break;
+    }
+
+    return dx;
+}
+
+
+/// specialization for Justify
+template <>
+void ThemeItem<FbTk::Justify>::setDefaultValue() {
+    m_value = LEFT;
+}
+
+template <>
+void ThemeItem<FbTk::Justify>::setFromString(const char *value) {
+    if (strcasecmp("center", value) == 0)
+        m_value = FbTk::CENTER;
+    else if (strcasecmp("right", value) == 0)
+        m_value = FbTk::RIGHT;
+    else // default
+        setDefaultValue();
+}
+
+// do nothing
+template <>
+void ThemeItem<FbTk::Justify>::load(const std::string *name, const std::string *altname) {
+}
+
+}; // end namespace FbTk
diff --git a/src/FbTk/TextUtils.hh b/src/FbTk/TextUtils.hh
new file mode 100644
index 0000000..efb6020
--- /dev/null
+++ b/src/FbTk/TextUtils.hh
@@ -0,0 +1,133 @@
+// TextUtils.hh for FbTk - text utils
+// Copyright (c) 2002 - 2003 Henrik Kinnunen (fluxgen at fluxbox dot org)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef FBTK_TEXTUTILS_HH
+#define FBTK_TEXTUTILS_HH
+
+#include "Orientation.hh"
+
+namespace FbTk {
+
+class Font;
+
+/**
+   Aligns the text after max width and bevel
+ */
+int doAlignment(int max_width, int bevel, FbTk::Justify justify, 
+                const FbTk::Font &font, const char * const text, 
+                unsigned int textlen, unsigned int &newlen);
+
+/**
+   There are 3 interesting translations:
+   1) Coords = simple rotation of coordinates
+   2) Position = adjusting (x,y) coordinates to use to position a box with X coords
+   3) Size = swapping of width and height if necessary
+ */
+
+
+// translate coordinates from ROT0 into different orientations
+// coords are relative to rot0 0,0 position
+// Need width and height of the area being rotated (in ROT0 coords)
+
+inline void translateCoords(Orientation orient, int &x, int &y, unsigned int w, unsigned int h) {
+
+    int orig_x = x;
+    int orig_y = y;
+
+    switch(orient) {
+    case ROT0:
+        break;
+    case ROT90:
+        x = h - orig_y;
+        y = orig_x;
+        break;
+    case ROT180:
+        x = w - orig_x;
+        y = h - orig_y;
+        break;
+    case ROT270:
+        x = orig_y;
+        y = w - orig_x;
+        break;
+    }
+
+}
+
+// still require w and h in ROT0 coords
+inline void untranslateCoords(Orientation orient, int orig_x, int orig_y, unsigned int w, unsigned int h) {
+
+    int x = orig_x;
+    int y = orig_y;
+
+    switch(orient) {
+    case ROT0:
+        break;
+    case ROT90:
+        orig_y = h - x;
+        orig_x = y;
+        break;
+    case ROT180:
+        orig_x = w - x;
+        orig_y = h - y;
+        break;
+    case ROT270:
+        orig_y = x;
+        orig_x = w - y;
+        break;
+    }
+
+}
+
+// When positioning an X11 box inside another area, we need to
+// relocate the x,y coordinates
+inline void translatePosition(Orientation orient, int x, int y, unsigned int w, unsigned int h, unsigned int bw) {
+
+    switch(orient) {
+    case ROT0:
+        break;
+    case ROT90:
+        x -= h + 2*bw;
+        break;
+    case ROT180:
+        x -= w + 2*bw;
+        y -= h + 2*bw;
+        break;
+    case ROT270:
+        y -= w + 2*bw;
+        break;
+    }
+
+}
+
+inline void translateSize(Orientation orient, unsigned int w, unsigned int h) {
+    if (orient == ROT0 || orient == ROT180)
+        return;
+
+    unsigned int tmp;
+    tmp = w;
+    w = h;
+    h = tmp;
+
+}
+
+} // end namespace FbTk
+
+#endif // FBTK_TEXTUTILS_HH
diff --git a/src/FbTk/TextureRender.cc b/src/FbTk/TextureRender.cc
index c7c29c1..a4bb50c 100644
--- a/src/FbTk/TextureRender.cc
+++ b/src/FbTk/TextureRender.cc
@@ -25,6 +25,7 @@
 #include "TextureRender.hh"
 
 #include "ImageControl.hh"
+#include "TextUtils.hh"
 #include "Texture.hh"
 #include "App.hh"
 #include "FbPixmap.hh"
diff --git a/src/FbTk/TextureRender.hh b/src/FbTk/TextureRender.hh
index ab03252..cfedba5 100644
--- a/src/FbTk/TextureRender.hh
+++ b/src/FbTk/TextureRender.hh
@@ -25,7 +25,7 @@
 #ifndef FBTK_TEXTURRENDER_HH
 #define FBTK_TEXTURRENDER_HH
 
-#include "Text.hh"
+#include "Orientation.hh"
 
 #include <X11/Xlib.h>
 
diff --git a/src/FbTk/XmbFontImp.cc b/src/FbTk/XmbFontImp.cc
index 8ef0fbc..e05609c 100644
--- a/src/FbTk/XmbFontImp.cc
+++ b/src/FbTk/XmbFontImp.cc
@@ -22,6 +22,7 @@
 #include "XmbFontImp.hh"
 
 #include "App.hh"
+#include "TextUtils.hh"
 #include "StringUtil.hh"
 #include "FbPixmap.hh"
 #include "GContext.hh"
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc
index ea1236a..234364e 100644
--- a/src/FbWinFrame.cc
+++ b/src/FbWinFrame.cc
@@ -28,6 +28,7 @@
 #include "FbTk/Compose.hh"
 #include "FbTk/Transparent.hh"
 #include "FbTk/CompareEqual.hh"
+#include "FbTk/TextUtils.hh"
 
 #include "FbWinFrameTheme.hh"
 #include "Screen.hh"
diff --git a/src/IconButton.cc b/src/IconButton.cc
index 2df741a..09791c8 100644
--- a/src/IconButton.cc
+++ b/src/IconButton.cc
@@ -30,6 +30,7 @@
 #include "FbTk/Command.hh"
 #include "FbTk/EventManager.hh"
 #include "FbTk/ImageControl.hh"
+#include "FbTk/TextUtils.hh"
 #include "FbTk/MacroCommand.hh"
 #include "FbTk/Menu.hh"
 #include "FbTk/RefCount.hh"
diff --git a/src/SystemTray.cc b/src/SystemTray.cc
index 5ba89c3..5aa7323 100644
--- a/src/SystemTray.cc
+++ b/src/SystemTray.cc
@@ -23,6 +23,7 @@
 
 #include "FbTk/EventManager.hh"
 #include "FbTk/ImageControl.hh"
+#include "FbTk/TextUtils.hh"
 
 #include "AtomHandler.hh"
 #include "fluxbox.hh"
diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index 18f07fc..89ec898 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -45,6 +45,7 @@
 
 #include "FbTk/I18n.hh"
 #include "FbTk/ImageControl.hh"
+#include "FbTk/TextUtils.hh"
 #include "FbTk/MacroCommand.hh"
 #include "FbTk/EventManager.hh"
 #include "FbTk/SimpleCommand.hh"
diff --git a/src/ToolbarItem.hh b/src/ToolbarItem.hh
index c4327b2..4a92c97 100644
--- a/src/ToolbarItem.hh
+++ b/src/ToolbarItem.hh
@@ -24,7 +24,7 @@
 #define TOOLBARITEM_HH
 
 #include "FbTk/Subject.hh"
-#include "FbTk/Text.hh" // orientation
+#include "FbTk/Orientation.hh"
 
 /// An item in the toolbar that has either fixed or relative size to the toolbar
 class ToolbarItem {
-- 
cgit v0.11.2


From 8c2cee577a744870fd497f73a21c2d4e1c45c907 Mon Sep 17 00:00:00 2001
From: Henrik Kinnunen <fluxgen@fluxbox.org>
Date: Tue, 15 Jan 2008 10:56:25 +0100
Subject: must initialize toolbar before the windows

---
 src/Screen.cc | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/Screen.cc b/src/Screen.cc
index 578b0c7..6af65a9 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -629,6 +629,12 @@ bool BScreen::isRestart() {
 }
 
 void BScreen::initWindows() {
+
+#ifdef USE_TOOLBAR
+    m_toolbar.reset(new Toolbar(*this,
+                                *layerManager().getLayer(::Layer::NORMAL)));
+#endif // USE_TOOLBAR
+
     unsigned int nchild;
     Window r, p, *children;
     Display *disp = FbTk::App::instance()->display();
@@ -726,11 +732,6 @@ void BScreen::initWindows() {
         slit()->show();
 #endif // SLIT
 
-#ifdef USE_TOOLBAR
-    m_toolbar.reset(new Toolbar(*this,
-                                *layerManager().getLayer(::Layer::NORMAL)));
-#endif // USE_TOOLBAR
-
 }
 
 unsigned int BScreen::currentWorkspaceID() const {
-- 
cgit v0.11.2