initial fade-in work

This commit is contained in:
William McKinnon 2023-05-23 00:26:51 -04:00
parent d89c365106
commit b5410a123c
4 changed files with 25 additions and 6 deletions

View file

@ -119,6 +119,9 @@ struct sway_container {
float saturation; float saturation;
// TODO: move current_alpha to state?
float current_alpha;
// TODO: rename me to something like max_alpha?
float alpha; float alpha;
int corner_radius; int corner_radius;

View file

@ -521,6 +521,18 @@ static bool scan_out_fullscreen_view(struct sway_output *output,
return wlr_output_commit(wlr_output); return wlr_output_commit(wlr_output);
} }
static void containers_tick_alpha(list_t *containers, struct sway_output *output) {
// TODO: config for alpha_step
float alpha_step = 0.01;
for (int i = 0; i < containers->length; ++i) {
struct sway_container *con = containers->items[i];
if (con->current_alpha < con->alpha) {
output_damage_whole_container(output, con);
con->current_alpha += alpha_step;
}
}
}
static int output_repaint_timer_handler(void *data) { static int output_repaint_timer_handler(void *data) {
struct sway_output *output = data; struct sway_output *output = data;
if (output->wlr_output == NULL) { if (output->wlr_output == NULL) {
@ -570,6 +582,9 @@ static int output_repaint_timer_handler(void *data) {
pixman_region32_t damage; pixman_region32_t damage;
pixman_region32_init(&damage); pixman_region32_init(&damage);
containers_tick_alpha(workspace->current.tiling, output);
wlr_damage_ring_get_buffer_damage(&output->damage_ring, buffer_age, &damage); wlr_damage_ring_get_buffer_damage(&output->damage_ring, buffer_age, &damage);
if (!output->wlr_output->needs_frame && if (!output->wlr_output->needs_frame &&
!pixman_region32_not_empty(&output->damage_ring.current)) { !pixman_region32_not_empty(&output->damage_ring.current)) {

View file

@ -1430,7 +1430,7 @@ static void render_containers_linear(struct sway_output *output,
bool has_titlebar = state->border == B_NORMAL; bool has_titlebar = state->border == B_NORMAL;
struct decoration_data deco_data = { struct decoration_data deco_data = {
.alpha = child->alpha, .alpha = child->current_alpha,
.dim_color = view_is_urgent(view) .dim_color = view_is_urgent(view)
? config->dim_inactive_colors.urgent ? config->dim_inactive_colors.urgent
: config->dim_inactive_colors.unfocused, : config->dim_inactive_colors.unfocused,
@ -1481,7 +1481,7 @@ static void render_containers_tabbed(struct sway_output *output,
int tab_width = parent->box.width / parent->children->length; int tab_width = parent->box.width / parent->children->length;
struct decoration_data deco_data = { struct decoration_data deco_data = {
.alpha = current->alpha, .alpha = current->current_alpha,
.dim_color = current->view && view_is_urgent(current->view) .dim_color = current->view && view_is_urgent(current->view)
? config->dim_inactive_colors.urgent ? config->dim_inactive_colors.urgent
: config->dim_inactive_colors.unfocused, : config->dim_inactive_colors.unfocused,
@ -1579,7 +1579,7 @@ static void render_containers_stacked(struct sway_output *output,
size_t titlebar_height = container_titlebar_height(); size_t titlebar_height = container_titlebar_height();
struct decoration_data deco_data = { struct decoration_data deco_data = {
.alpha = current->alpha, .alpha = current->current_alpha,
.dim_color = current->view && view_is_urgent(current->view) .dim_color = current->view && view_is_urgent(current->view)
? config->dim_inactive_colors.urgent ? config->dim_inactive_colors.urgent
: config->dim_inactive_colors.unfocused, : config->dim_inactive_colors.unfocused,
@ -1730,7 +1730,7 @@ static void render_floating_container(struct sway_output *soutput,
bool has_titlebar = state->border == B_NORMAL; bool has_titlebar = state->border == B_NORMAL;
struct decoration_data deco_data = { struct decoration_data deco_data = {
.alpha = con->alpha, .alpha = con->current_alpha,
.dim_color = view_is_urgent(view) .dim_color = view_is_urgent(view)
? config->dim_inactive_colors.urgent ? config->dim_inactive_colors.urgent
: config->dim_inactive_colors.unfocused, : config->dim_inactive_colors.unfocused,
@ -1988,7 +1988,7 @@ void output_render(struct sway_output *output, struct timespec *when,
struct sway_container *focus = seat_get_focused_container(seat); struct sway_container *focus = seat_get_focused_container(seat);
if (focus && focus->view) { if (focus && focus->view) {
struct decoration_data deco_data = { struct decoration_data deco_data = {
.alpha = focus->alpha, .alpha = focus->current_alpha,
.dim_color = view_is_urgent(focus->view) .dim_color = view_is_urgent(focus->view)
? config->dim_inactive_colors.urgent ? config->dim_inactive_colors.urgent
: config->dim_inactive_colors.unfocused, : config->dim_inactive_colors.unfocused,

View file

@ -39,6 +39,7 @@ struct sway_container *container_create(struct sway_view *view) {
node_init(&c->node, N_CONTAINER, c); node_init(&c->node, N_CONTAINER, c);
c->pending.layout = L_NONE; c->pending.layout = L_NONE;
c->view = view; c->view = view;
c->current_alpha = 0.0f;
c->alpha = 1.0f; c->alpha = 1.0f;
c->saturation = 1.0f; c->saturation = 1.0f;
c->dim = config->default_dim_inactive; c->dim = config->default_dim_inactive;