moved Texture and Color into new files, fixed some const and pointers

This commit is contained in:
fluxgen 2002-07-23 17:11:59 +00:00
parent 8b560ddf76
commit 35c55cdc8d
12 changed files with 260 additions and 285 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Basemenu.cc,v 1.26 2002/07/19 21:18:29 fluxgen Exp $
// $Id: Basemenu.cc,v 1.27 2002/07/23 17:11:58 fluxgen Exp $
//use GNU extensions
#ifndef _GNU_SOURCE
@ -344,11 +344,11 @@ void Basemenu::update(void) {
if (menu.height < 1) menu.height = 1;
Pixmap tmp;
BTexture *texture;
FbTk::Texture *texture;
if (title_vis) {
tmp = menu.title_pixmap;
texture = &(m_screen->getMenuStyle()->title);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
menu.title_pixmap = None;
XSetWindowBackground(m_display, menu.title,
texture->color().pixel());
@ -363,7 +363,7 @@ void Basemenu::update(void) {
tmp = menu.frame_pixmap;
texture = &(m_screen->getMenuStyle()->frame);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
menu.frame_pixmap = None;
XSetWindowBackground(m_display, menu.frame,
texture->color().pixel());
@ -376,7 +376,7 @@ void Basemenu::update(void) {
tmp = menu.hilite_pixmap;
texture = &(m_screen->getMenuStyle()->hilite);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID))
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID))
menu.hilite_pixmap = None;
else
menu.hilite_pixmap =
@ -384,7 +384,7 @@ void Basemenu::update(void) {
if (tmp) m_image_ctrl->removeImage(tmp);
tmp = menu.sel_pixmap;
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID))
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID))
menu.sel_pixmap = None;
else {
int hw = menu.item_h / 2;

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: IconBar.cc,v 1.13 2002/07/20 00:06:45 fluxgen Exp $
// $Id: IconBar.cc,v 1.14 2002/07/23 17:11:58 fluxgen Exp $
#include "IconBar.hh"
#include "i18n.hh"
@ -97,22 +97,23 @@ Window IconBar::delIcon(FluxboxWindow *fluxboxwin) {
void IconBar::loadTheme(unsigned int width, unsigned int height) {
BImageControl *image_ctrl = m_screen->getImageControl();
Pixmap tmp = m_focus_pm;
BTexture *texture = &(m_screen->getWindowStyle()->tab.l_focus);
FbTk::Texture *texture = &(m_screen->getWindowStyle()->tab.l_focus);
//If we are working on a PARENTRELATIVE, change to right focus value
if (texture->getTexture() & BImage::PARENTRELATIVE ) {
if (texture->type() & FbTk::Texture::PARENTRELATIVE ) {
texture = &(m_screen->getWindowStyle()->tab.t_focus);
}
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
m_focus_pm = None;
m_focus_pixel = texture->color().pixel();
} else {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
m_focus_pm = None;
m_focus_pixel = texture->color().pixel();
} else {
m_focus_pm =
image_ctrl->renderImage(width, height, texture);
image_ctrl->renderImage(width, height, texture);
}
if (tmp) image_ctrl->removeImage(tmp);
if (tmp)
image_ctrl->removeImage(tmp);
}
//------------ decorate ------------------

View file

@ -22,10 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// stupid macros needed to access some functions in version 2 of the GNU C
// library
// $Id: Image.cc,v 1.11 2002/07/22 22:33:45 fluxgen Exp $
// $Id: Image.cc,v 1.12 2002/07/23 17:11:58 fluxgen Exp $
//use GNU extensions
#ifndef _GNU_SOURCE
@ -69,9 +66,16 @@ typedef unsigned int u_int32_t;
# include <ctype.h>
#endif // HAVE_CTYPE_H
#include <iostream>
using namespace std;
// lookup table for texture
unsigned long *BImageControl::sqrt_table = 0;
static unsigned long bsqrt(unsigned long x) {
namespace { // anonymous
unsigned long bsqrt(unsigned long x) {
if (x <= 0) return 0;
if (x == 1) return 1;
@ -85,6 +89,7 @@ static unsigned long bsqrt(unsigned long x) {
}
}
};
BImage::BImage(BImageControl *c, unsigned int w, unsigned int h) {
control = c;
@ -117,19 +122,20 @@ BImage::~BImage(void) {
}
Pixmap BImage::render(BTexture *texture) {
if (texture->getTexture() & BImage::PARENTRELATIVE)
Pixmap BImage::render(const FbTk::Texture *texture) {
using namespace FbTk;
if (texture->type() & Texture::PARENTRELATIVE)
return ParentRelative;
else if (texture->getTexture() & BImage::SOLID)
return render_solid(texture);
else if (texture->getTexture() & BImage::GRADIENT)
return render_gradient(texture);
else if (texture->type() & Texture::SOLID)
return renderSolid(texture);
else if (texture->type() & Texture::GRADIENT)
return renderGradient(texture);
return None;
}
Pixmap BImage::render_solid(BTexture *texture) {
Pixmap BImage::renderSolid(const FbTk::Texture *texture) {
Pixmap pixmap = XCreatePixmap(control->baseDisplay()->getXDisplay(),
control->drawable(), width,
height, control->depth());
@ -160,8 +166,9 @@ Pixmap BImage::render_solid(BTexture *texture) {
XFillRectangle(control->baseDisplay()->getXDisplay(), pixmap, gc, 0, 0,
width, height);
#ifdef INTERLACE
if (texture->getTexture() & BImage::INTERLACED) {
using namespace FbTk;
#ifdef INTERLACE
if (texture->type() & Texture::INTERLACED) {
gcv.foreground = texture->colorTo().pixel();
GC igc = XCreateGC(control->baseDisplay()->getXDisplay(), pixmap,
GCForeground, &gcv);
@ -176,8 +183,8 @@ Pixmap BImage::render_solid(BTexture *texture) {
#endif // INTERLACE
if (texture->getTexture() & BImage::BEVEL1) {
if (texture->getTexture() & BImage::RAISED) {
if (texture->type() & Texture::BEVEL1) {
if (texture->type() & Texture::RAISED) {
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, lgc,
0, height - 1, width - 1, height - 1);
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, lgc,
@ -187,7 +194,7 @@ Pixmap BImage::render_solid(BTexture *texture) {
0, 0, width - 1, 0);
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, hgc,
0, height - 1, 0, 0);
} else if (texture->getTexture() & BImage::SUNKEN) {
} else if (texture->type() & Texture::SUNKEN) {
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, hgc,
0, height - 1, width - 1, height - 1);
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, hgc,
@ -198,8 +205,8 @@ Pixmap BImage::render_solid(BTexture *texture) {
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, lgc,
0, height - 1, 0, 0);
}
} else if (texture->getTexture() & BImage::BEVEL2) {
if (texture->getTexture() & BImage::RAISED) {
} else if (texture->type() & Texture::BEVEL2) {
if (texture->type() & Texture::RAISED) {
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, lgc,
1, height - 3, width - 3, height - 3);
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, lgc,
@ -209,7 +216,7 @@ Pixmap BImage::render_solid(BTexture *texture) {
1, 1, width - 3, 1);
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, hgc,
1, height - 3, 1, 1);
} else if (texture->getTexture() & BImage::SUNKEN) {
} else if (texture->type() & Texture::SUNKEN) {
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, hgc,
1, height - 3, width - 3, height - 3);
XDrawLine(control->baseDisplay()->getXDisplay(), pixmap, hgc,
@ -230,38 +237,53 @@ Pixmap BImage::render_solid(BTexture *texture) {
}
Pixmap BImage::render_gradient(BTexture *texture) {
int inverted = 0;
Pixmap BImage::renderGradient(const FbTk::Texture *texture) {
#ifdef INTERLACE
interlaced = texture->getTexture() & BImage::INTERLACED;
bool inverted = false;
using namespace FbTk;
#ifdef INTERLACE
interlaced = texture->type() & Texture::INTERLACED;
#endif // INTERLACE
if (texture->getTexture() & BImage::SUNKEN) {
if (texture->type() & Texture::SUNKEN) {
from = &(texture->colorTo());
to = &(texture->color());
if (! (texture->getTexture() & BImage::INVERT)) inverted = 1;
if (! (texture->type() & Texture::INVERT))
inverted = true;
} else {
from = &(texture->color());
to = &(texture->colorTo());
if (texture->getTexture() & BImage::INVERT) inverted = 1;
if (texture->type() & Texture::INVERT)
inverted = true;
}
control->getGradientBuffers(width, height, &xtable, &ytable);
if (texture->getTexture() & BImage::DIAGONAL) dgradient();
else if (texture->getTexture() & BImage::ELLIPTIC) egradient();
else if (texture->getTexture() & BImage::HORIZONTAL) hgradient();
else if (texture->getTexture() & BImage::PYRAMID) pgradient();
else if (texture->getTexture() & BImage::RECTANGLE) rgradient();
else if (texture->getTexture() & BImage::VERTICAL) vgradient();
else if (texture->getTexture() & BImage::CROSSDIAGONAL) cdgradient();
else if (texture->getTexture() & BImage::PIPECROSS) pcgradient();
if (texture->type() & Texture::DIAGONAL)
dgradient();
else if (texture->type() & Texture::ELLIPTIC)
egradient();
else if (texture->type() & Texture::HORIZONTAL)
hgradient();
else if (texture->type() & Texture::PYRAMID)
pgradient();
else if (texture->type() & Texture::RECTANGLE)
rgradient();
else if (texture->type() & Texture::VERTICAL)
vgradient();
else if (texture->type() & Texture::CROSSDIAGONAL)
cdgradient();
else if (texture->type() & Texture::PIPECROSS)
pcgradient();
if (texture->getTexture() & BImage::BEVEL1) bevel1();
else if (texture->getTexture() & BImage::BEVEL2) bevel2();
if (texture->type() & Texture::BEVEL1)
bevel1();
else if (texture->type() & Texture::BEVEL2)
bevel2();
if (inverted)
invert();
@ -2163,9 +2185,8 @@ BImageControl::~BImageControl(void) {
if (colors) {
unsigned long *pixels = new unsigned long [ncolors];
int i;
for (i = 0; i < ncolors; i++)
*(pixels + i) = (*(colors + i)).pixel;
for (int color = 0; color < ncolors; color++)
*(pixels + color) = (*(colors + color)).pixel;
XFreeColors(basedisplay->getXDisplay(), colormap(), pixels, ncolors, 0);
@ -2192,17 +2213,17 @@ BImageControl::~BImageControl(void) {
Pixmap BImageControl::searchCache(unsigned int width, unsigned int height,
unsigned long texture,
BColor *c1, BColor *c2) {
unsigned long texture_type,
const FbTk::Color &color, const FbTk::Color &color_to) {
CacheList::iterator it = cache.begin();
CacheList::iterator it_end = cache.end();
for (; it != it_end; ++it) {
if (((*it)->width == width) &&
((*it)->height == height) &&
((*it)->texture == texture) &&
((*it)->pixel1 == c1->pixel())) {
if (texture & BImage::GRADIENT) {
if ((*it)->pixel2 == c2->pixel()) {
((*it)->texture == texture_type) &&
((*it)->pixel1 == color.pixel())) {
if (texture_type & FbTk::Texture::GRADIENT) {
if ((*it)->pixel2 == color_to.pixel()) {
(*it)->count++;
return (*it)->pixmap;
}
@ -2218,11 +2239,12 @@ Pixmap BImageControl::searchCache(unsigned int width, unsigned int height,
Pixmap BImageControl::renderImage(unsigned int width, unsigned int height,
BTexture *texture) {
if (texture->getTexture() & BImage::PARENTRELATIVE) return ParentRelative;
const FbTk::Texture *texture) {
if (texture->type() & FbTk::Texture::PARENTRELATIVE)
return ParentRelative;
Pixmap pixmap = searchCache(width, height, texture->getTexture(),
&texture->color(), &texture->colorTo());
Pixmap pixmap = searchCache(width, height, texture->type(),
texture->color(), texture->colorTo());
if (pixmap) return pixmap;
BImage image(this, width, height);
@ -2235,10 +2257,10 @@ Pixmap BImageControl::renderImage(unsigned int width, unsigned int height,
tmp->width = width;
tmp->height = height;
tmp->count = 1;
tmp->texture = texture->getTexture();
tmp->texture = texture->type();
tmp->pixel1 = texture->color().pixel();
if (texture->getTexture() & BImage::GRADIENT)
if (texture->type() & FbTk::Texture::GRADIENT)
tmp->pixel2 = texture->colorTo().pixel();
else
tmp->pixel2 = 0l;
@ -2431,65 +2453,71 @@ unsigned long BImageControl::getSqrt(unsigned int x) {
}
void BImageControl::parseTexture(BTexture *texture, char *t) {
if ((! texture) || (! t)) return;
void BImageControl::parseTexture(FbTk::Texture *texture, const char *texture_string) {
if ((! texture) || (! texture_string))
return;
int t_len = strlen(t) + 1, i;
int t_len = strlen(texture_string) + 1;
char *ts = new char[t_len];
if (! ts) return;
// convert to lower case
for (i = 0; i < t_len; i++)
*(ts + i) = tolower(*(t + i));
for (int byte_pos = 0; byte_pos < t_len; byte_pos++)
*(ts + byte_pos) = tolower(*(texture_string + byte_pos));
using namespace FbTk;
#ifdef DEBUG
cerr<<__FILE__<<"("<<__LINE__<<"): texture_string = "<<texture_string<<endl;
#endif // DEBUG
if (strstr(ts, "parentrelative")) {
texture->setTexture(BImage::PARENTRELATIVE);
texture->setType(Texture::PARENTRELATIVE);
} else {
texture->setTexture(0);
texture->setType(Texture::NONE);
if (strstr(ts, "solid"))
texture->addTexture(BImage::SOLID);
texture->addType(Texture::SOLID);
else if (strstr(ts, "gradient")) {
texture->addTexture(BImage::GRADIENT);
texture->addType(Texture::GRADIENT);
if (strstr(ts, "crossdiagonal"))
texture->addTexture(BImage::CROSSDIAGONAL);
texture->addType(Texture::CROSSDIAGONAL);
else if (strstr(ts, "rectangle"))
texture->addTexture(BImage::RECTANGLE);
texture->addType(Texture::RECTANGLE);
else if (strstr(ts, "pyramid"))
texture->addTexture(BImage::PYRAMID);
texture->addType(Texture::PYRAMID);
else if (strstr(ts, "pipecross"))
texture->addTexture(BImage::PIPECROSS);
texture->addType(Texture::PIPECROSS);
else if (strstr(ts, "elliptic"))
texture->addTexture(BImage::ELLIPTIC);
texture->addType(Texture::ELLIPTIC);
else if (strstr(ts, "diagonal"))
texture->addTexture(BImage::DIAGONAL);
texture->addType(Texture::DIAGONAL);
else if (strstr(ts, "horizontal"))
texture->addTexture(BImage::HORIZONTAL);
texture->addType(Texture::HORIZONTAL);
else if (strstr(ts, "vertical"))
texture->addTexture(BImage::VERTICAL);
texture->addType(Texture::VERTICAL);
else
texture->addTexture(BImage::DIAGONAL);
texture->addType(Texture::DIAGONAL);
} else
texture->addTexture(BImage::SOLID);
texture->addType(Texture::SOLID);
if (strstr(ts, "raised"))
texture->addTexture(BImage::RAISED);
texture->addType(Texture::RAISED);
else if (strstr(ts, "sunken"))
texture->addTexture(BImage::SUNKEN);
texture->addType(Texture::SUNKEN);
else if (strstr(ts, "flat"))
texture->addTexture(BImage::FLAT);
texture->addType(Texture::FLAT);
else
texture->addTexture(BImage::RAISED);
texture->addType(Texture::RAISED);
if (! (texture->getTexture() & BImage::FLAT))
if (! (texture->type() & Texture::FLAT))
if (strstr(ts, "bevel2"))
texture->addTexture(BImage::BEVEL2);
texture->addType(Texture::BEVEL2);
else
texture->addTexture(BImage::BEVEL1);
texture->addType(Texture::BEVEL1);
#ifdef INTERLACE
#ifdef INTERLACE
if (strstr(ts, "interlaced"))
texture->addTexture(BImage::INTERLACED);
texture->addType(Texture::INTERLACED);
#endif // INTERLACE
}
@ -2497,7 +2525,7 @@ void BImageControl::parseTexture(BTexture *texture, char *t) {
}
void BImageControl::parseColor(BColor *col, char *c) {
void BImageControl::parseColor(FbTk::Color *col, const char *color_string) {
if (!col) return;
if (col->isAllocated()) {
@ -2507,13 +2535,13 @@ void BImageControl::parseColor(BColor *col, char *c) {
col->setPixel(0l);
col->setRGB(0, 0, 0);
col->setAllocated(False);
col->setAllocated(false);
}
if (c) {
if (color_string != 0) {
unsigned char r, g, b;
col->setPixel(color(c, &r, &g, &b));
col->setPixel(color(color_string, &r, &g, &b));
col->setRGB(r, g, b);
col->setAllocated(true);
}

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Image.hh,v 1.9 2002/07/22 22:33:45 fluxgen Exp $
// $Id: Image.hh,v 1.10 2002/07/23 17:11:59 fluxgen Exp $
#ifndef IMAGE_HH
#define IMAGE_HH
@ -33,124 +33,62 @@
#include "Timer.hh"
#include "BaseDisplay.hh"
#include "Color.hh"
#include "Texture.hh"
#include <list>
class BImage;
class BImageControl;
class BColor {
public:
BColor(unsigned char red = 0, unsigned char green = 0, unsigned char blue = 0):
m_red(red), m_green(green), m_blue(blue), m_pixel(0), m_allocated(false) { }
inline int isAllocated() const { return m_allocated; }
inline unsigned char red() const { return m_red; }
inline unsigned char green() const { return m_green; }
inline unsigned char blue() const { return m_blue; }
inline unsigned long pixel() const { return m_pixel; }
inline void setAllocated(bool a) { m_allocated = a; }
inline void setRGB(char red, char green, char blue) { m_red = red; m_green = green; m_blue = blue; }
inline void setPixel(unsigned long pixel) { m_pixel = pixel; }
private:
unsigned char m_red, m_green, m_blue;
unsigned long m_pixel;
bool m_allocated;
};
class BTexture {
public:
BTexture():m_texture(0) { }
inline const BColor &color() const { return m_color; }
inline const BColor &colorTo() const { return m_color_to; }
inline const BColor &hiColor() const { return m_hicolor; }
inline const BColor &loColor() const { return m_locolor; }
inline BColor &color() { return m_color; }
inline BColor &colorTo() { return m_color_to; }
inline BColor &hiColor() { return m_hicolor; }
inline BColor &loColor() { return m_locolor; }
inline unsigned long getTexture() const { return m_texture; }
inline void setTexture(unsigned long t) { m_texture = t; }
inline void addTexture(unsigned long t) { m_texture |= t; }
private:
BColor m_color, m_color_to, m_hicolor, m_locolor;
unsigned long m_texture;
};
class BImage {
public:
BImage(BImageControl *ic, unsigned int, unsigned int);
~BImage();
/// render to pixmap
Pixmap render(const FbTk::Texture *src_texture);
/// render solid texture to pixmap
Pixmap renderSolid(const FbTk::Texture *src_texture);
/// render gradient texture to pixmap
Pixmap renderGradient(const FbTk::Texture *src_texture);
protected:
/**
Render to pixmap
@return rendered pixmap
*/
Pixmap renderPixmap();
/**
Render to XImage
@returns allocated and rendered XImage, user is responsible to deallocate
*/
XImage *renderXImage();
void invert();
void bevel1();
void bevel2();
void dgradient();
void egradient();
void hgradient();
void pgradient();
void rgradient();
void vgradient();
void cdgradient();
void pcgradient();
private:
BImageControl *control;
#ifdef INTERLACE
Bool interlaced;
bool interlaced;
#endif // INTERLACE
XColor *colors;
XColor *colors; // color table
BColor *from, *to;
const FbTk::Color *from, *to;
int red_offset, green_offset, blue_offset, red_bits, green_bits, blue_bits,
ncolors, cpc, cpccpc;
unsigned char *red, *green, *blue, *red_table, *green_table, *blue_table;
unsigned int width, height, *xtable, *ytable;
protected:
Pixmap renderPixmap(void);
XImage *renderXImage(void);
void invert(void);
void bevel1(void);
void bevel2(void);
void dgradient(void);
void egradient(void);
void hgradient(void);
void pgradient(void);
void rgradient(void);
void vgradient(void);
void cdgradient(void);
void pcgradient(void);
public:
enum Bevel{FLAT=0x00002, SUNKEN=0x00004, RAISED=0x00008};
enum Textures{SOLID=0x00010, GRADIENT=0x00020};
enum Gradients{
HORIZONTAL=0x00040,
VERTICAL=0x00080,
DIAGONAL=0x00100,
CROSSDIAGONAL=0x00200,
RECTANGLE=0x00400,
PYRAMID=0x00800,
PIPECROSS=0x01000,
ELLIPTIC=0x02000
};
enum {
BEVEL1=0x04000, BEVEL2=0x08000, // bevel types
INVERT=0x010000, //inverted image
PARENTRELATIVE=0x20000,
INTERLACED=0x40000
};
BImage(BImageControl *, unsigned int, unsigned int);
~BImage(void);
Pixmap render(BTexture *);
Pixmap render_solid(BTexture *);
Pixmap render_gradient(BTexture *);
};
@ -166,20 +104,21 @@ public:
inline const Colormap &colormap() const { return m_colormap; }
inline ScreenInfo *getScreenInfo() { return screeninfo; }
inline const Window &drawable() const { return window; }
inline Window drawable() const { return window; }
inline Visual *visual() { return screeninfo->getVisual(); }
inline int bitsPerPixel() const { return bits_per_pixel; }
inline int depth() const { return screen_depth; }
inline int colorsPerChannel(void) const { return colors_per_channel; }
inline int colorsPerChannel() const { return colors_per_channel; }
unsigned long color(const char *colorname);
unsigned long color(const char *, unsigned char *, unsigned char *,
unsigned char *);
unsigned long getSqrt(unsigned int val);
Pixmap renderImage(unsigned int, unsigned int, BTexture *);
Pixmap renderImage(unsigned int width, unsigned int height,
const FbTk::Texture *src_texture);
void installRootColormap();
void removeImage(Pixmap thepix);
@ -190,11 +129,19 @@ public:
unsigned int **, unsigned int **);
void setDither(bool d) { dither = d; }
void setColorsPerChannel(int cpc);
void parseTexture(BTexture *ret_texture, char *sval);
void parseColor(BColor *ret_color, char *sval = 0);
void parseTexture(FbTk::Texture *ret_texture, const char *sval);
void parseColor(FbTk::Color *ret_color, const char *sval = 0);
virtual void timeout();
protected:
/**
Search cache for a specific pixmap
@return None if no cache was found
*/
Pixmap searchCache(unsigned int width, unsigned int height, unsigned long texture_type,
const FbTk::Color &color, const FbTk::Color &color_to);
private:
bool dither;
BaseDisplay *basedisplay;
@ -206,16 +153,17 @@ private:
Colormap m_colormap;
Window window;
XColor *colors;
XColor *colors; // color table
int colors_per_channel, ncolors, screen_number, screen_depth,
bits_per_pixel, red_offset, green_offset, blue_offset,
red_bits, green_bits, blue_bits;
unsigned char red_color_table[256], green_color_table[256],
blue_color_table[256];
unsigned int *grad_xbuffer, *grad_ybuffer, grad_buffer_width,
grad_buffer_height;
static unsigned long *sqrt_table;
unsigned long cache_max;
static unsigned long *sqrt_table; /// sqrt lookup table
typedef struct Cache {
Pixmap pixmap;
@ -223,13 +171,11 @@ private:
unsigned int count, width, height;
unsigned long pixel1, pixel2, texture;
} Cache;
unsigned long cache_max;
typedef std::list<Cache *> CacheList;
CacheList cache;
protected:
Pixmap searchCache(unsigned int, unsigned int, unsigned long, BColor *, BColor *);
};

View file

@ -49,6 +49,6 @@ fluxbox_SOURCES= BaseDisplay.cc BaseDisplay.hh Basemenu.cc Basemenu.hh \
IconBar.cc IconBar.hh Theme.hh Theme.cc \
StringUtil.cc StringUtil.hh DrawUtil.cc DrawUtil.hh nl_types_cygnus.h \
XrmDatabaseHelper.hh NotCopyable.hh Resource.hh Resource.cc Font.hh Font.cc \
FbAtoms.hh FbAtoms.cc
FbAtoms.hh FbAtoms.cc Color.hh Texture.hh
MAINTAINERCLEANFILES= Makefile.in

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Screen.cc,v 1.57 2002/07/23 13:47:05 fluxgen Exp $
// $Id: Screen.cc,v 1.58 2002/07/23 17:11:59 fluxgen Exp $
//use GNU extensions
#ifndef _GNU_SOURCE
@ -330,9 +330,9 @@ resource(rm, screenname, altscreenname)
InputOutput, getVisual(), mask, &attrib);
geom_visible = false;
if (theme->getWindowStyle().l_focus.getTexture() & BImage::PARENTRELATIVE) {
if (theme->getWindowStyle().t_focus.getTexture() ==
(BImage::FLAT | BImage::SOLID)) {
if (theme->getWindowStyle().l_focus.type() & FbTk::Texture::PARENTRELATIVE) {
if (theme->getWindowStyle().t_focus.type() ==
(FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
geom_pixmap = None;
XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
theme->getWindowStyle().t_focus.color().pixel());
@ -343,8 +343,8 @@ resource(rm, screenname, altscreenname)
geom_window, geom_pixmap);
}
} else {
if (theme->getWindowStyle().l_focus.getTexture() ==
(BImage::FLAT | BImage::SOLID)) {
if (theme->getWindowStyle().l_focus.type() ==
(FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
geom_pixmap = None;
XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
theme->getWindowStyle().l_focus.color().pixel());
@ -581,9 +581,9 @@ void BScreen::reconfigure(void) {
geom_h += getBevelWidth()*2;
Pixmap tmp = geom_pixmap;
if (theme->getWindowStyle().l_focus.getTexture() & BImage::PARENTRELATIVE) {
if (theme->getWindowStyle().t_focus.getTexture() ==
(BImage::FLAT | BImage::SOLID)) {
if (theme->getWindowStyle().l_focus.type() & FbTk::Texture::PARENTRELATIVE) {
if (theme->getWindowStyle().t_focus.type() ==
(FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
geom_pixmap = None;
XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
theme->getWindowStyle().t_focus.color().pixel());
@ -594,8 +594,8 @@ void BScreen::reconfigure(void) {
geom_window, geom_pixmap);
}
} else {
if (theme->getWindowStyle().l_focus.getTexture() ==
(BImage::FLAT | BImage::SOLID)) {
if (theme->getWindowStyle().l_focus.type() ==
(FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
geom_pixmap = None;
XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
theme->getWindowStyle().l_focus.color().pixel());
@ -1076,9 +1076,8 @@ void BScreen::saveStrftimeFormat(const char *format) {
#endif // HAVE_STRFTIME
void BScreen::addWorkspaceName(char *name) {
void BScreen::addWorkspaceName(const char *name) {
workspaceNames.push_back(name);
}

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Slit.cc,v 1.17 2002/07/20 09:35:01 fluxgen Exp $
// $Id: Slit.cc,v 1.18 2002/07/23 17:11:59 fluxgen Exp $
//use GNU extensions
#ifndef _GNU_SOURCE
@ -408,8 +408,8 @@ void Slit::reconfigure(void) {
Pixmap tmp = frame.pixmap;
BImageControl *image_ctrl = screen->getImageControl();
BTexture *texture = &(screen->getToolbarStyle()->toolbar);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
FbTk::Texture *texture = &(screen->getToolbarStyle()->toolbar);
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.pixmap = None;
XSetWindowBackground(display, frame.window,
texture->color().pixel());

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Tab.cc,v 1.28 2002/07/20 09:49:21 fluxgen Exp $
// $Id: Tab.cc,v 1.29 2002/07/23 17:11:59 fluxgen Exp $
#include "Tab.hh"
@ -189,11 +189,11 @@ void Tab::lower() {
void Tab::loadTheme() {
BImageControl *image_ctrl = m_win->getScreen()->getImageControl();
Pixmap tmp = m_focus_pm;
BTexture *texture = &(m_win->getScreen()->getWindowStyle()->tab.l_focus);
FbTk::Texture *texture = &(m_win->getScreen()->getWindowStyle()->tab.l_focus);
if (texture->getTexture() & BImage::PARENTRELATIVE ) {
BTexture *pt = &(m_win->getScreen()->getWindowStyle()->tab.t_focus);
if (pt->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() & FbTk::Texture::PARENTRELATIVE ) {
FbTk::Texture *pt = &(m_win->getScreen()->getWindowStyle()->tab.t_focus);
if (pt->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
m_focus_pm = None;
m_focus_pixel = pt->color().pixel();
} else
@ -203,7 +203,7 @@ void Tab::loadTheme() {
if (tmp) image_ctrl->removeImage(tmp);
} else {
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
m_focus_pm = None;
m_focus_pixel = texture->color().pixel();
} else
@ -215,16 +215,16 @@ void Tab::loadTheme() {
tmp = m_unfocus_pm;
texture = &(m_win->getScreen()->getWindowStyle()->tab.l_unfocus);
if (texture->getTexture() & BImage::PARENTRELATIVE ) {
BTexture *pt = &(m_win->getScreen()->getWindowStyle()->tab.t_unfocus);
if (pt->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() & FbTk::Texture::PARENTRELATIVE ) {
FbTk::Texture *pt = &(m_win->getScreen()->getWindowStyle()->tab.t_unfocus);
if (pt->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
m_unfocus_pm = None;
m_unfocus_pixel = pt->color().pixel();
} else
m_unfocus_pm =
image_ctrl->renderImage(m_size_w, m_size_h, pt);
} else {
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
m_unfocus_pm = None;
m_unfocus_pixel = texture->color().pixel();
} else

View file

@ -41,7 +41,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Theme.cc,v 1.22 2002/07/19 21:45:00 fluxgen Exp $
// $Id: Theme.cc,v 1.23 2002/07/23 17:11:59 fluxgen Exp $
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
@ -577,6 +577,7 @@ void Theme::loadToolbarStyle() {
readDatabaseTexture("toolbar.clock", "Toolbar.Clock",
&m_toolbarstyle.clock,
BlackPixel(m_display, m_screennum));
readDatabaseColor("toolbar.label.textColor", "Toolbar.Label.TextColor",
&m_toolbarstyle.l_text,
WhitePixel(m_display, m_screennum));
@ -625,7 +626,7 @@ void Theme::loadRootCommand() {
char *value_type;
if (m_rootcommand.size()) {
#ifndef __EMX__
#ifndef __EMX__
char tmpstring[256]; //to hold m_screennum
tmpstring[0]=0;
sprintf(tmpstring, "%d", m_screennum);
@ -708,7 +709,7 @@ void Theme::loadMisc(void) {
bool Theme::readDatabaseTexture(char *rname, char *rclass,
BTexture *texture,
FbTk::Texture *texture,
unsigned long default_pixel)
{
XrmValue value;
@ -719,9 +720,9 @@ bool Theme::readDatabaseTexture(char *rname, char *rclass,
&value))
m_imagecontrol->parseTexture(texture, value.addr);
else
texture->setTexture(BImage::SOLID | BImage::FLAT);
texture->setType(FbTk::Texture::SOLID | FbTk::Texture::FLAT);
if (texture->getTexture() & BImage::SOLID) {
if (texture->type() & FbTk::Texture::SOLID) {
int clen = strlen(rclass) + 32, nlen = strlen(rname) + 32;
char *colorclass = new char[clen], *colorname = new char[nlen];
@ -744,7 +745,7 @@ bool Theme::readDatabaseTexture(char *rname, char *rclass,
delete [] colorname;
if ((! texture->color().isAllocated()) ||
(texture->getTexture() & BImage::FLAT))
(texture->type() & FbTk::Texture::FLAT))
return retval;
XColor xcol;
@ -781,7 +782,7 @@ bool Theme::readDatabaseTexture(char *rname, char *rclass,
xcol.pixel = 0;
texture->loColor().setPixel(xcol.pixel);
} else if (texture->getTexture() & BImage::GRADIENT) {
} else if (texture->type() & FbTk::Texture::GRADIENT) {
int clen = strlen(rclass) + 10, nlen = strlen(rname) + 10;
char *colorclass = new char[clen], *colorname = new char[nlen],
@ -812,7 +813,7 @@ bool Theme::readDatabaseTexture(char *rname, char *rclass,
}
bool Theme::readDatabaseColor(char *rname, char *rclass, BColor *color,
bool Theme::readDatabaseColor(char *rname, char *rclass, FbTk::Color *color,
unsigned long default_pixel)
{
XrmValue value;

View file

@ -42,7 +42,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Theme.hh,v 1.10 2002/07/19 21:44:06 fluxgen Exp $
// $Id: Theme.hh,v 1.11 2002/07/23 17:11:59 fluxgen Exp $
#ifndef THEME_HH
#define THEME_HH
@ -68,8 +68,8 @@ public:
typedef struct MenuStyle {
MenuStyle(Display *display):titlefont(display, "fixed"),
framefont(display, "fixed") { }
BColor t_text, f_text, h_text, d_text;
BTexture title, frame, hilite;
FbTk::Color t_text, f_text, h_text, d_text;
FbTk::Texture title, frame, hilite;
GC t_text_gc, f_text_gc, h_text_gc, d_text_gc, hilite_gc;
FbTk::Font titlefont, framefont;
DrawUtil::Font::FontJustify framefont_justify;
@ -79,23 +79,23 @@ public:
typedef struct LabelStyle
{
BTexture l_focus, l_unfocus,
FbTk::Texture l_focus, l_unfocus,
t_focus, t_unfocus;
GC l_text_focus_gc, l_text_unfocus_gc;
DrawUtil::Font font;
BColor l_text_focus, l_text_unfocus;
FbTk::Color l_text_focus, l_text_unfocus;
} LabelStyle;
typedef struct WindowStyle:public LabelStyle {
BColor f_focus, f_unfocus, b_pic_focus,
FbTk::Color f_focus, f_unfocus, b_pic_focus,
b_pic_unfocus;
BTexture h_focus, h_unfocus,
FbTk::Texture h_focus, h_unfocus,
b_focus, b_unfocus, b_pressed, g_focus, g_unfocus;
GC b_pic_focus_gc, b_pic_unfocus_gc;
struct t_tab:public LabelStyle {
BColor border_color;
FbTk::Color border_color;
unsigned int border_width;
unsigned int border_width_2x;
DrawUtil::XRotFontStruct *rot_font;
@ -105,8 +105,8 @@ public:
typedef struct ToolbarStyle {
BColor l_text, w_text, c_text, b_pic;
BTexture toolbar, label, window, button, pressed, clock;
FbTk::Color l_text, w_text, c_text, b_pic;
FbTk::Texture toolbar, label, window, button, pressed, clock;
GC l_text_gc, w_text_gc, c_text_gc, b_pic_gc;
DrawUtil::Font font;
@ -120,7 +120,7 @@ public:
inline unsigned int getHandleWidth(void) const { return m_handle_width; }
inline unsigned int getFrameWidth(void) const { return m_frame_width; }
inline const GC &getOpGC(void) const { return m_opgc; }
inline const BColor &getBorderColor(void) const { return m_border_color; }
inline const FbTk::Color &getBorderColor(void) const { return m_border_color; }
void load(const char *filename);
void reconfigure();
@ -141,8 +141,8 @@ private:
void freeTabStyle();
void freeToolbarStyle();
bool readDatabaseTexture(char *, char *, BTexture *, unsigned long);
bool readDatabaseColor(char *, char *, BColor *, unsigned long);
bool readDatabaseTexture(char *, char *, FbTk::Texture *, unsigned long);
bool readDatabaseColor(char *, char *, FbTk::Color *, unsigned long);
void readDatabaseFontSet(char *, char *, XFontSet *);
XFontSet createFontSet(char *);
@ -156,7 +156,7 @@ private:
MenuStyle m_menustyle;
ToolbarStyle m_toolbarstyle;
unsigned int m_bevel_width, m_border_width, m_handle_width, m_frame_width;
BColor m_border_color;
FbTk::Color m_border_color;
GC m_opgc;
BImageControl *m_imagecontrol;
Display *m_display;

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Toolbar.cc,v 1.24 2002/07/20 09:49:57 fluxgen Exp $
// $Id: Toolbar.cc,v 1.25 2002/07/23 17:11:59 fluxgen Exp $
// stupid macros needed to access some functions in version 2 of the GNU C
// library
@ -430,8 +430,8 @@ void Toolbar::reconfigure(void) {
frame.label_h);
Pixmap tmp = frame.base;
BTexture *texture = &(screen->getToolbarStyle()->toolbar);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
FbTk::Texture *texture = &(screen->getToolbarStyle()->toolbar);
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.base = None;
XSetWindowBackground(display, frame.window,
texture->color().pixel());
@ -444,7 +444,7 @@ void Toolbar::reconfigure(void) {
tmp = frame.label;
texture = &(screen->getToolbarStyle()->window);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.label = None;
XSetWindowBackground(display, frame.window_label,
texture->color().pixel());
@ -457,7 +457,7 @@ void Toolbar::reconfigure(void) {
tmp = frame.wlabel;
texture = &(screen->getToolbarStyle()->label);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.wlabel = None;
XSetWindowBackground(display, frame.workspace_label,
texture->color().pixel());
@ -470,7 +470,7 @@ void Toolbar::reconfigure(void) {
tmp = frame.clk;
texture = &(screen->getToolbarStyle()->clock);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.clk = None;
XSetWindowBackground(display, frame.clock,
texture->color().pixel());
@ -483,7 +483,7 @@ void Toolbar::reconfigure(void) {
tmp = frame.button;
texture = &(screen->getToolbarStyle()->button);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.button = None;
frame.button_pixel = texture->color().pixel();
@ -504,7 +504,7 @@ void Toolbar::reconfigure(void) {
tmp = frame.pbutton;
texture = &(screen->getToolbarStyle()->pressed);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.pbutton = None;
frame.pbutton_pixel = texture->color().pixel();
} else

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Window.cc,v 1.62 2002/07/19 21:35:37 fluxgen Exp $
// $Id: Window.cc,v 1.63 2002/07/23 17:11:59 fluxgen Exp $
#include "Window.hh"
@ -609,8 +609,8 @@ void FluxboxWindow::decorate() {
tab->decorate();
Pixmap tmp = frame.fbutton;
BTexture *texture = &(screen->getWindowStyle()->b_focus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
FbTk::Texture *texture = &(screen->getWindowStyle()->b_focus);
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.fbutton = None;
frame.fbutton_pixel = texture->color().pixel();
} else
@ -620,7 +620,7 @@ void FluxboxWindow::decorate() {
tmp = frame.ubutton;
texture = &(screen->getWindowStyle()->b_unfocus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.ubutton = None;
frame.ubutton_pixel = texture->color().pixel();
} else
@ -630,7 +630,7 @@ void FluxboxWindow::decorate() {
tmp = frame.pbutton;
texture = &(screen->getWindowStyle()->b_pressed);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.pbutton = None;
frame.pbutton_pixel = texture->color().pixel();
} else
@ -641,7 +641,7 @@ void FluxboxWindow::decorate() {
if (decorations.titlebar) {
tmp = frame.ftitle;
texture = &(screen->getWindowStyle()->t_focus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.ftitle = None;
frame.ftitle_pixel = texture->color().pixel();
} else
@ -653,7 +653,7 @@ void FluxboxWindow::decorate() {
tmp = frame.utitle;
texture = &(screen->getWindowStyle()->t_unfocus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.utitle = None;
frame.utitle_pixel = texture->color().pixel();
} else
@ -676,7 +676,7 @@ void FluxboxWindow::decorate() {
if (decorations.handle) {
tmp = frame.fhandle;
texture = &(screen->getWindowStyle()->h_focus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.fhandle = None;
frame.fhandle_pixel = texture->color().pixel();
} else
@ -686,7 +686,7 @@ void FluxboxWindow::decorate() {
tmp = frame.uhandle;
texture = &(screen->getWindowStyle()->h_unfocus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.uhandle = None;
frame.uhandle_pixel = texture->color().pixel();
} else
@ -697,7 +697,7 @@ void FluxboxWindow::decorate() {
tmp = frame.fgrip;
texture = &(screen->getWindowStyle()->g_focus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.fgrip = None;
frame.fgrip_pixel = texture->color().pixel();
} else
@ -708,7 +708,7 @@ void FluxboxWindow::decorate() {
tmp = frame.ugrip;
texture = &(screen->getWindowStyle()->g_unfocus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.ugrip = None;
frame.ugrip_pixel = texture->color().pixel();
} else
@ -731,8 +731,8 @@ void FluxboxWindow::decorate() {
void FluxboxWindow::decorateLabel() {
Pixmap tmp = frame.flabel;
BTexture *texture = &(screen->getWindowStyle()->l_focus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
FbTk::Texture *texture = &(screen->getWindowStyle()->l_focus);
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.flabel = None;
frame.flabel_pixel = texture->color().pixel();
} else
@ -742,7 +742,7 @@ void FluxboxWindow::decorateLabel() {
tmp = frame.ulabel;
texture = &(screen->getWindowStyle()->l_unfocus);
if (texture->getTexture() == (BImage::FLAT | BImage::SOLID)) {
if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
frame.ulabel = None;
frame.ulabel_pixel = texture->color().pixel();
} else