core: bind shadow immediate in initialize_backend

This simplifies the logic a bit since we know a shadow is always bound
(if needed) when the screen is redirected.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
Yuxuan Shui 2019-09-29 00:04:09 +01:00
parent d5e8cf655c
commit 0fc6f9aee2
No known key found for this signature in database
GPG Key ID: 37C999F617EA1A47
3 changed files with 17 additions and 3 deletions

View File

@ -758,7 +758,18 @@ static bool initialize_backend(session_t *ps) {
log_debug("Marking window %#010x (%s) for update after " log_debug("Marking window %#010x (%s) for update after "
"redirection", "redirection",
w->base.id, w->name); w->base.id, w->name);
w->flags |= WIN_FLAGS_IMAGES_STALE; if (w->shadow) {
struct color c = {
.red = ps->o.shadow_red,
.green = ps->o.shadow_green,
.blue = ps->o.shadow_blue,
.alpha = ps->o.shadow_opacity,
};
win_bind_shadow(ps->backend_data, w, c,
ps->gaussian_map);
}
w->flags |= WIN_FLAGS_PIXMAP_STALE;
ps->pending_updates = true; ps->pending_updates = true;
} }
} }

View File

@ -292,8 +292,8 @@ static inline bool win_bind_pixmap(struct backend_base *b, struct managed_win *w
return true; return true;
} }
static inline bool win_bind_shadow(struct backend_base *b, struct managed_win *w, bool win_bind_shadow(struct backend_base *b, struct managed_win *w, struct color c,
struct color c, struct conv *kernel) { struct conv *kernel) {
assert(!w->shadow_image); assert(!w->shadow_image);
assert(w->shadow); assert(w->shadow);
w->shadow_image = b->ops->render_shadow(b, w->widthb, w->heightb, kernel, c.red, w->shadow_image = b->ops->render_shadow(b, w->widthb, w->heightb, kernel, c.red,

View File

@ -256,6 +256,9 @@ void win_process_updates(struct session *ps, struct managed_win *_w);
void win_process_flags(session_t *ps, struct managed_win *w); void win_process_flags(session_t *ps, struct managed_win *w);
/// Queue an update on a window. A series of sanity checks are performed /// Queue an update on a window. A series of sanity checks are performed
void win_queue_update(struct managed_win *_w, enum win_update update); void win_queue_update(struct managed_win *_w, enum win_update update);
/// Bind a shadow to the window, with color `c` and shadow kernel `kernel`
bool win_bind_shadow(struct backend_base *b, struct managed_win *w, struct color c,
struct conv *kernel);
/// Start the unmap of a window. We cannot unmap immediately since we might need to fade /// Start the unmap of a window. We cannot unmap immediately since we might need to fade
/// the window out. /// the window out.