Merge branch 'master' of fluxbox@gitfbox:fluxbox

This commit is contained in:
Mark Tiefenbruck 2008-01-18 00:33:47 -08:00
commit 1d4bea8a2d
28 changed files with 136 additions and 140 deletions

View file

@ -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"

View file

@ -28,7 +28,7 @@
#include "FbWindow.hh"
#include "Command.hh"
#include "Color.hh"
#include "Text.hh"
#include "Orientation.hh"
namespace FbTk {

View file

@ -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;

View file

@ -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

View file

@ -24,6 +24,7 @@
#include "GContext.hh"
#include "Transparent.hh"
#include "FbWindow.hh"
#include "TextUtils.hh"
#include <X11/Xutil.h>
#include <X11/Xatom.h>
@ -38,21 +39,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 +403,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 +424,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 +474,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() {

View file

@ -23,22 +23,22 @@
#define FBTK_FBPIXMAP_HH
#include "FbDrawable.hh"
#include "Text.hh"
#include "Orientation.hh"
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

View file

@ -30,7 +30,7 @@
#include "FbString.hh"
#include "Color.hh"
#include "Text.hh"
#include "Orientation.hh"
namespace FbTk {

View file

@ -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>

View file

@ -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) {

View file

@ -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 "Orientation.hh"
#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

View file

@ -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 \

View file

@ -27,7 +27,6 @@
#include "Font.hh"
#include "Shape.hh"
#include "Texture.hh"
#include "Text.hh"
#include "PixmapWithMask.hh"
#include "GContext.hh"

34
src/FbTk/Orientation.hh Normal file
View file

@ -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

View file

@ -20,6 +20,7 @@
// DEALINGS IN THE SOFTWARE.
#include "TextButton.hh"
#include "TextUtils.hh"
#include "Font.hh"
#include "GContext.hh"
@ -150,7 +151,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();

View file

@ -23,7 +23,6 @@
#define FBTK_TEXTBUTTON_HH
#include "Button.hh"
#include "Text.hh"
#include <string>

View file

@ -26,7 +26,7 @@
#include "Theme.hh"
#include "Font.hh"
#include "Color.hh"
#include "Text.hh"
#include "Orientation.hh"
#include "GContext.hh"
namespace FbTk {

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
#include "Text.hh"
#include "TextUtils.hh"
#include "Font.hh"
#include "Theme.hh"
@ -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;
}

View file

@ -1,4 +1,4 @@
// Text.hh for FbTk - text utils
// 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
@ -19,25 +19,21 @@
// 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
#ifndef FBTK_TEXTUTILS_HH
#define FBTK_TEXTUTILS_HH
#include <sys/types.h>
#include "Orientation.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,
size_t textlen, size_t &newlen);
unsigned int textlen, unsigned int &newlen);
/**
There are 3 interesting translations:
@ -76,7 +72,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 +98,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 +117,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;
@ -134,4 +130,4 @@ inline void translateSize(Orientation orient, unsigned int &w, unsigned int &h)
} // end namespace FbTk
#endif // FBTK_TEXT_HH
#endif // FBTK_TEXTUTILS_HH

View file

@ -25,6 +25,8 @@
#include "TextureRender.hh"
#include "ImageControl.hh"
#include "TextUtils.hh"
#include "Texture.hh"
#include "App.hh"
#include "FbPixmap.hh"
#include "GContext.hh"

View file

@ -25,7 +25,7 @@
#ifndef FBTK_TEXTURRENDER_HH
#define FBTK_TEXTURRENDER_HH
#include "Text.hh"
#include "Orientation.hh"
#include <X11/Xlib.h>

View file

@ -22,6 +22,7 @@
#include "XmbFontImp.hh"
#include "App.hh"
#include "TextUtils.hh"
#include "StringUtil.hh"
#include "FbPixmap.hh"
#include "GContext.hh"

View file

@ -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"

View file

@ -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"

View file

@ -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 {

View file

@ -23,6 +23,7 @@
#include "FbTk/EventManager.hh"
#include "FbTk/ImageControl.hh"
#include "FbTk/TextUtils.hh"
#include "AtomHandler.hh"
#include "fluxbox.hh"

View file

@ -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"

View file

@ -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 {

View file

@ -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"