diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index d26b309dd..350de85aa 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -125,6 +125,10 @@ ;; https://rust-skia.github.io/doc/skia_safe/enum.BlendMode.html (h/call internal-module "_set_shape_blend_mode" (translate-blend-mode blend-mode))) +(defn set-shape-opacity + [opacity] + (h/call internal-module "_set_shape_opacity" (or opacity 1))) + (def debounce-render-without-cache (fns/debounce render-without-cache 100)) (defn set-view @@ -146,7 +150,8 @@ transform (dm/get-prop shape :transform) fills (dm/get-prop shape :fills) children (dm/get-prop shape :shapes) - blend-mode (dm/get-prop shape :blend-mode)] + blend-mode (dm/get-prop shape :blend-mode) + opacity (dm/get-prop shape :opacity)] (use-shape id) (set-shape-selrect selrect) (set-shape-rotation rotation) @@ -154,6 +159,7 @@ (set-shape-fills fills) (set-shape-blend-mode blend-mode) (set-shape-children children) + (set-shape-opacity opacity) (recur (inc index)))))) (request-render)) diff --git a/frontend/src/app/render_wasm/shape.cljs b/frontend/src/app/render_wasm/shape.cljs index 98df40cbe..daaaedb63 100644 --- a/frontend/src/app/render_wasm/shape.cljs +++ b/frontend/src/app/render_wasm/shape.cljs @@ -100,6 +100,7 @@ :transform (api/set-shape-transform v) :fills (api/set-shape-fills v) :blend-mode (api/set-shape-blend-mode v) + :opacity (api/set-shape-opacity v) :shapes (api/set-shape-children v) nil) ;; when something synced with wasm diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index e8a629d9c..ef91740b3 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -166,6 +166,14 @@ pub extern "C" fn set_shape_blend_mode(mode: i32) { } } +#[no_mangle] +pub extern "C" fn set_shape_opacity(opacity: f32) { + let state = unsafe { STATE.as_mut() }.expect("got an invalid state pointer"); + if let Some(shape) = state.current_shape() { + shape.opacity = opacity; + } +} + fn main() { init_gl(); } diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index fec208774..4c6074c8d 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -164,6 +164,7 @@ impl RenderState { let mut paint = skia::Paint::default(); paint.set_blend_mode(shape.blend_mode.into()); + paint.set_alpha_f(shape.opacity); self.drawing_surface.draw( &mut self.final_surface.canvas(), (0.0, 0.0), diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 48c7e8712..84db1bcda 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -104,6 +104,7 @@ pub struct Shape { pub rotation: f32, fills: Vec, pub blend_mode: BlendMode, + pub opacity: f32, } impl Shape { @@ -117,6 +118,7 @@ impl Shape { rotation: 0., fills: vec![], blend_mode: BlendMode::default(), + opacity: 1., } }