mirror of
https://github.com/penpot/penpot.git
synced 2025-02-28 17:56:50 -05:00
🐛 Fix rendering order of inner shadows when shape has no fills (wasm)
This commit is contained in:
parent
c0ccb86e3a
commit
0416e883ca
2 changed files with 45 additions and 12 deletions
|
@ -187,7 +187,7 @@ impl RenderState {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn apply_drawing_to_render_canvas(&mut self) {
|
pub fn apply_drawing_to_render_canvas(&mut self, shape: &Shape) {
|
||||||
self.surfaces
|
self.surfaces
|
||||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Fills);
|
.flush_and_submit(&mut self.gpu_state, SurfaceId::Fills);
|
||||||
self.surfaces.draw_into(
|
self.surfaces.draw_into(
|
||||||
|
@ -195,6 +195,18 @@ impl RenderState {
|
||||||
SurfaceId::Current,
|
SurfaceId::Current,
|
||||||
Some(&skia::Paint::default()),
|
Some(&skia::Paint::default()),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let render_overlay_below_strokes = shape.fills().len() > 0;
|
||||||
|
if render_overlay_below_strokes {
|
||||||
|
self.surfaces
|
||||||
|
.flush_and_submit(&mut self.gpu_state, SurfaceId::Overlay);
|
||||||
|
self.surfaces.draw_into(
|
||||||
|
SurfaceId::Overlay,
|
||||||
|
SurfaceId::Current,
|
||||||
|
Some(&skia::Paint::default()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
self.surfaces
|
self.surfaces
|
||||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Strokes);
|
.flush_and_submit(&mut self.gpu_state, SurfaceId::Strokes);
|
||||||
self.surfaces.draw_into(
|
self.surfaces.draw_into(
|
||||||
|
@ -203,12 +215,20 @@ impl RenderState {
|
||||||
Some(&skia::Paint::default()),
|
Some(&skia::Paint::default()),
|
||||||
);
|
);
|
||||||
|
|
||||||
self.surfaces
|
if !render_overlay_below_strokes {
|
||||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Current);
|
self.surfaces
|
||||||
self.surfaces
|
.flush_and_submit(&mut self.gpu_state, SurfaceId::Overlay);
|
||||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Overlay);
|
self.surfaces.draw_into(
|
||||||
|
SurfaceId::Overlay,
|
||||||
|
SurfaceId::Current,
|
||||||
|
Some(&skia::Paint::default()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
self.surfaces
|
self.surfaces
|
||||||
.draw_into(SurfaceId::Overlay, SurfaceId::Current, None);
|
.draw_into(SurfaceId::Overlay, SurfaceId::Current, None);
|
||||||
|
self.surfaces
|
||||||
|
.flush_and_submit(&mut self.gpu_state, SurfaceId::Current);
|
||||||
|
|
||||||
self.surfaces.apply_mut(
|
self.surfaces.apply_mut(
|
||||||
&[
|
&[
|
||||||
|
@ -327,6 +347,7 @@ impl RenderState {
|
||||||
self,
|
self,
|
||||||
shadow,
|
shadow,
|
||||||
self.viewbox.zoom * self.options.dpr(),
|
self.viewbox.zoom * self.options.dpr(),
|
||||||
|
shape.fills().len() > 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,7 +361,7 @@ impl RenderState {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
self.apply_drawing_to_render_canvas();
|
self.apply_drawing_to_render_canvas(&shape);
|
||||||
self.surfaces
|
self.surfaces
|
||||||
.apply_mut(&[SurfaceId::Fills, SurfaceId::Strokes], |s| {
|
.apply_mut(&[SurfaceId::Fills, SurfaceId::Strokes], |s| {
|
||||||
s.canvas().restore();
|
s.canvas().restore();
|
||||||
|
@ -628,7 +649,7 @@ impl RenderState {
|
||||||
if !node_render_state.id.is_nil() {
|
if !node_render_state.id.is_nil() {
|
||||||
self.render_shape(element, modifiers.get(&element.id), clip_bounds);
|
self.render_shape(element, modifiers.get(&element.id), clip_bounds);
|
||||||
} else {
|
} else {
|
||||||
self.apply_drawing_to_render_canvas();
|
self.apply_drawing_to_render_canvas(&element);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the node as visited_children before processing children
|
// Set the node as visited_children before processing children
|
||||||
|
|
|
@ -8,6 +8,7 @@ pub fn render_drop_shadow(render_state: &mut RenderState, shadow: &Shadow, scale
|
||||||
render_state
|
render_state
|
||||||
.surfaces
|
.surfaces
|
||||||
.draw_into(SurfaceId::Fills, SurfaceId::Shadow, Some(&shadow_paint));
|
.draw_into(SurfaceId::Fills, SurfaceId::Shadow, Some(&shadow_paint));
|
||||||
|
|
||||||
render_state
|
render_state
|
||||||
.surfaces
|
.surfaces
|
||||||
.draw_into(SurfaceId::Strokes, SurfaceId::Shadow, Some(&shadow_paint));
|
.draw_into(SurfaceId::Strokes, SurfaceId::Shadow, Some(&shadow_paint));
|
||||||
|
@ -24,16 +25,27 @@ pub fn render_drop_shadow(render_state: &mut RenderState, shadow: &Shadow, scale
|
||||||
.clear(skia::Color::TRANSPARENT);
|
.clear(skia::Color::TRANSPARENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_inner_shadow(render_state: &mut RenderState, shadow: &Shadow, scale: f32) {
|
pub fn render_inner_shadow(
|
||||||
|
render_state: &mut RenderState,
|
||||||
|
shadow: &Shadow,
|
||||||
|
scale: f32,
|
||||||
|
render_over_fills: bool,
|
||||||
|
) {
|
||||||
let shadow_paint = shadow.to_paint(scale);
|
let shadow_paint = shadow.to_paint(scale);
|
||||||
|
|
||||||
render_state
|
if render_over_fills {
|
||||||
.surfaces
|
render_state
|
||||||
.draw_into(SurfaceId::Fills, SurfaceId::Shadow, Some(&shadow_paint));
|
.surfaces
|
||||||
|
.draw_into(SurfaceId::Fills, SurfaceId::Shadow, Some(&shadow_paint));
|
||||||
|
} else {
|
||||||
|
render_state
|
||||||
|
.surfaces
|
||||||
|
.draw_into(SurfaceId::Strokes, SurfaceId::Shadow, Some(&shadow_paint));
|
||||||
|
}
|
||||||
|
|
||||||
render_state
|
render_state
|
||||||
.surfaces
|
.surfaces
|
||||||
.draw_into(SurfaceId::Shadow, SurfaceId::Overlay, None); // , None
|
.draw_into(SurfaceId::Shadow, SurfaceId::Overlay, None);
|
||||||
|
|
||||||
render_state
|
render_state
|
||||||
.surfaces
|
.surfaces
|
||||||
|
|
Loading…
Add table
Reference in a new issue