1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 14:07:45 +00:00

WindowServer: Blit backing bitmap with transparency for hung windows

We should respect the opacity of the window when painting the window
content of a hung application.
This commit is contained in:
Tom 2021-02-10 23:30:55 -07:00 committed by Andreas Kling
parent 130d48fa13
commit e1333724ea

View file

@ -345,9 +345,18 @@ void Compositor::compose()
auto dst = backing_rect.location().translated(dirty_rect_in_backing_coordinates.location()); auto dst = backing_rect.location().translated(dirty_rect_in_backing_coordinates.location());
if (window.client() && window.client()->is_unresponsive()) { if (window.client() && window.client()->is_unresponsive()) {
painter.blit_filtered(dst, *backing_store, dirty_rect_in_backing_coordinates, [](Color src) { if (window.is_opaque()) {
return src.to_grayscale().darkened(0.75f); painter.blit_filtered(dst, *backing_store, dirty_rect_in_backing_coordinates, [](Color src) {
}); return src.to_grayscale().darkened(0.75f);
});
} else {
u8 alpha = 255 * window.opacity();
painter.blit_filtered(dst, *backing_store, dirty_rect_in_backing_coordinates, [&](Color src) {
auto color = src.to_grayscale().darkened(0.75f);
color.set_alpha(alpha);
return color;
});
}
} else { } else {
painter.blit(dst, *backing_store, dirty_rect_in_backing_coordinates, window.opacity()); painter.blit(dst, *backing_store, dirty_rect_in_backing_coordinates, window.opacity());
} }