feat: add Shade/Unshade/ToggleShade actions

This builds on the work of @Consolatis in #1018.

Co-authored-by: Consolatis <35009135+Consolatis@users.noreply.github.com>
Co-authored-by: Andrew J. Hesford <ajh@sideband.org>
This commit is contained in:
Consolatis 2023-08-08 03:39:35 +02:00 committed by Johan Malm
parent 722a802de0
commit e05bedb140
19 changed files with 218 additions and 47 deletions

View file

@ -159,14 +159,17 @@ resize_indicator_update(struct view *view)
char text[32]; /* 12345 x 12345 would be 13 chars + 1 null byte */
int eff_height = view_effective_height(view, /* use_pending */ false);
int eff_width = view->current.width;
switch (view->server->input_mode) {
case LAB_INPUT_STATE_RESIZE:
; /* works around "a label can only be part of a statement" */
struct view_size_hints hints = view_get_size_hints(view);
snprintf(text, sizeof(text), "%d x %d",
MAX(0, view->current.width - hints.base_width)
MAX(0, eff_width - hints.base_width)
/ MAX(1, hints.width_inc),
MAX(0, view->current.height - hints.base_height)
MAX(0, eff_height - hints.base_height)
/ MAX(1, hints.height_inc));
break;
case LAB_INPUT_STATE_MOVE:
@ -192,8 +195,8 @@ resize_indicator_update(struct view *view)
/* Center the indicator in the window */
wlr_scene_node_set_position(&indicator->tree->node,
(view->current.width - indicator->width) / 2,
(view->current.height - indicator->height) / 2);
(eff_width - indicator->width) / 2,
(eff_height - indicator->height) / 2);
scaled_font_buffer_update(indicator->text, text, width, &rc.font_osd,
rc.theme->osd_label_text_color, NULL /* const char *arrow */);

View file

@ -61,11 +61,15 @@ ssd_max_extents(struct view *view)
{
assert(view);
struct border border = ssd_thickness(view);
int eff_width = view->current.width;
int eff_height = view_effective_height(view, /* use_pending */ false);
return (struct wlr_box){
.x = view->current.x - border.left,
.y = view->current.y - border.top,
.width = view->current.width + border.left + border.right,
.height = view->current.height + border.top + border.bottom,
.width = eff_width + border.left + border.right,
.height = eff_height + border.top + border.bottom,
};
}
@ -220,7 +224,11 @@ ssd_update_geometry(struct ssd *ssd)
struct wlr_box cached = ssd->state.geometry;
struct wlr_box current = ssd->view->current;
if (current.width == cached.width && current.height == cached.height) {
int eff_width = current.width;
int eff_height = view_effective_height(ssd->view, /* use_pending */ false);
if (eff_width == cached.width && eff_height == cached.height) {
if (current.x != cached.x || current.y != cached.y) {
/* Dynamically resize extents based on position and usable_area */
ssd_extents_update(ssd);
@ -333,6 +341,16 @@ ssd_set_active(struct ssd *ssd, bool active)
wlr_scene_node_set_enabled(&ssd->titlebar.inactive.tree->node, !active);
}
void
ssd_enable_shade(struct ssd *ssd, bool enable)
{
if (!ssd) {
return;
}
ssd_border_update(ssd);
wlr_scene_node_set_enabled(&ssd->extents.tree->node, !enable);
}
void
ssd_enable_keybind_inhibit_indicator(struct ssd *ssd, bool enable)
{

View file

@ -20,7 +20,7 @@ ssd_border_create(struct ssd *ssd)
struct view *view = ssd->view;
struct theme *theme = view->server->theme;
int width = view->current.width;
int height = view->current.height;
int height = view_effective_height(view, /* use_pending */ false);
int full_width = width + 2 * theme->border_width;
float *color;
@ -83,7 +83,7 @@ ssd_border_update(struct ssd *ssd)
struct theme *theme = view->server->theme;
int width = view->current.width;
int height = view->current.height;
int height = view_effective_height(view, /* use_pending */ false);
int full_width = width + 2 * theme->border_width;
struct ssd_part *part;

View file

@ -109,7 +109,7 @@ ssd_extents_update(struct ssd *ssd)
struct theme *theme = view->server->theme;
int width = view->current.width;
int height = view->current.height;
int height = view_effective_height(view, /* use_pending */ false);
int full_height = height + theme->border_width * 2 + ssd->titlebar.height;
int full_width = width + 2 * theme->border_width;
int extended_area = SSD_EXTENDED_AREA;