-#ifdef HAVE_CONFIG_H
-#include "../config.h"
-#endif // HAVE_CONFIG_H
+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif
#include <assert.h>
#include <iostream>
{
}
-Style::Style(BImageControl *ctrl)
+Style::Style(ImageControl *ctrl)
: image_control(ctrl), font(0),
- screen_number(ctrl->getScreenInfo()->getScreenNumber())
+ screen_number(ctrl->getScreenInfo()->screen())
{
}
delete font;
if (close_button.mask != None)
- XFreePixmap(OBDisplay::display, close_button.mask);
+ XFreePixmap(**display, close_button.mask);
if (max_button.mask != None)
- XFreePixmap(OBDisplay::display, max_button.mask);
+ XFreePixmap(**display, max_button.mask);
if (icon_button.mask != None)
- XFreePixmap(OBDisplay::display, icon_button.mask);
+ XFreePixmap(**display, icon_button.mask);
if (stick_button.mask != None)
- XFreePixmap(OBDisplay::display, stick_button.mask);
+ XFreePixmap(**display, stick_button.mask);
max_button.mask = None;
close_button.mask = None;
b_focus = readDatabaseTexture("window.button.focus", "white", style);
b_unfocus = readDatabaseTexture("window.button.unfocus", "black", style);
- b_pressed = readDatabaseTexture("window.button.pressed", "black", style);
//if neither of these can be found, we will use the previous resource
b_pressed_focus = readDatabaseTexture("window.button.pressed.focus",
"black", style, true);
+ if (b_pressed_focus.texture() == Texture::NoTexture) {
+ b_pressed_focus = readDatabaseTexture("window.button.pressed", "black",
+ style);
+ }
+
b_pressed_unfocus = readDatabaseTexture("window.button.pressed.unfocus",
"black", style, true);
+ if (b_pressed_unfocus.texture() == Texture::NoTexture) {
+ b_pressed_unfocus = readDatabaseTexture("window.button.pressed", "black",
+ style);
+ }
if (close_button.mask != None)
- XFreePixmap(OBDisplay::display, close_button.mask);
+ XFreePixmap(**display, close_button.mask);
if (max_button.mask != None)
- XFreePixmap(OBDisplay::display, max_button.mask);
+ XFreePixmap(**display, max_button.mask);
if (icon_button.mask != None)
- XFreePixmap(OBDisplay::display, icon_button.mask);
+ XFreePixmap(**display, icon_button.mask);
if (stick_button.mask != None)
- XFreePixmap(OBDisplay::display, stick_button.mask);
+ XFreePixmap(**display, stick_button.mask);
close_button.mask = max_button.mask = icon_button.mask
= icon_button.mask = None;
// we create the window.frame texture by hand because it exists only to
// make the code cleaner and is not actually used for display
- BColor color = readDatabaseColor("window.frame.focusColor", "white",
+ Color color = readDatabaseColor("window.frame.focusColor", "white",
style);
- f_focus = BTexture("solid flat", screen_number, image_control);
+ f_focus = Texture("solid flat", screen_number, image_control);
f_focus.setColor(color);
color = readDatabaseColor("window.frame.unfocusColor", "white", style);
- f_unfocus = BTexture("solid flat", screen_number, image_control);
+ f_unfocus = Texture("solid flat", screen_number, image_control);
f_unfocus.setColor(color);
l_text_focus = readDatabaseColor("window.label.focus.textColor",
}
// sanity checks
- if (t_focus.texture() == BTexture::Parent_Relative)
+ if (t_focus.texture() == Texture::Parent_Relative)
t_focus = f_focus;
- if (t_unfocus.texture() == BTexture::Parent_Relative)
+ if (t_unfocus.texture() == Texture::Parent_Relative)
t_unfocus = f_unfocus;
- if (h_focus.texture() == BTexture::Parent_Relative)
+ if (h_focus.texture() == Texture::Parent_Relative)
h_focus = f_focus;
- if (h_unfocus.texture() == BTexture::Parent_Relative)
+ if (h_unfocus.texture() == Texture::Parent_Relative)
h_unfocus = f_unfocus;
border_color = readDatabaseColor("borderColor", "black", style);
// load bevel, border and handle widths
- const ScreenInfo *s_info = OBDisplay::screenInfo(screen_number);
- unsigned int width = s_info->getRect().width();
+ const ScreenInfo *s_info = display->screenInfo(screen_number);
+ unsigned int width = s_info->rect().width();
if (! style.getValue("handleWidth", handle_width) ||
handle_width > width/2 || handle_width == 0)
}
-void Style::doJustify(const std::string &text, int &start_pos,
- unsigned int max_length,
- unsigned int modifier) const {
- size_t text_len = text.size();
- unsigned int length;
-
- do {
- length = font->measureString(std::string(text, 0, text_len)) + modifier;
- } while (length > max_length && text_len-- > 0);
-
- switch (justify) {
- case RightJustify:
- start_pos += max_length - length;
- break;
-
- case CenterJustify:
- start_pos += (max_length - length) / 2;
- break;
-
- case LeftJustify:
- default:
- break;
- }
-}
-
-
void Style::readDatabaseMask(const std::string &rname, PixmapMask &pixmapMask,
const Configuration &style) {
- Window root_window = OBDisplay::screenInfo(screen_number)->getRootWindow();
+ Window root_window = display->screenInfo(screen_number)->rootWindow();
std::string s;
int hx, hy; //ignored
int ret = BitmapOpenFailed; //default to failure.
- if (style.getValue(rname, s))
- {
- if (s[0] != '/' && s[0] != '~')
- {
+ if (style.getValue(rname, s)) {
+ if (s[0] != '/' && s[0] != '~') {
std::string xbmFile = std::string("~/.openbox/buttons/") + s;
- ret = XReadBitmapFile(OBDisplay::display, root_window,
+ ret = XReadBitmapFile(**display, root_window,
expandTilde(xbmFile).c_str(), &pixmapMask.w,
&pixmapMask.h, &pixmapMask.mask, &hx, &hy);
+ if (ret != BitmapSuccess) {
+ xbmFile = std::string(BUTTONSDIR) + "/" + s;
+ ret = XReadBitmapFile(**display, root_window,
+ xbmFile.c_str(), &pixmapMask.w,
+ &pixmapMask.h, &pixmapMask.mask, &hx, &hy);
+ }
} else
- ret = XReadBitmapFile(OBDisplay::display, root_window,
+ ret = XReadBitmapFile(**display, root_window,
expandTilde(s).c_str(), &pixmapMask.w,
&pixmapMask.h, &pixmapMask.mask, &hx, &hy);
}
-BTexture Style::readDatabaseTexture(const std::string &rname,
- const std::string &default_color,
- const Configuration &style,
- bool allowNoTexture)
+Texture Style::readDatabaseTexture(const std::string &rname,
+ const std::string &default_color,
+ const Configuration &style,
+ bool allowNoTexture)
{
- BTexture texture;
+ Texture texture;
std::string s;
if (style.getValue(rname, s))
- texture = BTexture(s);
+ texture = Texture(s);
else if (allowNoTexture) //no default
- texture.setTexture(BTexture::NoTexture);
+ texture.setTexture(Texture::NoTexture);
else
- texture.setTexture(BTexture::Solid | BTexture::Flat);
+ texture.setTexture(Texture::Solid | Texture::Flat);
// associate this texture with this screen
texture.setScreen(screen_number);
texture.setImageControl(image_control);
- if (texture.texture() != BTexture::NoTexture) {
+ if (texture.texture() != Texture::NoTexture) {
texture.setColor(readDatabaseColor(rname + ".color", default_color,
style));
texture.setColorTo(readDatabaseColor(rname + ".colorTo", default_color,
}
-BColor Style::readDatabaseColor(const std::string &rname,
- const std::string &default_color,
- const Configuration &style) {
- BColor color;
+Color Style::readDatabaseColor(const std::string &rname,
+ const std::string &default_color,
+ const Configuration &style) {
+ Color color;
std::string s;
if (style.getValue(rname, s))
- color = BColor(s, screen_number);
+ color = Color(s, screen_number);
else
- color = BColor(default_color, screen_number);
+ color = Color(default_color, screen_number);
return color;
}
-BFont *Style::readDatabaseFont(const std::string &rbasename,
- const Configuration &style) {
- std::string fontname;
+Font *Style::readDatabaseFont(const std::string &rbasename,
+ const Configuration &style) {
+ std::string fontstring, s;
- std::string s;
+ // XXX: load all this font stuff from the style...
- int i;
- if (style.getValue(rbasename + "xft.font", s) &&
- style.getValue(rbasename + "xft.size", i)) {
- std::string family = s;
- bool bold = False;
- bool italic = False;
- bool dropShadow = False;
-
- if (style.getValue(rbasename + "xft.flags", s)) {
- if (s.find("bold") != std::string::npos)
- bold = True;
- if (s.find("italic") != std::string::npos)
- italic = True;
- if (s.find("shadow") != std::string::npos)
- dropShadow = True;
- }
+ bool dropShadow = True;
- unsigned char offset = 1;
- if (style.getValue(rbasename + "xft.shadow.offset", s)) {
- offset = atoi(s.c_str()); //doesn't detect errors
- if (offset > CHAR_MAX)
- offset = 1;
- }
-
- unsigned char tint = 0x40;
- if (style.getValue(rbasename + "xft.shadow.tint", s)) {
- tint = atoi(s.c_str());
- }
+ unsigned char offset = 1;
+ if (style.getValue(rbasename + "xft.shadow.offset", s)) {
+ offset = atoi(s.c_str()); //doesn't detect errors
+ if (offset > CHAR_MAX)
+ offset = 1;
+ }
-
- BFont *b = new BFont(screen_number, family, i, bold, italic,
- dropShadow && shadow_fonts,
- offset, tint, aa_fonts);
- if (b->valid())
- return b;
- delete b;
+ unsigned char tint = 0x40;
+ if (style.getValue(rbasename + "xft.shadow.tint", s)) {
+ tint = atoi(s.c_str());
}
- if (style.getValue(rbasename + "xft.font", s))
- printf("Unable to load font \"%s\". Exiting\n", s.c_str());
- else
- printf("Font not defined by style. Exiting\n");
- exit(2); // can't continue without a font
+ fontstring = "Arial,Sans-9:bold";
+
+ // if this fails, it ::exit()'s
+ return new Font(screen_number, fontstring, dropShadow, offset, tint);
}
}