From e110d45a651c2c54095f292c7178a2951ae5a158 Mon Sep 17 00:00:00 2001 From: Kevin Boos Date: Wed, 29 Apr 2026 01:08:23 -0700 Subject: [PATCH 1/2] Misc improvements, mostly for iOS polish * Make nav bar & spaces bar smaller, they were too large, which looked especially bad on mobile. * Simplify spaces bar status label, whilst adding more details. It's also more efficient now to generate. * Add a backing svg behind the verification badge such that the cutouf icon (checkmark, exclamation mark) are white * add iOS-specific packaging icons, required for app store * remove unneeded padding in home screen / main desktop ui * Fix html stuff throughout makepad, adjust robrix to support it * update welcome screen since we offer a lot more features now. --- .gitignore | 1 + Cargo.lock | 164 +++++++++--------- Cargo.toml | 6 +- .../AppIcon.appiconset/AppIcon1024x1024.png | Bin 0 -> 56512 bytes .../AppIcon.appiconset/AppIcon120x120.png | Bin 0 -> 4656 bytes .../AppIcon.appiconset/AppIcon152x152.png | Bin 0 -> 5983 bytes .../AppIcon.appiconset/AppIcon167x167.png | Bin 0 -> 6580 bytes .../AppIcon.appiconset/AppIcon180x180.png | Bin 0 -> 7068 bytes .../AppIcon.appiconset/Contents.json | 38 ++++ .../ios/icons/Assets.xcassets/Contents.json | 6 + .../Contents.json | 20 +++ resources/icons/verification_no_bg.svg | 4 + resources/icons/verification_unk_bg.svg | 12 ++ resources/icons/verification_yes_bg.svg | 4 + src/home/add_room.rs | 2 +- src/home/home_screen.rs | 3 +- src/home/main_desktop_ui.rs | 3 +- src/home/navigation_tab_bar.rs | 47 ++--- src/home/spaces_bar.rs | 71 +++++--- src/home/welcome_screen.rs | 2 +- src/shared/html_or_plaintext.rs | 4 +- src/shared/styles.rs | 13 +- src/shared/verification_badge.rs | 35 ++++ 23 files changed, 293 insertions(+), 142 deletions(-) create mode 100644 packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon1024x1024.png create mode 100644 packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon120x120.png create mode 100644 packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon152x152.png create mode 100644 packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon167x167.png create mode 100644 packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon180x180.png create mode 100644 packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packaging/ios/icons/Assets.xcassets/Contents.json create mode 100644 packaging/ios/icons/Assets.xcassets/LaunchScreenBackground.colorset/Contents.json create mode 100644 resources/icons/verification_no_bg.svg create mode 100644 resources/icons/verification_unk_bg.svg create mode 100644 resources/icons/verification_yes_bg.svg diff --git a/.gitignore b/.gitignore index 1f891a019..ce24399bb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ .DS_Store CLAUDE.md proxychains.conf +testflight.sh diff --git a/Cargo.lock b/Cargo.lock index 6879bcc9e..e85c3659b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 4 [[package]] name = "ab_glyph_rasterizer" version = "0.1.8" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "accessory" @@ -610,7 +610,7 @@ dependencies = [ [[package]] name = "bitflags" version = "2.10.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "bitmaps" @@ -728,7 +728,7 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" version = "1.25.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "byteorder" @@ -739,7 +739,7 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "byteorder" version = "1.5.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "bytes" @@ -1941,9 +1941,9 @@ dependencies = [ [[package]] name = "fxhash" version = "0.2.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ - "byteorder 1.5.0 (git+https://github.com/makepad/makepad?branch=dev)", + "byteorder 1.5.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", ] [[package]] @@ -2790,7 +2790,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.53.4", ] [[package]] @@ -2937,7 +2937,7 @@ dependencies = [ [[package]] name = "makepad-apple-sys" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-objc-sys", ] @@ -2945,12 +2945,12 @@ dependencies = [ [[package]] name = "makepad-byteorder-lite" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-code-editor" version = "2.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-widgets", ] @@ -2958,7 +2958,7 @@ dependencies = [ [[package]] name = "makepad-derive-wasm-bridge" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-micro-proc-macro", ] @@ -2966,7 +2966,7 @@ dependencies = [ [[package]] name = "makepad-derive-widget" version = "2.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-live-id", "makepad-micro-proc-macro", @@ -2975,7 +2975,7 @@ dependencies = [ [[package]] name = "makepad-draw" version = "2.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "ab_glyph_rasterizer", "fxhash", @@ -2989,15 +2989,15 @@ dependencies = [ "rustybuzz", "sdfer", "serde", - "unicode-bidi 0.3.18 (git+https://github.com/makepad/makepad?branch=dev)", + "unicode-bidi 0.3.18 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "unicode-linebreak", - "unicode-segmentation 1.12.0 (git+https://github.com/makepad/makepad?branch=dev)", + "unicode-segmentation 1.12.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", ] [[package]] name = "makepad-error-log" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-micro-serde", ] @@ -3005,22 +3005,22 @@ dependencies = [ [[package]] name = "makepad-filesystem-watcher" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-futures" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-futures-legacy" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-html" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-live-id", ] @@ -3034,7 +3034,7 @@ checksum = "9775cbec5fa0647500c3e5de7c850280a88335d1d2d770e5aa2332b801ba7064" [[package]] name = "makepad-latex-math" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "ttf-parser", ] @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "makepad-live-id" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-live-id-macros", "serde", @@ -3051,7 +3051,7 @@ dependencies = [ [[package]] name = "makepad-live-id-macros" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-micro-proc-macro", ] @@ -3059,7 +3059,7 @@ dependencies = [ [[package]] name = "makepad-live-reload-core" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-filesystem-watcher", ] @@ -3067,7 +3067,7 @@ dependencies = [ [[package]] name = "makepad-math" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-micro-serde", ] @@ -3075,12 +3075,12 @@ dependencies = [ [[package]] name = "makepad-micro-proc-macro" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-micro-serde" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-live-id", "makepad-micro-serde-derive", @@ -3089,7 +3089,7 @@ dependencies = [ [[package]] name = "makepad-micro-serde-derive" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-micro-proc-macro", ] @@ -3097,7 +3097,7 @@ dependencies = [ [[package]] name = "makepad-network" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-apple-sys", "makepad-error-log", @@ -3111,15 +3111,15 @@ dependencies = [ [[package]] name = "makepad-objc-sys" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-platform" version = "2.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "ash", - "bitflags 2.10.0 (git+https://github.com/makepad/makepad?branch=dev)", + "bitflags 2.10.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "hilog-sys", "makepad-android-state", "makepad-apple-sys", @@ -3140,7 +3140,7 @@ dependencies = [ "napi-derive-ohos", "napi-ohos", "ohos-sys", - "smallvec 1.15.1 (git+https://github.com/makepad/makepad?branch=dev)", + "smallvec 1.15.1 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "wayland-client", "wayland-egl", "wayland-protocols", @@ -3152,12 +3152,12 @@ dependencies = [ [[package]] name = "makepad-regex" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-script" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-error-log", "makepad-html", @@ -3165,13 +3165,13 @@ dependencies = [ "makepad-math", "makepad-regex", "makepad-script-derive", - "smallvec 1.15.1 (git+https://github.com/makepad/makepad?branch=dev)", + "smallvec 1.15.1 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", ] [[package]] name = "makepad-script-derive" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-micro-proc-macro", ] @@ -3179,7 +3179,7 @@ dependencies = [ [[package]] name = "makepad-script-std" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-network", "makepad-script", @@ -3188,14 +3188,14 @@ dependencies = [ [[package]] name = "makepad-shared-bytes" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-studio-protocol" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ - "bitflags 2.10.0 (git+https://github.com/makepad/makepad?branch=dev)", + "bitflags 2.10.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "makepad-error-log", "makepad-live-id", "makepad-micro-serde", @@ -3205,7 +3205,7 @@ dependencies = [ [[package]] name = "makepad-svg" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-html", "makepad-live-id", @@ -3214,7 +3214,7 @@ dependencies = [ [[package]] name = "makepad-tsdf" version = "0.1.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-math", "makepad-micro-serde", @@ -3223,7 +3223,7 @@ dependencies = [ [[package]] name = "makepad-wasm-bridge" version = "1.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-derive-wasm-bridge", "makepad-live-id", @@ -3232,7 +3232,7 @@ dependencies = [ [[package]] name = "makepad-webp" version = "0.2.4" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-byteorder-lite", ] @@ -3240,7 +3240,7 @@ dependencies = [ [[package]] name = "makepad-widgets" version = "2.0.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-derive-widget", "makepad-draw", @@ -3249,18 +3249,18 @@ dependencies = [ "pulldown-cmark 0.12.2", "serde", "ttf-parser", - "unicode-segmentation 1.12.0 (git+https://github.com/makepad/makepad?branch=dev)", + "unicode-segmentation 1.12.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", ] [[package]] name = "makepad-zune-core" version = "0.5.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "makepad-zune-inflate" version = "0.2.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "simd-adler32", ] @@ -3268,7 +3268,7 @@ dependencies = [ [[package]] name = "makepad-zune-jpeg" version = "0.5.12" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-zune-core", ] @@ -3276,7 +3276,7 @@ dependencies = [ [[package]] name = "makepad-zune-png" version = "0.5.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "makepad-zune-core", "makepad-zune-inflate", @@ -3663,7 +3663,7 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memchr" version = "2.7.6" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "mime" @@ -4392,10 +4392,10 @@ dependencies = [ [[package]] name = "pulldown-cmark" version = "0.12.2" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ - "bitflags 2.10.0 (git+https://github.com/makepad/makepad?branch=dev)", - "memchr 2.7.6 (git+https://github.com/makepad/makepad?branch=dev)", + "bitflags 2.10.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", + "memchr 2.7.6 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "unicase 2.9.0", ] @@ -5203,12 +5203,12 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustybuzz" version = "0.18.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ - "bitflags 2.10.0 (git+https://github.com/makepad/makepad?branch=dev)", + "bitflags 2.10.0 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "bytemuck", "makepad-error-log", - "smallvec 1.15.1 (git+https://github.com/makepad/makepad?branch=dev)", + "smallvec 1.15.1 (git+https://github.com/kevinaboos/makepad?branch=more_fixes)", "ttf-parser", "unicode-bidi-mirroring", "unicode-ccc", @@ -5303,7 +5303,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdfer" version = "0.2.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "sealed" @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "simd-adler32" version = "0.3.8" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "siphasher" @@ -5628,7 +5628,7 @@ dependencies = [ [[package]] name = "smallvec" version = "1.15.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "socket2" @@ -6409,7 +6409,7 @@ dependencies = [ [[package]] name = "ttf-parser" version = "0.24.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "tungstenite" @@ -6461,7 +6461,7 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicase" version = "2.9.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-bidi" @@ -6472,17 +6472,17 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-bidi" version = "0.3.18" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-bidi-mirroring" version = "0.3.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-ccc" version = "0.3.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-ident" @@ -6493,7 +6493,7 @@ checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" version = "0.1.5" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-normalization" @@ -6513,12 +6513,12 @@ checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-properties" version = "0.1.4" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-script" version = "0.5.8" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-segmentation" @@ -6529,7 +6529,7 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-segmentation" version = "1.12.0" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "unicode-width" @@ -6861,7 +6861,7 @@ dependencies = [ [[package]] name = "wayland-backend" version = "0.3.12" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "downcast-rs", "libc", @@ -6873,7 +6873,7 @@ dependencies = [ [[package]] name = "wayland-client" version = "0.31.12" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "bitflags 2.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc", @@ -6883,7 +6883,7 @@ dependencies = [ [[package]] name = "wayland-egl" version = "0.32.9" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "wayland-backend", "wayland-sys", @@ -6892,7 +6892,7 @@ dependencies = [ [[package]] name = "wayland-protocols" version = "0.32.10" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "bitflags 2.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-backend", @@ -6902,7 +6902,7 @@ dependencies = [ [[package]] name = "wayland-sys" version = "0.31.8" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "log", "pkg-config", @@ -7010,7 +7010,7 @@ dependencies = [ [[package]] name = "windows" version = "0.62.2" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "windows-collections 0.3.2", "windows-core 0.62.2", @@ -7029,7 +7029,7 @@ dependencies = [ [[package]] name = "windows-collections" version = "0.3.2" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "windows-core 0.62.2", ] @@ -7062,7 +7062,7 @@ dependencies = [ [[package]] name = "windows-core" version = "0.62.2" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "windows-link 0.2.1", "windows-result 0.4.1", @@ -7083,7 +7083,7 @@ dependencies = [ [[package]] name = "windows-future" version = "0.3.2" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "windows-core 0.62.2", ] @@ -7147,7 +7147,7 @@ checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] name = "windows-link" version = "0.2.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" [[package]] name = "windows-numerics" @@ -7191,7 +7191,7 @@ dependencies = [ [[package]] name = "windows-result" version = "0.4.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "windows-link 0.2.1", ] @@ -7208,7 +7208,7 @@ dependencies = [ [[package]] name = "windows-strings" version = "0.5.1" -source = "git+https://github.com/makepad/makepad?branch=dev#30385ae3c6d451a8260ddea9429885c81ccc27dc" +source = "git+https://github.com/kevinaboos/makepad?branch=more_fixes#d72951d21ea2ed2abc2536ff70ad306229914a45" dependencies = [ "windows-link 0.2.1", ] diff --git a/Cargo.toml b/Cargo.toml index 01b5b37bb..0c9730231 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,9 +14,11 @@ version = "1.0.0-alpha.1" metadata.makepad-auto-version = "zqpv-Yj-K7WNVK2I8h5Okhho46Q=" [dependencies] -makepad-widgets = { git = "https://github.com/makepad/makepad", branch = "dev", features = ["serde"] } -makepad-code-editor = { git = "https://github.com/makepad/makepad", branch = "dev" } +# makepad-widgets = { git = "https://github.com/makepad/makepad", branch = "dev", features = ["serde"] } +# makepad-code-editor = { git = "https://github.com/makepad/makepad", branch = "dev" } +makepad-widgets = { git = "https://github.com/kevinaboos/makepad", branch = "more_fixes", features = ["serde"] } +makepad-code-editor = { git = "https://github.com/kevinaboos/makepad", branch = "more_fixes" } ## Including this crate automatically configures all `robius-*` crates to work with Makepad. diff --git a/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon1024x1024.png b/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon1024x1024.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d2a86cbb75be9b69fb51e1d0592073e6c4804d GIT binary patch literal 56512 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 CbDMVn literal 0 HcmV?d00001 diff --git a/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon120x120.png b/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..f984367c0a1b3bc50317e0f0474e484dcb05be65 GIT binary patch literal 4656 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 literal 0 HcmV?d00001 diff --git a/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon167x167.png b/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon167x167.png new file mode 100644 index 0000000000000000000000000000000000000000..853a000da1cc8148611575c515340969865bfd67 GIT binary patch literal 6580 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 literal 0 HcmV?d00001 diff --git a/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon180x180.png b/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/AppIcon180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..03162ab81dc7c117a9d3cae1e8cc2705a8b08990 GIT binary patch literal 7068 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 MQP7mHmbHlZAHjS}p#T5? literal 0 HcmV?d00001 diff --git a/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/Contents.json b/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..2b4429c17 --- /dev/null +++ b/packaging/ios/icons/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "filename" : "AppIcon120x120.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "AppIcon180x180.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "AppIcon152x152.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "AppIcon167x167.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "AppIcon1024x1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/packaging/ios/icons/Assets.xcassets/Contents.json b/packaging/ios/icons/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/packaging/ios/icons/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/packaging/ios/icons/Assets.xcassets/LaunchScreenBackground.colorset/Contents.json b/packaging/ios/icons/Assets.xcassets/LaunchScreenBackground.colorset/Contents.json new file mode 100644 index 000000000..cea21679f --- /dev/null +++ b/packaging/ios/icons/Assets.xcassets/LaunchScreenBackground.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/resources/icons/verification_no_bg.svg b/resources/icons/verification_no_bg.svg new file mode 100644 index 000000000..3bbd96faf --- /dev/null +++ b/resources/icons/verification_no_bg.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/icons/verification_unk_bg.svg b/resources/icons/verification_unk_bg.svg new file mode 100644 index 000000000..1ef6a7633 --- /dev/null +++ b/resources/icons/verification_unk_bg.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/resources/icons/verification_yes_bg.svg b/resources/icons/verification_yes_bg.svg new file mode 100644 index 000000000..473fb06a0 --- /dev/null +++ b/resources/icons/verification_yes_bg.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/home/add_room.rs b/src/home/add_room.rs index deda9236e..68c032e9a 100644 --- a/src/home/add_room.rs +++ b/src/home/add_room.rs @@ -18,7 +18,7 @@ script_mod! { width: Fill, height: Fill, flow: Down, - padding: Inset{top: 5, left: 15, right: 15, bottom: 0}, + padding: Inset{top: 5, left: 15, right: 15, bottom: 20}, title := TitleLabel { text: "Add/Explore Rooms and Spaces" diff --git a/src/home/home_screen.rs b/src/home/home_screen.rs index 507d46894..f5a560648 100644 --- a/src/home/home_screen.rs +++ b/src/home/home_screen.rs @@ -253,7 +253,8 @@ script_mod! { height: 39, flow: Right padding: Inset{top: 2, bottom: 2} - margin: Inset{right: 2} + // The negative left margin compensates for the RoomFilterInputBar's border + margin: Inset{left: -1.5, right: 2} spacing: 2 align: Align{y: 0.5} diff --git a/src/home/main_desktop_ui.rs b/src/home/main_desktop_ui.rs index 82b130312..845f63cde 100644 --- a/src/home/main_desktop_ui.rs +++ b/src/home/main_desktop_ui.rs @@ -17,8 +17,7 @@ script_mod! { height: Fill, padding: 0, spacing: 0, - // Align the dock with the RoomFilterInputBar. Not sure why we need this... - margin: Inset{left: 1.75} + margin: 0 tab_bar +: { CloseableTab := mod.widgets.RobrixTab { closeable: true } diff --git a/src/home/navigation_tab_bar.rs b/src/home/navigation_tab_bar.rs index 0a699de91..b8713a386 100644 --- a/src/home/navigation_tab_bar.rs +++ b/src/home/navigation_tab_bar.rs @@ -57,46 +57,33 @@ script_mod! { use mod.widgets.* - // The base layout/sizing for the icon-style buttons in the NavigationTabBar. - // Inherits hover/selected styling from `mod.widgets.NavigationBarButton` - // (defined in `src/shared/navigation_bar_button.rs`). + // The base style definition for icon buttons in the NavigationTabBar. mod.widgets.NavigationTabButton = mod.widgets.NavigationBarButton { width: Fill, - height: (NAVIGATION_TAB_BAR_SIZE - 5), + height: (NAVIGATION_TAB_BAR_SIZE - 4), padding: 5, - margin: 3, + margin: 2, align: Align{x: 0.5, y: 0.5} flow: Down, } mod.widgets.ProfileIcon = #(ProfileIcon::register_widget(vm)) { - // Inherit hover/selected styling directly from NavigationBarButton - // (not via NavigationTabButton, to avoid inheriting its padding/margin - // which would squeeze ProfileIcon's avatar+badge layout). ..mod.widgets.NavigationBarButton // ProfileIcon emits its own dynamic tooltip (with verification badge info) // from Rust, so leave the built-in tooltip text empty. tooltip_text: "" - // Match the drawn bg bounds of `NavigationTabButton` (height and - // margin) so that ProfileIcon's hover/selected highlight is the same - // size and shape as the other buttons in the tab bar. + // Use the same size/shape bounds as other buttons in the NavigationTabBar width: Fill, - height: (NAVIGATION_TAB_BAR_SIZE - 5) + height: (NAVIGATION_TAB_BAR_SIZE - 4) padding: 0, - margin: 3, + margin: 2, align: Align{ x: 0.5, y: 0.5 } - // The avatar and verification badge are wrapped in a sub-container that - // is *larger* than the avatar (sized to match ProfileIcon's drawn bg - // bounds), so the avatar can be centered while the badge sits in the - // gap between the avatar's edge and the wrapper's corner. This places - // the badge at the avatar's outer top-right (overlapping the corner) - // independently of the parent ProfileIcon's width. avatar_with_badge := View { - width: (NAVIGATION_TAB_BAR_SIZE - 5) - height: (NAVIGATION_TAB_BAR_SIZE - 5) + width: (NAVIGATION_TAB_BAR_SIZE - 4) + height: (NAVIGATION_TAB_BAR_SIZE - 4) flow: Overlay align: Align { x: 0.5, y: 0.5 } @@ -137,8 +124,8 @@ script_mod! { margin: 0, icon_walk: Walk { margin: 0, - width: (NAVIGATION_TAB_BAR_SIZE / 2.2), - height: (NAVIGATION_TAB_BAR_SIZE / 2.2) + width: 30, + height: 30 } draw_icon +: { color: (COLOR_NAVIGATION_TAB_FG) @@ -153,8 +140,8 @@ script_mod! { margin: 0, icon_walk: Walk { margin: 0, - width: (NAVIGATION_TAB_BAR_SIZE / 2.2), - height: (NAVIGATION_TAB_BAR_SIZE / 2.2) + width: 30, + height: 30 } draw_icon +: { color: (COLOR_NAVIGATION_TAB_FG) @@ -172,8 +159,8 @@ script_mod! { margin: 0, icon_walk: Walk { margin: 0, - width: (NAVIGATION_TAB_BAR_SIZE / 2.2), - height: (NAVIGATION_TAB_BAR_SIZE / 2.2) + width: 30, + height: 30 } draw_icon +: { color: (COLOR_NAVIGATION_TAB_FG) @@ -190,12 +177,16 @@ script_mod! { align: Align{x: 0.5} // Similar to how we do it for the mobile mode view, but now // the bar is on the left, so we add left padding and extra width. + // Right padding mirrors left so the inner content area stays + // horizontally centered within the bar's outer bounds when the + // platform reports a non-zero left safe-inset. padding: Inset{ top: 8., bottom: (8.0 + mod.widgets.SAFE_INSET_PAD_BOTTOM), left: (mod.widgets.SAFE_INSET_PAD_LEFT), + right: (mod.widgets.SAFE_INSET_PAD_LEFT), } - width: (mod.widgets.NAVIGATION_TAB_BAR_SIZE + mod.widgets.SAFE_INSET_PAD_LEFT), + width: (mod.widgets.NAVIGATION_TAB_BAR_SIZE + 2 * mod.widgets.SAFE_INSET_PAD_LEFT), height: Fill draw_bg +: { diff --git a/src/home/spaces_bar.rs b/src/home/spaces_bar.rs index 578625d48..00e4f0d15 100644 --- a/src/home/spaces_bar.rs +++ b/src/home/spaces_bar.rs @@ -5,7 +5,7 @@ //! 1. a narrow vertical strip, when in Desktop (widescreen) mode, //! 2. a wide, short horizontal strip, when in Mobile (narrowscreen) mode. -use std::collections::HashMap; +use std::{borrow::Cow, collections::HashMap}; use crossbeam_queue::SegQueue; use makepad_widgets::*; @@ -30,11 +30,19 @@ script_mod! { mod.widgets.SpacesBarEntry = set_type_default() do #(SpacesBarEntry::register_widget(vm)) { ..mod.widgets.NavigationBarButton - width: (NAVIGATION_TAB_BAR_SIZE - 5), - height: (NAVIGATION_TAB_BAR_SIZE - 5), - flow: Down - padding: 5, - margin: 3, + // Outer height + 2*margin must equal NAVIGATION_TAB_BAR_SIZE; otherwise + // the entry overflows the mobile spaces bar (height = NAVIGATION_TAB_BAR_SIZE) + // and the bottom of the rounded bg gets clipped asymmetrically. + width: (NAVIGATION_TAB_BAR_SIZE - 4), + height: (NAVIGATION_TAB_BAR_SIZE - 4), + // Flow.Overlay (rather than Down) so that the invisible `space_name` Label + // doesn't sit in the avatar's flow column and shift its centering. + flow: Overlay + // Padding is integer (4) and the bar size is even (54), so every + // dimension downstream is integer-aligned: + // entry-content = 50 - 8 = 42, avatar = 40, margin around avatar = 1. + padding: 4, + margin: 2, align: Align{x: 0.5, y: 0.5} avatar := Avatar { @@ -57,6 +65,7 @@ script_mod! { height: 0, flow: Flow.Right{wrap: false}, // do not wrap padding: 0, + margin: 0, align: Align{x: 0.5} max_lines: 1 text_overflow: Ellipsis @@ -68,22 +77,34 @@ script_mod! { } mod.widgets.SpacesStatusLabel = View { - width: (NAVIGATION_TAB_BAR_SIZE), - height: (NAVIGATION_TAB_BAR_SIZE), + // Width can grow up to two entries' worth of space (so longer status + // text doesn't get cramped) but stays within one entry on Desktop + // since the bar is only NAVIGATION_TAB_BAR_SIZE wide there. + width: Fill { max: (NAVIGATION_TAB_BAR_SIZE * 2) }, + // Height is Fit so the inner Label can wrap to as many lines as it + // needs on Desktop (where the narrow bar forces wrapping). For Mobile, + // cross-axis centering inside the bar is handled by the SpacesList's + // `align: Align{y: 0.5}` — see PortalList layout.align inheritance. + height: Fit + margin: 2, align: Align{ x: 0.5, y: 0.5 } - margin: Inset{top: 9, left: 0, bottom: 5} - padding: 4.0, + padding: 4, + // The Label is `height: Fit` (not Fill) so the parent View's + // `align: y: 0.5` is what vertically centers it. DrawText only + // honors `align.x` for its own layout — `align.y` on a Label is + // ignored, so a Fill-sized Label can never vertically center its + // own text. label := Label { padding: 0 margin: 0 width: Fill, - height: Fill + height: Fit, flow: Flow.Right{wrap: true}, - align: Align{ x: 0.5, y: 0.5 } + align: Align{ x: 0.5 } draw_text +: { color: (MESSAGE_TEXT_COLOR), - text_style: REGULAR_TEXT {font_size: 9} + text_style: REGULAR_TEXT {font_size: 8, line_spacing: 1.0} } } } @@ -92,6 +113,13 @@ script_mod! { height: Fill, width: Fill, spacing: 0.0 + // Center items on the cross axis so a Fit-sized status label gets + // vertically centered in Mobile (flow Right) and horizontally + // centered in Desktop (flow Down). Items whose cross-axis size + // matches the bar (entries) have no slack so this is a no-op for + // them. Requires PortalList to inherit `layout.align` for its inner + // item turtle (see makepad/widgets/src/portal_list.rs). + align: Align{x: 0.5, y: 0.5} auto_tail: false, max_pull_down: 0.0, @@ -428,7 +456,7 @@ impl Widget for SpacesBar { item.label(cx, ids!(label)).set_text( cx, if self.is_filtered { - "Found no\nmatching spaces." + "No spaces\nmatch." } else { "Found no\njoined spaces." } @@ -481,12 +509,15 @@ impl Widget for SpacesBar { } else if portal_list_index == len { let item = list.item(cx, portal_list_index, id!(StatusLabel)); - let descriptor = if self.is_filtered { "matching" } else { "joined" }; - let text = match len { - 0 => format!("Found no\n{descriptor} spaces."), - 1 => format!("Found 1\n{descriptor} space."), - 2..100 => format!("Found {len}\n{descriptor} spaces."), - 100.. => format!("Found 99+\n{descriptor} spaces."), + let text: Cow<'static, str> = if self.is_filtered { + let total = self.all_joined_spaces.len(); + format!("{len} of {total} spaces").into() + } else { + match len { + 0 => "Found no joined spaces.".into(), + 1 => "Found 1 joined space.".into(), + 2.. => format!("Found {len} joined spaces.").into(), + } }; item.label(cx, ids!(label)).set_text(cx, &text); item diff --git a/src/home/welcome_screen.rs b/src/home/welcome_screen.rs index 5e08674dc..d9d0a9f72 100644 --- a/src/home/welcome_screen.rs +++ b/src/home/welcome_screen.rs @@ -52,7 +52,7 @@ script_mod! { // color_hover: #0f0, // } } - body:"

Our Matrix client is under heavy development. Currently, you can access the rooms and spaces that you've joined in other clients.

+ body:"

Our Matrix client is under active development, so you may need to use other clients to perform admin actions like creating rooms, kicking/banning users, and starting verification requests.


But don't worry, we're constantly expanding the featureset of Robrix!


diff --git a/src/shared/html_or_plaintext.rs b/src/shared/html_or_plaintext.rs index 1e055aa92..3ea123bf4 100644 --- a/src/shared/html_or_plaintext.rs +++ b/src/shared/html_or_plaintext.rs @@ -168,8 +168,8 @@ script_mod! { heading_margin: Inset{ top: 1.0, bottom: 0.1 } paragraph_margin: Inset{ top: 0.33, bottom: 0.33 } - inline_code_padding: Inset{top: 3, bottom: 3, left: 4, right: 4 } - inline_code_margin: Inset{ left: 3, right: 3, bottom: 2, top: 2 } + inline_code_padding: Inset{top: 3, bottom: 3, left: 5, right: 5 } + inline_code_margin: Inset{ left: 0, right: 0, bottom: 2, top: 2 } font := mod.widgets.MatrixHtmlSpan { } span := mod.widgets.MatrixHtmlSpan { } diff --git a/src/shared/styles.rs b/src/shared/styles.rs index c4bb13fda..65ffcc1c9 100644 --- a/src/shared/styles.rs +++ b/src/shared/styles.rs @@ -170,9 +170,16 @@ script_mod! { mod.widgets.COLOR_LINK_HOVER = #21B070 - // This is chosen to nicely fit the 3 window chrome buttons on macOS - mod.widgets.NAVIGATION_TAB_BAR_SIZE = 76 - mod.widgets.NAVIGATION_TAB_BAR_AVATAR_SIZE = (mod.widgets.NAVIGATION_TAB_BAR_SIZE * 0.65) + // Even on purpose: an odd bar size forces odd entry/button widths, which in + // turn requires odd-sized avatars for integer centering — but the Avatar's + // circle SDF (avatar.rs) computes radius = size / 2, so an odd avatar puts + // the circle's center on a half-pixel and renders with subtle (~1px) edge + // asymmetry. Even bar size lets every dimension downstream stay even. + mod.widgets.NAVIGATION_TAB_BAR_SIZE = 54 + // Even integer so the Avatar's circle radius (size/2 = 20) lands on a whole + // pixel. With entry padding 4 and entry content 42, the avatar's centering + // margin is also integer ((42-40)/2 = 1). + mod.widgets.NAVIGATION_TAB_BAR_AVATAR_SIZE = 40 mod.widgets.NAVIGATION_TAB_BAR_AVATAR_FONT_SIZE = (mod.widgets.NAVIGATION_TAB_BAR_AVATAR_SIZE * 0.4) diff --git a/src/shared/verification_badge.rs b/src/shared/verification_badge.rs index 2a0ef3588..adfb9abf8 100644 --- a/src/shared/verification_badge.rs +++ b/src/shared/verification_badge.rs @@ -14,9 +14,13 @@ script_mod! { use mod.widgets.* mod.widgets.VERIFICATION_YES = crate_resource("self://resources/icons/verification_yes.svg") + mod.widgets.VERIFICATION_YES_BG = crate_resource("self://resources/icons/verification_yes_bg.svg") mod.widgets.VERIFICATION_NO = crate_resource("self://resources/icons/verification_no.svg") + mod.widgets.VERIFICATION_NO_BG = crate_resource("self://resources/icons/verification_no_bg.svg") + mod.widgets.VERIFICATION_UNK = crate_resource("self://resources/icons/verification_unk.svg") + mod.widgets.VERIFICATION_UNK_BG = crate_resource("self://resources/icons/verification_unk_bg.svg") mod.widgets.VerificationIcon = Icon { icon_walk: Walk { @@ -27,10 +31,23 @@ script_mod! { margin: Inset{left: 0, right: 3, top: 2, bottom: 0} } + // Each verification icon is a colored shield with the inner glyph carved + // out (transparent). Stacked behind it is a white-tinted shield-only + // version of the same SVG so the avatar doesn't show through the carved + // glyph area — the white shows through instead. mod.widgets.IconYes = View { visible: false width: Fit, height: Fit + flow: Overlay + mod.widgets.VerificationIcon { + draw_icon +: { + svg: (mod.widgets.VERIFICATION_YES_BG), + get_color: fn() -> vec4 { + return #xFFFFFFFF; + } + } + } mod.widgets.VerificationIcon { draw_icon +: { svg: (mod.widgets.VERIFICATION_YES), @@ -45,6 +62,15 @@ script_mod! { visible: false width: Fit, height: Fit + flow: Overlay + mod.widgets.VerificationIcon { + draw_icon +: { + svg: (mod.widgets.VERIFICATION_NO_BG), + get_color: fn() -> vec4 { + return #xFFFFFFFF; + } + } + } mod.widgets.VerificationIcon { draw_icon +: { svg: (mod.widgets.VERIFICATION_NO), @@ -59,6 +85,15 @@ script_mod! { visible: false width: Fit, height: Fit + flow: Overlay + mod.widgets.VerificationIcon { + draw_icon +: { + svg: (mod.widgets.VERIFICATION_UNK_BG), + get_color: fn() -> vec4 { + return #xFFFFFFFF; + } + } + } mod.widgets.VerificationIcon { draw_icon +: { svg: (mod.widgets.VERIFICATION_UNK), From bb223ef3287f7859be89ff4947f1937e389fbe0d Mon Sep 17 00:00:00 2001 From: Kevin Boos Date: Wed, 29 Apr 2026 01:23:21 -0700 Subject: [PATCH 2/2] cleanup --- src/home/navigation_tab_bar.rs | 5 ++--- src/home/spaces_bar.rs | 30 +++++------------------------- src/shared/styles.rs | 10 ++-------- 3 files changed, 9 insertions(+), 36 deletions(-) diff --git a/src/home/navigation_tab_bar.rs b/src/home/navigation_tab_bar.rs index b8713a386..1ae8a26bd 100644 --- a/src/home/navigation_tab_bar.rs +++ b/src/home/navigation_tab_bar.rs @@ -177,9 +177,8 @@ script_mod! { align: Align{x: 0.5} // Similar to how we do it for the mobile mode view, but now // the bar is on the left, so we add left padding and extra width. - // Right padding mirrors left so the inner content area stays - // horizontally centered within the bar's outer bounds when the - // platform reports a non-zero left safe-inset. + // Right padding must equal the left padding so that the actual content + // is horizontally centered within the spaces bar. padding: Inset{ top: 8., bottom: (8.0 + mod.widgets.SAFE_INSET_PAD_BOTTOM), diff --git a/src/home/spaces_bar.rs b/src/home/spaces_bar.rs index 00e4f0d15..e4bc1bbf7 100644 --- a/src/home/spaces_bar.rs +++ b/src/home/spaces_bar.rs @@ -30,17 +30,12 @@ script_mod! { mod.widgets.SpacesBarEntry = set_type_default() do #(SpacesBarEntry::register_widget(vm)) { ..mod.widgets.NavigationBarButton - // Outer height + 2*margin must equal NAVIGATION_TAB_BAR_SIZE; otherwise - // the entry overflows the mobile spaces bar (height = NAVIGATION_TAB_BAR_SIZE) - // and the bottom of the rounded bg gets clipped asymmetrically. + // `height + (2 * margin)`` must equal NAVIGATION_TAB_BAR_SIZE to avoid clipping width: (NAVIGATION_TAB_BAR_SIZE - 4), height: (NAVIGATION_TAB_BAR_SIZE - 4), // Flow.Overlay (rather than Down) so that the invisible `space_name` Label // doesn't sit in the avatar's flow column and shift its centering. flow: Overlay - // Padding is integer (4) and the bar size is even (54), so every - // dimension downstream is integer-aligned: - // entry-content = 50 - 8 = 42, avatar = 40, margin around avatar = 1. padding: 4, margin: 2, align: Align{x: 0.5, y: 0.5} @@ -77,24 +72,15 @@ script_mod! { } mod.widgets.SpacesStatusLabel = View { - // Width can grow up to two entries' worth of space (so longer status - // text doesn't get cramped) but stays within one entry on Desktop - // since the bar is only NAVIGATION_TAB_BAR_SIZE wide there. + // We allow the status label to take up 2 entries' worth of horizontal space + // (only relevant in mobile view mode). width: Fill { max: (NAVIGATION_TAB_BAR_SIZE * 2) }, - // Height is Fit so the inner Label can wrap to as many lines as it - // needs on Desktop (where the narrow bar forces wrapping). For Mobile, - // cross-axis centering inside the bar is handled by the SpacesList's - // `align: Align{y: 0.5}` — see PortalList layout.align inheritance. + // Non-fixed height: let the label grow down (important on Desktop mode). height: Fit margin: 2, align: Align{ x: 0.5, y: 0.5 } padding: 4, - // The Label is `height: Fit` (not Fill) so the parent View's - // `align: y: 0.5` is what vertically centers it. DrawText only - // honors `align.x` for its own layout — `align.y` on a Label is - // ignored, so a Fill-sized Label can never vertically center its - // own text. label := Label { padding: 0 margin: 0 @@ -112,13 +98,7 @@ script_mod! { mod.widgets.SpacesList = PortalList { height: Fill, width: Fill, - spacing: 0.0 - // Center items on the cross axis so a Fit-sized status label gets - // vertically centered in Mobile (flow Right) and horizontally - // centered in Desktop (flow Down). Items whose cross-axis size - // matches the bar (entries) have no slack so this is a no-op for - // them. Requires PortalList to inherit `layout.align` for its inner - // item turtle (see makepad/widgets/src/portal_list.rs). + spacing: 0 align: Align{x: 0.5, y: 0.5} auto_tail: false, diff --git a/src/shared/styles.rs b/src/shared/styles.rs index 65ffcc1c9..5bad5dce0 100644 --- a/src/shared/styles.rs +++ b/src/shared/styles.rs @@ -170,15 +170,9 @@ script_mod! { mod.widgets.COLOR_LINK_HOVER = #21B070 - // Even on purpose: an odd bar size forces odd entry/button widths, which in - // turn requires odd-sized avatars for integer centering — but the Avatar's - // circle SDF (avatar.rs) computes radius = size / 2, so an odd avatar puts - // the circle's center on a half-pixel and renders with subtle (~1px) edge - // asymmetry. Even bar size lets every dimension downstream stay even. + // Use an even value for this, not odd, such that it can be divided in half, + // which is needed when calculating the value of other widgets that scale with this. mod.widgets.NAVIGATION_TAB_BAR_SIZE = 54 - // Even integer so the Avatar's circle radius (size/2 = 20) lands on a whole - // pixel. With entry padding 4 and entry content 42, the avatar's centering - // margin is also integer ((42-40)/2 = 1). mod.widgets.NAVIGATION_TAB_BAR_AVATAR_SIZE = 40 mod.widgets.NAVIGATION_TAB_BAR_AVATAR_FONT_SIZE = (mod.widgets.NAVIGATION_TAB_BAR_AVATAR_SIZE * 0.4)