mirror of
https://github.com/labwc/labwc.git
synced 2026-04-09 08:21:18 -04:00
Add infrastructure to generatecustom highlight/lowlight
This commit is contained in:
parent
2591661005
commit
6dffb80d6a
9 changed files with 33 additions and 22 deletions
|
|
@ -18,6 +18,8 @@ struct borderset {
|
|||
enum border_type type;
|
||||
// So we can disambiguate multiple possible designs cached together
|
||||
int bevelSize;
|
||||
int highlight;
|
||||
int lowlight;
|
||||
struct lab_data_buffer *top;
|
||||
struct lab_data_buffer *left;
|
||||
struct lab_data_buffer *right;
|
||||
|
|
@ -45,9 +47,11 @@ struct bufferset {
|
|||
|
||||
extern struct borderset *border_cache;
|
||||
|
||||
struct borderset *get_borders(uint32_t id, int size, enum border_type, int bevelSize);
|
||||
struct borderset *get_borders(uint32_t id, int size, enum border_type, int bevelSize,
|
||||
int highlight, int lowlight);
|
||||
|
||||
struct borderset *create_buffer(uint32_t id, int size, enum border_type, int bevelSize);
|
||||
struct borderset *create_buffer(uint32_t id, int size, enum border_type, int bevelSize,
|
||||
int highlight, int lowlight);
|
||||
|
||||
struct bufferset *generate_bufferset(struct wlr_scene_tree *tree,
|
||||
struct borderset *borderset, int bw);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@
|
|||
#include "common/macros.h"
|
||||
#include "buffer.h"
|
||||
|
||||
struct borderset *get_borders(uint32_t id, int size, enum border_type type, int bevelSize)
|
||||
struct borderset *get_borders(uint32_t id, int size, enum border_type type, int bevelSize,
|
||||
int highlight, int lowlight)
|
||||
{
|
||||
struct borderset *current = border_cache;
|
||||
struct borderset *last;
|
||||
|
|
@ -32,7 +33,8 @@ struct borderset *get_borders(uint32_t id, int size, enum border_type type, int
|
|||
|
||||
while (current) {
|
||||
if (current->size == size && current->id == id &&
|
||||
current->type == type && current->bevelSize == bevelSize) {
|
||||
current->type == type && current->bevelSize == bevelSize &&
|
||||
current->highlight == highlight && current->lowlight == lowlight) {
|
||||
return current;
|
||||
}
|
||||
last = current;
|
||||
|
|
@ -41,16 +43,17 @@ struct borderset *get_borders(uint32_t id, int size, enum border_type type, int
|
|||
// Fall through, we need to create a buffer.
|
||||
|
||||
if (!border_cache) {
|
||||
border_cache = create_buffer(id, size, type, bevelSize);
|
||||
border_cache = create_buffer(id, size, type, bevelSize, highlight, lowlight);
|
||||
return border_cache;
|
||||
} else {
|
||||
last->next = create_buffer(id, size, type, bevelSize);
|
||||
last->next = create_buffer(id, size, type, bevelSize, highlight, lowlight);
|
||||
return last->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct borderset *create_buffer(uint32_t id, int size, enum border_type type, int bevelSize)
|
||||
struct borderset *create_buffer(uint32_t id, int size, enum border_type type,
|
||||
int bevelSize, int highlight, int lowlight)
|
||||
{
|
||||
struct borderset *new_borderset = znew(*new_borderset);
|
||||
|
||||
|
|
@ -59,6 +62,8 @@ struct borderset *create_buffer(uint32_t id, int size, enum border_type type, in
|
|||
new_borderset->size = size;
|
||||
new_borderset->type = type;
|
||||
new_borderset->bevelSize = bevelSize;
|
||||
new_borderset->highlight = highlight;
|
||||
new_borderset->lowlight = lowlight;
|
||||
|
||||
// Use ID as a AARRGGBB colour
|
||||
uint8_t a = id >> 24 & 255;
|
||||
|
|
@ -66,23 +71,23 @@ struct borderset *create_buffer(uint32_t id, int size, enum border_type type, in
|
|||
uint8_t g = id >> 8 & 255;
|
||||
uint8_t b = id & 255;
|
||||
|
||||
uint32_t r1 = r * 5 / 4;
|
||||
uint32_t r1 = r * (256+highlight) / 256;
|
||||
if (r1 > a) {
|
||||
r1 = a;
|
||||
}
|
||||
uint32_t g1 = g * 5 / 4;
|
||||
uint32_t g1 = g * (256+highlight) / 256;
|
||||
if (g1 > a) {
|
||||
g1 = a;
|
||||
}
|
||||
uint32_t b1 = b * 5 / 4;
|
||||
uint32_t b1 = b * (256+highlight) / 256;
|
||||
if (b1 > a) {
|
||||
b1 = a;
|
||||
}
|
||||
|
||||
/* darker outline */
|
||||
uint32_t r0 = r / 2;
|
||||
uint32_t g0 = g / 2;
|
||||
uint32_t b0 = b / 2;
|
||||
uint32_t r0 = r * (256 - lowlight) / 256;
|
||||
uint32_t g0 = g * (256 - lowlight) / 256;
|
||||
uint32_t b0 = b * (256 - lowlight) / 256;
|
||||
|
||||
uint32_t hl32 = ((uint32_t)a << 24) | ((uint32_t)r1 << 16)
|
||||
| ((uint32_t)g1 << 8) | (uint32_t)b1;
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ lab_scene_rect_create(struct wlr_scene_tree *parent,
|
|||
(uint32_t)(g*255) << 8 |
|
||||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
opts->border_type, opts->bevel_width);
|
||||
opts->border_type, opts->bevel_width, 128, 64);
|
||||
border->textured_borders = generate_bufferset(border->tree,
|
||||
renderedborders, bw);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ item_create_scene_for_state(struct menuitem *item, float *text_color,
|
|||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
rc.theme->menu_items_active_border_type,
|
||||
rc.theme->menu_items_active_bevel_width);
|
||||
rc.theme->menu_items_active_bevel_width, 128, 64);
|
||||
bufferset = generate_bufferset(tree, renderedborders, bw);
|
||||
} else if (rc.theme->menu_items_border_type && !state) {
|
||||
float r = bg_color[0];
|
||||
|
|
@ -221,7 +221,7 @@ item_create_scene_for_state(struct menuitem *item, float *text_color,
|
|||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
rc.theme->menu_items_border_type,
|
||||
rc.theme->menu_items_bevel_width);
|
||||
rc.theme->menu_items_bevel_width, 128, 64);
|
||||
bufferset = generate_bufferset(tree, renderedborders, bw);
|
||||
}
|
||||
|
||||
|
|
@ -410,7 +410,7 @@ title_create_scene(struct menuitem *menuitem, int *item_y)
|
|||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
rc.theme->menu_title_border_type,
|
||||
rc.theme->menu_title_bevel_width);
|
||||
rc.theme->menu_title_bevel_width, 128, 64);
|
||||
bufferset = generate_bufferset(menuitem->tree, renderedborders, bw);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ resize_indicator_reconfigure_view(struct resize_indicator *indicator)
|
|||
(uint32_t)(g*255) << 8 |
|
||||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
theme->osd_border_type, theme->osd_border_bevel_width);
|
||||
theme->osd_border_type, theme->osd_border_bevel_width, 128, 64);
|
||||
indicator->textured_borders = generate_bufferset(indicator->tree,
|
||||
renderedborders, bw);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ ssd_border_create(struct ssd *ssd)
|
|||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
theme->window[active].border_type,
|
||||
theme->window[active].bevel_width);
|
||||
theme->window[active].bevel_width, 128, 64);
|
||||
subtree->textured_borders = generate_bufferset(subtree->tree,
|
||||
renderedborders, bw);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@ ssd_titlebar_create(struct ssd *ssd)
|
|||
struct borderset *renderedborders = get_borders(colour32,
|
||||
theme->window[active].title_bg.border_width,
|
||||
theme->window[active].title_bg.border_type,
|
||||
theme->window[active].title_bg.bevel_width);
|
||||
theme->window[active].title_bg.bevel_width,
|
||||
128, 64);
|
||||
subtree->textured_borders = generate_bufferset(subtree->tree,
|
||||
renderedborders, theme->window[active].title_bg.border_width);
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ static void draw_beveled_border_on_button(cairo_t *cairo, int w, int h, int acti
|
|||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
rc.theme->window[active].button_border_type,
|
||||
rc.theme->window[active].button_bevel_width);
|
||||
rc.theme->window[active].button_bevel_width, 128, 64);
|
||||
|
||||
cairo_set_source_surface(cairo, renderedborders->top->surface, 0, 0);
|
||||
cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,8 @@ _osd_update(void)
|
|||
(uint32_t)(g*255) << 8 |
|
||||
(uint32_t)(b*255);
|
||||
struct borderset *renderedborders = get_borders(colour32, bw,
|
||||
theme->osd_border_type, theme->osd_border_bevel_width);
|
||||
theme->osd_border_type, theme->osd_border_bevel_width,
|
||||
128, 64);
|
||||
|
||||
cairo_set_source_surface(cairo, renderedborders->top->surface, 0, 0);
|
||||
cairo_pattern_set_extend(cairo_get_source(cairo), CAIRO_EXTEND_REPEAT);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue