all repos — openbox @ 987cf7cc40d4ab9c5e895ea2b0c7a77f10a0510f

openbox fork - make it a bit more like ryudo

Added style resources for window.button.pressed.focus: and
window.button.pressed.unfocus:
Documentation to be added.
Scott Moynes smoynes@nexus.carleton.ca
commit

987cf7cc40d4ab9c5e895ea2b0c7a77f10a0510f

parent

efd6c59c90aeff5bfd2fb76b3085e837aacb0596

6 files changed, 138 insertions(+), 116 deletions(-)

jump to
M src/Screen.ccsrc/Screen.cc

@@ -1065,6 +1065,12 @@ readDatabaseTexture("window.button.unfocus", "black", style);

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 @@ #endif // BITMAPSUCCESS

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 @@ // associate this texture with this screen

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; }
M src/Screen.hhsrc/Screen.hh

@@ -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 @@ #endif // BITMAPBUTTONS

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);
M src/Texture.ccsrc/Texture.cc

@@ -184,6 +184,7 @@

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;
M src/Texture.hhsrc/Texture.hh

@@ -33,6 +33,8 @@

class BTexture { public: enum Type { + // No texture + NoTexture = (0), // bevel options Flat = (1l<<0), Sunken = (1l<<1),
M src/Window.ccsrc/Window.cc

@@ -134,12 +134,11 @@ frame.right_grip = frame.left_grip = None;

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 @@ frame.ubutton);

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

@@ -746,9 +788,6 @@ screen->getImageControl()->removeImage(frame.fbutton);

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 @@ if (frame.stick_button) redrawStickyButton(flags.stuck);

} -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::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::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 @@ #endif // BITMAPBUTTONS

} 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 :
M src/Window.hhsrc/Window.hh

@@ -217,13 +217,13 @@ * Also drawn between the grips and the handle

*/ 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 @@ void destroyStickyButton(void);

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;