mirror of
https://github.com/penpot/penpot.git
synced 2025-02-28 09:46:51 -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
|
||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Fills);
|
||||
self.surfaces.draw_into(
|
||||
|
@ -195,6 +195,18 @@ impl RenderState {
|
|||
SurfaceId::Current,
|
||||
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
|
||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Strokes);
|
||||
self.surfaces.draw_into(
|
||||
|
@ -203,12 +215,20 @@ impl RenderState {
|
|||
Some(&skia::Paint::default()),
|
||||
);
|
||||
|
||||
self.surfaces
|
||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Current);
|
||||
self.surfaces
|
||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Overlay);
|
||||
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
|
||||
.draw_into(SurfaceId::Overlay, SurfaceId::Current, None);
|
||||
self.surfaces
|
||||
.flush_and_submit(&mut self.gpu_state, SurfaceId::Current);
|
||||
|
||||
self.surfaces.apply_mut(
|
||||
&[
|
||||
|
@ -327,6 +347,7 @@ impl RenderState {
|
|||
self,
|
||||
shadow,
|
||||
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
|
||||
.apply_mut(&[SurfaceId::Fills, SurfaceId::Strokes], |s| {
|
||||
s.canvas().restore();
|
||||
|
@ -628,7 +649,7 @@ impl RenderState {
|
|||
if !node_render_state.id.is_nil() {
|
||||
self.render_shape(element, modifiers.get(&element.id), clip_bounds);
|
||||
} else {
|
||||
self.apply_drawing_to_render_canvas();
|
||||
self.apply_drawing_to_render_canvas(&element);
|
||||
}
|
||||
|
||||
// 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
|
||||
.surfaces
|
||||
.draw_into(SurfaceId::Fills, SurfaceId::Shadow, Some(&shadow_paint));
|
||||
|
||||
render_state
|
||||
.surfaces
|
||||
.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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
render_state
|
||||
.surfaces
|
||||
.draw_into(SurfaceId::Fills, SurfaceId::Shadow, Some(&shadow_paint));
|
||||
if render_over_fills {
|
||||
render_state
|
||||
.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
|
||||
.surfaces
|
||||
.draw_into(SurfaceId::Shadow, SurfaceId::Overlay, None); // , None
|
||||
.draw_into(SurfaceId::Shadow, SurfaceId::Overlay, None);
|
||||
|
||||
render_state
|
||||
.surfaces
|
||||
|
|
Loading…
Add table
Reference in a new issue