Skip to content

Commit 3a22c8d

Browse files
committed
fix semi-transparent background caching
- clear the canvas before drawing anything (since it still has the contents of the previous buffer-swap) - only apply the window.background matte if not using the bitmap cache (which already contains the matte)
1 parent 7821cf6 commit 3a22c8d

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

src/gpu/metal.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,12 @@ impl MetalRenderer{
251251
let sync = self.cache.state == Resizing;
252252

253253
let frame = self.backend.render_to_layer(&self.layer, &self.window, sync, &props, |canvas| {
254-
// draw raster background
255-
canvas.clear(matte);
254+
// draw background (either use raster cache or set to window’s background color)
255+
canvas.clear(Color::TRANSPARENT);
256256
if let Some((image, src, dst)) = self.cache.validate(&page, matte, dpr, clip){
257257
canvas.draw_image_rect(image, Some((src, SrcRectConstraint::Strict)), dst, &Paint::default());
258+
}else{
259+
canvas.clear(matte);
258260
}
259261

260262
// draw newly added vector layers

src/gpu/vulkan/renderer.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,12 @@ impl VulkanRenderer {
171171
let dpr = self.window.scale_factor() as f32;
172172

173173
self.backend.render_frame(&self.window, &props, |canvas|{
174-
// draw raster background
175-
canvas.clear(matte);
174+
// draw background (either use raster cache or set to window’s background color)
175+
canvas.clear(Color::TRANSPARENT);
176176
if let Some((image, src, dst)) = self.cache.validate(&page, matte, dpr, clip){
177177
canvas.draw_image_rect(image, Some((src, SrcRectConstraint::Strict)), dst, &Paint::default());
178+
}else{
179+
canvas.clear(matte);
178180
}
179181

180182
// draw newly added vector layers

0 commit comments

Comments
 (0)