mirror of
https://github.com/labwc/labwc.git
synced 2026-02-16 22:05:27 -05:00
theme: implement osd.border.color and osd.border.width
http://openbox.org/wiki/Help:Themes#osd.border.color http://openbox.org/wiki/Help:Themes#osd.border.width
This commit is contained in:
parent
c4074207e1
commit
b7907cc2da
5 changed files with 58 additions and 6 deletions
|
|
@ -104,6 +104,12 @@ elements are not listed here, but are supported.
|
||||||
*osd.bg.color*
|
*osd.bg.color*
|
||||||
Background color of on-screen-display
|
Background color of on-screen-display
|
||||||
|
|
||||||
|
*osd.border.color*
|
||||||
|
Border color of on-screen-display
|
||||||
|
|
||||||
|
*osd.border.width*
|
||||||
|
Border width of on-screen-display
|
||||||
|
|
||||||
*osd.label.text.color*
|
*osd.label.text.color*
|
||||||
Text color of on-screen-display
|
Text color of on-screen-display
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,5 +34,7 @@ menu.items.active.text.color: #000000
|
||||||
|
|
||||||
# on screen display (window-cycle dialog)
|
# on screen display (window-cycle dialog)
|
||||||
osd.bg.color: #dddda6
|
osd.bg.color: #dddda6
|
||||||
|
osd.border.color: #000000
|
||||||
|
osd.border.width: 1
|
||||||
osd.label.text.color: #000000
|
osd.label.text.color: #000000
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,9 @@ struct theme {
|
||||||
float menu_items_active_bg_color[4];
|
float menu_items_active_bg_color[4];
|
||||||
float menu_items_active_text_color[4];
|
float menu_items_active_text_color[4];
|
||||||
|
|
||||||
|
int osd_border_width;
|
||||||
float osd_bg_color[4];
|
float osd_bg_color[4];
|
||||||
|
float osd_border_color[4];
|
||||||
float osd_label_text_color[4];
|
float osd_label_text_color[4];
|
||||||
|
|
||||||
/* textures */
|
/* textures */
|
||||||
|
|
|
||||||
25
src/osd.c
25
src/osd.c
|
|
@ -24,6 +24,24 @@ set_source(cairo_t *cairo, float *c)
|
||||||
cairo_set_source_rgba(cairo, c[0], c[1], c[2], c[3]);
|
cairo_set_source_rgba(cairo, c[0], c[1], c[2], c[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Draws a border with a specified line width */
|
||||||
|
static void
|
||||||
|
draw_border(cairo_t *cairo, double width, double height, double line_width)
|
||||||
|
{
|
||||||
|
cairo_save(cairo);
|
||||||
|
|
||||||
|
double x, y, w, h;
|
||||||
|
/* The anchor point of a line is in the center */
|
||||||
|
x = y = line_width / 2;
|
||||||
|
w = width - line_width;
|
||||||
|
h = height - line_width;
|
||||||
|
cairo_set_line_width(cairo, line_width);
|
||||||
|
cairo_rectangle(cairo, x, y, w, h);
|
||||||
|
cairo_stroke(cairo);
|
||||||
|
|
||||||
|
cairo_restore(cairo);
|
||||||
|
}
|
||||||
|
|
||||||
/* is title different from app_id/class? */
|
/* is title different from app_id/class? */
|
||||||
static int
|
static int
|
||||||
is_title_different(struct view *view)
|
is_title_different(struct view *view)
|
||||||
|
|
@ -125,10 +143,9 @@ osd_update(struct server *server)
|
||||||
cairo_rectangle(cairo, 0, 0, w, h);
|
cairo_rectangle(cairo, 0, 0, w, h);
|
||||||
cairo_fill(cairo);
|
cairo_fill(cairo);
|
||||||
|
|
||||||
/* border */
|
/* Border */
|
||||||
set_source(cairo, theme->osd_label_text_color);
|
set_source(cairo, theme->osd_border_color);
|
||||||
cairo_rectangle(cairo, 0, 0, w, h);
|
draw_border(cairo, w, h, theme->osd_border_width);
|
||||||
cairo_stroke(cairo);
|
|
||||||
|
|
||||||
/* highlight current window */
|
/* highlight current window */
|
||||||
int y = OSD_BORDER_WIDTH;
|
int y = OSD_BORDER_WIDTH;
|
||||||
|
|
|
||||||
29
src/theme.c
29
src/theme.c
|
|
@ -128,8 +128,10 @@ theme_builtin(struct theme *theme)
|
||||||
parse_hexstr("#dddad6", theme->menu_items_active_bg_color);
|
parse_hexstr("#dddad6", theme->menu_items_active_bg_color);
|
||||||
parse_hexstr("#000000", theme->menu_items_active_text_color);
|
parse_hexstr("#000000", theme->menu_items_active_text_color);
|
||||||
|
|
||||||
/* inherit colors in post_processing() if not set elsewhere */
|
/* inherit settings in post_processing() if not set elsewhere */
|
||||||
theme->osd_bg_color[0] = FLT_MIN;
|
theme->osd_bg_color[0] = FLT_MIN;
|
||||||
|
theme->osd_border_width = INT_MIN;
|
||||||
|
theme->osd_border_color[0] = FLT_MIN;
|
||||||
theme->osd_label_text_color[0] = FLT_MIN;
|
theme->osd_label_text_color[0] = FLT_MIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -260,6 +262,12 @@ entry(struct theme *theme, const char *key, const char *value)
|
||||||
if (match(key, "osd.bg.color")) {
|
if (match(key, "osd.bg.color")) {
|
||||||
parse_hexstr(value, theme->osd_bg_color);
|
parse_hexstr(value, theme->osd_bg_color);
|
||||||
}
|
}
|
||||||
|
if (match(key, "osd.border.width")) {
|
||||||
|
theme->osd_border_width = atoi(value);
|
||||||
|
}
|
||||||
|
if (match(key, "osd.border.color")) {
|
||||||
|
parse_hexstr(value, theme->osd_border_color);
|
||||||
|
}
|
||||||
if (match(key, "osd.label.text.color")) {
|
if (match(key, "osd.label.text.color")) {
|
||||||
parse_hexstr(value, theme->osd_label_text_color);
|
parse_hexstr(value, theme->osd_label_text_color);
|
||||||
}
|
}
|
||||||
|
|
@ -462,17 +470,34 @@ post_processing(struct theme *theme)
|
||||||
theme->title_height = rc.corner_radius + 1;
|
theme->title_height = rc.corner_radius + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inherit colors if not set */
|
/* Inherit OSD settings if not set */
|
||||||
if (theme->osd_bg_color[0] == FLT_MIN) {
|
if (theme->osd_bg_color[0] == FLT_MIN) {
|
||||||
memcpy(theme->osd_bg_color,
|
memcpy(theme->osd_bg_color,
|
||||||
theme->window_active_title_bg_color,
|
theme->window_active_title_bg_color,
|
||||||
sizeof(theme->osd_bg_color));
|
sizeof(theme->osd_bg_color));
|
||||||
}
|
}
|
||||||
|
if (theme->osd_border_width == INT_MIN) {
|
||||||
|
theme->osd_border_width = theme->border_width;
|
||||||
|
}
|
||||||
if (theme->osd_label_text_color[0] == FLT_MIN) {
|
if (theme->osd_label_text_color[0] == FLT_MIN) {
|
||||||
memcpy(theme->osd_label_text_color,
|
memcpy(theme->osd_label_text_color,
|
||||||
theme->window_active_label_text_color,
|
theme->window_active_label_text_color,
|
||||||
sizeof(theme->osd_label_text_color));
|
sizeof(theme->osd_label_text_color));
|
||||||
}
|
}
|
||||||
|
if (theme->osd_border_color[0] == FLT_MIN) {
|
||||||
|
/*
|
||||||
|
* As per http://openbox.org/wiki/Help:Themes#osd.border.color
|
||||||
|
* we should fall back to window_active_border_color but
|
||||||
|
* that is usually the same as window_active_title_bg_color
|
||||||
|
* and thus the fallback for osd_bg_color. Which would mean
|
||||||
|
* they are both the same color and thus the border is invisible.
|
||||||
|
*
|
||||||
|
* Instead, we fall back to osd_label_text_color which in turn
|
||||||
|
* falls back to window_active_label_text_color.
|
||||||
|
*/
|
||||||
|
memcpy(theme->osd_border_color, theme->osd_label_text_color,
|
||||||
|
sizeof(theme->osd_border_color));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue