summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorCarlos Pita <carlosjosepita@gmail.com>2011-01-12 20:49:45 -0300
committerDana Jansens <danakj@orodu.net>2011-08-01 11:49:39 -0400
commit1e427a3358deeadf8abc326e714ee201fddc43d6 (patch)
treee0feefd6587549abefd2ed22d46ff34994d7174a /openbox
parenta5a91b32980022d8c562a208f8d19ca07b8d7c83 (diff)
Separate theme options for osd prompt buttons.
I managed to keep backwards compatibility without really cluttering the code so here is the patch http://bugzilla.icculus.org/show_bug.cgi?id=4874 too. Please keep in mind that this is my first piece of code for openbox and that I'm not a die hard openbox user (yet), not to tell the patch was not exhaustively tested. Anyway I think it's pretty much in a good shape but any criticism will be welcome. Basically the patch add the following theme options for controlling buttons in osd prompts: %%%% colors % % for the text inside the button osd.button.unpressed.text.color osd.button.pressed.text.color osd.button.focused.text.color % % for the line art around the button % (if you don't wan't the box just make box.color = bg.color) osd.button.pressed.box.color osd.button.focused.box.color %%%% textures % osd.button.unpressed.bg osd.button.pressed.bg osd.button.focused.bg The buttons can be in three states: unpressed: neither clicked nor selected focused: selected but not clicked pressed: clicked (and of course selected) I discarded the previous distinction between press and pfocus as in fact it was only a formal distinction, in that both appearances mimicked each other in every sense. It think that it was just inherited from the way titlebar buttons are managed so I decided to simplify it a bit. All the options default in a way that preserves backwards compatibility: osd.button.unpressed.text.color -> osd.active.label.text.color osd.button.pressed.text.color -> osd.active.label.text.color osd.button.focused.text.color -> osd.active.label.text.color osd.button.pressed.box.color -> window.active.button.pressed.image.color osd.button.focused.box.color -> window.active.button.hover.image.color osd.button.unpressed.bg -> window.active.button.unpressed.bg osd.button.pressed.bg -> window.active.button.pressed.bg osd.button.focused.bg -> window.active.button.hover.bg Notice that a good deal of locs where added to theme.c but in compensation prompt.c is pretty much simpler now because the appearances and textures are created while loading the theme.
Diffstat (limited to 'openbox')
-rw-r--r--openbox/prompt.c65
1 files changed, 6 insertions, 59 deletions
diff --git a/openbox/prompt.c b/openbox/prompt.c
index 08356092..ebefe0ae 100644
--- a/openbox/prompt.c
+++ b/openbox/prompt.c
@@ -34,7 +34,6 @@ static RrAppearance *prompt_a_bg;
static RrAppearance *prompt_a_button;
static RrAppearance *prompt_a_focus;
static RrAppearance *prompt_a_press;
-static RrAppearance *prompt_a_pfocus;
/* we change the max width which would screw with others */
static RrAppearance *prompt_a_msg;
@@ -54,58 +53,12 @@ static void prompt_run_callback(ObPrompt *self, gint result);
void prompt_startup(gboolean reconfig)
{
- RrColor *c_button, *c_focus, *c_press, *c_pfocus;
-
/* note: this is not a copy, don't free it */
prompt_a_bg = ob_rr_theme->osd_bg;
- prompt_a_button = RrAppearanceCopy(ob_rr_theme->a_focused_unpressed_close);
- prompt_a_focus = RrAppearanceCopy(ob_rr_theme->a_hover_focused_close);
- prompt_a_press = RrAppearanceCopy(ob_rr_theme->a_focused_pressed_close);
- prompt_a_pfocus = RrAppearanceCopy(ob_rr_theme->a_focused_pressed_close);
-
- c_button = prompt_a_button->texture[0].data.mask.color;
- c_focus = prompt_a_focus->texture[0].data.mask.color;
- c_press = prompt_a_press->texture[0].data.mask.color;
- c_pfocus = prompt_a_press->texture[0].data.mask.color;
-
- RrAppearanceRemoveTextures(prompt_a_button);
- RrAppearanceRemoveTextures(prompt_a_focus);
- RrAppearanceRemoveTextures(prompt_a_press);
- RrAppearanceRemoveTextures(prompt_a_pfocus);
-
- /* texture[0] is the text and texture[1-4] (for prompt_a_focus and
- prompt_a_pfocus) is lineart to show where keyboard focus is */
- RrAppearanceAddTextures(prompt_a_button, 1);
- RrAppearanceAddTextures(prompt_a_focus, 5);
- RrAppearanceAddTextures(prompt_a_press, 1);
- RrAppearanceAddTextures(prompt_a_pfocus, 5);
-
- /* totally cheating here.. */
- prompt_a_button->texture[0] = ob_rr_theme->osd_hilite_label->texture[0];
- prompt_a_focus->texture[0] = ob_rr_theme->osd_hilite_label->texture[0];
- prompt_a_press->texture[0] = ob_rr_theme->osd_hilite_label->texture[0];
- prompt_a_pfocus->texture[0] = ob_rr_theme->osd_hilite_label->texture[0];
-
- prompt_a_button->texture[0].data.text.justify = RR_JUSTIFY_CENTER;
- prompt_a_focus->texture[0].data.text.justify = RR_JUSTIFY_CENTER;
- prompt_a_press->texture[0].data.text.justify = RR_JUSTIFY_CENTER;
- prompt_a_pfocus->texture[0].data.text.justify = RR_JUSTIFY_CENTER;
-
- prompt_a_button->texture[0].data.text.color = c_button;
- prompt_a_focus->texture[0].data.text.color = c_focus;
- prompt_a_press->texture[0].data.text.color = c_press;
- prompt_a_pfocus->texture[0].data.text.color = c_pfocus;
-
- prompt_a_focus->texture[1].data.lineart.color = c_focus;
- prompt_a_focus->texture[2].data.lineart.color = c_focus;
- prompt_a_focus->texture[3].data.lineart.color = c_focus;
- prompt_a_focus->texture[4].data.lineart.color = c_focus;
-
- prompt_a_pfocus->texture[1].data.lineart.color = c_press;
- prompt_a_pfocus->texture[2].data.lineart.color = c_press;
- prompt_a_pfocus->texture[3].data.lineart.color = c_press;
- prompt_a_pfocus->texture[4].data.lineart.color = c_press;
+ prompt_a_button = RrAppearanceCopy(ob_rr_theme->osd_unpressed_button);
+ prompt_a_focus = RrAppearanceCopy(ob_rr_theme->osd_focused_button);
+ prompt_a_press = RrAppearanceCopy(ob_rr_theme->osd_pressed_button);
prompt_a_msg = RrAppearanceCopy(ob_rr_theme->osd_hilite_label);
prompt_a_msg->texture[0].data.text.flow = TRUE;
@@ -136,7 +89,6 @@ void prompt_shutdown(gboolean reconfig)
RrAppearanceFree(prompt_a_button);
RrAppearanceFree(prompt_a_focus);
RrAppearanceFree(prompt_a_press);
- RrAppearanceFree(prompt_a_pfocus);
RrAppearanceFree(prompt_a_msg);
}
@@ -281,7 +233,6 @@ static void prompt_layout(ObPrompt *self)
prompt_a_button->texture[0].data.text.string = self->button[i].text;
prompt_a_focus->texture[0].data.text.string = self->button[i].text;
prompt_a_press->texture[0].data.text.string = self->button[i].text;
- prompt_a_pfocus->texture[0].data.text.string = self->button[i].text;
RrMinSize(prompt_a_button, &bw, &bh);
self->button[i].width = bw;
self->button[i].height = bh;
@@ -291,9 +242,6 @@ static void prompt_layout(ObPrompt *self)
RrMinSize(prompt_a_press, &bw, &bh);
self->button[i].width = MAX(self->button[i].width, bw);
self->button[i].height = MAX(self->button[i].height, bh);
- RrMinSize(prompt_a_pfocus, &bw, &bh);
- self->button[i].width = MAX(self->button[i].width, bw);
- self->button[i].height = MAX(self->button[i].height, bh);
self->button[i].width += BUTTON_HMARGIN * 2;
self->button[i].height += BUTTON_VMARGIN * 2;
@@ -414,9 +362,8 @@ static void render_button(ObPrompt *self, ObPromptElement *e)
{
RrAppearance *a;
- if (e->hover && self->focus == e) a = prompt_a_pfocus;
+ if (e->pressed && e->hover) a = prompt_a_press;
else if (self->focus == e) a = prompt_a_focus;
- else if (e->pressed) a = prompt_a_press;
else a = prompt_a_button;
a->surface.parent = prompt_a_bg;
@@ -424,7 +371,7 @@ static void render_button(ObPrompt *self, ObPromptElement *e)
a->surface.parenty = e->y;
/* draw the keyfocus line */
- if (a == prompt_a_pfocus || a == prompt_a_focus)
+ if (self->focus == e)
setup_button_focus_tex(e, a, TRUE);
a->texture[0].data.text.string = e->text;
@@ -432,7 +379,7 @@ static void render_button(ObPrompt *self, ObPromptElement *e)
/* turn off the keyfocus line so that it doesn't affect size calculations
*/
- if (a == prompt_a_pfocus || a == prompt_a_focus)
+ if (self->focus == e)
setup_button_focus_tex(e, a, FALSE);
}