img: remove padding_x from lab_img_render()

padding_x in lab_img_render() was just to make sure window icons in the
titlebar doesn't get too close to adjacent buttons and it didn't felt
clean. To remove it from lab_img, this commit changes the size of window
icon buffers from (window.button.width)x(window.button.height) to
(window.button.width * 0.8)x(window.button.height) and horizontally
slide it by (window.button.width * 0.1) to keep the horizontal padding.

Note that the size of the hitbox for a window icon is kept the same and
nothing is changed from user's perspective.
This commit is contained in:
tokyo4j 2025-01-09 17:20:08 +09:00 committed by Hiroaki Yamamoto
parent a0cf6bb068
commit 45f73b58a1
8 changed files with 20 additions and 30 deletions

View file

@ -15,7 +15,6 @@ struct scaled_img_buffer {
struct lab_img *img; struct lab_img *img;
int width; int width;
int height; int height;
int padding;
}; };
/* /*
@ -65,11 +64,11 @@ struct scaled_img_buffer {
* free to destroy it. * free to destroy it.
*/ */
struct scaled_img_buffer *scaled_img_buffer_create(struct wlr_scene_tree *parent, struct scaled_img_buffer *scaled_img_buffer_create(struct wlr_scene_tree *parent,
struct lab_img *img, int width, int height, int padding); struct lab_img *img, int width, int height);
/* Update image, width, height and padding of the scaled_img_buffer */ /* Update image, width and height of the scaled_img_buffer */
void scaled_img_buffer_update(struct scaled_img_buffer *self, void scaled_img_buffer_update(struct scaled_img_buffer *self,
struct lab_img *img, int width, int height, int padding); struct lab_img *img, int width, int height);
/* Obtain scaled_img_buffer from wlr_scene_node */ /* Obtain scaled_img_buffer from wlr_scene_node */
struct scaled_img_buffer *scaled_img_buffer_from_node(struct wlr_scene_node *node); struct scaled_img_buffer *scaled_img_buffer_from_node(struct wlr_scene_node *node);

View file

@ -9,6 +9,6 @@ struct lab_data_buffer;
RsvgHandle *img_svg_load(const char *filename); RsvgHandle *img_svg_load(const char *filename);
struct lab_data_buffer *img_svg_render(RsvgHandle *svg, int w, int h, struct lab_data_buffer *img_svg_render(RsvgHandle *svg, int w, int h,
int padding, double scale); double scale);
#endif /* LABWC_IMG_SVG_H */ #endif /* LABWC_IMG_SVG_H */

View file

@ -59,11 +59,10 @@ void lab_img_add_modifier(struct lab_img *img, lab_img_modifier_func_t modifier)
* @img: source image * @img: source image
* @width: width of the created buffer * @width: width of the created buffer
* @height: height of the created buffer * @height: height of the created buffer
* @padding_x: horizontal padding around the rendered image in the buffer
* @scale: scale of the created buffer * @scale: scale of the created buffer
*/ */
struct lab_data_buffer *lab_img_render(struct lab_img *img, struct lab_data_buffer *lab_img_render(struct lab_img *img,
int width, int height, int padding_x, double scale); int width, int height, double scale);
/** /**
* lab_img_destroy() - destroy lab_img * lab_img_destroy() - destroy lab_img

View file

@ -15,7 +15,7 @@ _create_buffer(struct scaled_scene_buffer *scaled_buffer, double scale)
{ {
struct scaled_img_buffer *self = scaled_buffer->data; struct scaled_img_buffer *self = scaled_buffer->data;
struct lab_data_buffer *buffer = lab_img_render(self->img, struct lab_data_buffer *buffer = lab_img_render(self->img,
self->width, self->height, self->padding, scale); self->width, self->height, scale);
return buffer; return buffer;
} }
@ -36,8 +36,7 @@ _equal(struct scaled_scene_buffer *scaled_buffer_a,
return lab_img_equal(a->img, b->img) return lab_img_equal(a->img, b->img)
&& a->width == b->width && a->width == b->width
&& a->height == b->height && a->height == b->height;
&& a->padding == b->padding;
} }
static struct scaled_scene_buffer_impl impl = { static struct scaled_scene_buffer_impl impl = {
@ -48,7 +47,7 @@ static struct scaled_scene_buffer_impl impl = {
struct scaled_img_buffer * struct scaled_img_buffer *
scaled_img_buffer_create(struct wlr_scene_tree *parent, struct lab_img *img, scaled_img_buffer_create(struct wlr_scene_tree *parent, struct lab_img *img,
int width, int height, int padding) int width, int height)
{ {
assert(img); assert(img);
struct scaled_scene_buffer *scaled_buffer = scaled_scene_buffer_create( struct scaled_scene_buffer *scaled_buffer = scaled_scene_buffer_create(
@ -59,7 +58,6 @@ scaled_img_buffer_create(struct wlr_scene_tree *parent, struct lab_img *img,
self->img = lab_img_copy(img); self->img = lab_img_copy(img);
self->width = width; self->width = width;
self->height = height; self->height = height;
self->padding = padding;
scaled_buffer->data = self; scaled_buffer->data = self;
@ -70,14 +68,13 @@ scaled_img_buffer_create(struct wlr_scene_tree *parent, struct lab_img *img,
void void
scaled_img_buffer_update(struct scaled_img_buffer *self, struct lab_img *img, scaled_img_buffer_update(struct scaled_img_buffer *self, struct lab_img *img,
int width, int height, int padding) int width, int height)
{ {
assert(img); assert(img);
lab_img_destroy(self->img); lab_img_destroy(self->img);
self->img = lab_img_copy(img); self->img = lab_img_copy(img);
self->width = width; self->width = width;
self->height = height; self->height = height;
self->padding = padding;
scaled_scene_buffer_request_update(self->scaled_buffer, width, height); scaled_scene_buffer_request_update(self->scaled_buffer, width, height);
} }

View file

@ -36,7 +36,7 @@ img_svg_load(const char *filename)
} }
struct lab_data_buffer * struct lab_data_buffer *
img_svg_render(RsvgHandle *svg, int w, int h, int padding_x, double scale) img_svg_render(RsvgHandle *svg, int w, int h, double scale)
{ {
struct lab_data_buffer *buffer = buffer_create_cairo(w, h, scale); struct lab_data_buffer *buffer = buffer_create_cairo(w, h, scale);
cairo_surface_t *image = buffer->surface; cairo_surface_t *image = buffer->surface;
@ -44,9 +44,7 @@ img_svg_render(RsvgHandle *svg, int w, int h, int padding_x, double scale)
GError *err = NULL; GError *err = NULL;
RsvgRectangle viewport = { RsvgRectangle viewport = {
.x = padding_x, .width = w,
.y = 0,
.width = w - 2 * padding_x,
.height = h, .height = h,
}; };
rsvg_handle_render_document(svg, cr, &viewport, &err); rsvg_handle_render_document(svg, cr, &viewport, &err);

View file

@ -119,7 +119,7 @@ lab_img_add_modifier(struct lab_img *img, lab_img_modifier_func_t modifier)
*/ */
static struct lab_data_buffer * static struct lab_data_buffer *
render_cairo_surface(cairo_surface_t *surface, int width, int height, render_cairo_surface(cairo_surface_t *surface, int width, int height,
int padding_x, double scale) double scale)
{ {
assert(surface); assert(surface);
int src_w = cairo_image_surface_get_width(surface); int src_w = cairo_image_surface_get_width(surface);
@ -130,9 +130,7 @@ render_cairo_surface(cairo_surface_t *surface, int width, int height,
cairo_t *cairo = cairo_create(buffer->surface); cairo_t *cairo = cairo_create(buffer->surface);
struct wlr_box container = { struct wlr_box container = {
.x = padding_x, .width = width,
.y = 0,
.width = width - 2 * padding_x,
.height = height, .height = height,
}; };
@ -151,8 +149,7 @@ render_cairo_surface(cairo_surface_t *surface, int width, int height,
} }
struct lab_data_buffer * struct lab_data_buffer *
lab_img_render(struct lab_img *img, int width, int height, int padding, lab_img_render(struct lab_img *img, int width, int height, double scale)
double scale)
{ {
struct lab_data_buffer *buffer = NULL; struct lab_data_buffer *buffer = NULL;
@ -162,12 +159,12 @@ lab_img_render(struct lab_img *img, int width, int height, int padding,
case LAB_IMG_XBM: case LAB_IMG_XBM:
case LAB_IMG_XPM: case LAB_IMG_XPM:
buffer = render_cairo_surface(img->data->buffer->surface, buffer = render_cairo_surface(img->data->buffer->surface,
width, height, padding, scale); width, height, scale);
break; break;
#if HAVE_RSVG #if HAVE_RSVG
case LAB_IMG_SVG: case LAB_IMG_SVG:
buffer = img_svg_render(img->data->svg, width, height, buffer = img_svg_render(img->data->svg, width, height,
padding, scale); scale);
break; break;
#endif #endif
default: default:

View file

@ -108,7 +108,7 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
struct ssd_part *icon_part = add_scene_part(part_list, type); struct ssd_part *icon_part = add_scene_part(part_list, type);
struct scaled_img_buffer *img_buffer = scaled_img_buffer_create( struct scaled_img_buffer *img_buffer = scaled_img_buffer_create(
parent, imgs[state_set], rc.theme->window_button_width, parent, imgs[state_set], rc.theme->window_button_width,
rc.theme->window_button_height, /* padding_x */ 0); rc.theme->window_button_height);
assert(img_buffer); assert(img_buffer);
icon_part->node = &img_buffer->scene_buffer->node; icon_part->node = &img_buffer->scene_buffer->node;
wlr_scene_node_set_enabled(icon_part->node, false); wlr_scene_node_set_enabled(icon_part->node, false);

View file

@ -632,9 +632,9 @@ ssd_update_window_icon(struct ssd *ssd)
struct scaled_img_buffer *img_buffer = struct scaled_img_buffer *img_buffer =
scaled_img_buffer_from_node(node); scaled_img_buffer_from_node(node);
scaled_img_buffer_update(img_buffer, icon_img, scaled_img_buffer_update(img_buffer, icon_img,
theme->window_button_width, theme->window_button_width - 2 * icon_padding,
theme->window_button_height, theme->window_button_height);
icon_padding); wlr_scene_node_set_position(node, icon_padding, 0);
} }
} }
} FOR_EACH_END } FOR_EACH_END