From 9b16a6bbd1846e7b9c2975e7150b7288c4088e7a Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Tue, 7 Oct 2025 12:26:51 +0200 Subject: [PATCH] :wrench: Always return shadows in reverse order --- render-wasm/src/render/shadows.rs | 8 ++++---- render-wasm/src/shapes.rs | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/render-wasm/src/render/shadows.rs b/render-wasm/src/render/shadows.rs index ff5e9f2cee..f5f4fbfccf 100644 --- a/render-wasm/src/render/shadows.rs +++ b/render-wasm/src/render/shadows.rs @@ -13,7 +13,7 @@ pub fn render_fill_inner_shadows( surface_id: SurfaceId, ) { if shape.has_fills() { - for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) { + for shadow in shape.inner_shadows_visible() { render_fill_inner_shadow(render_state, shape, shadow, antialias, surface_id); } } @@ -38,7 +38,7 @@ pub fn render_stroke_inner_shadows( surface_id: SurfaceId, ) { if !shape.has_fills() { - for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) { + for shadow in shape.inner_shadows_visible() { let filter = shadow.get_inner_shadow_filter(); strokes::render( render_state, @@ -61,7 +61,7 @@ pub fn render_text_path_stroke_drop_shadows( stroke: &Stroke, antialias: bool, ) { - for shadow in shape.drop_shadows().rev().filter(|s| !s.hidden()) { + for shadow in shape.drop_shadows_visible() { let stroke_shadow = shadow.get_drop_shadow_filter(); strokes::render_text_paths( render_state, @@ -84,7 +84,7 @@ pub fn render_text_path_stroke_inner_shadows( stroke: &Stroke, antialias: bool, ) { - for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) { + for shadow in shape.inner_shadows_visible() { let stroke_shadow = shadow.get_inner_shadow_filter(); strokes::render_text_paths( render_state, diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 3af1550b92..c8c6c96b34 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -1005,24 +1005,36 @@ impl Shape { self.shadows.clear(); } + #[allow(dead_code)] pub fn drop_shadows(&self) -> impl DoubleEndedIterator { self.shadows .iter() + .rev() .filter(|shadow| shadow.style() == ShadowStyle::Drop) } pub fn drop_shadows_visible(&self) -> impl DoubleEndedIterator { self.shadows .iter() + .rev() .filter(|shadow| shadow.style() == ShadowStyle::Drop && !shadow.hidden()) } + #[allow(dead_code)] pub fn inner_shadows(&self) -> impl DoubleEndedIterator { self.shadows .iter() + .rev() .filter(|shadow| shadow.style() == ShadowStyle::Inner) } + pub fn inner_shadows_visible(&self) -> impl DoubleEndedIterator { + self.shadows + .iter() + .rev() + .filter(|shadow| shadow.style() == ShadowStyle::Inner && !shadow.hidden()) + } + pub fn to_path_transform(&self) -> Option { match self.shape_type { Type::Path(_) | Type::Bool(_) => { @@ -1201,8 +1213,8 @@ impl Shape { } pub fn drop_shadow_paints(&self) -> Vec { - let drop_shadows: Vec<&crate::shapes::shadows::Shadow> = - self.drop_shadows().rev().filter(|s| !s.hidden()).collect(); + let drop_shadows: Vec<&Shadow> = self.drop_shadows_visible().collect(); + drop_shadows .into_iter() .map(|shadow| { @@ -1215,8 +1227,8 @@ impl Shape { } pub fn inner_shadow_paints(&self) -> Vec { - let inner_shadows: Vec<&crate::shapes::shadows::Shadow> = - self.inner_shadows().rev().filter(|s| !s.hidden()).collect(); + let inner_shadows: Vec<&Shadow> = self.inner_shadows_visible().collect(); + inner_shadows .into_iter() .map(|shadow| {