🔧 Always return shadows in reverse order

This commit is contained in:
Elena Torro
2025-10-07 12:26:51 +02:00
parent 31af6aebbd
commit 9b16a6bbd1
2 changed files with 20 additions and 8 deletions

View File

@@ -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,

View File

@@ -1005,24 +1005,36 @@ impl Shape {
self.shadows.clear();
}
#[allow(dead_code)]
pub fn drop_shadows(&self) -> impl DoubleEndedIterator<Item = &Shadow> {
self.shadows
.iter()
.rev()
.filter(|shadow| shadow.style() == ShadowStyle::Drop)
}
pub fn drop_shadows_visible(&self) -> impl DoubleEndedIterator<Item = &Shadow> {
self.shadows
.iter()
.rev()
.filter(|shadow| shadow.style() == ShadowStyle::Drop && !shadow.hidden())
}
#[allow(dead_code)]
pub fn inner_shadows(&self) -> impl DoubleEndedIterator<Item = &Shadow> {
self.shadows
.iter()
.rev()
.filter(|shadow| shadow.style() == ShadowStyle::Inner)
}
pub fn inner_shadows_visible(&self) -> impl DoubleEndedIterator<Item = &Shadow> {
self.shadows
.iter()
.rev()
.filter(|shadow| shadow.style() == ShadowStyle::Inner && !shadow.hidden())
}
pub fn to_path_transform(&self) -> Option<Matrix> {
match self.shape_type {
Type::Path(_) | Type::Bool(_) => {
@@ -1201,8 +1213,8 @@ impl Shape {
}
pub fn drop_shadow_paints(&self) -> Vec<skia_safe::Paint> {
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<skia_safe::Paint> {
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| {