Added style resources for window.button.pressed.focus: and
window.button.pressed.unfocus: Documentation to be added.
This commit is contained in:
parent
efd6c59c90
commit
987cf7cc40
6 changed files with 138 additions and 116 deletions
|
@ -1065,6 +1065,12 @@ void BScreen::LoadStyle(void) {
|
|||
resource.wstyle.b_pressed =
|
||||
readDatabaseTexture("window.button.pressed", "black", style);
|
||||
|
||||
//if neither of these can be found, we will use the previous resource
|
||||
resource.wstyle.b_pressed_focus =
|
||||
readDatabaseTexture("window.button.pressed.focus", "black", style, true);
|
||||
resource.wstyle.b_pressed_unfocus =
|
||||
readDatabaseTexture("window.button.pressed.unfocus", "black", style, true);
|
||||
|
||||
#ifdef BITMAPBUTTONS
|
||||
if (resource.wstyle.close_button.mask != None)
|
||||
XFreePixmap(blackbox->getXDisplay(), resource.wstyle.close_button.mask);
|
||||
|
@ -2671,12 +2677,15 @@ void BScreen::readDatabaseMask(const string &rname, PixmapMask &pixmapMask,
|
|||
|
||||
BTexture BScreen::readDatabaseTexture(const string &rname,
|
||||
const string &default_color,
|
||||
const Configuration &style) {
|
||||
const Configuration &style,
|
||||
bool allowNoTexture) {
|
||||
BTexture texture;
|
||||
string s;
|
||||
|
||||
if (style.getValue(rname, s))
|
||||
texture = BTexture(s);
|
||||
else if (allowNoTexture) //no default
|
||||
texture.setTexture(BTexture::NoTexture);
|
||||
else
|
||||
texture.setTexture(BTexture::Solid | BTexture::Flat);
|
||||
|
||||
|
@ -2684,12 +2693,15 @@ BTexture BScreen::readDatabaseTexture(const string &rname,
|
|||
texture.setDisplay(getBaseDisplay(), getScreenNumber());
|
||||
texture.setImageControl(image_control);
|
||||
|
||||
texture.setColor(readDatabaseColor(rname + ".color", default_color, style));
|
||||
texture.setColorTo(readDatabaseColor(rname + ".colorTo", default_color,
|
||||
if (texture.texture() != BTexture::NoTexture) {
|
||||
texture.setColor(readDatabaseColor(rname + ".color", default_color,
|
||||
style));
|
||||
texture.setBorderColor(readDatabaseColor(rname + ".borderColor",
|
||||
default_color, style));
|
||||
|
||||
texture.setColorTo(readDatabaseColor(rname + ".colorTo", default_color,
|
||||
style));
|
||||
texture.setBorderColor(readDatabaseColor(rname + ".borderColor",
|
||||
default_color, style));
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,7 +72,8 @@ struct WindowStyle {
|
|||
BColor l_text_focus, l_text_unfocus, b_pic_focus,
|
||||
b_pic_unfocus;
|
||||
BTexture f_focus, f_unfocus, t_focus, t_unfocus, l_focus, l_unfocus,
|
||||
h_focus, h_unfocus, b_focus, b_unfocus, b_pressed, g_focus, g_unfocus;
|
||||
h_focus, h_unfocus, b_focus, b_unfocus, b_pressed, b_pressed_focus,
|
||||
b_pressed_unfocus, g_focus, g_unfocus;
|
||||
|
||||
#ifdef BITMAPBUTTONS
|
||||
PixmapMask close_button, max_button, icon_button, stick_button;
|
||||
|
@ -206,7 +207,8 @@ private:
|
|||
|
||||
BTexture readDatabaseTexture(const std::string &rname,
|
||||
const std::string &default_color,
|
||||
const Configuration &style);
|
||||
const Configuration &style,
|
||||
bool allowNoTexture = false);
|
||||
BColor readDatabaseColor(const std::string &rname,
|
||||
const std::string &default_color,
|
||||
const Configuration &style);
|
||||
|
|
|
@ -184,6 +184,7 @@ BTexture& BTexture::operator=(const BTexture &tt) {
|
|||
Pixmap BTexture::render(const unsigned int width, const unsigned int height,
|
||||
const Pixmap old) {
|
||||
assert(display() != 0);
|
||||
assert(texture() != BTexture::NoTexture);
|
||||
|
||||
if (texture() == (BTexture::Flat | BTexture::Solid))
|
||||
return None;
|
||||
|
|
|
@ -33,6 +33,8 @@ class BImageControl;
|
|||
class BTexture {
|
||||
public:
|
||||
enum Type {
|
||||
// No texture
|
||||
NoTexture = (0),
|
||||
// bevel options
|
||||
Flat = (1l<<0),
|
||||
Sunken = (1l<<1),
|
||||
|
|
208
src/Window.cc
208
src/Window.cc
|
@ -134,12 +134,11 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
|
|||
|
||||
frame.ulabel_pixel = frame.flabel_pixel = frame.utitle_pixel =
|
||||
frame.ftitle_pixel = frame.uhandle_pixel = frame.fhandle_pixel =
|
||||
frame.ubutton_pixel = frame.fbutton_pixel = frame.pbutton_pixel =
|
||||
frame.uborder_pixel = frame.fborder_pixel = frame.ugrip_pixel =
|
||||
frame.fgrip_pixel = 0;
|
||||
frame.ubutton_pixel = frame.fbutton_pixel = frame.uborder_pixel =
|
||||
frame.fborder_pixel = frame.ugrip_pixel = frame.fgrip_pixel = 0;
|
||||
frame.utitle = frame.ftitle = frame.uhandle = frame.fhandle = None;
|
||||
frame.ulabel = frame.flabel = frame.ubutton = frame.fbutton = None;
|
||||
frame.pbutton = frame.ugrip = frame.fgrip = None;
|
||||
frame.ugrip = frame.fgrip = None;
|
||||
|
||||
functions = Func_Resize | Func_Move | Func_Iconify | Func_Maximize;
|
||||
mwm_decorations = Decor_Titlebar | Decor_Handle | Decor_Border |
|
||||
|
@ -571,11 +570,54 @@ void BlackboxWindow::decorate(void) {
|
|||
if (! frame.ubutton)
|
||||
frame.ubutton_pixel = texture->color().pixel();
|
||||
|
||||
texture = &(screen->getWindowStyle()->b_pressed);
|
||||
frame.pbutton = texture->render(frame.button_w, frame.button_w,
|
||||
frame.pbutton);
|
||||
if (! frame.pbutton)
|
||||
frame.pbutton_pixel = texture->color().pixel();
|
||||
unsigned char needsPressed = 0;
|
||||
|
||||
texture = &(screen->getWindowStyle()->b_pressed_focus);
|
||||
|
||||
if (texture->texture() != BTexture::NoTexture) {
|
||||
frame.pfbutton = texture->render(frame.button_w, frame.button_w,
|
||||
frame.pfbutton);
|
||||
if (! frame.pfbutton)
|
||||
frame.pfbutton_pixel = texture->color().pixel();
|
||||
} else {
|
||||
needsPressed = 0x1;
|
||||
}
|
||||
|
||||
texture = &(screen->getWindowStyle()->b_pressed_unfocus);
|
||||
|
||||
if (texture->texture() != BTexture::NoTexture) {
|
||||
frame.pubutton = texture->render(frame.button_w, frame.button_w,
|
||||
frame.pubutton);
|
||||
if (! frame.pubutton)
|
||||
frame.pubutton = texture->color().pixel();
|
||||
} else {
|
||||
needsPressed |= 0x2;
|
||||
}
|
||||
|
||||
// if we either pressed unfocused, or pressed focused were undefined,
|
||||
// make them inherit from the old resource. It's a hack for sure, but
|
||||
// it allows for some backwards and forwards compatibility.
|
||||
if (needsPressed) {
|
||||
texture = &(screen->getWindowStyle()->b_pressed);
|
||||
|
||||
Pixmap pbutton = texture->render(frame.button_w, frame.button_w,
|
||||
pbutton);
|
||||
unsigned long pixel;
|
||||
|
||||
if (!pbutton) {
|
||||
pixel = texture->color().pixel();
|
||||
if (needsPressed & 0x1)
|
||||
frame.pfbutton_pixel = pixel;
|
||||
if (needsPressed & 0x2)
|
||||
frame.pubutton_pixel = pixel;
|
||||
} else {
|
||||
if (needsPressed & 0x1)
|
||||
frame.pfbutton = pbutton;
|
||||
if (needsPressed & 0x2)
|
||||
frame.pubutton = pbutton;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (decorations & Decor_Titlebar) {
|
||||
texture = &(screen->getWindowStyle()->t_focus);
|
||||
|
@ -747,9 +789,6 @@ void BlackboxWindow::destroyTitlebar(void) {
|
|||
if (frame.ubutton)
|
||||
screen->getImageControl()->removeImage(frame.ubutton);
|
||||
|
||||
if (frame.pbutton)
|
||||
screen->getImageControl()->removeImage(frame.pbutton);
|
||||
|
||||
blackbox->removeWindowSearch(frame.title);
|
||||
blackbox->removeWindowSearch(frame.label);
|
||||
|
||||
|
@ -2589,35 +2628,50 @@ void BlackboxWindow::redrawAllButtons(void) const {
|
|||
}
|
||||
|
||||
|
||||
void BlackboxWindow::redrawIconifyButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
void BlackboxWindow::redrawButton(bool pressed, Window win,
|
||||
Pixmap fppix, unsigned long fppixel,
|
||||
Pixmap uppix, unsigned long uppixel,
|
||||
Pixmap fpix, unsigned long fpixel,
|
||||
Pixmap upix, unsigned long upixel) const {
|
||||
Pixmap p;
|
||||
unsigned long pix;
|
||||
|
||||
if (pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.iconify_button, frame.fbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(),
|
||||
frame.iconify_button, frame.fbutton_pixel);
|
||||
p = fppix;
|
||||
pix = fppixel;
|
||||
} else {
|
||||
if (frame.ubutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.iconify_button, frame.ubutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.iconify_button,
|
||||
frame.ubutton_pixel);
|
||||
p = uppix;
|
||||
pix = uppixel;
|
||||
}
|
||||
} else {
|
||||
if (frame.pbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.iconify_button, frame.pbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(),
|
||||
frame.iconify_button, frame.pbutton_pixel);
|
||||
if (flags.focused) {
|
||||
p = fpix;
|
||||
pix = fpixel;
|
||||
} else {
|
||||
p = upix;
|
||||
pix = upixel;
|
||||
}
|
||||
}
|
||||
|
||||
if (p)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(), win, p);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), win, pix);
|
||||
|
||||
}
|
||||
|
||||
void BlackboxWindow::redrawIconifyButton(bool pressed) const {
|
||||
redrawButton(pressed, frame.iconify_button,
|
||||
frame.pfbutton, frame.pfbutton_pixel,
|
||||
frame.pubutton, frame.pubutton_pixel,
|
||||
frame.fbutton, frame.fbutton_pixel,
|
||||
frame.ubutton, frame.ubutton_pixel);
|
||||
|
||||
XClearWindow(blackbox->getXDisplay(), frame.iconify_button);
|
||||
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
|
||||
screen->getWindowStyle()->b_pic_unfocus);
|
||||
|
||||
#ifdef BITMAPBUTTONS
|
||||
PixmapMask pm = screen->getWindowStyle()->icon_button;
|
||||
|
||||
|
@ -2643,30 +2697,12 @@ void BlackboxWindow::redrawIconifyButton(bool pressed) const {
|
|||
|
||||
|
||||
void BlackboxWindow::redrawMaximizeButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.maximize_button, frame.fbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.maximize_button,
|
||||
frame.fbutton_pixel);
|
||||
} else {
|
||||
if (frame.ubutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.maximize_button, frame.ubutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.maximize_button,
|
||||
frame.ubutton_pixel);
|
||||
}
|
||||
} else {
|
||||
if (frame.pbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.maximize_button, frame.pbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.maximize_button,
|
||||
frame.pbutton_pixel);
|
||||
}
|
||||
redrawButton(pressed, frame.maximize_button,
|
||||
frame.pfbutton, frame.pfbutton_pixel,
|
||||
frame.pubutton, frame.pubutton_pixel,
|
||||
frame.fbutton, frame.fbutton_pixel,
|
||||
frame.ubutton, frame.ubutton_pixel);
|
||||
|
||||
XClearWindow(blackbox->getXDisplay(), frame.maximize_button);
|
||||
|
||||
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
|
||||
|
@ -2699,30 +2735,12 @@ void BlackboxWindow::redrawMaximizeButton(bool pressed) const {
|
|||
|
||||
|
||||
void BlackboxWindow::redrawCloseButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.close_button, frame.fbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.close_button,
|
||||
frame.fbutton_pixel);
|
||||
} else {
|
||||
if (frame.ubutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(), frame.close_button,
|
||||
frame.ubutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.close_button,
|
||||
frame.ubutton_pixel);
|
||||
}
|
||||
} else {
|
||||
if (frame.pbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.close_button, frame.pbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(),
|
||||
frame.close_button, frame.pbutton_pixel);
|
||||
}
|
||||
redrawButton(pressed, frame.close_button,
|
||||
frame.pfbutton, frame.pfbutton_pixel,
|
||||
frame.pubutton, frame.pubutton_pixel,
|
||||
frame.fbutton, frame.fbutton_pixel,
|
||||
frame.ubutton, frame.ubutton_pixel);
|
||||
|
||||
XClearWindow(blackbox->getXDisplay(), frame.close_button);
|
||||
|
||||
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
|
||||
|
@ -2755,30 +2773,12 @@ void BlackboxWindow::redrawCloseButton(bool pressed) const {
|
|||
}
|
||||
|
||||
void BlackboxWindow::redrawStickyButton(bool pressed) const {
|
||||
if (! pressed) {
|
||||
if (flags.focused) {
|
||||
if (frame.fbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.stick_button, frame.fbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.stick_button,
|
||||
frame.fbutton_pixel);
|
||||
} else {
|
||||
if (frame.ubutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.stick_button, frame.ubutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.stick_button,
|
||||
frame.ubutton_pixel);
|
||||
}
|
||||
} else {
|
||||
if (frame.pbutton)
|
||||
XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
|
||||
frame.stick_button, frame.pbutton);
|
||||
else
|
||||
XSetWindowBackground(blackbox->getXDisplay(), frame.stick_button,
|
||||
frame.pbutton_pixel);
|
||||
}
|
||||
redrawButton(pressed, frame.stick_button,
|
||||
frame.pfbutton, frame.pfbutton_pixel,
|
||||
frame.pubutton, frame.pubutton_pixel,
|
||||
frame.fbutton, frame.fbutton_pixel,
|
||||
frame.ubutton, frame.ubutton_pixel);
|
||||
|
||||
XClearWindow(blackbox->getXDisplay(), frame.stick_button);
|
||||
|
||||
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
|
||||
|
|
|
@ -217,13 +217,13 @@ private:
|
|||
*/
|
||||
|
||||
struct _frame {
|
||||
// u -> unfocused, f -> has focus
|
||||
// u -> unfocused, f -> has focus, p -> pressed
|
||||
unsigned long ulabel_pixel, flabel_pixel, utitle_pixel,
|
||||
ftitle_pixel, uhandle_pixel, fhandle_pixel, ubutton_pixel,
|
||||
fbutton_pixel, pbutton_pixel, uborder_pixel, fborder_pixel,
|
||||
ugrip_pixel, fgrip_pixel;
|
||||
fbutton_pixel, pfbutton_pixel, pubutton_pixel,
|
||||
uborder_pixel, fborder_pixel, ugrip_pixel, fgrip_pixel;
|
||||
Pixmap ulabel, flabel, utitle, ftitle, uhandle, fhandle,
|
||||
ubutton, fbutton, pbutton, ugrip, fgrip;
|
||||
ubutton, fbutton, pfbutton, pubutton, ugrip, fgrip;
|
||||
|
||||
Window window, // the frame
|
||||
plate, // holds the client
|
||||
|
@ -290,6 +290,11 @@ private:
|
|||
void redrawWindowFrame(void) const;
|
||||
void redrawLabel(void) const;
|
||||
void redrawAllButtons(void) const;
|
||||
void BlackboxWindow::redrawButton(bool pressed, Window win,
|
||||
Pixmap fppix, unsigned long fppixel,
|
||||
Pixmap uppix, unsigned long uppixel,
|
||||
Pixmap fpix, unsigned long fpixel,
|
||||
Pixmap upix, unsigned long upixel) const;
|
||||
void redrawCloseButton(bool pressed) const;
|
||||
void redrawIconifyButton(bool pressed) const;
|
||||
void redrawMaximizeButton(bool pressed) const;
|
||||
|
|
Loading…
Reference in a new issue