diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index cc8ec90d67..10f85a01dc 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -172,3 +172,7 @@ path = "examples/window_shadow.rs" [[example]] name = "input" path = "examples/input.rs" + +[[example]] +name = "shadow" +path = "examples/shadow.rs" diff --git a/crates/gpui/examples/shadow.rs b/crates/gpui/examples/shadow.rs new file mode 100644 index 0000000000..cdf3ba42e9 --- /dev/null +++ b/crates/gpui/examples/shadow.rs @@ -0,0 +1,29 @@ +use gpui::*; + +struct Shadow {} + +impl Render for Shadow { + fn render(&mut self, _cx: &mut ViewContext) -> impl IntoElement { + div() + .flex() + .bg(rgb(0xffffff)) + .size_full() + .justify_center() + .items_center() + .child(div().size_8().shadow_sm()) + } +} + +fn main() { + App::new().run(|cx: &mut AppContext| { + let bounds = Bounds::centered(None, size(px(300.0), px(300.0)), cx); + cx.open_window( + WindowOptions { + window_bounds: Some(WindowBounds::Windowed(bounds)), + ..Default::default() + }, + |cx| cx.new_view(|_cx| Shadow {}), + ) + .unwrap(); + }); +} diff --git a/crates/gpui/src/platform/blade/shaders.wgsl b/crates/gpui/src/platform/blade/shaders.wgsl index 0eba972b69..77f14e8264 100644 --- a/crates/gpui/src/platform/blade/shaders.wgsl +++ b/crates/gpui/src/platform/blade/shaders.wgsl @@ -150,7 +150,7 @@ fn gaussian(x: f32, sigma: f32) -> f32{ fn erf(v: vec2) -> vec2 { let s = sign(v); let a = abs(v); - let r1 = 1.0 + (0.278393 + (0.230389 + 0.078108 * (a * a)) * a) * a; + let r1 = 1.0 + (0.278393 + (0.230389 + (0.000972 + 0.078108 * a) * a) * a) * a; let r2 = r1 * r1; return s - s / (r2 * r2); } diff --git a/crates/gpui/src/platform/mac/shaders.metal b/crates/gpui/src/platform/mac/shaders.metal index c1089dbbec..e7afe2c11f 100644 --- a/crates/gpui/src/platform/mac/shaders.metal +++ b/crates/gpui/src/platform/mac/shaders.metal @@ -657,9 +657,9 @@ float gaussian(float x, float sigma) { float2 erf(float2 x) { float2 s = sign(x); float2 a = abs(x); - x = 1. + (0.278393 + (0.230389 + 0.078108 * (a * a)) * a) * a; - x *= x; - return s - s / (x * x); + float2 r1 = 1. + (0.278393 + (0.230389 + (0.000972 + 0.078108 * a) * a) * a) * a; + float2 r2 = r1 * r1; + return s - s / (r2 * r2); } float blur_along_x(float x, float y, float sigma, float corner,