1
0
Fork 0
forked from wry/wry

Preserve rounded clipping for window body backgrounds

This commit is contained in:
atagen 2026-05-27 13:26:15 +10:00
parent 0f6f9f2602
commit 313323888b

View file

@ -552,13 +552,6 @@ impl Renderer<'_> {
if body.is_empty() {
return;
}
let bounds = self.base.scale_rect(body);
self.render_window_body_background(&bounds);
self.stretch = if frame.source_body_size != body.size() {
Some(self.base.scale_point(body.width(), body.height()))
} else {
None
};
if inset > 0 && !self.state.theme.corner_radius.get().is_zero() {
let inner_cr = self.scale_corner_radius(
self.state
@ -569,24 +562,37 @@ impl Renderer<'_> {
);
self.corner_radius = Some(inner_cr);
}
self.render_window_body_background(body);
let bounds = self.base.scale_rect(body);
self.stretch = if frame.source_body_size != body.size() {
Some(self.base.scale_point(body.width(), body.height()))
} else {
None
};
self.render_retained_toplevel(&frame.retained, body.x1(), body.y1(), Some(&bounds));
self.stretch = None;
self.corner_radius = None;
}
fn render_window_body_background(&mut self, bounds: &Rect) {
if bounds.is_empty() {
fn render_window_body_background(&mut self, body: Rect) {
if body.is_empty() {
return;
}
let color = self.state.theme.colors.background.get();
let srgb_srgb = self.state.color_manager.srgb_gamma22();
let srgb = &srgb_srgb.linear;
let perceptual = RenderIntent::Perceptual;
self.base.sync();
self.base.fill_scaled_boxes(
slice::from_ref(bounds),
&color,
None,
&self.state.color_manager.srgb_gamma22().linear,
RenderIntent::Perceptual,
);
if let Some(cr) = self.corner_radius
&& !cr.is_zero()
{
self.base
.fill_rounded_rect(body, &color, None, srgb, perceptual, cr, 0.0);
} else {
let bounds = self.base.scale_rect(body);
self.base
.fill_scaled_boxes(slice::from_ref(&bounds), &color, None, srgb, perceptual);
}
}
fn render_retained_surface_scaled(
@ -759,10 +765,6 @@ impl Renderer<'_> {
}
}
let body = visual_mb.move_(x, y);
let body = self.base.scale_rect(body);
if !child.node.node_is_container() {
self.render_window_body_background(&body);
}
let content = container
.mono_content
.get()
@ -781,6 +783,10 @@ impl Renderer<'_> {
self.corner_radius = Some(inner_cr);
}
}
if !child.node.node_is_container() {
self.render_window_body_background(body);
}
let body = self.base.scale_rect(body);
self.render_child_or_snapshot(
&child.node,
x + content.x1(),
@ -836,10 +842,10 @@ impl Renderer<'_> {
self.corner_radius = Some(inner_cr);
}
let body = body.move_(x, y);
let body = self.base.scale_rect(body);
if !child.node.node_is_container() {
self.render_window_body_background(&body);
self.render_window_body_background(body);
}
let body = self.base.scale_rect(body);
self.render_child_or_snapshot(
&child.node,
x + content.x1(),
@ -1109,7 +1115,7 @@ impl Renderer<'_> {
let inner_cr = self.scale_corner_radius(cr.expanded_by(-(bw as f32)));
self.corner_radius = Some(inner_cr);
}
self.render_window_body_background(&scissor_body);
self.render_window_body_background(body);
self.render_child_or_snapshot(&child, body.x1(), body.y1(), Some(&scissor_body));
self.stretch = None;
self.corner_radius = None;