🐛 Fix Fill Inner Shadows

This commit is contained in:
Elena Torro 2025-03-20 15:01:00 +01:00
parent e60e36a0e2
commit 91d15ea221
5 changed files with 149 additions and 49 deletions

View file

@ -216,6 +216,9 @@ impl RenderState {
self.surfaces
.flush_and_submit(&mut self.gpu_state, SurfaceId::DropShadows);
self.surfaces
.flush_and_submit(&mut self.gpu_state, SurfaceId::InnerShadows);
self.surfaces.draw_into(
SurfaceId::DropShadows,
SurfaceId::Current,
@ -228,6 +231,12 @@ impl RenderState {
Some(&skia::Paint::default()),
);
self.surfaces.draw_into(
SurfaceId::InnerShadows,
SurfaceId::Current,
Some(&skia::Paint::default()),
);
let mut render_overlay_below_strokes = false;
if let Some(shape) = shape {
render_overlay_below_strokes = shape.fills().len() > 0;
@ -269,6 +278,7 @@ impl RenderState {
self.surfaces.apply_mut(
&[
SurfaceId::Shadow,
SurfaceId::InnerShadows,
SurfaceId::DropShadows,
SurfaceId::Overlay,
SurfaceId::Fills,
@ -286,7 +296,12 @@ impl RenderState {
modifiers: Option<&Matrix>,
clip_bounds: Option<(Rect, Option<Corners>, Matrix)>,
) {
let surface_ids = &[SurfaceId::Fills, SurfaceId::Strokes, SurfaceId::DropShadows];
let surface_ids = &[
SurfaceId::Fills,
SurfaceId::Strokes,
SurfaceId::DropShadows,
SurfaceId::InnerShadows,
];
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().save();
});
@ -365,7 +380,12 @@ impl RenderState {
}
_ => {
self.surfaces.apply_mut(
&[SurfaceId::Fills, SurfaceId::Strokes, SurfaceId::DropShadows],
&[
SurfaceId::Fills,
SurfaceId::Strokes,
SurfaceId::DropShadows,
SurfaceId::InnerShadows,
],
|s| {
s.canvas().concat(&matrix);
},
@ -378,19 +398,20 @@ impl RenderState {
for stroke in shape.strokes().rev() {
strokes::render(self, &shape, stroke);
}
let scale = self.get_scale();
for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) {
shadows::render_inner_shadow(self, shadow, scale, shape.fills().len() > 0);
}
shadows::render_inner_shadows(self, &shape);
shadows::render_drop_shadows(self, &shape);
}
};
self.apply_drawing_to_render_canvas(Some(&shape));
self.surfaces.apply_mut(
&[SurfaceId::Fills, SurfaceId::Strokes, SurfaceId::DropShadows],
&[
SurfaceId::Fills,
SurfaceId::Strokes,
SurfaceId::DropShadows,
SurfaceId::InnerShadows,
],
|s| {
s.canvas().restore();
},
@ -418,7 +439,12 @@ impl RenderState {
let scale = self.get_scale();
self.reset_canvas();
self.surfaces.apply_mut(
&[SurfaceId::Fills, SurfaceId::Strokes, SurfaceId::DropShadows],
&[
SurfaceId::Fills,
SurfaceId::Strokes,
SurfaceId::DropShadows,
SurfaceId::InnerShadows,
],
|s| {
s.canvas().scale((scale, scale));
},