From 8f6ecf0c65e4407db00440334cbddfeae5e92a93 Mon Sep 17 00:00:00 2001 From: Aditya Sharma Date: Mon, 27 Jul 2026 21:04:59 -0700 Subject: [PATCH] perf: tune flyout backdrop blur --- Cargo.lock | 62 +++++++++++++------------- Cargo.toml | 18 ++++---- crates/assets/Cargo.toml | 2 +- crates/macros/Cargo.toml | 2 +- crates/ui/Cargo.toml | 2 +- crates/ui/src/surface/mod.rs | 10 ++--- crates/ui/src/theme/default-theme.json | 12 ++--- crates/ui/src/theme/fluent_tokens.rs | 7 ++- docs/COMPATIBILITY.md | 1 + docs/docs/theme.md | 8 ++++ vendor/gpui | 2 +- 11 files changed, 67 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 211b8342..8a1bcdd6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -214,7 +214,7 @@ dependencies = [ [[package]] name = "app_shell" -version = "0.6.0" +version = "0.7.0" dependencies = [ "anyhow", "gpui-component-app", @@ -226,7 +226,7 @@ dependencies = [ [[package]] name = "app_shell_background" -version = "0.6.0" +version = "0.7.0" dependencies = [ "anyhow", "gpui-component-app", @@ -1312,7 +1312,7 @@ dependencies = [ [[package]] name = "collections" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "gpui_util", "indexmap", @@ -1878,7 +1878,7 @@ dependencies = [ [[package]] name = "derive_refineable" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "proc-macro2", "quote", @@ -3069,7 +3069,7 @@ dependencies = [ [[package]] name = "gpui" version = "0.2.2" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "accesskit", "anyhow", @@ -3152,7 +3152,7 @@ dependencies = [ [[package]] name = "gpui-component" -version = "0.6.0" +version = "0.7.0" dependencies = [ "aho-corasick", "anyhow", @@ -3227,7 +3227,7 @@ dependencies = [ [[package]] name = "gpui-component-app" -version = "0.6.0" +version = "0.7.0" dependencies = [ "anyhow", "fix-path-env", @@ -3246,7 +3246,7 @@ dependencies = [ [[package]] name = "gpui-component-assets" -version = "0.6.0" +version = "0.7.0" dependencies = [ "anyhow", "gpui", @@ -3255,7 +3255,7 @@ dependencies = [ [[package]] name = "gpui-component-macros" -version = "0.6.0" +version = "0.7.0" dependencies = [ "proc-macro2", "quote", @@ -3264,7 +3264,7 @@ dependencies = [ [[package]] name = "gpui-component-manifest" -version = "0.6.0" +version = "0.7.0" dependencies = [ "serde", "tempfile", @@ -3274,7 +3274,7 @@ dependencies = [ [[package]] name = "gpui-component-storage" -version = "0.6.0" +version = "0.7.0" dependencies = [ "dirs 6.0.0", "log", @@ -3340,7 +3340,7 @@ dependencies = [ [[package]] name = "gpui_linux" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "accesskit", "accesskit_unix", @@ -3394,7 +3394,7 @@ dependencies = [ [[package]] name = "gpui_macos" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "accesskit", "accesskit_macos", @@ -3441,7 +3441,7 @@ dependencies = [ [[package]] name = "gpui_macros" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -3452,7 +3452,7 @@ dependencies = [ [[package]] name = "gpui_platform" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "console_error_panic_hook", "gpui", @@ -3465,7 +3465,7 @@ dependencies = [ [[package]] name = "gpui_shared_string" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "schemars", "serde", @@ -3475,7 +3475,7 @@ dependencies = [ [[package]] name = "gpui_util" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "log", @@ -3485,7 +3485,7 @@ dependencies = [ [[package]] name = "gpui_web" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "console_error_panic_hook", @@ -3509,7 +3509,7 @@ dependencies = [ [[package]] name = "gpui_wgpu" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "bytemuck", @@ -3538,7 +3538,7 @@ dependencies = [ [[package]] name = "gpui_windows" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "accesskit", "accesskit_windows", @@ -3854,7 +3854,7 @@ dependencies = [ [[package]] name = "http_client" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "async-compression", @@ -4868,7 +4868,7 @@ dependencies = [ [[package]] name = "media" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "bindgen", @@ -5797,7 +5797,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "collections", "serde", @@ -6835,7 +6835,7 @@ dependencies = [ [[package]] name = "refineable" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "derive_refineable", ] @@ -7291,7 +7291,7 @@ dependencies = [ [[package]] name = "scheduler" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "async-task", "backtrace", @@ -7949,7 +7949,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sum_tree" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "heapless", "log", @@ -9334,7 +9334,7 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "util" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "async-fs", @@ -9373,7 +9373,7 @@ dependencies = [ [[package]] name = "util_macros" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "perf", "quote", @@ -11187,7 +11187,7 @@ dependencies = [ [[package]] name = "zlog" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "anyhow", "chrono", @@ -11204,7 +11204,7 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "ztracing" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" dependencies = [ "tracing", "tracing-subscriber", @@ -11215,7 +11215,7 @@ dependencies = [ [[package]] name = "ztracing_macro" version = "0.1.0" -source = "git+https://github.com/BumpyClock/gpui?rev=2a03ae6e789b77e98f9d9bd5489758a082313c75#2a03ae6e789b77e98f9d9bd5489758a082313c75" +source = "git+https://github.com/BumpyClock/gpui?rev=5569a8cdb31a12f7ec4b9a825379400edde211c8#5569a8cdb31a12f7ec4b9a825379400edde211c8" [[package]] name = "zune-core" diff --git a/Cargo.toml b/Cargo.toml index 7c0e8017..df1c7984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,19 +26,19 @@ resolver = "2" [workspace.package] publish = false edition = "2024" -version = "0.6.0" +version = "0.7.0" [workspace.dependencies] -gpui-component = { path = "crates/ui", version = "0.6.0" } -gpui-component-app = { path = "crates/app", version = "0.6.0" } -gpui-component-manifest = { path = "crates/app-manifest", version = "0.6.0" } -gpui-component-storage = { path = "crates/app-storage", version = "0.6.0" } -gpui-component-macros = { path = "crates/macros", version = "0.6.0" } -gpui-component-assets = { path = "crates/assets", version = "0.6.0" } +gpui-component = { path = "crates/ui", version = "0.7.0" } +gpui-component-app = { path = "crates/app", version = "0.7.0" } +gpui-component-manifest = { path = "crates/app-manifest", version = "0.7.0" } +gpui-component-storage = { path = "crates/app-storage", version = "0.7.0" } +gpui-component-macros = { path = "crates/macros", version = "0.7.0" } +gpui-component-assets = { path = "crates/assets", version = "0.7.0" } story = { path = "crates/story" } -gpui = { git = "https://github.com/BumpyClock/gpui", rev = "2a03ae6e789b77e98f9d9bd5489758a082313c75", features = ["font-kit"] } -gpui_platform = { git = "https://github.com/BumpyClock/gpui", rev = "2a03ae6e789b77e98f9d9bd5489758a082313c75", features = ["font-kit"] } +gpui = { git = "https://github.com/BumpyClock/gpui", rev = "5569a8cdb31a12f7ec4b9a825379400edde211c8", features = ["font-kit"] } +gpui_platform = { git = "https://github.com/BumpyClock/gpui", rev = "5569a8cdb31a12f7ec4b9a825379400edde211c8", features = ["font-kit"] } gpui-macros = "0.2.2" sum-tree = { version = "0.2.0", package = "zed-sum-tree" } # reqwest = { version = "0.12.15-zed", package = "zed-reqwest" } diff --git a/crates/assets/Cargo.toml b/crates/assets/Cargo.toml index dc7275e6..dce71923 100644 --- a/crates/assets/Cargo.toml +++ b/crates/assets/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://github.com/BumpyClock/gpui-component" readme = "README.md" edition.workspace = true publish = true -version = "0.6.0" +version = "0.7.0" [lib] doctest = false diff --git a/crates/macros/Cargo.toml b/crates/macros/Cargo.toml index 561b7abe..01962e54 100644 --- a/crates/macros/Cargo.toml +++ b/crates/macros/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gpui-component-macros" description = "Macros for GPUI Component." -version = "0.6.0" +version = "0.7.0" license = "Apache-2.0" publish = true edition.workspace = true diff --git a/crates/ui/Cargo.toml b/crates/ui/Cargo.toml index 271f880b..349ebfc8 100644 --- a/crates/ui/Cargo.toml +++ b/crates/ui/Cargo.toml @@ -7,7 +7,7 @@ documentation = "https://docs.rs/gpui-component" homepage = "https://BumpyClock.github.io/gpui-component" repository = "https://github.com/BumpyClock/gpui-component" readme = "../../README.md" -version = "0.6.0" +version = "0.7.0" publish = true edition.workspace = true diff --git a/crates/ui/src/surface/mod.rs b/crates/ui/src/surface/mod.rs index a9d15d2c..71c1fb7a 100644 --- a/crates/ui/src/surface/mod.rs +++ b/crates/ui/src/surface/mod.rs @@ -229,20 +229,20 @@ impl SurfacePreset { /// Creates a flyout surface preset for menus and dropdowns. /// - /// - 60px blur radius + /// - 32px blur radius /// - Subtle noise - /// - Popover background at 0.75/0.85 opacity + /// - Popover background at 0.68/0.76 opacity /// - Small elevation with subtle stroke /// - 12px border radius pub fn flyout() -> Self { Self { kind: SurfaceKind::Flyout, - blur_radius: Some(px(60.0)), + blur_radius: Some(px(32.0)), noise_intensity: NoiseIntensity::Subtle, background: SurfaceBackground { color_source: SurfaceColorSource::Popover, - light_opacity: 0.75, - dark_opacity: 0.85, + light_opacity: 0.68, + dark_opacity: 0.76, }, elevation: ElevationToken::Sm, stroke: Some(StrokeSpec::subtle()), diff --git a/crates/ui/src/theme/default-theme.json b/crates/ui/src/theme/default-theme.json index 9aff66e2..72655446 100644 --- a/crates/ui/src/theme/default-theme.json +++ b/crates/ui/src/theme/default-theme.json @@ -36,10 +36,10 @@ "surface_card_shadow": "sm" }, "material": { - "flyout_blur_radius": 60.0, + "flyout_blur_radius": 32.0, "panel_blur_radius": 120.0, - "flyout_light_opacity": 0.75, - "flyout_dark_opacity": 0.85, + "flyout_light_opacity": 0.68, + "flyout_dark_opacity": 0.76, "panel_light_opacity": 0.85, "panel_dark_opacity": 0.9, "card_light_opacity": 0.7, @@ -298,10 +298,10 @@ "surface_card_shadow": "sm" }, "material": { - "flyout_blur_radius": 60.0, + "flyout_blur_radius": 32.0, "panel_blur_radius": 120.0, - "flyout_light_opacity": 0.75, - "flyout_dark_opacity": 0.85, + "flyout_light_opacity": 0.68, + "flyout_dark_opacity": 0.76, "panel_light_opacity": 0.85, "panel_dark_opacity": 0.9, "card_light_opacity": 0.7, diff --git a/crates/ui/src/theme/fluent_tokens.rs b/crates/ui/src/theme/fluent_tokens.rs index 0267c456..dc8fd224 100644 --- a/crates/ui/src/theme/fluent_tokens.rs +++ b/crates/ui/src/theme/fluent_tokens.rs @@ -47,11 +47,10 @@ pub(crate) fn theme_elevation_defaults() -> ThemeElevation { pub(crate) fn theme_material_defaults() -> ThemeMaterial { ThemeMaterial { - // Preserve existing surface behavior when no config is supplied - flyout_blur_radius: px(60.0), + flyout_blur_radius: px(32.0), panel_blur_radius: px(120.0), - flyout_light_opacity: 0.75, - flyout_dark_opacity: 0.85, + flyout_light_opacity: 0.68, + flyout_dark_opacity: 0.76, panel_light_opacity: 0.85, panel_dark_opacity: 0.90, card_light_opacity: 0.70, diff --git a/docs/COMPATIBILITY.md b/docs/COMPATIBILITY.md index ef1adeeb..d953f125 100644 --- a/docs/COMPATIBILITY.md +++ b/docs/COMPATIBILITY.md @@ -24,6 +24,7 @@ Consumers (agent-term, ansible, Andromeda, and future apps) should: |---|---|---|---| | 0.5.1 (`v0.5.1`) | `4332ea7deae4838c12bad6ea64292ca22a33cf98` | 2026-07-16 | First tracked pairing; app-platform crates (storage, manifest) introduced. | | 0.6.0 (`v0.6.0`) | `2a03ae6e789b77e98f9d9bd5489758a082313c75` | 2026-07-17 | MainThreadPoster; AppProxy wake-on-send. | +| 0.7.0 (`v0.7.0`) | `5569a8cdb31a12f7ec4b9a825379400edde211c8` | 2026-07-27 | Phase-stable backdrop blur pyramid; tuned flyout material. | ## AppShell platform support diff --git a/docs/docs/theme.md b/docs/docs/theme.md index 8c4e6f1d..83bdf379 100644 --- a/docs/docs/theme.md +++ b/docs/docs/theme.md @@ -34,6 +34,14 @@ AppShell::builder(APP_IDENTITY) Calling `.theme(...)` opts into shell preferences automatically. Apps without a theme or explicit `.shell_preferences()` consumer do not create that store. +## Material Surfaces + +Menus and dropdowns use the flyout material from `SurfacePreset::flyout()`. Its +default backdrop blur extent is 32px, with popover tint opacity of 0.68 in light +mode and 0.76 in dark mode. Themes can override these values through +`material.flyout_blur_radius`, `material.flyout_light_opacity`, and +`material.flyout_dark_opacity`. + ## Theme Registry There have more than 20 built-in themes available in [themes](https://github.com/BumpyClock/gpui-component/tree/main/themes) folder. diff --git a/vendor/gpui b/vendor/gpui index 2a03ae6e..5569a8cd 160000 --- a/vendor/gpui +++ b/vendor/gpui @@ -1 +1 @@ -Subproject commit 2a03ae6e789b77e98f9d9bd5489758a082313c75 +Subproject commit 5569a8cdb31a12f7ec4b9a825379400edde211c8