Preserve rounded clipping for window body backgrounds
This commit is contained in:
parent
0f6f9f2602
commit
313323888b
1 changed files with 29 additions and 23 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue