From 6b4d148f862183491f5c07f5b89056ead780d4c8 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Sat, 26 Sep 2026 08:06:07 +0300 Subject: [PATCH 01/17] iOS 27 tab bar: measured Liquid Glass motion, vibrancy, lens optics and native geometry The iOS 27 Tabs (tabsMorphPreset ios27) now reproduces UITabBarController from measurements taken with an instrumented native probe (motion-probe) rather than by eye: - TabGlassMotion / TabGlassGesture: the selection motion as measured 60 Hz tables, plus held presses, a press on the selected tab, drag scrubbing with release to the tab under the finger, and the release wobble. - Graphics.colorMatrixRegion (vibrant tab content, the selection platter) and Graphics.glassLensRegion (the lifted lens's refraction, outline, rim and shadow), with core reference implementations, JavaSE, iOS/macOS Metal and (colorMatrixRegion) JavaScript port support. - Native bar geometry in points and the native label face. - iOS Metal: the bar glass runs on the GPU, mutable-image drawing reuses its stencil, the tab motion is no longer painted twice per frame, and the lens scratch texture is no longer leaked. - Tooling: tabmotion.py regenerates every table; record-ios-tabs-side-by-side.sh records native and Codename One side by side under the same real touches (docs/videos). Co-Authored-By: Claude Opus 5.5 (1M context) --- .../impl/CodenameOneImplementation.java | 85 + CodenameOne/src/com/codename1/ui/Button.java | 29 +- .../src/com/codename1/ui/Component.java | 82 +- .../src/com/codename1/ui/Container.java | 9 + .../src/com/codename1/ui/Graphics.java | 101 + .../src/com/codename1/ui/TabGlassGesture.java | 507 +++ .../src/com/codename1/ui/TabGlassMotion.java | 440 ++ CodenameOne/src/com/codename1/ui/Tabs.java | 1182 +++++- .../codename1/ui/plaf/ColorMatrixBlend.java | 118 + .../com/codename1/ui/plaf/GlassLensBlend.java | 259 ++ .../com/codename1/ui/plaf/GlassRecipe.java | 37 +- .../com/codename1/ui/plaf/VibrancyMatrix.java | 483 +++ .../com/codename1/impl/javase/JavaSEPort.java | 171 + .../impl/html5/BufferedGraphics.java | 13 + .../codename1/impl/html5/HTML5Graphics.java | 10 + .../impl/html5/HTML5Implementation.java | 69 + .../html5/graphics/ColorMatrixRegion.java | 80 + .../graphics/SurfaceCommandRecorder.java | 32 + Ports/MacPort/nativeSources/METALView.h | 4 + Ports/MacPort/nativeSources/METALView.m | 152 + Ports/iOSPort/nativeSources/BlurRegion.h | 19 + Ports/iOSPort/nativeSources/BlurRegion.m | 51 +- .../nativeSources/CN1MetalPipelineCache.m | 35 + .../nativeSources/CN1MetalShaders.metal | 315 ++ Ports/iOSPort/nativeSources/CN1Metalcompat.h | 49 + Ports/iOSPort/nativeSources/CN1Metalcompat.m | 264 +- .../CodenameOne_GLViewController.m | 28 + Ports/iOSPort/nativeSources/IOSNative.m | 32 + Ports/iOSPort/nativeSources/METALView.h | 4 + Ports/iOSPort/nativeSources/METALView.m | 170 +- .../nativeSources/iOSModern27Theme.res | Bin 207457 -> 208184 bytes .../codename1/impl/ios/IOSImplementation.java | 57 + .../src/com/codename1/impl/ios/IOSNative.java | 6 + Themes/iOSModern27Theme.res | Bin 207457 -> 208184 bytes docs/developer-guide/Native-Themes.asciidoc | 84 + docs/videos/README.md | 8 + docs/videos/tabs-side-by-side-dark-bar.mp4 | Bin 0 -> 5342317 bytes docs/videos/tabs-side-by-side-light-bar.mp4 | Bin 0 -> 5432530 bytes .../TestCodenameOneImplementation.java | 86 + .../com/codename1/ui/TabGlassGestureTest.java | 204 + .../com/codename1/ui/TabGlassMotionTest.java | 191 + .../codename1/ui/TabsGlassSelectionTest.java | 220 + .../ui/plaf/ColorMatrixBlendTest.java | 91 + .../codename1/ui/plaf/GlassRecipeTest.java | 15 +- .../codename1/ui/plaf/VibrancyMatrixTest.java | 103 + .../tab-glass-motion/native-gestures.csv | 3708 +++++++++++++++++ .../tab-glass-motion/native-ios27.csv | 1321 ++++++ .../tab-glass-motion/native-vibrancy.csv | 651 +++ .../com/codename1/designer/css/CSSTheme.java | 15 +- .../css/CSSDarkModeMediaQueryTest.java | 54 + native-themes/ios-modern/gen27.css | 76 + scripts/check-fidelity-spec.py | 15 +- scripts/common/java/MorphFrameValidator.java | 56 +- .../ios-27-metal-fidelity-baseline.json | 48 +- .../com/codenameone/fidelity/FidelityApp.java | 5 + .../fidelity/FidelityDeviceRunner.java | 155 +- .../fidelity/render/Cn1WidgetRenderer.java | 39 +- .../fidelity/spec/ComponentSpec.java | 31 + .../fidelity/spec/FidelitySpecParser.java | 2 + .../src/main/resources/fidelity-tests.yaml | 21 + scripts/fidelity-app/goldens/README.md | 7 + .../goldens/ios-27-metal-anim/README.md | 25 +- .../ios-27-metal-anim/cn1-tabs-dark.mov | Bin 31126 -> 1880569 bytes .../ios-27-metal-anim/cn1-tabs-light.mov | Bin 40726 -> 2030029 bytes .../TabsGlassMotion_t000_dark.png | Bin 0 -> 27770 bytes .../TabsGlassMotion_t000_light.png | Bin 0 -> 28473 bytes .../TabsGlassMotion_t002_dark.png | Bin 0 -> 36175 bytes .../TabsGlassMotion_t002_light.png | Bin 0 -> 37040 bytes .../TabsGlassMotion_t003_dark.png | Bin 0 -> 41464 bytes .../TabsGlassMotion_t003_light.png | Bin 0 -> 41054 bytes .../TabsGlassMotion_t005_dark.png | Bin 0 -> 47672 bytes .../TabsGlassMotion_t005_light.png | Bin 0 -> 47600 bytes .../TabsGlassMotion_t007_dark.png | Bin 0 -> 55757 bytes .../TabsGlassMotion_t007_light.png | Bin 0 -> 52425 bytes .../TabsGlassMotion_t008_dark.png | Bin 0 -> 55713 bytes .../TabsGlassMotion_t008_light.png | Bin 0 -> 51454 bytes .../TabsGlassMotion_t010_dark.png | Bin 0 -> 57284 bytes .../TabsGlassMotion_t010_light.png | Bin 0 -> 53464 bytes .../TabsGlassMotion_t013_dark.png | Bin 0 -> 56849 bytes .../TabsGlassMotion_t013_light.png | Bin 0 -> 55472 bytes .../TabsGlassMotion_t017_dark.png | Bin 0 -> 54409 bytes .../TabsGlassMotion_t017_light.png | Bin 0 -> 55442 bytes .../TabsGlassMotion_t020_dark.png | Bin 0 -> 52317 bytes .../TabsGlassMotion_t020_light.png | Bin 0 -> 52778 bytes .../TabsGlassMotion_t025_dark.png | Bin 0 -> 47023 bytes .../TabsGlassMotion_t025_light.png | Bin 0 -> 48002 bytes .../TabsGlassMotion_t030_dark.png | Bin 0 -> 44340 bytes .../TabsGlassMotion_t030_light.png | Bin 0 -> 45808 bytes .../TabsGlassMotion_t035_dark.png | Bin 0 -> 39819 bytes .../TabsGlassMotion_t035_light.png | Bin 0 -> 39903 bytes .../TabsGlassMotion_t040_dark.png | Bin 0 -> 36482 bytes .../TabsGlassMotion_t040_light.png | Bin 0 -> 36717 bytes .../TabsGlassMotion_t050_dark.png | Bin 0 -> 27874 bytes .../TabsGlassMotion_t050_light.png | Bin 0 -> 28559 bytes .../TabsGlassMotion_t060_dark.png | Bin 0 -> 27944 bytes .../TabsGlassMotion_t060_light.png | Bin 0 -> 28792 bytes .../TabsGlassMotion_t070_dark.png | Bin 0 -> 27918 bytes .../TabsGlassMotion_t070_light.png | Bin 0 -> 28631 bytes .../TabsGlassMotion_t100_dark.png | Bin 0 -> 27876 bytes .../TabsGlassMotion_t100_light.png | Bin 0 -> 28580 bytes .../TabsMorph_t000_dark.png | Bin 35703 -> 0 bytes .../TabsMorph_t000_light.png | Bin 34580 -> 0 bytes .../TabsMorph_t010_dark.png | Bin 52799 -> 0 bytes .../TabsMorph_t010_light.png | Bin 52027 -> 0 bytes .../TabsMorph_t025_dark.png | Bin 54805 -> 0 bytes .../TabsMorph_t025_light.png | Bin 51161 -> 0 bytes .../TabsMorph_t050_dark.png | Bin 53115 -> 0 bytes .../TabsMorph_t050_light.png | Bin 49167 -> 0 bytes .../TabsMorph_t075_dark.png | Bin 45347 -> 0 bytes .../TabsMorph_t075_light.png | Bin 44007 -> 0 bytes .../TabsMorph_t090_dark.png | Bin 35406 -> 0 bytes .../TabsMorph_t090_light.png | Bin 34109 -> 0 bytes .../TabsMorph_t100_dark.png | Bin 35086 -> 0 bytes .../TabsMorph_t100_light.png | Bin 33301 -> 0 bytes .../ios-native-ref/motion-probe/App/App.swift | 522 +++ .../ios-native-ref/motion-probe/README.md | 195 + .../motion-probe/UITests/TapTests.swift | 114 + .../ios-native-ref/motion-probe/project.yml | 36 + .../motion-probe/tints/adapt.txt | 2263 ++++++++++ .../ios-native-ref/motion-probe/tints/cvw.txt | 1377 ++++++ .../motion-probe/tints/grid17.txt | 969 +++++ .../motion-probe/tints/lowc.txt | 1215 ++++++ .../motion-probe/tints/slices.txt | 597 +++ .../motion-probe/tints/sweep.txt | 182 + .../motion-probe/tints/sweep2.txt | 1200 ++++++ .../motion-probe/tints/sweep3.txt | 576 +++ .../tools/tab-motion/tabmotion.py | 1047 +++++ scripts/probe-ios-tab-motion.sh | 115 + scripts/record-ios-tabs-side-by-side.sh | 270 ++ scripts/run-ios-fidelity-tests.sh | 1 + scripts/test-javascript-surface-replay.mjs | 47 + scripts/test_check_fidelity_spec.py | 17 + scripts/verify-javascript-lens-parity.mjs | 118 +- .../src/javascript/browser_bridge.js | 195 + .../JavascriptTargetIntegrationTest.java | 7 + 135 files changed, 23079 insertions(+), 108 deletions(-) create mode 100644 CodenameOne/src/com/codename1/ui/TabGlassGesture.java create mode 100644 CodenameOne/src/com/codename1/ui/TabGlassMotion.java create mode 100644 CodenameOne/src/com/codename1/ui/plaf/ColorMatrixBlend.java create mode 100644 CodenameOne/src/com/codename1/ui/plaf/GlassLensBlend.java create mode 100644 CodenameOne/src/com/codename1/ui/plaf/VibrancyMatrix.java create mode 100644 Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/ColorMatrixRegion.java create mode 100644 docs/videos/README.md create mode 100644 docs/videos/tabs-side-by-side-dark-bar.mp4 create mode 100644 docs/videos/tabs-side-by-side-light-bar.mp4 create mode 100644 maven/core-unittests/src/test/java/com/codename1/ui/TabGlassGestureTest.java create mode 100644 maven/core-unittests/src/test/java/com/codename1/ui/TabGlassMotionTest.java create mode 100644 maven/core-unittests/src/test/java/com/codename1/ui/TabsGlassSelectionTest.java create mode 100644 maven/core-unittests/src/test/java/com/codename1/ui/plaf/ColorMatrixBlendTest.java create mode 100644 maven/core-unittests/src/test/java/com/codename1/ui/plaf/VibrancyMatrixTest.java create mode 100644 maven/core-unittests/src/test/resources/tab-glass-motion/native-gestures.csv create mode 100644 maven/core-unittests/src/test/resources/tab-glass-motion/native-ios27.csv create mode 100644 maven/core-unittests/src/test/resources/tab-glass-motion/native-vibrancy.csv create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t000_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t000_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t002_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t002_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t003_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t003_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t005_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t005_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t007_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t007_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t008_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t008_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t010_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t010_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t013_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t013_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t017_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t017_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t020_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t020_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t025_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t025_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t030_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t030_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t035_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t035_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t040_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t040_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t050_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t050_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t060_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t060_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t070_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t070_light.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t100_dark.png create mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsGlassMotion_t100_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t000_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t000_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t010_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t010_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t025_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t025_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t050_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t050_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t075_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t075_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t090_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t090_light.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t100_dark.png delete mode 100644 scripts/fidelity-app/goldens/ios-27-metal-frames/TabsMorph_t100_light.png create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/App/App.swift create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/README.md create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/UITests/TapTests.swift create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/project.yml create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/adapt.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/cvw.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/grid17.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/lowc.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/slices.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/sweep.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/sweep2.txt create mode 100644 scripts/fidelity-app/ios-native-ref/motion-probe/tints/sweep3.txt create mode 100755 scripts/fidelity-app/tools/tab-motion/tabmotion.py create mode 100755 scripts/probe-ios-tab-motion.sh create mode 100755 scripts/record-ios-tabs-side-by-side.sh diff --git a/CodenameOne/src/com/codename1/impl/CodenameOneImplementation.java b/CodenameOne/src/com/codename1/impl/CodenameOneImplementation.java index e668e2fa7cf..c93f90b2c9f 100644 --- a/CodenameOne/src/com/codename1/impl/CodenameOneImplementation.java +++ b/CodenameOne/src/com/codename1/impl/CodenameOneImplementation.java @@ -4102,6 +4102,91 @@ public boolean glassRegion(Object graphics, int x, int y, int width, int height, return glassRegion(graphics, x, y, width, height, radius, cornerRadius, sat, scale, offset, refract, specular); } + /// True when `#colorMatrixRegion` works on this graphics context. Ports override. + /// + /// #### Parameters + /// + /// - `graphics`: the native graphics + /// + /// #### Returns + /// + /// false by default + public boolean isColorMatrixRegionSupported(Object graphics) { + return false; + } + + /// Recolours the painted region through a colour matrix; see + /// `com.codename1.ui.Graphics#colorMatrixRegion`. Ports override; the default does nothing. + /// + /// #### Parameters + /// + /// - `graphics`: the native graphics + /// + /// - `x`: region x + /// + /// - `y`: region y + /// + /// - `width`: region width + /// + /// - `height`: region height + /// + /// - `matrix`: 12-float colour matrix + /// + /// - `mask`: optional coverage mask + /// + /// - `cornerRadius`: corner radius, negative for a capsule + /// + /// - `amount`: strength 0..1 + /// + /// #### Returns + /// + /// false when unsupported + public boolean colorMatrixRegion(Object graphics, int x, int y, int width, int height, float[] matrix, + Image mask, float cornerRadius, float amount) { + return false; + } + + /// True when `glassLensRegion` works on this graphics context. + /// + /// #### Parameters + /// + /// - `graphics`: the graphics context + /// + /// #### Returns + /// + /// false by default + public boolean isGlassLensRegionSupported(Object graphics) { + return false; + } + + /// See Graphics.glassLensRegion; the default does nothing. + /// + /// #### Parameters + /// + /// - `graphics`: the graphics context + /// + /// - `x`: lens left edge (translated) + /// + /// - `y`: lens top edge (translated) + /// + /// - `width`: lens width + /// + /// - `height`: lens height + /// + /// - `cornerRadius`: corner radius, negative for a capsule + /// + /// - `optics`: the GlassLensBlend parameters + /// + /// - `amount`: overall strength 0..1 + /// + /// #### Returns + /// + /// false when unsupported + public boolean glassLensRegion(Object graphics, int x, int y, int width, int height, float cornerRadius, + float[] optics, float amount) { + return false; + } + /// In-place iOS 26 selection-drop LENS (magnify + chromatic aberration + /// dark->accent tint over the painted content). Default unsupported; the iOS /// port overrides it. Returns false so callers can fall back (e.g. to a tint). diff --git a/CodenameOne/src/com/codename1/ui/Button.java b/CodenameOne/src/com/codename1/ui/Button.java index 62db4f62651..136e98c3ceb 100644 --- a/CodenameOne/src/com/codename1/ui/Button.java +++ b/CodenameOne/src/com/codename1/ui/Button.java @@ -92,6 +92,14 @@ public class Button extends Label implements ReleasableComponent, ActionSource 0) { // The glass surface's material INTENT comes from a typed, named @@ -3145,6 +3155,32 @@ void internalPaintImpl(Graphics g, boolean paintIntersects) { } } paintComponentBackground(g); + } + + void internalPaintImpl(Graphics g, boolean paintIntersects) { + g.clipRect(getX(), getY(), getWidth(), getHeight()); + // CSS backdrop-filter:blur() -- the "liquid glass" effect. Blur whatever has + // already been painted behind this component (the clip confines it to our + // bounds) BEFORE our own translucent background and content paint on top. This + // runs regardless of opacity, since a glass surface is by definition + // translucent (opaque would be false and skip paintComponentBackground). The + // port blurs the destination region in place; an unsupported port returns + // false and the component simply paints without the blur. + // COST/CACHING POLICY (per paint path): + // * A glass surface only pays when it repaints; static chrome over static + // content costs nothing between repaints. + // * iOS live screen, selection lens: a pure GPU fragment shader on the + // frame's own command buffer -- no sync, no readback, no cache needed. + // * iOS live screen, glass material: the backdrop readback is required + // (the material is a function of the pixels behind the glass), but the + // composed patch is CACHED per rect+params+backdrop-hash in the port + // (METALView glass patch cache), so a repaint over an unchanged + // backdrop skips the colour transform + blur + optics; scrolling + // content under the glass recomposes that frame from the real bytes. + // * Offscreen mutable images (capture tooling) and the desktop simulator + // blur per paint -- capture renders once, and the simulator is not a + // shipping surface. + paintBackgroundLayer(g); if (isScrollable()) { if (refreshTask != null && !InfiniteProgress.isDefaultMaterialDesignMode() && diff --git a/CodenameOne/src/com/codename1/ui/Container.java b/CodenameOne/src/com/codename1/ui/Container.java index 93c35732150..6ee0d502b69 100644 --- a/CodenameOne/src/com/codename1/ui/Container.java +++ b/CodenameOne/src/com/codename1/ui/Container.java @@ -2534,6 +2534,15 @@ void markComponentsToBePaintedInElevatedPane(boolean shouldPaintInElevatedPane) } } + /// Runs the layout-on-paint step of {@link #paint(Graphics)} for a subclass that + /// paints its children itself (the Tabs bar paints each tab twice for the + /// Liquid Glass selection) and so cannot call super.paint(). + final void layoutForPaint() { + if (allowEnableLayoutOnPaint && enableLayoutOnPaint) { + layoutContainer(); + } + } + /// {@inheritDoc} @Override public void paint(Graphics g) { diff --git a/CodenameOne/src/com/codename1/ui/Graphics.java b/CodenameOne/src/com/codename1/ui/Graphics.java index 9aa8caa9f56..cd018150a10 100644 --- a/CodenameOne/src/com/codename1/ui/Graphics.java +++ b/CodenameOne/src/com/codename1/ui/Graphics.java @@ -1692,6 +1692,107 @@ public boolean lensRegion(int x, int y, int width, int height, float cornerRadiu return impl.lensRegion(nativeGraphics, x + xTranslate, y + yTranslate, width, height, cornerRadius, magnify, aberration, tintColor, tintStrength); } + /// True when this graphics context can run `#glassLensRegion`. + /// + /// #### Returns + /// + /// true if glassLensRegion is supported on this context + public boolean isGlassLensRegionSupported() { + return impl.isGlassLensRegionSupported(nativeGraphics); + } + + /// Lays the optics of a raised Liquid Glass lens over what is already painted: + /// the rim refracts the surface around it inwards (so the edge of whatever the + /// lens floats over bends into its rim), with slight colour dispersion, a thin + /// outline, a rim highlight, shading along its ends, interior brightening and a + /// soft shadow below. The math and the meaning of each parameter are in + /// `com.codename1.ui.plaf.GlassLensBlend`; the lens may sample up to + /// `optics[GlassLensBlend.MAX_SHIFT]` pixels outside its own rectangle and + /// paints up to `GlassLensBlend.margin(optics)` pixels outside it. + /// + /// #### Parameters + /// + /// - `x`: lens left edge + /// + /// - `y`: lens top edge + /// + /// - `width`: lens width + /// + /// - `height`: lens height + /// + /// - `cornerRadius`: corner radius, negative for a capsule + /// + /// - `optics`: `GlassLensBlend.COUNT` parameters, lengths in pixels + /// + /// - `amount`: overall strength 0..1 (0 leaves the surface untouched) + /// + /// #### Returns + /// + /// false when the port cannot do this (nothing is painted then) + public boolean glassLensRegion(int x, int y, int width, int height, float cornerRadius, float[] optics, + float amount) { + if (width <= 0 || height <= 0 || amount <= 0) { + return true; + } + return impl.glassLensRegion(nativeGraphics, x + xTranslate, y + yTranslate, width, height, cornerRadius, + optics, amount); + } + + /// True when this graphics context can run `#colorMatrixRegion`. + /// + /// #### Returns + /// + /// true if colorMatrixRegion is supported on this context + public boolean isColorMatrixRegionSupported() { + return impl.isColorMatrixRegionSupported(nativeGraphics); + } + + /// Recolours what is ALREADY painted in a region through a colour matrix: every + /// pixel `p` becomes `mix(p, clamp(M * p + offset), k)`. This is how iOS draws + /// vibrant content over glass -- a vibrant glyph's colour is a function of what + /// lies behind it, see com.codename1.ui.plaf.VibrancyMatrix -- and how a glass + /// selection platter derives its material from the glass it sits on. + /// + /// The coverage `k` is `amount`, times the anti-aliased coverage of a rounded + /// rectangle filling the region when `cornerRadius` is not zero (negative makes + /// a capsule), times the alpha of `mask` when one is given. The mask covers the + /// region pixel for pixel, so painting glyphs into a transparent mutable image + /// and passing it here draws them the way a template image is drawn natively. + /// + /// The region is in this context's coordinates; the current transform is not + /// applied. com.codename1.ui.plaf.ColorMatrixBlend is the reference + /// implementation of the per-pixel operation. + /// + /// #### Parameters + /// + /// - `x`: region x + /// + /// - `y`: region y + /// + /// - `width`: region width + /// + /// - `height`: region height + /// + /// - `matrix`: 12 floats: rows r, g, b of `[r, g, b, offset]`, in 0..1 units + /// + /// - `mask`: optional mask the size of the region, or null + /// + /// - `cornerRadius`: 0 for the whole rectangle, a radius, or negative for a capsule + /// + /// - `amount`: overall strength 0..1 + /// + /// #### Returns + /// + /// false when the port cannot do this (nothing is painted then) + public boolean colorMatrixRegion(int x, int y, int width, int height, float[] matrix, Image mask, + float cornerRadius, float amount) { + if (width <= 0 || height <= 0 || amount <= 0) { + return true; + } + return impl.colorMatrixRegion(nativeGraphics, x + xTranslate, y + yTranslate, width, height, matrix, mask, + cornerRadius, amount); + } + /// Fills a rectangle with an optionally translucent fill color /// /// #### Parameters diff --git a/CodenameOne/src/com/codename1/ui/TabGlassGesture.java b/CodenameOne/src/com/codename1/ui/TabGlassGesture.java new file mode 100644 index 00000000000..0d1331617e3 --- /dev/null +++ b/CodenameOne/src/com/codename1/ui/TabGlassGesture.java @@ -0,0 +1,507 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Codename One in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ +package com.codename1.ui; + +import com.codename1.util.MathUtil; + +/// The parts of the iOS 27 tab selection that depend on the GESTURE rather than +/// on a tap: holding the press, scrubbing the lens along the bar with the finger, +/// and letting go of a scrub. Measured like TabGlassMotion, with the same probe +/// (scripts/fidelity-app/ios-native-ref/motion-probe), from held presses and drags +/// driven through XCUITest: +/// +/// - While the finger is down the lift holds, and the whole bar grows toward +/// +14.6 pt of width on a spring (omega 17.6 rad/s, zeta 0.59, 20 ms behind the +/// touch); lifting the finger springs it back. A quick tap is the same spring +/// released early. +/// - Dragging along the bar makes the lens FOLLOW the finger on a stiffer spring +/// (omega 32 rad/s, zeta 0.90, 20 ms behind), within the first and last tab. +/// - Releasing a scrub selects the tab nearest the FINGER (not the lens, which +/// can be far behind after a flick; a tie keeps the current tab). The lens +/// travels there on the tap's position curve, corrected by its velocity and its +/// lag behind the finger at release (SETTLE_V, SETTLE_E). +/// - While scrubbing, the lens deforms with its own motion: a kernel over its +/// recent speed and acceleration (the FIR_ tables). +/// - Every release ends in a small wobble that starts WOBBLE_START_S after the +/// finger lifts -- whether it was a tap, a hold or a scrub. +/// +/// Pure data and arithmetic, evaluated from the recorded touch events at any +/// time, so a frame is reproducible: TabGlassGestureTest pins it to the capture. +final class TabGlassGesture { + /// Bar press spring (whole-bar width growth while pressed). + static final float BAR_OMEGA = 17.63f; + static final float BAR_ZETA = 0.593f; + static final float BAR_PRESS_PT = 14.58f; + /// Scrub follow spring. + static final float FOLLOW_OMEGA = 32.0f; + static final float FOLLOW_ZETA = 0.903f; + /// Both springs, and the settle, run this far behind the touch. + static final float TOUCH_LAG_S = 0.02f; + /// The release wobble starts this long after touch-up. + static final float WOBBLE_START_S = 0.9f; + /// The tap tables start at the last frame at rest, one frame after the + /// touch; a press is evaluated on them this much later. + static final float TEMPLATE_DELAY_S = 0.018f; + /// Integration step of the follow spring. + private static final float STEP_S = 1f / 240f; + + // ---- generated tables (tabmotion.py gesture) ---- + /// Release wobble, lens scaleX - 1, from WOBBLE_START_S after touch-up. + static final float[] WOBBLE_X = { + 0.00000f, 0.00000f, 0.00000f, 0.00361f, 0.01156f, 0.01577f, 0.01579f, + 0.01397f, 0.01188f, 0.00980f, 0.00795f, 0.00580f, 0.00341f, 0.00063f, + -0.00225f, -0.00522f, -0.00795f, -0.01039f, -0.01244f, -0.01396f, -0.01503f, + -0.01553f, -0.01552f, -0.01517f, -0.01453f, -0.01358f, -0.01263f, -0.01144f, + -0.01016f, -0.00876f, -0.00743f, -0.00614f, -0.00479f, -0.00367f, -0.00264f, + -0.00183f, -0.00113f, -0.00005f + }; + + /// Release wobble, lens scaleY - 1. + static final float[] WOBBLE_Y = { + 0.00000f, 0.00000f, 0.00000f, -0.00473f, -0.01511f, -0.02060f, -0.02037f, + -0.01772f, -0.01475f, -0.01190f, -0.00938f, -0.00653f, -0.00337f, 0.00030f, + 0.00424f, 0.00825f, 0.01199f, 0.01525f, 0.01793f, 0.02006f, 0.02140f, + 0.02202f, 0.02193f, 0.02140f, 0.02049f, 0.01915f, 0.01775f, 0.01604f, + 0.01418f, 0.01233f, 0.01044f, 0.00863f, 0.00672f, 0.00510f, 0.00375f, + 0.00255f, 0.00164f, 0.00007f + }; + + /// Release wobble, lens centre offset in points (always towards +x). + static final float[] WOBBLE_TX = { + 0.0000f, 0.0000f, 0.0000f, 0.1684f, 0.5498f, 0.7540f, 0.8391f, + 0.8995f, 0.9182f, 0.8944f, 0.8411f, 0.7892f, 0.7481f, 0.7238f, + 0.7200f, 0.7283f, 0.7467f, 0.7583f, 0.7764f, 0.7800f, 0.7717f, + 0.7533f, 0.7252f, 0.6868f, 0.6394f, 0.5891f, 0.5339f, 0.4642f, + 0.3859f, 0.3211f, 0.2607f, 0.2010f, 0.1529f, 0.1125f, 0.0813f, + 0.0608f, 0.0408f, 0.0017f + }; + + /// Settle after a scrub: lens offset (pt) per pt/s of lens velocity at release. + static final float[] SETTLE_V = { + 0.002263f, 0.000871f, -0.002719f, -0.004932f, -0.006817f, -0.005184f, -0.005578f, + -0.004491f, -0.004612f, -0.004095f, -0.003479f, -0.002938f, -0.002392f, -0.001918f, + -0.001562f, -0.001233f, -0.000900f, -0.000713f, -0.000527f, -0.000408f, -0.000284f, + -0.000168f, -0.000102f, -0.000181f, -0.000157f, -0.000261f, -0.000194f, -0.000197f, + -0.000055f, 0.000069f, 0.000068f, 0.000054f, 0.000020f, 0.000010f, 0.000006f, + 0.000002f + }; + + /// Settle after a scrub: lens offset (pt) per pt of follow lag (target - lens) at release. + static final float[] SETTLE_E = { + 0.00516f, 0.34670f, 0.68555f, 0.87646f, 0.96867f, 0.91844f, 0.87645f, + 0.77691f, 0.69398f, 0.59510f, 0.49772f, 0.40891f, 0.32887f, 0.25944f, + 0.20447f, 0.15461f, 0.11400f, 0.08268f, 0.05785f, 0.03895f, 0.02456f, + 0.01347f, 0.00612f, 0.00311f, -0.00014f, -0.00018f, -0.00205f, -0.00232f, + -0.00480f, -0.00664f, -0.00547f, -0.00434f, -0.00163f, -0.00082f, -0.00047f, + -0.00020f, -0.00003f + }; + + /// Scrub deformation kernels: scaleX - 1 per |v|/1000 pt/s, per frame of delay. + static final float[] FIR_SX_SPEED = { + 0.005386f, 0.012912f, -0.028749f, -0.016629f, -0.033210f, -0.024031f, -0.020600f, + -0.012343f, -0.002749f, 0.004030f, 0.009242f, 0.008953f, 0.012166f, 0.012893f, + 0.012872f, 0.010809f, 0.008817f, 0.007096f, 0.001731f, -0.004369f, -0.012404f, + -0.019141f, -0.025249f, -0.022780f, -0.017689f, -0.005807f, 0.003809f, 0.012035f, + 0.016827f, 0.016782f, 0.031737f, 0.031957f, 0.015308f, 0.007353f, 0.003907f, + 0.015685f, 0.024954f, 0.027492f, 0.020445f, 0.014757f, 0.003888f, 0.002255f, + -0.002126f, -0.000802f, -0.007250f, -0.002595f, -0.007373f, -0.000028f, -0.001768f, + 0.000206f, -0.005118f, -0.013183f, -0.010548f, -0.015463f, -0.008038f, -0.011520f, + -0.009560f, -0.010342f, -0.011173f, -0.008117f + }; + + /// scaleX - 1 per (a * sign(v))/10000 pt/s^2. + static final float[] FIR_SX_ACCEL = { + 0.003827f, -0.006486f, 0.002025f, 0.002359f, 0.010644f, 0.015898f, 0.024219f, + 0.029469f, 0.035889f, 0.038609f, 0.042037f, 0.043221f, 0.044077f, 0.043458f, + 0.041961f, 0.040211f, 0.037419f, 0.035090f, 0.032585f, 0.030200f, 0.029762f, + 0.029196f, 0.031131f, 0.032903f, 0.034329f, 0.033706f, 0.032755f, 0.028075f, + 0.025746f, 0.018850f, 0.017224f, 0.005670f, 0.003474f, -0.000335f, -0.001967f, + -0.001836f, -0.009062f, -0.010145f, -0.020024f, -0.016717f, -0.025467f, -0.018039f, + -0.025212f, -0.017825f, -0.022364f, -0.018854f, -0.019743f, -0.022799f, -0.015406f, + -0.021934f, -0.006911f, -0.022476f, -0.013041f, -0.008297f, -0.012494f, -0.001811f, + -0.013308f, 0.002084f, -0.007376f, 0.005347f + }; + + /// scaleY - 1 per |v|/1000 pt/s. + static final float[] FIR_SY_SPEED = { + 0.093688f, 0.096136f, 0.128985f, 0.107764f, 0.118752f, 0.093075f, 0.079969f, + 0.053671f, 0.030938f, 0.007693f, -0.010222f, -0.022671f, -0.038274f, -0.050198f, + -0.059146f, -0.063568f, -0.063998f, -0.064000f, -0.055460f, -0.044408f, -0.029172f, + -0.016135f, -0.003080f, -0.003318f, -0.008979f, -0.022428f, -0.034123f, -0.042198f, + -0.044854f, -0.039248f, -0.056633f, -0.054080f, -0.027495f, -0.015488f, -0.010086f, + -0.026753f, -0.038404f, -0.040022f, -0.029777f, -0.022289f, -0.017102f, -0.014955f, + -0.000277f, -0.003336f, 0.012116f, 0.003973f, 0.014495f, 0.003322f, 0.007905f, + 0.004756f, 0.013255f, 0.026090f, 0.021316f, 0.029225f, 0.016846f, 0.022248f, + 0.019017f, 0.019924f, 0.022059f, 0.015518f + }; + + /// scaleY - 1 per (a * sign(v))/10000 pt/s^2. + static final float[] FIR_SY_ACCEL = { + -0.005353f, -0.023268f, -0.043439f, -0.063703f, -0.085980f, -0.106162f, -0.127102f, + -0.142632f, -0.157555f, -0.164858f, -0.171349f, -0.171984f, -0.170825f, -0.165800f, + -0.157269f, -0.148163f, -0.135737f, -0.124395f, -0.112132f, -0.100828f, -0.092703f, + -0.084886f, -0.081606f, -0.077825f, -0.074960f, -0.068167f, -0.062789f, -0.050827f, + -0.044336f, -0.030841f, -0.026838f, -0.008056f, -0.004023f, 0.002576f, 0.005864f, + 0.006493f, 0.017673f, 0.019618f, 0.033694f, 0.029886f, 0.041609f, 0.036438f, + 0.044942f, 0.037809f, 0.042021f, 0.039654f, 0.037349f, 0.044313f, 0.030477f, + 0.041752f, 0.014996f, 0.040840f, 0.024000f, 0.015865f, 0.022673f, 0.003961f, + 0.023268f, -0.004889f, 0.012982f, -0.011256f + }; + + /// Centre offset (pt) per v/1000 pt/s. + static final float[] FIR_TX_VEL = { + -0.21568f, -0.69702f, -0.27793f, -0.68219f, -0.39789f, -0.68948f, -0.52792f, + -0.67577f, -0.58201f, -0.59134f, -0.52522f, -0.42958f, -0.37108f, -0.23407f, + -0.17440f, -0.04827f, 0.01979f, 0.09806f, 0.17122f, 0.20404f, 0.26861f, + 0.26498f, 0.31941f, 0.28912f, 0.34208f, 0.29301f, 0.33705f, 0.29164f, + 0.31769f, 0.27556f, 0.28484f, 0.24653f, 0.24153f, 0.20891f, 0.19330f, + 0.16887f, 0.14559f, 0.13959f, 0.10056f, 0.11453f, 0.06234f, 0.09931f, + 0.02636f, 0.08559f, -0.00115f, 0.08183f, -0.00969f, 0.06894f, -0.02416f, + 0.05977f, -0.05126f, 0.05368f, -0.05600f, 0.06126f, -0.01526f, 0.07498f, + -0.05010f, 0.05472f, -0.06587f, 0.16911f + }; + + /// Centre offset (pt) per a/10000 pt/s^2. + static final float[] FIR_TX_ACCEL = { + -0.13426f, 0.18676f, -0.04449f, 0.35988f, 0.02187f, 0.39009f, -0.04113f, + 0.16225f, -0.25327f, -0.17034f, -0.48529f, -0.46244f, -0.58653f, -0.59003f, + -0.55739f, -0.58258f, -0.43902f, -0.45427f, -0.31792f, -0.29220f, -0.18283f, + -0.15240f, -0.07240f, -0.06801f, -0.01168f, 0.01510f, 0.00410f, 0.05807f, + 0.04825f, 0.09856f, 0.08710f, 0.12995f, 0.11285f, 0.14468f, 0.12012f, + 0.14313f, 0.08782f, 0.13510f, 0.07518f, 0.11465f, 0.04567f, 0.10793f, + 0.04117f, 0.08256f, 0.01128f, 0.02560f, 0.03866f, 0.04343f, 0.02751f, + 0.08128f, 0.01827f, 0.01423f, -0.02272f, -0.12222f, -0.04116f, 0.10452f, + 0.06077f, 0.04731f, -0.34318f, 0.32561f + }; + + // ---- end of generated tables ---- + + // Touch events, in seconds after the press. + private final float fromPt; + private final float toPt; + private float upS = -1; + private float scrubStartS = -1; + private float scrubX0; + private float scrubV0; + private float minPt; + private float maxPt; + private float settleToPt; + private float[] fingerS = new float[32]; + private float[] fingerPt = new float[32]; + private int fingerCount; + + /// A press that starts the lens from `fromPt` towards the tab at `toPt` + /// (lens centres in points; equal for a press on the selected tab). + TabGlassGesture(float fromPt, float toPt) { + this.fromPt = fromPt; + this.toPt = toPt; + } + + float getFromPt() { + return fromPt; + } + + float getToPt() { + return toPt; + } + + float getUpS() { + return upS; + } + + boolean isScrubbing() { + return scrubStartS >= 0; + } + + /// Touch-up, `s` seconds after the press. + void up(float s) { + if (upS < 0) { + upS = s; + } + } + + /// Turns the press into a scrub at `s`: the lens leaves its tap motion from + /// where it is now and follows the finger, kept within `[minPt, maxPt]`. + void startScrub(float s, float minPt, float maxPt) { + if (scrubStartS >= 0) { + return; + } + float dt = 1f / TabGlassMotion.SAMPLE_HZ; + scrubX0 = tapCentre(s); + scrubV0 = (tapCentre(s + dt / 2) - tapCentre(s - dt / 2)) / dt; + this.minPt = Math.min(minPt, maxPt); + this.maxPt = Math.max(minPt, maxPt); + scrubStartS = s; + settleToPt = scrubX0; + } + + /// The finger's position in lens-centre points at `s` seconds. + void finger(float s, float pt) { + if (fingerCount == fingerS.length) { + float[] ns = new float[fingerCount * 2]; + float[] np = new float[fingerCount * 2]; + System.arraycopy(fingerS, 0, ns, 0, fingerCount); + System.arraycopy(fingerPt, 0, np, 0, fingerCount); + fingerS = ns; + fingerPt = np; + } + fingerS[fingerCount] = s; + fingerPt[fingerCount] = pt; + fingerCount++; + } + + /// Where a finished scrub goes (the centre of the tab chosen at release). + void settleTo(float pt) { + settleToPt = pt; + } + + /// The finger at `s` (the last sample at or before it), or NaN before any. + float fingerAt(float s) { + float v = Float.NaN; + for (int i = 0; i < fingerCount && fingerS[i] <= s; i++) { + v = fingerPt[i]; + } + return v; + } + + private float clampPt(float v) { + return v < minPt ? minPt : (v > maxPt ? maxPt : v); + } + + /// The lens centre on the tap motion (no scrub). + private float tapCentre(float s) { + float t = s - TEMPLATE_DELAY_S; + return fromPt + (toPt - fromPt) * TabGlassMotion.position(t < 0 ? 0 : t); + } + + /// The scrub lens centre at 60 Hz, from the scrub start to `endS`: the follow + /// spring while the finger is down, then the settle. Returns the samples and + /// writes the release state into `release` (x, v, e) when the finger lifted. + private float[] scrubTrack(float endS, float[] release) { + int frames = Math.max(1, (int) Math.ceil((endS - scrubStartS) * TabGlassMotion.SAMPLE_HZ) + 2); + float[] out = new float[frames]; + float x = scrubX0; + float v = scrubV0; + float s = scrubStartS; + float rx = Float.NaN; + float rv = 0; + float re = 0; + float w = FOLLOW_OMEGA; + float z = FOLLOW_ZETA; + int substeps = Math.round(1f / (TabGlassMotion.SAMPLE_HZ * STEP_S)); + for (int i = 0; i < frames; i++) { + float fs = scrubStartS + i / (float) TabGlassMotion.SAMPLE_HZ; + if (upS >= 0 && fs >= upS) { + if (rx != rx) { + // The finger lifted during the previous frame: integrate up to it. + while (s < upS) { + float f = fingerAt(s - TOUCH_LAG_S); + float target = f != f ? scrubX0 : clampPt(f); + float a = w * w * (target - x) - 2 * z * w * v; + v += a * STEP_S; + x += v * STEP_S; + s += STEP_S; + } + float f = fingerAt(upS - TOUCH_LAG_S); + rx = x; + rv = v; + re = (f != f ? scrubX0 : clampPt(f)) - x; + } + out[i] = settle(fs - upS, rx, rv, re); + continue; + } + for (int k = 0; k < substeps && s < fs; k++) { + float f = fingerAt(s - TOUCH_LAG_S); + float target = f != f ? scrubX0 : clampPt(f); + float a = w * w * (target - x) - 2 * z * w * v; + v += a * STEP_S; + x += v * STEP_S; + s += STEP_S; + } + out[i] = x; + } + if (release != null) { + release[0] = rx; + release[1] = rv; + release[2] = re; + } + return out; + } + + /// The settle `t` seconds after a scrub released at `x` with velocity `v` + /// and follow lag `e`. + private float settle(float t, float x, float v, float e) { + float p = TabGlassMotion.position(t - TOUCH_LAG_S); + if (t - TOUCH_LAG_S <= 0) { + p = 0; + } + return x + (settleToPt - x) * p + v * table(SETTLE_V, t) + e * table(SETTLE_E, t); + } + + /// A 60 Hz table that is zero outside itself. + private static float table(float[] a, float t) { + if (t < 0) { + return 0; + } + float fx = t * TabGlassMotion.SAMPLE_HZ; + int i = (int) fx; + if (i >= a.length - 1) { + return i == a.length - 1 ? a[i] * (1 - (fx - i)) : 0; + } + float f = fx - i; + return a[i] * (1 - f) + a[i + 1] * f; + } + + /// The release wobble `sinceUpS` seconds after touch-up. + static float wobble(float[] table, float sinceUpS) { + return table(table, sinceUpS - WOBBLE_START_S); + } + + /// The whole bar's width growth in points `s` seconds after the press, for a + /// touch-up at `upS` (negative while still down). + static float barGrowPt(float s, float upS) { + float g = step(s - TOUCH_LAG_S); + if (upS >= 0) { + g -= step(s - upS - TOUCH_LAG_S); + } + return BAR_PRESS_PT * g; + } + + /// Unit step response of the bar spring. + private static float step(float t) { + if (t <= 0) { + return 0; + } + double w = BAR_OMEGA; + double z = BAR_ZETA; + double wd = w * Math.sqrt(1 - z * z); + double e = MathUtil.exp(-z * w * t); + return (float) (1 - e * (Math.cos(wd * t) + z / Math.sqrt(1 - z * z) * Math.sin(wd * t))); + } + + /// When the lift is released, in seconds after the press, or a large value + /// while the finger is down. + float releaseS(float nowS) { + if (upS < 0) { + return Float.MAX_VALUE; + } + if (!isScrubbing()) { + // The release reaches the lens one touch lag after the finger lifts. + return TabGlassMotion.releaseForPress(toPt - fromPt, upS + TOUCH_LAG_S - TEMPLATE_DELAY_S) + + TEMPLATE_DELAY_S; + } + // A scrub releases once the settling lens is within RELEASE_PT of its tab. + float end = Math.max(nowS, upS) + 1f; + float[] track = scrubTrack(end, null); + for (int i = 0; i < track.length; i++) { + float fs = scrubStartS + i / (float) TabGlassMotion.SAMPLE_HZ; + if (fs >= upS && Math.abs(settleToPt - track[i]) < TabGlassMotion.RELEASE_PT) { + return Math.max(fs - 1f / TabGlassMotion.SAMPLE_HZ, upS + TOUCH_LAG_S); + } + } + return end; + } + + /// True once everything this gesture started has played out at `s`. + boolean isFinished(float s) { + if (upS < 0) { + return false; + } + float rel = releaseS(s); + float end = TabGlassMotion.heldDurationS(upS, rel) + TEMPLATE_DELAY_S; + if (isScrubbing()) { + end = Math.max(end, upS + SETTLE_V.length / (float) TabGlassMotion.SAMPLE_HZ + + FIR_SX_SPEED.length / (float) TabGlassMotion.SAMPLE_HZ); + } + return s >= end; + } + + /// The frame `s` seconds after the press. `centreOut[0]` receives the lens + /// centre in points. + TabGlassMotion at(float s, float[] centreOut) { + float rel = releaseS(s); + float d = TEMPLATE_DELAY_S; + TabGlassMotion m = TabGlassMotion.held(s - d, toPt - fromPt, upS < 0 ? -1 : upS - d, + rel == Float.MAX_VALUE ? rel : rel - d); + m.barGrowPt = barGrowPt(s, upS); + if (!isScrubbing() || s < scrubStartS) { + centreOut[0] = tapCentre(s); + return m; + } + float[] track = scrubTrack(s + 2f / TabGlassMotion.SAMPLE_HZ, null); + float fx = (s - scrubStartS) * TabGlassMotion.SAMPLE_HZ; + int n = Math.min((int) fx, track.length - 2); + float f = fx - n; + centreOut[0] = track[n] * (1 - f) + track[n + 1] * f; + // Deformation from the lens's own motion, on top of the press's. + float dx0 = deform(track, n, FIR_SX_SPEED, FIR_SX_ACCEL, true); + float dx1 = deform(track, n + 1, FIR_SX_SPEED, FIR_SX_ACCEL, true); + float dy0 = deform(track, n, FIR_SY_SPEED, FIR_SY_ACCEL, true); + float dy1 = deform(track, n + 1, FIR_SY_SPEED, FIR_SY_ACCEL, true); + float dt0 = deform(track, n, FIR_TX_VEL, FIR_TX_ACCEL, false); + float dt1 = deform(track, n + 1, FIR_TX_VEL, FIR_TX_ACCEL, false); + m.scaleX += dx0 * (1 - f) + dx1 * f; + m.scaleY += dy0 * (1 - f) + dy1 * f; + m.leadPt += dt0 * (1 - f) + dt1 * f; + return m; + } + + /// One output of a deformation kernel at frame `n` of `track`. + private static float deform(float[] track, int n, float[] speedK, float[] accelK, boolean unsigned) { + float sum = 0; + int taps = Math.max(speedK.length, accelK.length); + for (int k = 0; k < taps && n - k >= 0; k++) { + int i = n - k; + float v = velocity(track, i); + float a = (velocity(track, i + 1) - velocity(track, i - 1)) * TabGlassMotion.SAMPLE_HZ / 2f; + if (i == 0) { + a = (velocity(track, 1) - velocity(track, 0)) * TabGlassMotion.SAMPLE_HZ; + } + float sv = v < 0 ? -1f : (v > 0 ? 1f : 0f); + float in1 = unsigned ? Math.abs(v) / 1000f : v / 1000f; + float in2 = unsigned ? a * sv / 10000f : a / 10000f; + if (k < speedK.length) { + sum += speedK[k] * in1; + } + if (k < accelK.length) { + sum += accelK[k] * in2; + } + } + return sum; + } + + /// Central-difference velocity of `track` at frame `i`, in points per second. + private static float velocity(float[] track, int i) { + int last = track.length - 1; + if (last < 1) { + return 0; + } + if (i <= 0) { + return (track[1] - track[0]) * TabGlassMotion.SAMPLE_HZ; + } + if (i >= last) { + return (track[last] - track[last - 1]) * TabGlassMotion.SAMPLE_HZ; + } + return (track[i + 1] - track[i - 1]) * TabGlassMotion.SAMPLE_HZ / 2f; + } +} diff --git a/CodenameOne/src/com/codename1/ui/TabGlassMotion.java b/CodenameOne/src/com/codename1/ui/TabGlassMotion.java new file mode 100644 index 00000000000..ebd15bae4e0 --- /dev/null +++ b/CodenameOne/src/com/codename1/ui/TabGlassMotion.java @@ -0,0 +1,440 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Codename One in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ +package com.codename1.ui; + +/// The iOS 27 Liquid Glass tab selection motion, as UIKit plays it. +/// +/// Every number in this class was MEASURED, not tuned by eye. An instrumented +/// native app (scripts/fidelity-app/ios-native-ref/motion-probe) hosts a real +/// `UITabBarController` on the iOS 27 simulator, drives genuine taps through +/// XCUITest, and logs the presentation geometry of every layer under the tab bar +/// on every display frame. UIKit attaches no `CAAnimation` for this motion -- it +/// writes the layer values itself each frame -- so the per-frame log IS the curve. +/// The tables below are those curves resampled at 60 Hz from the moment the lens +/// starts to move; `scripts/fidelity-app/tools/tab-motion/` regenerates them from +/// a fresh capture. +/// +/// What UIKit does, channel by channel (lens = the selection capsule): +/// +/// - The lens centre travels on one normalized curve for every jump distance: +/// at the target after ~0.33 s, a 0.6% overshoot at ~0.38 s, settled by 0.6 s. +/// - On touch the lens LIFTS: its bounds grow by 16 pt in both directions, the +/// grey platter under it fades out (it becomes clear glass) and the accent copy +/// of the tab content seen through it is magnified by up to 16%. The lift is +/// released once the lens is within 3.5 pt of its target, and falls back on a +/// fixed curve while the platter fades back in. +/// - The lens deforms: a distance-independent stretch pulse (x up to 1.12, y down +/// to 0.84) leading the travel, then a squash on arrival whose depth is linear +/// in the distance travelled (x 0.96 after 64 pt, 0.85 after 258 pt), and a +/// small second wobble about a second in. +/// - The whole bar -- glass, content and lens together -- scales about its centre +/// by a pulse that adds ~8.7 pt to its width at 0.13 s and undershoots slightly. +/// - A white glow expands from the touch point across the bar and fades. +/// +/// Deformation is `E(t) + d * S(t)` for travel distance `d`; that fits every +/// captured jump from 64 to 258 pt to within 0.01 of scale. +/// +/// Pure data, no Display or Graphics dependency: `Tabs` resolves the geometry and +/// converts points to pixels, and TabGlassMotionTest pins the model against the +/// native capture. +final class TabGlassMotion { + /// Sample rate of every table below. + static final int SAMPLE_HZ = 60; + /// Height of the native floating tab bar; points convert to pixels by the + /// ratio of the theme's pill height to this. + static final float BAR_HEIGHT_PT = 62f; + /// How much the lens bounds grow, in both directions, at full lift. + static final float LIFT_PT = 16f; + /// Magnification of the accent content under the lens at full lift. + static final float CONTENT_MAGNIFICATION = 0.16f; + /// Remaining travel below which the lift is released. + static final float RELEASE_PT = 3.5f; + /// UIKit snaps the rising lift to 1 once it passes this value. + static final float LIFT_SNAP = 0.975f; + /// Diameter of the touch glow before it expands. + static final float GLOW_DIAMETER_PT = 93f; + + /// Normalized lens-centre travel 0..1 (all jump distances share it). + private static final float[] POSITION = { + 0.0000f, 0.0228f, 0.0905f, 0.1775f, 0.2886f, 0.3954f, 0.4970f, 0.5896f, 0.6715f, + 0.7421f, 0.8014f, 0.8504f, 0.8901f, 0.9191f, 0.9457f, 0.9638f, 0.9785f, 0.9886f, + 0.9957f, 1.0005f, 1.0035f, 1.0053f, 1.0061f, 1.0063f, 1.0060f, 1.0056f, 1.0050f, + 1.0043f, 1.0036f, 1.0027f, 1.0022f, 1.0005f, 1.0004f, 1.0002f, 1.0000f + }; + + /// Lift rise before release; also 1 - grey platter opacity until release. + private static final float[] LIFT_RISE = { + 0.0000f, 0.0522f, 0.1847f, 0.3270f, 0.4809f, 0.6046f, 0.7043f, 0.7818f, 0.8411f, + 0.8854f, 0.9178f, 0.9416f, 0.9586f, 0.9698f, 0.9780f, 0.9840f, 0.9883f, 0.9915f, + 0.9938f, 0.9955f, 0.9967f, 0.9976f, 0.9982f, 0.9987f, 0.9991f, 0.9993f, 0.9995f, + 0.9996f, 0.9997f, 1.0000f + }; + + /// Lift after release, indexed from the release frame. + private static final float[] LIFT_FALL = { + 1.0000f, 0.9333f, 0.7950f, 0.6426f, 0.5009f, 0.3815f, 0.2845f, 0.2094f, 0.1525f, + 0.1106f, 0.0788f, 0.0556f, 0.0395f, 0.0281f, 0.0000f + }; + + /// Grey platter opacity after release, indexed from the release frame. + private static final float[] PLATTER_RETURN = { + 0.0177f, 0.0411f, 0.1057f, 0.1919f, 0.2854f, 0.3785f, 0.4667f, 0.5477f, 0.6197f, + 0.6812f, 0.7360f, 0.7820f, 0.8208f, 0.8529f, 0.8800f, 0.9030f, 0.9210f, 0.9360f, + 0.9490f, 0.9590f, 0.9670f, 0.9729f, 0.9790f, 0.9829f, 0.9860f, 0.9889f, 0.9910f, + 0.9930f, 0.9950f, 1.0000f + }; + + /// Lens scaleX - 1, distance-independent part. + private static final float[] STRETCH_X = { + 0.0000f, 0.0000f, 0.0055f, 0.0184f, 0.0384f, 0.0604f, 0.0837f, 0.1028f, 0.1135f, + 0.1140f, 0.1093f, 0.1043f, 0.0986f, 0.0931f, 0.0848f, 0.0761f, 0.0659f, 0.0549f, + 0.0437f, 0.0328f, 0.0227f, 0.0134f, 0.0057f, -0.0007f, -0.0056f, -0.0098f, -0.0113f, + -0.0124f, -0.0126f, -0.0120f, -0.0109f, -0.0094f, -0.0077f, -0.0061f, -0.0045f, + -0.0030f, -0.0010f, 0.0005f, 0.0024f, 0.0035f, 0.0045f, 0.0054f, 0.0057f, 0.0055f, + 0.0054f, 0.0048f, 0.0042f, 0.0035f, 0.0021f, 0.0016f, 0.0020f, 0.0008f, 0.0003f, + -0.0001f, -0.0006f, -0.0009f, -0.0008f, -0.0006f, -0.0004f, -0.0002f, 0.0022f, 0.0067f, + 0.0098f, 0.0093f, 0.0077f, 0.0059f, 0.0044f, 0.0029f, 0.0015f, -0.0001f, -0.0021f, + -0.0039f, -0.0058f, -0.0077f, -0.0093f, -0.0106f, -0.0116f, -0.0122f, -0.0124f, + -0.0123f, -0.0119f, -0.0114f, -0.0107f, -0.0098f, -0.0089f, -0.0080f, -0.0070f, + -0.0060f, -0.0050f, -0.0041f, -0.0032f, -0.0023f, -0.0015f, -0.0011f, -0.0003f, + -0.0002f, 0.0000f + }; + + /// Lens scaleX - 1 per point of travel. + private static final float[] STRETCH_X_PER_PT = { + 0.0000000f, -0.0000001f, -0.0000001f, -0.0000003f, 0.0000000f, 0.0000014f, 0.0000011f, + 0.0000224f, 0.0000376f, 0.0000084f, -0.0000603f, -0.0001281f, -0.0001555f, -0.0001468f, + -0.0001004f, -0.0000470f, 0.0000066f, 0.0000440f, 0.0000571f, 0.0000444f, 0.0000084f, + -0.0000442f, -0.0001096f, -0.0001796f, -0.0002477f, -0.0003013f, -0.0003635f, + -0.0004053f, -0.0004351f, -0.0004533f, -0.0004613f, -0.0004595f, -0.0004497f, + -0.0004325f, -0.0004111f, -0.0003857f, -0.0003623f, -0.0003343f, -0.0003101f, + -0.0002786f, -0.0002474f, -0.0002169f, -0.0001844f, -0.0001508f, -0.0001221f, + -0.0000937f, -0.0000686f, -0.0000474f, -0.0000252f, -0.0000125f, -0.0000118f, + 0.0000034f, 0.0000077f, 0.0000101f, 0.0000124f, 0.0000123f, 0.0000091f, 0.0000053f, + 0.0000012f, -0.0000024f, 0.0000071f, 0.0000215f, 0.0000224f, 0.0000229f, 0.0000204f, + 0.0000195f, 0.0000175f, 0.0000163f, 0.0000130f, 0.0000094f, 0.0000069f, 0.0000024f, + -0.0000028f, -0.0000052f, -0.0000074f, -0.0000103f, -0.0000114f, -0.0000127f, + -0.0000134f, -0.0000135f, -0.0000132f, -0.0000119f, -0.0000107f, -0.0000094f, + -0.0000080f, -0.0000066f, -0.0000049f, -0.0000034f, -0.0000023f, -0.0000010f, + 0.0000001f, -0.0000003f, -0.0000001f, 0.0000015f, 0.0000017f, 0.0000013f, 0.0000000f + }; + + /// Lens scaleY - 1, distance-independent part. + private static final float[] STRETCH_Y = { + 0.0000f, 0.0000f, -0.0074f, -0.0249f, -0.0520f, -0.0817f, -0.1135f, -0.1413f, -0.1574f, + -0.1573f, -0.1489f, -0.1402f, -0.1317f, -0.1238f, -0.1129f, -0.1011f, -0.0868f, + -0.0716f, -0.0563f, -0.0412f, -0.0265f, -0.0124f, 0.0002f, 0.0109f, 0.0192f, 0.0261f, + 0.0281f, 0.0293f, 0.0288f, 0.0269f, 0.0242f, 0.0209f, 0.0174f, 0.0139f, 0.0105f, + 0.0076f, 0.0041f, 0.0012f, -0.0021f, -0.0041f, -0.0059f, -0.0075f, -0.0082f, -0.0081f, + -0.0079f, -0.0071f, -0.0063f, -0.0053f, -0.0034f, -0.0026f, -0.0027f, -0.0013f, + -0.0008f, -0.0002f, 0.0005f, 0.0012f, 0.0011f, 0.0008f, 0.0005f, 0.0002f, -0.0028f, + -0.0089f, -0.0130f, -0.0121f, -0.0098f, -0.0072f, -0.0051f, -0.0032f, -0.0013f, 0.0009f, + 0.0035f, 0.0060f, 0.0085f, 0.0112f, 0.0134f, 0.0151f, 0.0165f, 0.0172f, 0.0176f, + 0.0174f, 0.0168f, 0.0160f, 0.0150f, 0.0139f, 0.0125f, 0.0112f, 0.0098f, 0.0084f, + 0.0070f, 0.0057f, 0.0046f, 0.0033f, 0.0022f, 0.0016f, 0.0005f, 0.0003f, 0.0000f + }; + + /// Lens scaleY - 1 per point of travel. + private static final float[] STRETCH_Y_PER_PT = { + 0.0000000f, 0.0000001f, 0.0000001f, 0.0000005f, 0.0000000f, -0.0000019f, 0.0000010f, + -0.0000202f, -0.0000359f, -0.0000249f, 0.0000211f, 0.0000764f, 0.0000872f, 0.0000533f, + -0.0000259f, -0.0001097f, -0.0001924f, -0.0002409f, -0.0002491f, -0.0002207f, + -0.0001652f, -0.0000940f, -0.0000107f, 0.0000789f, 0.0001687f, 0.0002433f, 0.0003386f, + 0.0004095f, 0.0004668f, 0.0005101f, 0.0005386f, 0.0005534f, 0.0005560f, 0.0005485f, + 0.0005319f, 0.0005068f, 0.0004832f, 0.0004533f, 0.0004256f, 0.0003860f, 0.0003465f, + 0.0003062f, 0.0002638f, 0.0002177f, 0.0001783f, 0.0001372f, 0.0001027f, 0.0000722f, + 0.0000416f, 0.0000219f, 0.0000162f, -0.0000014f, -0.0000074f, -0.0000108f, -0.0000148f, + -0.0000159f, -0.0000122f, -0.0000070f, -0.0000014f, 0.0000035f, -0.0000090f, + -0.0000277f, -0.0000287f, -0.0000281f, -0.0000248f, -0.0000242f, -0.0000215f, + -0.0000191f, -0.0000149f, -0.0000109f, -0.0000070f, -0.0000014f, 0.0000055f, 0.0000079f, + 0.0000118f, 0.0000154f, 0.0000169f, 0.0000191f, 0.0000190f, 0.0000192f, 0.0000182f, + 0.0000169f, 0.0000151f, 0.0000122f, 0.0000120f, 0.0000094f, 0.0000071f, 0.0000044f, + 0.0000030f, 0.0000017f, -0.0000001f, -0.0000006f, -0.0000006f, -0.0000022f, -0.0000024f, + -0.0000018f, 0.0000000f + }; + + /// Lens centre lead in points along the travel direction, distance-independent part. + private static final float[] LEAD_PT = { + 0.0000f, 0.0007f, 0.2938f, 1.0074f, 2.1367f, 3.4290f, 4.8636f, 6.0673f, 6.7727f, + 7.3152f, 7.6047f, 7.3912f, 6.8652f, 6.3555f, 5.4543f, 4.5959f, 3.9845f, 3.3075f, + 2.7106f, 2.2127f, 1.8042f, 1.4686f, 1.2083f, 1.0004f, 0.8345f, 0.7228f, 0.5881f, + 0.4936f, 0.3948f, 0.3138f, 0.2226f, 0.1479f, 0.0715f, 0.0112f, -0.0638f, -0.1546f, + -0.2847f, -0.3548f, -0.4029f, -0.3828f, -0.3557f, -0.3253f, -0.2810f, -0.2326f, + -0.2015f, -0.1652f, -0.1288f, -0.1034f, -0.0651f, -0.0673f, -0.1023f, -0.0594f, + -0.0480f, -0.0359f, -0.0157f, 0.0479f, 0.0616f, 0.0662f, 0.0745f, 0.0675f, 0.2305f, + 0.6303f, 0.8126f, 0.8855f, 0.9489f, 0.9535f, 0.9188f, 0.8523f, 0.8000f, 0.7517f, + 0.7266f, 0.7139f, 0.7224f, 0.7269f, 0.7335f, 0.7476f, 0.7428f, 0.7294f, 0.7084f, + 0.6744f, 0.6362f, 0.5815f, 0.5427f, 0.4898f, 0.4272f, 0.3580f, 0.2872f, 0.2241f, + 0.1722f, 0.1406f, 0.1024f, 0.0708f, 0.0599f, 0.0344f, -0.0121f, -0.0112f, -0.0002f, + 0.0000f + }; + + /// Lens centre lead per point of travel. + private static final float[] LEAD_PER_PT = { + 0.0000000f, -0.0000043f, 0.0000178f, 0.0000811f, 0.0002187f, 0.0004269f, 0.0004713f, + 0.0020937f, 0.0031627f, -0.0016846f, -0.0072994f, -0.0096333f, -0.0114983f, -0.0147134f, + -0.0160013f, -0.0165079f, -0.0188178f, -0.0182175f, -0.0162945f, -0.0132486f, + -0.0093188f, -0.0048343f, -0.0002613f, 0.0041333f, 0.0080513f, 0.0111611f, 0.0141693f, + 0.0162235f, 0.0178172f, 0.0187634f, 0.0193351f, 0.0194228f, 0.0192204f, 0.0186776f, + 0.0180465f, 0.0173706f, 0.0168869f, 0.0157468f, 0.0142691f, 0.0122342f, 0.0102847f, + 0.0084948f, 0.0068241f, 0.0052873f, 0.0041313f, 0.0030503f, 0.0021473f, 0.0014806f, + 0.0007969f, 0.0004478f, 0.0006007f, -0.0000826f, -0.0003399f, -0.0005395f, -0.0007964f, + -0.0012456f, -0.0013857f, -0.0014389f, -0.0014865f, -0.0014572f, -0.0032151f, + -0.0070253f, -0.0086748f, -0.0092016f, -0.0097185f, -0.0096760f, -0.0092408f, + -0.0085522f, -0.0079977f, -0.0075674f, -0.0073058f, -0.0072455f, -0.0073654f, + -0.0074485f, -0.0075856f, -0.0077260f, -0.0077119f, -0.0076050f, -0.0074005f, + -0.0070310f, -0.0066410f, -0.0060947f, -0.0056725f, -0.0050960f, -0.0044412f, + -0.0037326f, -0.0030212f, -0.0023771f, -0.0018567f, -0.0015059f, -0.0011018f, + -0.0007806f, -0.0006532f, -0.0003938f, 0.0000630f, 0.0000641f, 0.0000014f, 0.0000000f + }; + + /// Whole-bar width growth in points; the bar scales uniformly by (w + grow) / w. + private static final float[] BAR_GROW_PT = { + 0.0000f, 0.5275f, 2.0830f, 4.0540f, 6.4835f, 8.1467f, 8.7335f, 8.5351f, 7.7808f, + 6.6930f, 5.4604f, 4.2033f, 3.0110f, 2.0482f, 1.0941f, 0.4194f, -0.0029f, -0.4939f, + -0.7085f, -0.8119f, -0.8255f, -0.7726f, -0.6875f, -0.5753f, -0.4631f, -0.2694f, + -0.0007f, 0.0000f + }; + + /// Touch glow diameter as a multiple of GLOW_DIAMETER_PT. + private static final float[] GLOW_SCALE = { + 1.0000f, 1.0000f, 1.0000f, 1.0000f, 1.0000f, 1.0576f, 1.2008f, 1.3945f, 1.6152f, + 1.8456f, 2.0738f, 2.2927f, 2.4980f, 2.6720f, 2.8555f, 3.0050f, 3.1469f, 3.2668f, + 3.3720f, 3.4634f, 3.5429f, 3.6114f, 3.6704f, 3.7210f, 3.7641f, 3.8005f, 3.8323f, + 3.8589f, 3.8815f, 3.9005f, 3.9166f, 3.9302f, 3.9416f, 3.9511f, 3.9592f + }; + + /// Touch glow mask opacity. + private static final float[] GLOW_MASK_OPACITY = { + 0.0000f, 0.0657f, 0.1654f, 0.2236f, 0.2593f, 0.2716f, 0.2700f, 0.2590f, 0.2426f, + 0.2232f, 0.2024f, 0.1814f, 0.1614f, 0.1438f, 0.1248f, 0.1091f, 0.0942f, 0.0812f, + 0.0699f, 0.0600f, 0.0512f, 0.0440f, 0.0370f, 0.0318f, 0.0270f, 0.0230f, 0.0190f, + 0.0160f, 0.0139f, 0.0110f, 0.0100f, 0.0080f, 0.0070f, 0.0060f, 0.0000f + }; + + /// Touch glow layer opacity. + private static final float[] GLOW_LAYER_OPACITY = { + 0.0000f, 0.1953f, 0.4909f, 0.6637f, 0.7701f, 0.8064f, 0.8010f, 0.7689f, 0.7204f, + 0.6627f, 0.6012f, 0.5393f, 0.4792f, 0.4268f, 0.3709f, 0.3243f, 0.2797f, 0.2416f, + 0.2078f, 0.1783f, 0.1523f, 0.1300f, 0.1104f, 0.0937f, 0.0794f, 0.0674f, 0.0569f, + 0.0480f, 0.0401f, 0.0340f, 0.0282f, 0.0240f, 0.0200f, 0.0170f, 0.0140f, 0.0120f, + 0.0100f, 0.0080f, 0.0070f, 0.0060f, 0.0000f + }; + + // ---- outputs ---- + /// Lens centre travel, 0 at the source and 1 at the target (overshoots slightly). + float position; + /// Lift 0..1: bounds grow by LIFT_PT * lift, content magnifies by + /// CONTENT_MAGNIFICATION * lift. + float lift; + /// Opacity of the grey platter under the lens, 1 at rest. + float platterOpacity; + /// Magnification of the accent content seen through the lens. + float contentScale; + /// Lens deformation about its centre. + float scaleX; + float scaleY; + /// Lens centre offset in points along the travel direction (signed). + float leadPt; + /// Width the whole bar grows by, in points. + float barGrowPt; + /// Touch glow diameter scale and opacity (0 = no glow). + float glowScale; + float glowOpacity; + + private TabGlassMotion() { + } + + /// Duration of the whole motion in milliseconds, the late wobble included. + static int durationMs() { + int n = 0; + float[][] all = {POSITION, LIFT_RISE, LIFT_FALL, PLATTER_RETURN, STRETCH_X, STRETCH_X_PER_PT, + STRETCH_Y, STRETCH_Y_PER_PT, LEAD_PT, LEAD_PER_PT, BAR_GROW_PT, GLOW_SCALE, + GLOW_MASK_OPACITY, GLOW_LAYER_OPACITY}; + for (float[] a : all) { + if (a.length > n) { + n = a.length; + } + } + return (n - 1) * 1000 / SAMPLE_HZ; + } + + /// The resting frame: lens on its cell, no deformation, no glow. + static TabGlassMotion rest() { + TabGlassMotion m = new TabGlassMotion(); + m.position = 1f; + m.platterOpacity = 1f; + m.contentScale = 1f; + m.scaleX = 1f; + m.scaleY = 1f; + m.glowScale = 1f; + return m; + } + + /// Linear interpolation into a 60 Hz table; clamps to the first/last sample. + static float sample(float[] table, float seconds) { + float x = seconds * SAMPLE_HZ; + if (x <= 0) { + return table[0]; + } + int i = (int) x; + if (i >= table.length - 1) { + return table[table.length - 1]; + } + float f = x - i; + return table[i] * (1 - f) + table[i + 1] * f; + } + + /// Seconds after the start at which the lift is released for a jump of + /// `travelPt`. The first FALLING frame is the first one whose remaining + /// distance is under RELEASE_PT, but never before the frame after the lift has + /// snapped to full (a short jump waits for the lift); the release instant is + /// the frame before it, because UIKit already shows a falling value there. + static float releaseSeconds(float travelPt) { + float d = Math.abs(travelPt); + int snap = 0; + while (snap < LIFT_RISE.length - 1 && LIFT_RISE[snap] < LIFT_SNAP) { + snap++; + } + for (int i = 1; i < POSITION.length; i++) { + if (d * (1f - POSITION[i]) < RELEASE_PT) { + return (Math.max(i, snap + 1) - 1) / (float) SAMPLE_HZ; + } + } + return (POSITION.length - 1) / (float) SAMPLE_HZ; + } + + /// Computes the frame `elapsedMs` after the selection started, for a jump of + /// `travelPt` points (signed: positive = towards larger x). + static TabGlassMotion at(float elapsedMs, float travelPt) { + if (elapsedMs >= durationMs()) { + return rest(); + } + TabGlassMotion m = new TabGlassMotion(); + float t = elapsedMs < 0 ? 0 : elapsedMs / 1000f; + float d = Math.abs(travelPt); + float sign = travelPt < 0 ? -1f : 1f; + m.position = sample(POSITION, t); + float release = releaseSeconds(travelPt); + if (t < release) { + float u = sample(LIFT_RISE, t); + m.lift = u >= LIFT_SNAP ? 1f : u; + m.platterOpacity = 1f - u; + } else { + float s = t - release; + m.lift = sample(LIFT_FALL, s); + m.platterOpacity = sample(PLATTER_RETURN, s); + } + m.contentScale = 1f + CONTENT_MAGNIFICATION * m.lift; + m.scaleX = 1f + sample(STRETCH_X, t) + d * sample(STRETCH_X_PER_PT, t); + m.scaleY = 1f + sample(STRETCH_Y, t) + d * sample(STRETCH_Y_PER_PT, t); + m.leadPt = sign * (sample(LEAD_PT, t) + d * sample(LEAD_PER_PT, t)); + m.barGrowPt = sample(BAR_GROW_PT, t); + m.glowScale = sample(GLOW_SCALE, t); + m.glowOpacity = sample(GLOW_MASK_OPACITY, t) * sample(GLOW_LAYER_OPACITY, t); + return m; + } + + /// Template time of the touch-up the tap tables were captured with; their + /// release wobble sits WOBBLE_START_S after it. + static final float TAP_UP_S = 0.048f; + /// Shortest jump in the tap captures (one tab of a three-tab bar). + static final float SHORTEST_CAPTURED_JUMP_PT = 64f; + + /// The selection frame for a real press that may outlast a tap: `upS` is the + /// touch-up in seconds after the press (negative while the finger is down) and + /// `releaseS` the lift release (see releaseForPress). Everything a press does + /// differently from the captured quick tap: + /// + /// - the lift holds while the finger is down, then falls from `releaseS`; + /// - the whole-bar growth is the press spring (TabGlassGesture.barGrowPt) + /// rather than the tap's recorded pulse; + /// - the release wobble moves from the tap's touch-up to the real one; + /// - the touch glow waits, at its tap-up state, until the finger lifts. + /// + /// For a quick tap this is the captured motion to within the spring fit. + static TabGlassMotion held(float elapsedS, float travelPt, float upS, float releaseS) { + TabGlassMotion m = new TabGlassMotion(); + float t = elapsedS < 0 ? 0 : elapsedS; + float d = Math.abs(travelPt); + float sign = travelPt < 0 ? -1f : 1f; + m.position = sample(POSITION, t); + if (upS < 0 || t < releaseS) { + float u = sample(LIFT_RISE, t); + m.lift = u >= LIFT_SNAP ? 1f : u; + m.platterOpacity = 1f - u; + } else { + float s = t - releaseS; + m.lift = sample(LIFT_FALL, s); + m.platterOpacity = sample(PLATTER_RETURN, s); + } + m.contentScale = 1f + CONTENT_MAGNIFICATION * m.lift; + float tapWobble = t - TAP_UP_S; + // The stretch pulse leads the TRAVEL: a press that does not move the lens + // (the selected tab) has none, only the release wobble. Captured jumps start + // at one tab (64 pt); shorter ones fade the pulse in. + float lead = Math.min(1f, d / SHORTEST_CAPTURED_JUMP_PT); + m.scaleX = 1f + lead * sample(STRETCH_X, t) + d * sample(STRETCH_X_PER_PT, t) + - lead * TabGlassGesture.wobble(TabGlassGesture.WOBBLE_X, tapWobble); + m.scaleY = 1f + lead * sample(STRETCH_Y, t) + d * sample(STRETCH_Y_PER_PT, t) + - lead * TabGlassGesture.wobble(TabGlassGesture.WOBBLE_Y, tapWobble); + m.leadPt = sign * lead * (sample(LEAD_PT, t) - TabGlassGesture.wobble(TabGlassGesture.WOBBLE_TX, tapWobble)) + + sign * d * sample(LEAD_PER_PT, t); + if (upS >= 0) { + m.scaleX += TabGlassGesture.wobble(TabGlassGesture.WOBBLE_X, t - upS); + m.scaleY += TabGlassGesture.wobble(TabGlassGesture.WOBBLE_Y, t - upS); + m.leadPt += TabGlassGesture.wobble(TabGlassGesture.WOBBLE_TX, t - upS); + } + float glowT; + if (t <= TAP_UP_S) { + glowT = t; + } else if (upS < 0 || t < upS) { + glowT = TAP_UP_S; + } else { + glowT = TAP_UP_S + t - Math.max(upS, TAP_UP_S); + } + m.glowScale = sample(GLOW_SCALE, glowT); + m.glowOpacity = sample(GLOW_MASK_OPACITY, glowT) * sample(GLOW_LAYER_OPACITY, glowT); + return m; + } + + /// The normalized lens-centre travel `s` seconds into a selection. + static float position(float s) { + return sample(POSITION, s); + } + + /// When a press on a jump of `travelPt` releases its lift: where the tap would + /// (releaseSeconds), but never while the finger is still down. + static float releaseForPress(float travelPt, float upS) { + return Math.max(releaseSeconds(travelPt), upS); + } + + /// Seconds after the press at which a held press has fully played out. + static float heldDurationS(float upS, float releaseS) { + float tables = durationMs() / 1000f; + float fall = releaseS + (Math.max(LIFT_FALL.length, PLATTER_RETURN.length) - 1) / (float) SAMPLE_HZ; + float wobble = upS + TabGlassGesture.WOBBLE_START_S + + (TabGlassGesture.WOBBLE_X.length - 1) / (float) SAMPLE_HZ; + return Math.max(tables, Math.max(fall, wobble)); + } +} diff --git a/CodenameOne/src/com/codename1/ui/Tabs.java b/CodenameOne/src/com/codename1/ui/Tabs.java index 48f8edee5ba..4ef066ce97d 100644 --- a/CodenameOne/src/com/codename1/ui/Tabs.java +++ b/CodenameOne/src/com/codename1/ui/Tabs.java @@ -35,8 +35,10 @@ import com.codename1.ui.layouts.FlowLayout; import com.codename1.ui.layouts.GridLayout; import com.codename1.ui.layouts.Layout; +import com.codename1.ui.plaf.GlassLensBlend; import com.codename1.ui.plaf.Style; import com.codename1.ui.plaf.UIManager; +import com.codename1.ui.plaf.VibrancyMatrix; import com.codename1.ui.util.EventDispatcher; /// A component that lets the user switch between a group of components by @@ -171,6 +173,37 @@ public class Tabs extends Container { private int indicatorToX; private int indicatorToW; + // ---- iOS 27 Liquid Glass selection motion (tabsMorphPreset "ios27") ---- + // The motion is MEASURED from UIKit, see TabGlassMotion. paintGlassTabs draws + // the whole bar -- glass, grey platter, tab content and lens -- from one + // time-based frame, and reveals an ACCENT copy of the tabs through the lens + // (Button.GLASS_PAINT_SELECTED), so the selection colour travels with the glass + // the way UIKit composites its SelectedContentView under a lens-shaped hole. + private long glassMotionStart = -1; + private int glassTargetIndex = -1; + // Lens centre and width at the start and end of the motion, in the inner-x + // space capsuleCellBounds answers in. Floats, so an interrupted motion restarts + // from exactly where the lens is drawn. + private float glassFromCenter; + private float glassFromW; + private float glassToCenter; + private float glassToW; + // Where the last press landed, tabsContainer-relative (-1 = unknown); the touch + // glow expands from there. + private int glassPressX = -1; + private int glassPressY = -1; + private int glassTouchX = -1; + private int glassTouchY = -1; + // The live press driving the motion (hold, scrub, release), or null for a + // selection made in code, which plays the captured tap motion as is. + private TabGlassGesture glassGesture; + // Where the press driving glassGesture landed, tabsContainer-relative x. + private int glassGesturePressX = -1; + // TEST-ONLY: when >= 0 the glass motion is frozen this many ms after its start. + private int glassTestElapsedMs = -1; + private static final int GLASS_TEST_MS_PER_PERCENT = 8; + private static final long GLASS_MAX_PRESS_MS = 60000; + /// Creates an empty `TabbedPane` with a default /// tab placement of `Component.TOP`. public Tabs() { @@ -196,8 +229,23 @@ public Tabs(int tabP) { // override is a no-op extra call and visually indistinguishable from // a plain Container. tabsContainer = new Container() { + @Override + void paintBackgroundLayer(Graphics g) { + if (isGlassMotion()) { + paintGlassBarBackground(g); + return; + } + super.paintBackgroundLayer(g); + } + @Override public void paint(Graphics g) { + if (isGlassMotion()) { + layoutForPaint(); + paintGlassTabs(g); + paintBottomDivider(g); + return; + } super.paint(g); // The iOS 26 selection "drop" is a LENS painted OVER the bar + the // (black) glyphs -- it magnifies, chromatically aberrates and @@ -232,7 +280,7 @@ public void paint(Graphics g) { // Forcing the margin to 0 here defeated the float. The host below is a // transparent spacer that only absorbs the safe-area inset; the pill // itself paints the glass, so the host must not tint behind it. - tabsContainerHost = new Container(new BorderLayout()); + tabsContainerHost = new Container(new GlassHostLayout()); // Dedicated UIID so a theme can tune the host (e.g. a negative bottom // margin to pull the floating pill closer to the home indicator). // Defaults to transparent so only the pill paints the glass. @@ -393,6 +441,27 @@ protected void initComponent() { @Override public boolean animate() { boolean b = super.animate(); + if (glassMotionStart >= 0) { + // One repaint of the bar per tick while the measured motion runs, then ONE + // more once it is over so the resting frame replaces the last animated one. + // Not `b = true`: that asks the form to repaint the whole Tabs as well, so + // every frame of the motion was painted twice. + tabsContainer.repaint(); + long elapsed = System.currentTimeMillis() - glassMotionStart; + if (glassGesture != null && glassGesture.getUpS() < 0 && elapsed > GLASS_MAX_PRESS_MS) { + // The release never reached us (listeners detached mid-press): + // let the lens settle rather than hold it lifted forever. + glassGesture.up(elapsed / 1000f); + } + boolean over = glassGesture != null ? glassGesture.isFinished(elapsed / 1000f) + : elapsed >= TabGlassMotion.durationMs(); + if (over) { + glassMotionStart = -1; + glassTargetIndex = -1; + glassGesture = null; + deregisterAnimatedInternal(); + } + } // Indicator-animation tick: redraw the tab bar each frame while // the motion is in flight. We let the existing super.animate / // slide motion control deregistration; the indicator motion is @@ -469,7 +538,8 @@ void deregisterAnimatedInternal() { // indicator morph are done. Previously a finished 200ms slide deregistered the // animation while the 550ms morph was still in flight, freezing the drop mid-travel. if ((slideToDestMotion == null || slideToDestMotion.isFinished()) - && (indicatorAnimMotion == null || indicatorAnimMotion.isFinished())) { + && (indicatorAnimMotion == null || indicatorAnimMotion.isFinished()) + && glassMotionStart < 0) { TopLevelContainer f = getTopLevelContainer(); if (f != null) { TopLevelSupport.deregisterAnimatedInternal(f, this); @@ -1456,6 +1526,10 @@ private void startIndicatorAnimation(int fromIndex, int toIndex) { || toIndex < 0 || toIndex >= tabsContainer.getComponentCount()) { return; } + if (isGlassMotion()) { + startGlassMotion(fromIndex, toIndex); + return; + } Component fromTab = tabsContainer.getComponentAt(fromIndex); Component toTab = tabsContainer.getComponentAt(toIndex); // The selection capsule fills the whole CELL (and hugs the pill edge for the @@ -1543,6 +1617,9 @@ void paintBottomDivider(Graphics g) { /// The thin frost rim left around the selection capsule (tabSelInsetMm, default a hair). private int selectionCapsuleInsetPx() { + if (isGlassMotion()) { + return Math.round(glassPx(glassConstantPt("tabsGlassInsetPt", GLASS_INSET_PT))); + } float insetMm = 0.1f; String iv = getUIManager().getThemeConstant("tabSelInsetMm", null); if (iv != null) { @@ -1564,6 +1641,15 @@ private void capsuleCellBounds(int index, int inset, int[] out) { int n = tabsContainer.getComponentCount(); Component t = tabsContainer.getComponentAt(index); int padLeft = tabsContainer.getInnerX() - tabsContainer.getX(); + if (tabsContainer.getLayout() instanceof GlassTabsLayout) { + // UITabBar's resting lens: the tab's own button bounds, centred on the + // tab, not the cell between its neighbours. + float centre = t.getX() + t.getWidth() / 2f; + float half = glassLensWidth / 2f; + out[0] = Math.round(centre - half) - padLeft; + out[1] = Math.round(centre + half) - Math.round(centre - half); + return; + } int padRight = (tabsContainer.getX() + tabsContainer.getWidth()) - (tabsContainer.getInnerX() + tabsContainer.getInnerWidth()); int left; @@ -1573,14 +1659,17 @@ private void capsuleCellBounds(int index, int inset, int[] out) { // padding), so the midpoint branches must subtract padLeft to land in the // same inner-x space as the first/last branches -- otherwise every non-first // tab's capsule drifts right by padLeft (the first tab compensated, hiding it). + // With the glass motion the container's padding also holds the reserved motion + // slack, which lies OUTSIDE the visible pill. + int slack = glassSlackXPx(); if (index <= 0) { - left = -padLeft + inset; // pill outer left edge + left = -padLeft + slack + inset; // pill outer left edge } else { Component p = tabsContainer.getComponentAt(index - 1); left = (p.getX() + p.getWidth() + t.getX()) / 2 - padLeft; // midpoint to previous tab } if (index >= n - 1) { - right = tabsContainer.getInnerWidth() + padRight - inset; // pill outer right edge + right = tabsContainer.getInnerWidth() + padRight - slack - inset; // pill outer right edge } else { Component nx = tabsContainer.getComponentAt(index + 1); right = (t.getX() + t.getWidth() + nx.getX()) / 2 - padLeft; // midpoint to next tab @@ -1598,6 +1687,13 @@ public void setMorphTestState(int fromIndex, int toIndex, int value) { if (tabsContainer == null || tabsContainer.getComponentCount() == 0) { return; } + if (isGlassMotion()) { + // The measured ios27 motion is time based: progress 0..100 maps onto its + // first 800 ms (lift, travel, arrival squash), so a progress-frame + // capture spec keeps working; setGlassMotionTestTime takes exact times. + setGlassMotionTestTime(fromIndex, toIndex, value < 0 ? -1 : value * GLASS_TEST_MS_PER_PERCENT); + return; + } if (value >= 0) { int cInset = selectionCapsuleInsetPx(); int[] from = new int[2]; @@ -1614,6 +1710,935 @@ public void setMorphTestState(int fromIndex, int toIndex, int value) { tabsContainer.repaint(); } + /// TEST-ONLY hook for the measured iOS 27 motion (`tabsMorphPreset: "ios27"`): + /// freezes the selection change from `fromIndex` to `toIndex` exactly + /// `elapsedMs` milliseconds after it started, so a capture tool can render + /// deterministic frames of the motion (lens, bar scale, platter, accent content + /// and glow). Pass `elapsedMs` < 0 to clear and resume normal behaviour. Has no + /// effect unless the theme selects the ios27 motion. + /// + /// #### Parameters + /// + /// - `fromIndex`: the tab the selection leaves + /// + /// - `toIndex`: the tab the selection moves to + /// + /// - `elapsedMs`: milliseconds since the selection started, or < 0 to clear + public void setGlassMotionTestTime(int fromIndex, int toIndex, int elapsedMs) { + if (tabsContainer == null || tabsContainer.getComponentCount() == 0 || !isGlassMotion()) { + return; + } + if (elapsedMs >= 0) { + int inset = selectionCapsuleInsetPx(); + int[] cb = new int[2]; + capsuleCellBounds(fromIndex, inset, cb); + glassFromCenter = cb[0] + cb[1] / 2f; + glassFromW = cb[1]; + capsuleCellBounds(toIndex, inset, cb); + glassToCenter = cb[0] + cb[1] / 2f; + glassToW = cb[1]; + activeComponent = toIndex; + } + glassTestElapsedMs = elapsedMs; + tabsContainer.repaint(); + } + + /// True when the theme selects the measured iOS 27 Liquid Glass selection motion + /// (`tabsMorphPreset: "ios27"` together with `tabsSelectionCapsuleBool`). + boolean isGlassMotion() { + return selectionCapsule && tabsContainer != null + && "ios27".equals(getUIManager().getThemeConstant("tabsMorphPreset", "ios26")); + } + + /// The motion slack the theme reserved around the pill, in pixels. The bar + /// scales, and the lifted lens overshoots its ends by up to ~11 pt, so the + /// theme widens TabsContainer's padding by this much (and narrows its margin to + /// match) and names the amount here: the pill is the bounds minus the slack, + /// and the whole motion stays inside the component's own repaint region. + private int glassSlackXPx() { + return isGlassMotion() ? mmConstantPx("tabsGlassSlackXMm") : 0; + } + + private int glassSlackYPx() { + return isGlassMotion() ? mmConstantPx("tabsGlassSlackYMm") : 0; + } + + private int mmConstantPx(String name) { + String v = getUIManager().getThemeConstant(name, null); + if (v == null) { + return 0; + } + try { + return Display.getInstance().convertToPixels(Float.parseFloat(v.trim())); + } catch (NumberFormatException ignore) { + return 0; // malformed constant -> no slack + } + } + + /// Remembers where a press landed on the tab bar, so the touch glow of the + /// selection it triggers expands from the finger like the native one. + void recordGlassPress(int x, int y) { + if (tabsContainer != null && tabsContainer.visibleBoundsContains(x, y)) { + glassPressX = x - tabsContainer.getAbsoluteX(); + glassPressY = y - tabsContainer.getAbsoluteY(); + // UIKit moves the lens on touch-DOWN; the selection itself still happens + // on release, and finds this motion already in flight to its target. + if (isGlassMotion()) { + Component target = tabsContainer.getComponentAt(x, y); + int idx = target == null ? -1 : tabsContainer.getComponentIndex(target); + if (idx >= 0) { + // A press on the selected tab lifts and pulses the lens in place. + int pressX = glassPressX; + startGlassMotion(activeComponent, idx, true); + glassGesturePressX = pressX; + } + } + } else { + glassPressX = -1; + glassPressY = -1; + } + } + + /// True while the glass motion is travelling to tab `index` (package-private, + /// for tests). + boolean isGlassMotionRunningTo(int index) { + return glassMotionStart >= 0 && glassTargetIndex == index; + } + + /// Points to pixels for the glass geometry (the pill height over the native + /// bar's 62 pt). + private float glassPtPx() { + int ph = tabsContainer.getHeight() - 2 * glassSlackYPx(); + return ph > 0 ? ph / TabGlassMotion.BAR_HEIGHT_PT : 1f; + } + + /// The finger moved along the bar during a glass press: once it has travelled + /// far enough the lens follows it (a scrub). + void recordGlassDrag(int x) { + TabGlassGesture gg = glassGesture; + if (gg == null || glassMotionStart < 0 || gg.getUpS() >= 0 || glassGesturePressX < 0) { + return; + } + float s = (System.currentTimeMillis() - glassMotionStart) / 1000f; + int rel = x - tabsContainer.getAbsoluteX(); + if (!gg.isScrubbing()) { + if (Math.abs(rel - glassGesturePressX) < Display.getInstance().convertToPixels(1.5f)) { + return; + } + int inset = selectionCapsuleInsetPx(); + int[] cb = new int[2]; + int n = tabsContainer.getComponentCount(); + capsuleCellBounds(0, inset, cb); + float first = cb[0] + cb[1] / 2f; + capsuleCellBounds(n - 1, inset, cb); + float last = cb[0] + cb[1] / 2f; + float ptPx = glassPtPx(); + gg.startScrub(s, first / ptPx, last / ptPx); + } + gg.finger(s, fingerInnerX(rel) / glassPtPx()); + } + + /// A tabsContainer-relative x in the inner-x space of capsuleCellBounds. + private float fingerInnerX(int rel) { + return rel + tabsContainer.getX() - tabsContainer.getInnerX(); + } + + /// Touch-up of a glass press. A scrub selects the tab nearest the finger (a + /// tie keeps the current tab) and the lens settles there. + void recordGlassRelease(int x) { + TabGlassGesture gg = glassGesture; + if (gg == null || glassMotionStart < 0 || gg.getUpS() >= 0) { + return; + } + float s = (System.currentTimeMillis() - glassMotionStart) / 1000f; + if (!gg.isScrubbing()) { + gg.up(s); + return; + } + float ptPx = glassPtPx(); + float fx = fingerInnerX(x - tabsContainer.getAbsoluteX()); + gg.finger(s, fx / ptPx); + // The tab whose cell holds the finger -- for equal cells, the centre nearest + // it (natively a finger exactly between two keeps the current tab). + int inset = selectionCapsuleInsetPx(); + int[] cb = new int[2]; + int n = tabsContainer.getComponentCount(); + int best = n - 1; + for (int i = 0; i < n; i++) { + capsuleCellBounds(i, inset, cb); + float right = cb[0] + cb[1]; + if (fx < right || i == n - 1) { + best = i; + if (fx == right && i == activeComponent - 1) { + best = activeComponent; + } + break; + } + } + capsuleCellBounds(best, inset, cb); + glassToCenter = cb[0] + cb[1] / 2f; + glassToW = cb[1]; + glassTargetIndex = best; + gg.settleTo(glassToCenter / ptPx); + gg.up(s); + if (best != activeComponent && best >= 0) { + setSelectedIndex(best); + } + } + + /// After a release has been processed: a press that started the lens towards a + /// tab but did not select it (released elsewhere, turned into a swipe) sends the + /// lens back to the selected tab. + void checkGlassPressOutcome() { + if (glassGesture != null && glassGesture.isScrubbing()) { + return; + } + if (glassMotionStart >= 0 && glassTargetIndex >= 0 && glassTargetIndex != activeComponent + && (slideToDestMotion == null || active != glassTargetIndex)) { + startGlassMotion(glassTargetIndex, activeComponent); + } + } + + private void startGlassMotion(int fromIndex, int toIndex) { + startGlassMotion(fromIndex, toIndex, false); + } + + /// `press` starts a live gesture (hold, scrub) instead of the captured tap. + private void startGlassMotion(int fromIndex, int toIndex, boolean press) { + if (!press && glassMotionStart >= 0 && toIndex == glassTargetIndex) { + // Same target already in flight (the content slide re-selecting it); let + // it finish rather than restarting the lift. + return; + } + int inset = selectionCapsuleInsetPx(); + int[] cb = new int[2]; + if (glassMotionStart >= 0) { + // Interrupted: restart from where the lens is drawn right now. + GlassFrame f = glassFrame(); + glassFromCenter = f.centerInner; + glassFromW = f.restWidth; + } else { + capsuleCellBounds(fromIndex, inset, cb); + glassFromCenter = cb[0] + cb[1] / 2f; + glassFromW = cb[1]; + } + capsuleCellBounds(toIndex, inset, cb); + glassToCenter = cb[0] + cb[1] / 2f; + glassToW = cb[1]; + glassTargetIndex = toIndex; + if (press) { + float ptPx = glassPtPx(); + glassGesture = new TabGlassGesture(glassFromCenter / ptPx, glassToCenter / ptPx); + } else { + glassGesture = null; + } + glassTouchX = glassPressX; + glassTouchY = glassPressY; + glassPressX = -1; + glassPressY = -1; + glassMotionStart = System.currentTimeMillis(); + TopLevelContainer f = getTopLevelContainer(); + if (f != null) { + TopLevelSupport.registerAnimatedInternal(f, this); + } + tabsContainer.repaint(); + } + + /// One resolved frame of the glass selection, in tabsContainer PARENT + /// coordinates (the space getX()/getY() answer in), before the bar scale. + static final class GlassFrame { + TabGlassMotion motion; + float ptPx; + int pillX; + int pillY; + int pillW; + int pillH; + float barScale; + float pivotX; + float pivotY; + float centerInner; // lens centre in the capsuleCellBounds inner-x space + float restWidth; // resting lens width at this point of the travel + float lensX; + float lensY; + float lensW; + float lensH; + float glowX; + float glowY; + } + + private GlassFrame glassFrame() { + GlassFrame f = new GlassFrame(); + Container tc = tabsContainer; + int sx = glassSlackXPx(); + int sy = glassSlackYPx(); + f.pillX = tc.getX() + sx; + f.pillY = tc.getY() + sy; + f.pillW = tc.getWidth() - 2 * sx; + f.pillH = tc.getHeight() - 2 * sy; + // Native geometry is expressed in points on a 62 pt tall bar; deriving the + // scale from the pill makes the motion follow the theme's bar height. + f.ptPx = f.pillH > 0 ? f.pillH / TabGlassMotion.BAR_HEIGHT_PT : 1f; + int inset = selectionCapsuleInsetPx(); + float restH = f.pillH - 2 * inset; + boolean live = glassTestElapsedMs >= 0 || glassMotionStart >= 0; + float fromC; + float fromW; + float toC; + float toW; + if (live) { + fromC = glassFromCenter; + fromW = glassFromW; + toC = glassToCenter; + toW = glassToW; + } else { + int[] cb = new int[2]; + int idx = activeComponent < 0 ? 0 : Math.min(activeComponent, tc.getComponentCount() - 1); + capsuleCellBounds(idx, inset, cb); + fromC = cb[0] + cb[1] / 2f; + fromW = cb[1]; + toC = fromC; + toW = fromW; + } + float travelPt = (toC - fromC) / f.ptPx; + TabGlassMotion m; + float gestureCentre = Float.NaN; + if (glassTestElapsedMs >= 0) { + m = TabGlassMotion.at(glassTestElapsedMs, travelPt); + } else if (glassMotionStart >= 0 && glassGesture != null) { + float[] c = new float[1]; + m = glassGesture.at((System.currentTimeMillis() - glassMotionStart) / 1000f, c); + if (glassGesture.isScrubbing()) { + gestureCentre = c[0] * f.ptPx; + } + } else if (glassMotionStart >= 0) { + m = TabGlassMotion.at(System.currentTimeMillis() - glassMotionStart, travelPt); + } else { + m = TabGlassMotion.rest(); + } + f.motion = m; + float p = m.position; + float pw = p < 0 ? 0 : (p > 1 ? 1 : p); + f.centerInner = fromC + (toC - fromC) * p; + f.restWidth = fromW + (toW - fromW) * pw; + if (gestureCentre == gestureCentre) { + // Scrubbing: the lens is wherever the finger has pulled it. + f.centerInner = gestureCentre; + f.restWidth = toW; + } + float lift = TabGlassMotion.LIFT_PT * f.ptPx * m.lift; + f.lensW = (f.restWidth + lift) * m.scaleX; + f.lensH = (restH + lift) * m.scaleY; + float cx = tc.getInnerX() + f.centerInner + m.leadPt * f.ptPx; + float cy = f.pillY + f.pillH / 2f; + f.lensX = cx - f.lensW / 2f; + f.lensY = cy - f.lensH / 2f; + f.barScale = f.pillW > 0 ? 1f + m.barGrowPt * f.ptPx / f.pillW : 1f; + f.pivotX = f.pillX + f.pillW / 2f; + f.pivotY = cy; + f.glowX = glassTouchX >= 0 ? tc.getX() + glassTouchX : tc.getInnerX() + toC; + if (gestureCentre == gestureCentre) { + // A scrub's glow rides the lens, not the spot the finger first touched. + f.glowX = cx; + } + f.glowY = glassTouchY >= 0 ? tc.getY() + glassTouchY : cy; + return f; + } + + /// Scales a coordinate about a pivot (the bar pulse, for the ops that draw + /// straight into the frame and so cannot ride the Graphics transform). + private static float scaleAbout(float v, float pivot, float scale) { + return pivot + (v - pivot) * scale; + } + + /// The bar's own glass and fill, drawn into the (scaled) pill instead of the + /// slack-padded bounds. + void paintGlassBarBackground(Graphics g) { + GlassFrame f = glassFrame(); + float s = f.barScale; + int x = Math.round(scaleAbout(f.pillX, f.pivotX, s)); + int y = Math.round(scaleAbout(f.pillY, f.pivotY, s)); + int r = Math.round(scaleAbout(f.pillX + f.pillW, f.pivotX, s)); + int b = Math.round(scaleAbout(f.pillY + f.pillH, f.pivotY, s)); + tabsContainer.paintBackgroundLayerAt(g, x, y, r - x, b - y); + paintGlassBarRim(g, x, y, r - x, b - y, f.ptPx * f.barScale); + } + + /// Relative strength of each row of the specular rim, from the edge inwards. + private static final float[] GLASS_RIM_FALLOFF = {1f, 0.7f, 0.43f, 0.2f}; + + /// The selection platter's colour matrix, read back from the native bar + /// (the colorMatrix filter UIKit puts on the platter's backdrop layer): rows + /// r, g, b of [r, g, b, offset]. It turns the dark bar's 134 grey into 98.8 + /// and the light bar's 195 into 169.4, the measured platter. + private static final float[] GLASS_PLATTER_DARK = { + 1.1298f, -0.2361f, -0.0237f, -0.07f, + -0.0701f, 0.964f, -0.0238f, -0.07f, + -0.0702f, -0.236f, 1.1762f, -0.07f + }; + private static final float[] GLASS_PLATTER_LIGHT = { + 1.1851f, -0.0502f, -0.005f, -0.2f, + -0.0149f, 1.1499f, -0.0051f, -0.2f, + -0.0149f, -0.05f, 1.1949f, -0.2f + }; + + /// The lifted native lens, measured over flat grey and colour backdrops (lossless + /// screenshots of a held press, motion probe): a circular-bevel rim of the height + /// UIKit gives its displacement effect (11.2 pt) that pulls the bar edge in by + /// 3 pt at 8 pt depth; a one-pixel ring at x0.70; a rim highlight of +49 then +19 + /// levels on the top and bottom, +14 at the ends; interior brightening of +4 + /// (light) / +10 (dark) over the pressed bar; a shadow band 4 pt below at -7 + /// levels. Points, converted per frame; see GlassLensBlend for the model. + private static final float GLASS_LENS_BEVEL_PT = 11.2f; + private static final float GLASS_LENS_MAX_SHIFT_PT = 30f; + private static final float GLASS_LENS_DISPERSION = 0.08f; + private static final float GLASS_LENS_OUTLINE = 0.30f; + private static final float GLASS_LENS_OUTLINE_PT = 0.5f; + private static final float GLASS_LENS_RIM = 22 / 255f; + private static final float GLASS_LENS_RIM_VERTICAL = 40 / 255f; + private static final float GLASS_LENS_RIM_PT = 0.6f; + private static final float GLASS_LENS_END_SHADE = 0.05f; + private static final float GLASS_LENS_END_SHADE_PT = 8f; + private static final float GLASS_LENS_BRIGHT_LIGHT = 4 / 255f; + private static final float GLASS_LENS_BRIGHT_DARK = 10 / 255f; + private static final float GLASS_LENS_SHADOW = 0.055f; + private static final float GLASS_LENS_SHADOW_PT = 4f; + + private float[] glassLensOptics(boolean dark) { + float[] o = new float[GlassLensBlend.COUNT]; + o[GlassLensBlend.BEVEL] = glassPx(GLASS_LENS_BEVEL_PT); + o[GlassLensBlend.MAX_SHIFT] = glassPx(GLASS_LENS_MAX_SHIFT_PT); + o[GlassLensBlend.DISPERSION] = GLASS_LENS_DISPERSION; + o[GlassLensBlend.OUTLINE] = GLASS_LENS_OUTLINE; + o[GlassLensBlend.OUTLINE_WIDTH] = glassPx(GLASS_LENS_OUTLINE_PT); + o[GlassLensBlend.RIM_LIGHT] = GLASS_LENS_RIM; + o[GlassLensBlend.RIM_LIGHT_VERTICAL] = GLASS_LENS_RIM_VERTICAL; + o[GlassLensBlend.RIM_WIDTH] = glassPx(GLASS_LENS_RIM_PT); + o[GlassLensBlend.END_SHADE] = GLASS_LENS_END_SHADE; + o[GlassLensBlend.END_SHADE_WIDTH] = glassPx(GLASS_LENS_END_SHADE_PT); + o[GlassLensBlend.BRIGHTNESS] = dark ? GLASS_LENS_BRIGHT_DARK : GLASS_LENS_BRIGHT_LIGHT; + o[GlassLensBlend.SHADOW] = GLASS_LENS_SHADOW; + o[GlassLensBlend.SHADOW_WIDTH] = glassPx(GLASS_LENS_SHADOW_PT); + return o; + } + + /// Coverage masks for the vibrant content, reused between frames. + private Image glassMaskDefault; + private Image glassMaskSelected; + + /// The native iOS 27 bar is lit along its top and bottom edges: over flat grey + /// the outermost rows read +42/+29/+18/+7 levels (dark) and +36/+26/+17/+8 + /// (light) above the interior, while its sides carry the dark outline instead + /// (GlassRecipe.getOutline). Drawn as white rows that fade inwards over about + /// 1.3 pt, only along the straight top and bottom runs and the upper and lower + /// quarters of the rounded ends. + private void paintGlassBarRim(Graphics g, int x, int y, int w, int h, float ptPx) { + int fg = tabsContainer.getStyle().getFgColor(); + boolean dark = 0.2126f * ((fg >> 16) & 0xff) + 0.7152f * ((fg >> 8) & 0xff) + 0.0722f * (fg & 0xff) > 128; + int peak = getUIManager().getThemeConstant(dark ? "tabGlassSpecularDarkAlphaInt" : "tabGlassSpecularAlphaInt", 0); + if (peak <= 0 || w <= 0 || h <= 0) { + return; + } + int oldColor = g.getColor(); + int oldAlpha = g.getAlpha(); + boolean aa = g.isAntiAliased(); + g.setAntiAliased(true); + g.setColor(0xffffff); + // Rows are about a third of a point each, like the native @3x pixels. + int step = Math.max(1, Math.round(ptPx / 3f)); + int d = h; + for (int i = 0; i < GLASS_RIM_FALLOFF.length; i++) { + int alpha = Math.round(peak * GLASS_RIM_FALLOFF[i]); + if (alpha <= 0) { + continue; + } + g.setAlpha(alpha); + int inset = i * step; + int ix = x + inset; + int iy = y + inset; + int iw = w - 2 * inset; + int ih = h - 2 * inset; + int dd = d - 2 * inset; + if (iw <= dd || ih <= 0) { + break; + } + for (int t = 0; t < step; t++) { + // straight top and bottom runs + g.drawLine(ix + dd / 2, iy + t, ix + iw - dd / 2, iy + t); + g.drawLine(ix + dd / 2, iy + ih - 1 - t, ix + iw - dd / 2, iy + ih - 1 - t); + // upper and lower quarters of both rounded ends (45 degrees either side + // of vertical, where the edge normal is mostly vertical) + int ax = ix + t; + int ay = iy + t; + int aw = dd - 2 * t; + g.drawArc(ax, ay, aw, aw, 90, 45); + g.drawArc(ax, ay, aw, aw, 225, 45); + g.drawArc(ix + iw - dd + t, ay, aw, aw, 45, 45); + g.drawArc(ix + iw - dd + t, ay, aw, aw, 270, 45); + } + } + g.setAntiAliased(aa); + g.setColor(oldColor); + g.setAlpha(oldAlpha); + } + + /// Paints the tab content and the selection for the ios27 motion. Order, bottom + /// to top, as UIKit composites it: grey platter under the lens, the tabs as + /// UNSELECTED content everywhere outside the lens, the tabs as SELECTED (accent) + /// content inside the lens magnified by the lift, then the lens rim and the + /// touch glow. Everything except the rim and glow rides one transform that + /// scales the whole bar about its centre. + void paintGlassTabs(Graphics g) { + Container tc = tabsContainer; + GlassFrame f = glassFrame(); + TabGlassMotion m = f.motion; + int fg = tc.getStyle().getFgColor(); + boolean dark = 0.2126f * ((fg >> 16) & 0xff) + 0.7152f * ((fg >> 8) & 0xff) + 0.0722f * (fg & 0xff) > 128; + boolean vibrant = g.isColorMatrixRegionSupported(); + if (vibrant && m.platterOpacity > 0) { + // The native platter is the bar's own glass seen through a colour matrix + // (a CABackdropLayer filter), not a translucent fill; it fades out while + // the lens is lifted. + float s = f.barScale; + int px = Math.round(scaleAbout(f.lensX, f.pivotX, s)); + int py = Math.round(scaleAbout(f.lensY, f.pivotY, s)); + int pr = Math.round(scaleAbout(f.lensX + f.lensW, f.pivotX, s)); + int pb = Math.round(scaleAbout(f.lensY + f.lensH, f.pivotY, s)); + g.colorMatrixRegion(px, py, pr - px, pb - py, dark ? GLASS_PLATTER_DARK : GLASS_PLATTER_LIGHT, null, -1, + m.platterOpacity); + } + if (vibrant && m.lift > 0) { + // While pressed the whole native bar brightens by ~11 levels (measured over + // flat grey in both appearances: 196 -> 207 light, 136 -> 147 dark). + float s = f.barScale; + int bx = Math.round(scaleAbout(f.pillX, f.pivotX, s)); + int by = Math.round(scaleAbout(f.pillY, f.pivotY, s)); + int br = Math.round(scaleAbout(f.pillX + f.pillW, f.pivotX, s)); + int bb = Math.round(scaleAbout(f.pillY + f.pillH, f.pivotY, s)); + float lift = getUIManager().getThemeConstant("tabGlassPressLiftInt", 11) / 255f; + float[] brighten = {1, 0, 0, lift, 0, 1, 0, lift, 0, 0, 1, lift}; + g.colorMatrixRegion(bx, by, br - bx, bb - by, brighten, null, -1, m.lift); + } + boolean xf = f.barScale != 1f && g.isTransformSupported(); + Transform saved = null; + if (xf) { + saved = g.getTransform(); + Transform t = Transform.makeTranslation(f.pivotX, f.pivotY); + t.scale(f.barScale, f.barScale); + t.translate(-f.pivotX, -f.pivotY); + g.transform(t); + } + boolean aa = g.isAntiAliased(); + int oldColor = g.getColor(); + int oldAlpha = g.getAlpha(); + g.setAntiAliased(true); + + // Selection platter fallback for ports without colorMatrixRegion; a dark bar + // has its own platter constants, falling back to the light ones. + UIManager uim = getUIManager(); + int pillColor = uim.getThemeConstant("tabSelPillColorInt", 0x767680); + int pillAlpha = uim.getThemeConstant("tabSelPillAlphaInt", 34); + if (dark) { + pillColor = uim.getThemeConstant("tabSelPillColorDarkInt", pillColor); + pillAlpha = uim.getThemeConstant("tabSelPillAlphaDarkInt", pillAlpha); + } + int platterAlpha = Math.round(pillAlpha * m.platterOpacity); + int lx = Math.round(f.lensX); + int ly = Math.round(f.lensY); + int lw = Math.round(f.lensX + f.lensW) - lx; + int lh = Math.round(f.lensY + f.lensH) - ly; + int radius = Math.min(lw, lh); + if (!vibrant && platterAlpha > 0 && lw > 0 && lh > 0) { + g.setColor(pillColor); + g.setAlpha(platterAlpha); + g.fillRoundRect(lx, ly, lw, lh, radius, radius); + } + // The lifted lens is clear glass and reads BRIGHTER than the bar around it + // (+8 levels light, +11 dark over flat grey on the native bar). + int lensLight = Math.round(uim.getThemeConstant("tabGlassLensLightAlphaInt", 28) * m.lift); + if (lensLight > 0 && lw > 0 && lh > 0 && !g.isGlassLensRegionSupported()) { + g.setColor(0xffffff); + g.setAlpha(lensLight); + g.fillRoundRect(lx, ly, lw, lh, radius, radius); + } + g.setColor(oldColor); + g.setAlpha(oldAlpha); + + // Content, in tabsContainer-relative coordinates like Container.paint. + int ox = tc.getX(); + int oy = tc.getY(); + if (!vibrant) { + g.translate(ox, oy); + paintGlassContent(g, g, lx - ox, ly - oy, lw, lh, m.contentScale); + g.translate(-ox, -oy); + } + + g.setAntiAliased(aa); + if (xf) { + g.setTransform(saved); + } + if (vibrant) { + paintGlassContentVibrant(g, f, dark, lx - ox, ly - oy, lw, lh); + } + if (m.lift > 0 && g.isGlassLensRegionSupported()) { + float s = f.barScale; + int gx = Math.round(scaleAbout(f.lensX, f.pivotX, s)); + int gy = Math.round(scaleAbout(f.lensY, f.pivotY, s)); + int gr = Math.round(scaleAbout(f.lensX + f.lensW, f.pivotX, s)); + int gb = Math.round(scaleAbout(f.lensY + f.lensH, f.pivotY, s)); + g.glassLensRegion(gx, gy, gr - gx, gb - gy, -1, glassLensOptics(dark), m.lift); + } + paintGlassRimAndGlow(g, f); + g.setColor(oldColor); + g.setAlpha(oldAlpha); + } + + /// Paints every tab twice through complementary clips: unselected outside the + /// lens capsule, selected (accent, scaled by `contentScale` about each tab's + /// centre) inside it. The capsule's round ends are tiled with thin horizontal + /// bands -- a staircase whose steps are about a point tall -- because the + /// complement of a capsule is not convex and a native shape clip only handles + /// convex polygons; plain rectangles are exact on every port. Bands only cover + /// the rows the tab content occupies, and a tab is only painted into a band it + /// intersects. + private void paintGlassContent(Graphics g, Graphics sel, int lx, int ly, int lw, int lh, float contentScale) { + Container tc = tabsContainer; + int n = tc.getComponentCount(); + int w = tc.getWidth(); + // Rows holding tab content. + int top = Integer.MAX_VALUE; + int bottom = Integer.MIN_VALUE; + for (int i = 0; i < n; i++) { + Component c = tc.getComponentAt(i); + top = Math.min(top, c.getY()); + bottom = Math.max(bottom, c.getY() + c.getHeight()); + } + if (top >= bottom) { + return; + } + int lensTop = Math.max(top, ly); + int lensBottom = Math.min(bottom, ly + lh); + // Above and below the lens: unselected, full width. + paintGlassRegion(g, 0, top, w, lensTop - top, Button.GLASS_PAINT_DEFAULT, 1f); + paintGlassRegion(g, 0, lensBottom, w, bottom - lensBottom, Button.GLASS_PAINT_DEFAULT, 1f); + if (lensBottom > lensTop) { + // Left and right of the lens box: unselected. + paintGlassRegion(g, 0, lensTop, lx, lensBottom - lensTop, Button.GLASS_PAINT_DEFAULT, 1f); + paintGlassRegion(g, lx + lw, lensTop, w - lx - lw, lensBottom - lensTop, Button.GLASS_PAINT_DEFAULT, 1f); + float r = Math.min(lw, lh) / 2f; + float mid = ly + lh / 2f; + float step = Math.max(1f, tc.getHeight() / 62f); + int y = lensTop; + while (y < lensBottom) { + int inset = capsuleInset(y + 0.5f, mid, r, step); + int y2 = y + 1; + while (y2 < lensBottom && capsuleInset(y2 + 0.5f, mid, r, step) == inset) { + y2++; + } + int bh = y2 - y; + if (inset > 0) { + paintGlassRegion(g, lx, y, inset, bh, Button.GLASS_PAINT_DEFAULT, 1f); + paintGlassRegion(g, lx + lw - inset, y, inset, bh, Button.GLASS_PAINT_DEFAULT, 1f); + } + paintGlassRegion(sel, lx + inset, y, lw - 2 * inset, bh, Button.GLASS_PAINT_SELECTED, contentScale); + y = y2; + } + } + } + + /// The native tab content is VIBRANT: each glyph pixel is a colour matrix of + /// whatever lies behind it, weighted by the glyph's coverage (see + /// VibrancyMatrix), so the unselected labels and the accent through the lens + /// pick up the glass under them instead of being flat paint. The content is + /// painted into two coverage masks -- unselected outside the lens, selected + /// (accent, magnified) inside it -- in the bar's scaled frame, and each mask + /// then drives Graphics.colorMatrixRegion with the matrix for its tint. + private void paintGlassContentVibrant(Graphics g, GlassFrame f, boolean dark, int lx, int ly, int lw, int lh) { + Container tc = tabsContainer; + int mw = tc.getWidth(); + int mh = tc.getHeight(); + if (mw <= 0 || mh <= 0) { + return; + } + // The masks are the bar's own size, unscaled, so they are allocated once; + // colorMatrixRegion stretches them over the pulsing bar. + // Each tab is painted once per mask; then the lens capsule is cut out of the + // unselected mask and everything outside it out of the selected one. One + // mask is finished before the other is touched (see cutGlassCapsule). + glassMaskDefault = clearedGlassMask(glassMaskDefault, mw, mh); + Graphics dg = glassMaskDefault.getGraphics(); + paintGlassMaskTabs(dg, Button.GLASS_PAINT_DEFAULT, 1f); + cutGlassCapsule(dg, lx, ly, lw, lh, mw, mh, false); + glassMaskSelected = clearedGlassMask(glassMaskSelected, mw, mh); + Graphics sg = glassMaskSelected.getGraphics(); + paintGlassMaskTabs(sg, Button.GLASS_PAINT_SELECTED, f.motion.contentScale); + cutGlassCapsule(sg, lx, ly, lw, lh, mw, mh, true); + float s = f.barScale; + int rx = Math.round(scaleAbout(tc.getX(), f.pivotX, s)); + int ry = Math.round(scaleAbout(tc.getY(), f.pivotY, s)); + int rr = Math.round(scaleAbout(tc.getX() + mw, f.pivotX, s)); + int rb = Math.round(scaleAbout(tc.getY() + mh, f.pivotY, s)); + int defaultTint = glassContentTint(Button.GLASS_PAINT_DEFAULT); + int selectedTint = glassContentTint(Button.GLASS_PAINT_SELECTED); + g.colorMatrixRegion(rx, ry, rr - rx, rb - ry, VibrancyMatrix.forTint(defaultTint, dark), glassMaskDefault, 0, 1f); + g.colorMatrixRegion(rx, ry, rr - rx, rb - ry, VibrancyMatrix.forTint(selectedTint, dark), glassMaskSelected, 0, 1f); + } + + /// Paints every tab once into a mask, in the given glass paint state, each + /// scaled by `scale` about its own centre (the accent copy's magnification). + private void paintGlassMaskTabs(Graphics mg, int state, float scale) { + Container tc = tabsContainer; + int n = tc.getComponentCount(); + for (int i = 0; i < n; i++) { + Component c = tc.getComponentAt(i); + Button b = c instanceof Button ? (Button) c : null; + int oldState = b == null ? 0 : b.glassPaintState; + if (b != null) { + b.glassPaintState = state; + } + boolean xf = scale != 1f && mg.isTransformSupported(); + if (xf) { + float px = c.getX() + c.getWidth() / 2f; + float py = c.getY() + c.getHeight() / 2f; + Transform t = Transform.makeTranslation(px, py); + t.scale(scale, scale); + t.translate(-px, -py); + mg.setTransform(t); + } + try { + mg.setClip(0, 0, tc.getWidth(), tc.getHeight()); + c.paintInternal(mg, false); + } finally { + if (xf) { + mg.setTransform(Transform.makeIdentity()); + } + if (b != null) { + b.glassPaintState = oldState; + } + } + } + } + + /// Clears the lens capsule (lx, ly, lw, lh, tabsContainer coordinates) out of + /// a mask, or with `keepInside` everything but the capsule: whole rectangles + /// around the lens box, then one strip per pixel row across the round ends. + /// Callers finish one mask before touching the other -- on ports that render + /// images on the GPU, every switch between two images' graphics closes one + /// drawing pass and opens another. + private static void cutGlassCapsule(Graphics g, int lx, int ly, int lw, int lh, int mw, int mh, + boolean keepInside) { + g.setClip(0, 0, mw, mh); + if (lw <= 0 || lh <= 0) { + if (keepInside) { + g.clearRect(0, 0, mw, mh); + } + return; + } + if (keepInside) { + g.clearRect(0, 0, mw, Math.max(0, ly)); + g.clearRect(0, ly + lh, mw, Math.max(0, mh - ly - lh)); + g.clearRect(0, ly, Math.max(0, lx), lh); + g.clearRect(lx + lw, ly, Math.max(0, mw - lx - lw), lh); + } + cutCapsuleRows(g, lx, ly, lw, lh, keepInside); + } + + /// Per pixel row of the capsule, clears either its two round-end slivers + /// (`ends`) or its interior. + private static void cutCapsuleRows(Graphics g, int lx, int ly, int lw, int lh, boolean ends) { + float r = Math.min(lw, lh) / 2f; + float mid = ly + lh / 2f; + int y = ly; + while (y < ly + lh) { + int inset = capsuleInset(y + 0.5f, mid, r, 1f); + int y2 = y + 1; + while (y2 < ly + lh && capsuleInset(y2 + 0.5f, mid, r, 1f) == inset) { + y2++; + } + if (ends) { + if (inset > 0) { + g.clearRect(lx, y, inset, y2 - y); + g.clearRect(lx + lw - inset, y, inset, y2 - y); + } + } else if (lw - 2 * inset > 0) { + g.clearRect(lx + inset, y, lw - 2 * inset, y2 - y); + } + y = y2; + } + } + + /// A transparent mask of the given size, reusing the previous frame's when it fits. + private static Image clearedGlassMask(Image mask, int w, int h) { + if (mask == null || mask.getWidth() != w || mask.getHeight() != h) { + return Image.createImage(w, h, 0); + } + Graphics mg = mask.getGraphics(); + if (mg.isTransformSupported()) { + mg.setTransform(Transform.makeIdentity()); + } + mg.setClip(0, 0, w, h); + mg.clearRect(0, 0, w, h); + return mask; + } + + /// The foreground colour the tab content is painted with in the given glass + /// paint state (the unselected label colour, or the accent). + private int glassContentTint(int state) { + Container tc = tabsContainer; + int n = tc.getComponentCount(); + for (int i = 0; i < n; i++) { + Component c = tc.getComponentAt(i); + if (c instanceof Button) { + Button b = (Button) c; + int old = b.glassPaintState; + b.glassPaintState = state; + try { + return b.getStyle().getFgColor(); + } finally { + b.glassPaintState = old; + } + } + } + return state == Button.GLASS_PAINT_SELECTED ? 0x0091ff : 0; + } + + /// Horizontal inset of a capsule of radius `r` from its bounding box at row + /// `y`, quantized to `step` pixels so neighbouring rows merge into one band. + private static int capsuleInset(float y, float mid, float r, float step) { + float dy = Math.abs(y - mid); + float inset = dy >= r ? r : r - (float) Math.sqrt(r * r - dy * dy); + return Math.round(Math.round(inset / step) * step); + } + + private void paintGlassRegion(Graphics g, int x, int y, int w, int h, int state, float scale) { + if (w <= 0 || h <= 0) { + return; + } + int clipX = g.getClipX(); + int clipY = g.getClipY(); + int clipW = g.getClipWidth(); + int clipH = g.getClipHeight(); + try { + paintGlassRegionClipped(g, x, y, w, h, state, scale, clipX, clipY, clipW, clipH); + } finally { + g.setClip(clipX, clipY, clipW, clipH); + } + } + + private void paintGlassRegionClipped(Graphics g, int x, int y, int w, int h, int state, float scale, + int clipX, int clipY, int clipW, int clipH) { + Container tc = tabsContainer; + g.clipRect(x, y, w, h); + if (g.getClipWidth() <= 0 || g.getClipHeight() <= 0) { + return; + } + int n = tc.getComponentCount(); + for (int i = 0; i < n; i++) { + Component c = tc.getComponentAt(i); + int grow = scale == 1f ? 0 : Math.round(Math.max(c.getWidth(), c.getHeight()) * (scale - 1f) / 2f); + if (c.getX() - grow >= x + w || c.getX() + c.getWidth() + grow <= x + || c.getY() - grow >= y + h || c.getY() + c.getHeight() + grow <= y) { + continue; + } + Button b = c instanceof Button ? (Button) c : null; + int oldState = b == null ? 0 : b.glassPaintState; + if (b != null) { + b.glassPaintState = state; + } + Transform saved = null; + boolean xf = scale != 1f && g.isTransformSupported(); + if (xf) { + saved = g.getTransform(); + float px = c.getX() + c.getWidth() / 2f; + float py = c.getY() + c.getHeight() / 2f; + Transform t = Transform.makeTranslation(px, py); + t.scale(scale, scale); + t.translate(-px, -py); + g.transform(t); + } + try { + c.paintInternal(Display.impl.getComponentScreenGraphics(tc, g), false); + } finally { + if (xf) { + g.setTransform(saved); + } + if (b != null) { + b.glassPaintState = oldState; + } + } + g.setClip(clipX, clipY, clipW, clipH); + g.clipRect(x, y, w, h); + } + } + + /// The lifted lens's bright rim and the touch glow. Both are drawn in the frame + /// directly (manually scaled by the bar pulse) after the transformed content. + private void paintGlassRimAndGlow(Graphics g, GlassFrame f) { + TabGlassMotion m = f.motion; + float s = f.barScale; + boolean aa = g.isAntiAliased(); + g.setAntiAliased(true); + if (m.lift > 0.01f && !g.isGlassLensRegionSupported()) { + float x = scaleAbout(f.lensX, f.pivotX, s); + float y = scaleAbout(f.lensY, f.pivotY, s); + float w = f.lensW * s; + float h = f.lensH * s; + // Without glassLensRegion: an approximation of the native edge -- a thin + // dark ring on the boundary and a bright rim just inside it. + int rimAlpha = Math.round(getUIManager().getThemeConstant("tabGlassRimAlphaInt", 150) * m.lift); + int edgeAlpha = Math.round(getUIManager().getThemeConstant("tabGlassEdgeAlphaInt", 110) * m.lift); + int ix = Math.round(x); + int iy = Math.round(y); + int iw = Math.round(x + w) - ix; + int ih = Math.round(y + h) - iy; + int rr = Math.min(iw, ih); + if (edgeAlpha > 0) { + g.setColor(0x000000); + g.setAlpha(edgeAlpha); + g.drawRoundRect(ix, iy, iw - 1, ih - 1, rr, rr); + } + if (rimAlpha > 0 && iw > 4 && ih > 4) { + g.setColor(0xffffff); + g.setAlpha(rimAlpha); + g.drawRoundRect(ix + 1, iy + 1, iw - 3, ih - 3, rr - 2, rr - 2); + } + } + if (m.glowOpacity > 0.003f) { + float d = TabGlassMotion.GLOW_DIAMETER_PT * m.glowScale * f.ptPx * s; + int alpha = Math.round(255 * m.glowOpacity * getUIManager().getThemeConstant("tabGlassGlowPct", 40) / 100f); + if (alpha > 0) { + int ocx = g.getClipX(); + int ocy = g.getClipY(); + int ocw = g.getClipWidth(); + int och = g.getClipHeight(); + int px = Math.round(scaleAbout(f.pillX, f.pivotX, s)); + int py = Math.round(scaleAbout(f.pillY, f.pivotY, s)); + g.clipRect(px, py, Math.round(f.pillW * s), Math.round(f.pillH * s)); + float gx = scaleAbout(f.glowX, f.pivotX, s); + float gy = scaleAbout(f.glowY, f.pivotY, s); + // A soft disc: nested translucent discs whose alphas sum to `alpha` at + // the centre and fall off linearly to nothing at the rim. + g.setColor(0xffffff); + int rings = 16; + int painted = 0; + for (int i = rings; i >= 1; i--) { + // cumulative alpha at ring i is alpha * (rings - i + 1) / rings + int target = alpha * (rings - i + 1) / rings; + int a = target - painted; + if (a <= 0) { + continue; + } + painted = target; + g.setAlpha(a); + float rd = d / 2f * i / rings; + int dd = Math.round(rd * 2); + g.fillArc(Math.round(gx - rd), Math.round(gy - rd), dd, dd, 0, 360); + } + g.setClip(ocx, ocy, ocw, och); + } + } + g.setAntiAliased(aa); + } + /// The iOS "selected cell" background: a subtle grey capsule kept at bar height /// (the lens drop, drawn over it, bulges taller). Travels + elongates with the /// drop. systemFill grey so it reads neutral, not blue. Alpha via tabSelPillAlphaInt. @@ -1980,6 +3005,12 @@ public void setTabsContentGap(int tabsGap) { } private void setTabsLayout(int tabPlacement) { + if ((tabPlacement == TOP || tabPlacement == BOTTOM) && isGlassMotion()) { + tabsContainer.setLayout(new GlassTabsLayout()); + tabsContainer.setScrollableX(false); + tabsContainer.setScrollableY(false); + return; + } if (tabPlacement == TOP || tabPlacement == BOTTOM) { // Equal-width cells filling the row (native UITabBar even spacing): a // NON-scrolling GridLayout divides the row width into equal columns, so a @@ -2245,6 +3276,136 @@ public String setPropertyValue(String name, Object value) { return super.setPropertyValue(name, value); } + // ---- iOS 27 floating tab bar geometry (tabsMorphPreset ios27), in points ---- + // Read off a real UITabBarController (the motion probe's layer log): the pill + // is 62 pt tall with its lower edge 21 pt above the screen's, and as wide as its + // tabs need -- 86 pt a tab plus 16 -- but never closer than 21 pt to the sides. + // Each tab's button is 54 pt tall, 4 pt inside the pill, and is where the lens + // rests: 94 pt wide at the natural pitch, never narrower than 84.05 pt, which is + // why the buttons of a crowded bar overlap. A theme may override each number. + static final float GLASS_BAR_PT = 62f; + static final float GLASS_PITCH_PT = 86f; + static final float GLASS_INSET_PT = 4f; + static final float GLASS_MIN_LENS_PT = 84.05f; + static final float GLASS_EDGE_PT = 21f; + // Width of the resting lens, set by GlassTabsLayout. + private float glassLensWidth; + + private float glassConstantPt(String name, float def) { + String v = getUIManager().getThemeConstant(name, null); + if (v == null) { + return def; + } + try { + return Float.parseFloat(v.trim()); + } catch (NumberFormatException ignore) { + return def; + } + } + + /// Points to pixels: the screen's own scale where the port knows it (UIScreen + /// on iOS), else through the physical size of a 1/163 inch point. + static float glassPx(float pt) { + float ratio = Display.getInstance().getDevicePixelRatio(); + if (ratio <= 0) { + ratio = Display.getInstance().convertToPixels(10f) / 10f * 25.4f / 163f; + } + return pt * ratio; + } + + /// The pill width the tabs ask for, in pixels (before the side limit). + private float glassNaturalPillWidth(int n) { + return glassPx(n * glassConstantPt("tabsGlassPitchPt", GLASS_PITCH_PT) + + 4 * glassConstantPt("tabsGlassInsetPt", GLASS_INSET_PT)); + } + + /// Places the tabs inside the iOS 27 pill like UITabBar: equal pitch, each + /// button centred on its tab and as wide as the resting lens. + class GlassTabsLayout extends Layout { + @Override + public void layoutContainer(Container parent) { + int n = parent.getComponentCount(); + if (n == 0) { + return; + } + int sx = glassSlackXPx(); + int sy = glassSlackYPx(); + float pillX = sx; + float pillW = parent.getWidth() - 2 * sx; + float pillH = parent.getHeight() - 2 * sy; + float inset = glassPx(glassConstantPt("tabsGlassInsetPt", GLASS_INSET_PT)); + float span = pillW - 2 * inset; + float lensW; + float pitch; + if (n == 1) { + lensW = span; + pitch = 0; + } else { + pitch = (span - 2 * inset) / n; + lensW = pitch + 2 * inset; + float minLens = glassPx(glassConstantPt("tabsGlassMinLensPt", GLASS_MIN_LENS_PT)); + if (lensW < minLens) { + lensW = Math.min(minLens, span); + pitch = (span - lensW) / (n - 1); + } + } + glassLensWidth = lensW; + int top = Math.round(sy + inset); + int h = Math.max(0, Math.round(pillH - 2 * inset)); + for (int i = 0; i < n; i++) { + Component c = parent.getComponentAt(i); + float centre = pillX + inset + lensW / 2f + i * pitch; + int left = Math.round(centre - lensW / 2f); + c.setX(left); + c.setY(top); + c.setWidth(Math.round(centre + lensW / 2f) - left); + c.setHeight(h); + } + } + + @Override + public Dimension getPreferredSize(Container parent) { + return new Dimension(Math.round(glassNaturalPillWidth(parent.getComponentCount())) + 2 * glassSlackXPx(), + Math.round(glassPx(glassConstantPt("tabsGlassBarPt", GLASS_BAR_PT))) + 2 * glassSlackYPx()); + } + } + + /// The wrapper around the floating tab bar. With the iOS 27 motion it sizes + /// and places the pill the way UITabBar does (centred, as wide as its tabs, + /// its lower edge a fixed distance above the bottom -- inside the home + /// indicator's safe area, as native draws it); otherwise it is a BorderLayout. + class GlassHostLayout extends BorderLayout { + @Override + public void layoutContainer(Container parent) { + if (!isGlassMotion() || tabsContainer == null || tabsContainer.getParent() != parent) { //NOPMD CompareObjectsWithEquals + super.layoutContainer(parent); + return; + } + int sx = glassSlackXPx(); + int sy = glassSlackYPx(); + float edge = glassPx(glassConstantPt("tabsGlassEdgePt", GLASS_EDGE_PT)); + float barH = glassPx(glassConstantPt("tabsGlassBarPt", GLASS_BAR_PT)); + float pillW = Math.min(glassNaturalPillWidth(tabsContainer.getComponentCount()), + parent.getWidth() - 2 * edge); + int w = Math.round(pillW) + 2 * sx; + int h = Math.round(barH) + 2 * sy; + tabsContainer.setX((parent.getWidth() - w) / 2); + tabsContainer.setY(Math.round(parent.getHeight() - edge - barH) - sy); + tabsContainer.setWidth(w); + tabsContainer.setHeight(h); + } + + @Override + public Dimension getPreferredSize(Container parent) { + if (!isGlassMotion() || tabsContainer == null) { + return super.getPreferredSize(parent); + } + float edge = glassPx(glassConstantPt("tabsGlassEdgePt", GLASS_EDGE_PT)); + float barH = glassPx(glassConstantPt("tabsGlassBarPt", GLASS_BAR_PT)); + return new Dimension(tabsContainer.getPreferredW(), Math.round(barH + edge) + glassSlackYPx()); + } + } + class TabsLayout extends Layout { @Override @@ -2354,6 +3515,19 @@ public SwipeListener(int type) { @Override public void actionPerformed(ActionEvent evt) { + if (type == PRESS) { + recordGlassPress(evt.getX(), evt.getY()); + } else if (type == DRAG) { + recordGlassDrag(evt.getX()); + } else if (type == RELEASE && glassMotionStart >= 0) { + recordGlassRelease(evt.getX()); + CN.callSerially(new Runnable() { + @Override + public void run() { + checkGlassPressOutcome(); + } + }); + } if (getComponentCount() == 0 || !swipeActivated || slideToDestMotion != null) { return; diff --git a/CodenameOne/src/com/codename1/ui/plaf/ColorMatrixBlend.java b/CodenameOne/src/com/codename1/ui/plaf/ColorMatrixBlend.java new file mode 100644 index 00000000000..048e6295d0a --- /dev/null +++ b/CodenameOne/src/com/codename1/ui/plaf/ColorMatrixBlend.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Codename One in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ +package com.codename1.ui.plaf; + +/// Reference implementation of Graphics.colorMatrixRegion over an ARGB buffer. +/// +/// Every pixel `p` (channels in 0..1) becomes `p + (clamp(M * p + offset) - p) * k`, +/// where `k = amount * shape * mask`: +/// +/// - `shape` is the anti-aliased coverage of a rounded rectangle filling the +/// region, `clamp(0.5 - sdf, 0, 1)` at the pixel centre, with corner radius +/// `cornerRadius` (a negative radius makes a capsule; zero covers the whole +/// rectangle); +/// - `mask` is the alpha of the optional mask sampled at the same relative +/// position (nearest pixel), which is how vibrant content is drawn: the mask +/// holds the glyphs, and each glyph pixel takes its colour from the matrix +/// applied to what lies behind it. +/// +/// The destination alpha is kept. Ports without a native path (JavaSE, the +/// JavaScript port, iOS off-screen images) call this; the Metal shader +/// cn1_fs_colormatrix mirrors it. +public final class ColorMatrixBlend { + private ColorMatrixBlend() { + } + + /// Applies the blend in place. + /// + /// #### Parameters + /// + /// - `argb`: the destination region, `w * h` pixels, row major + /// + /// - `w`: region width in pixels + /// + /// - `h`: region height in pixels + /// + /// - `matrix`: 12 floats, rows r, g, b of `[r, g, b, offset]` in 0..1 units + /// + /// - `mask`: the mask pixels (ARGB, alpha used), or null for no mask + /// + /// - `maskW`: mask width in pixels + /// + /// - `maskH`: mask height in pixels + /// + /// - `cornerRadius`: corner radius in region pixels, negative for a capsule + /// + /// - `amount`: overall strength 0..1 + public static void apply(int[] argb, int w, int h, float[] matrix, int[] mask, int maskW, int maskH, + float cornerRadius, float amount) { + if (amount <= 0 || w <= 0 || h <= 0) { + return; + } + float hw = w / 2f; + float hh = h / 2f; + float r = 0; + if (cornerRadius != 0) { + r = cornerRadius < 0 ? Math.min(hw, hh) : Math.min(cornerRadius, Math.min(hw, hh)); + } + for (int y = 0; y < h; y++) { + float py = y + 0.5f - hh; + for (int x = 0; x < w; x++) { + float k = amount; + if (r > 0) { + float px = x + 0.5f - hw; + float dx = Math.abs(px) - (hw - r); + float dy = Math.abs(py) - (hh - r); + float ax = dx > 0 ? dx : 0; + float ay = dy > 0 ? dy : 0; + float sdf = (float) Math.sqrt(ax * ax + ay * ay) + Math.min(Math.max(dx, dy), 0) - r; + float cov = 0.5f - sdf; + k *= cov < 0 ? 0 : (cov > 1 ? 1 : cov); + } + if (mask != null) { + int mx = x * maskW / w; + int my = y * maskH / h; + k *= ((mask[my * maskW + mx] >>> 24) & 0xff) / 255f; + } + if (k <= 0) { + continue; + } + int i = y * w + x; + int p = argb[i]; + float pr = ((p >> 16) & 0xff) / 255f; + float pg = ((p >> 8) & 0xff) / 255f; + float pb = (p & 0xff) / 255f; + int out = p & 0xff000000; + for (int row = 0; row < 3; row++) { + float v = matrix[row * 4] * pr + matrix[row * 4 + 1] * pg + matrix[row * 4 + 2] * pb + + matrix[row * 4 + 3]; + v = v < 0 ? 0 : (v > 1 ? 1 : v); + float src = row == 0 ? pr : (row == 1 ? pg : pb); + float o = src + (v - src) * k; + out |= Math.round(o * 255) << (16 - 8 * row); + } + argb[i] = out; + } + } + } +} diff --git a/CodenameOne/src/com/codename1/ui/plaf/GlassLensBlend.java b/CodenameOne/src/com/codename1/ui/plaf/GlassLensBlend.java new file mode 100644 index 00000000000..1e5cebd6d47 --- /dev/null +++ b/CodenameOne/src/com/codename1/ui/plaf/GlassLensBlend.java @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Codename One in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ +package com.codename1.ui.plaf; + +/// Reference implementation of Graphics.glassLensRegion: the optics of a raised +/// Liquid Glass lens (the lifted iOS 27 tab selection) laid over what is already +/// painted. Ports without a native path run this; the Metal shader +/// cn1_fs_glass_lens mirrors it. +/// +/// The lens is a rounded rectangle (a capsule for a negative corner radius) whose +/// rim is a circular bevel of height `bevel`: a pixel `s` inside the rim shows the +/// surface displaced OUTWARDS along the rim's normal by +/// `D(s) = (h - s) / sqrt(1 - ((h - s) / h)^2)` (h = bevel, zero beyond it) -- the +/// refraction of a glass edge, which pulls whatever lies just outside the lens +/// (the edge of the bar it floats over, the backdrop) into its rim. The three +/// channels are displaced by `D * (1 - dispersion)`, `D` and `D * (1 + dispersion)`, +/// which fringes the rim. On top of that the surface: +/// +/// - brightens by `brightness` inside; +/// - darkens by up to `endShade` in a band `endShadeWidth` wide along the rim, +/// weighted by how horizontal the rim's normal is (the rounded ends); +/// - is multiplied by `1 - outline` on a ring `outlineWidth` wide just inside the +/// rim; +/// - gains a highlight of `rimLight + rimLightVertical * |ny|` right inside that +/// ring, decaying as `exp(-d / rimWidth)` with the depth `d` past it; +/// - casts a soft shadow of depth `shadow` around its lower half, a band that +/// peaks `shadowWidth` outside the rim and has the same width. +/// +/// Lengths are in pixels, brightness levels in 0..1 units. Everything is mixed +/// with the untouched surface by `amount`. +public final class GlassLensBlend { + public static final int BEVEL = 0; + public static final int MAX_SHIFT = 1; + public static final int DISPERSION = 2; + public static final int OUTLINE = 3; + public static final int OUTLINE_WIDTH = 4; + public static final int RIM_LIGHT = 5; + public static final int RIM_LIGHT_VERTICAL = 6; + public static final int RIM_WIDTH = 7; + public static final int END_SHADE = 8; + public static final int END_SHADE_WIDTH = 9; + public static final int BRIGHTNESS = 10; + public static final int SHADOW = 11; + public static final int SHADOW_WIDTH = 12; + /// Number of optics parameters. + public static final int COUNT = 13; + + private GlassLensBlend() { + } + + /// How far outside the lens rectangle the effect reaches (the shadow and the + /// outline ring), in pixels. + public static int margin(float[] optics) { + return (int) Math.ceil(optics[SHADOW_WIDTH] * 3) + 1; + } + + /// How far outside the painted area the refraction may sample, in pixels. + public static int reach(float[] optics) { + return (int) Math.ceil(optics[MAX_SHIFT]) + 1; + } + + /// Outward displacement of a point `s` pixels inside a rim of bevel height `h`. + public static float displacement(float s, float h, float max) { + if (s >= h || h <= 0) { + return 0; + } + float t = (h - s) / h; + float d = (h - s) / (float) Math.sqrt(Math.max(1e-6f, 1 - t * t)); + return d > max ? max : d; + } + + /// Applies the lens. + /// + /// #### Parameters + /// + /// - `src`: the surface, `sw * sh` ARGB pixels, read only + /// + /// - `sw`: source width + /// + /// - `sh`: source height + /// + /// - `dst`: receives the result for the output area, `ow * oh` pixels + /// + /// - `ox`: the output area's left edge inside `src` + /// + /// - `oy`: the output area's top edge inside `src` + /// + /// - `ow`: output width + /// + /// - `oh`: output height + /// + /// - `lx`: the lens rectangle's left edge inside `src` (may be fractional) + /// + /// - `ly`: the lens rectangle's top edge inside `src` + /// + /// - `lw`: lens width + /// + /// - `lh`: lens height + /// + /// - `cornerRadius`: corner radius in pixels, negative for a capsule + /// + /// - `optics`: `COUNT` parameters, see the constants + /// + /// - `amount`: overall strength 0..1 + public static void apply(int[] src, int sw, int sh, int[] dst, int ox, int oy, int ow, int oh, + float lx, float ly, float lw, float lh, float cornerRadius, float[] optics, float amount) { + float hw = lw / 2f; + float hh = lh / 2f; + float cx = lx + hw; + float cy = ly + hh; + float r = cornerRadius < 0 ? Math.min(hw, hh) : Math.min(cornerRadius, Math.min(hw, hh)); + float[] rgb = new float[3]; + for (int y = 0; y < oh; y++) { + for (int x = 0; x < ow; x++) { + int sxp = ox + x; + int syp = oy + y; + int base = pixel(src, sw, sh, sxp, syp); + if (amount <= 0) { + dst[y * ow + x] = base; + continue; + } + float px = sxp + 0.5f - cx; + float py = syp + 0.5f - cy; + float dx = Math.abs(px) - (hw - r); + float dy = Math.abs(py) - (hh - r); + float ax = dx > 0 ? dx : 0; + float ay = dy > 0 ? dy : 0; + float outside = (float) Math.sqrt(ax * ax + ay * ay); + float sdf = outside + Math.min(Math.max(dx, dy), 0) - r; + // Outward normal of the rounded rectangle at this point. + float nx; + float ny; + if (dx > 0 && dy > 0 && outside > 0) { + nx = ax / outside; + ny = ay / outside; + } else if (dx > dy) { + nx = 1; + ny = 0; + } else { + nx = 0; + ny = 1; + } + nx = px < 0 ? -nx : nx; + ny = py < 0 ? -ny : ny; + float s = -sdf; + float outR = ((base >> 16) & 0xff) / 255f; + float outG = ((base >> 8) & 0xff) / 255f; + float outB = (base & 0xff) / 255f; + if (s > 0) { + float d = displacement(s, optics[BEVEL], optics[MAX_SHIFT]); + float disp = optics[DISPERSION]; + for (int c = 0; c < 3; c++) { + float k = d * (1 + (c - 1) * disp); + rgb[c] = channel(src, sw, sh, sxp + 0.5f + nx * k, syp + 0.5f + ny * k, c); + } + float lum = optics[BRIGHTNESS]; + float shade = 1; + if (optics[END_SHADE_WIDTH] > 0) { + float w = optics[END_SHADE_WIDTH]; + float band = s < w * 0.7f ? 1 : (s >= w ? 0 : smooth((w - s) / (w * 0.3f))); + shade -= optics[END_SHADE] * Math.abs(nx) * band; + } + float rim = 0; + float past = s - optics[OUTLINE_WIDTH]; + if (optics[RIM_WIDTH] > 0 && past >= 0) { + rim = (optics[RIM_LIGHT] + optics[RIM_LIGHT_VERTICAL] * Math.abs(ny)) + * (float) Math.exp(-past / optics[RIM_WIDTH]); + } + float inR = rgb[0] * shade + lum + rim; + float inG = rgb[1] * shade + lum + rim; + float inB = rgb[2] * shade + lum + rim; + // Anti-aliased rim: blend the lens over the surface by coverage. + float cov = s >= 1 ? 1 : s; + outR = outR + (inR - outR) * cov; + outG = outG + (inG - outG) * cov; + outB = outB + (inB - outB) * cov; + } else if (optics[SHADOW] > 0 && optics[SHADOW_WIDTH] > 0 && ny > 0) { + float t = (sdf - optics[SHADOW_WIDTH]) / optics[SHADOW_WIDTH]; + float f = optics[SHADOW] * ny * (float) Math.exp(-t * t); + outR *= 1 - f; + outG *= 1 - f; + outB *= 1 - f; + } + if (optics[OUTLINE_WIDTH] > 0) { + float half = optics[OUTLINE_WIDTH] / 2f; + float ring = 1 - Math.abs(s - half) / half; + if (ring > 0) { + float f = optics[OUTLINE] * (ring > 1 ? 1 : ring); + outR *= 1 - f; + outG *= 1 - f; + outB *= 1 - f; + } + } + float br = ((base >> 16) & 0xff) / 255f; + float bg = ((base >> 8) & 0xff) / 255f; + float bb = (base & 0xff) / 255f; + outR = br + (clamp(outR) - br) * amount; + outG = bg + (clamp(outG) - bg) * amount; + outB = bb + (clamp(outB) - bb) * amount; + dst[y * ow + x] = (base & 0xff000000) | (Math.round(outR * 255) << 16) + | (Math.round(outG * 255) << 8) | Math.round(outB * 255); + } + } + } + + private static float smooth(float t) { + t = t < 0 ? 0 : (t > 1 ? 1 : t); + return t * t * (3 - 2 * t); + } + + private static float clamp(float v) { + return v < 0 ? 0 : (v > 1 ? 1 : v); + } + + private static int pixel(int[] src, int sw, int sh, int x, int y) { + x = x < 0 ? 0 : (x >= sw ? sw - 1 : x); + y = y < 0 ? 0 : (y >= sh ? sh - 1 : y); + return src[y * sw + x]; + } + + /// Bilinear sample of one channel (0 red, 1 green, 2 blue) at pixel-centre + /// coordinates (x, y), edge clamped. + private static float channel(int[] src, int sw, int sh, float x, float y, int c) { + float fx = x - 0.5f; + float fy = y - 0.5f; + int x0 = (int) Math.floor(fx); + int y0 = (int) Math.floor(fy); + float tx = fx - x0; + float ty = fy - y0; + int shift = 16 - 8 * c; + float c00 = (pixel(src, sw, sh, x0, y0) >> shift) & 0xff; + float c10 = (pixel(src, sw, sh, x0 + 1, y0) >> shift) & 0xff; + float c01 = (pixel(src, sw, sh, x0, y0 + 1) >> shift) & 0xff; + float c11 = (pixel(src, sw, sh, x0 + 1, y0 + 1) >> shift) & 0xff; + float top = c00 + (c10 - c00) * tx; + float bot = c01 + (c11 - c01) * tx; + return (top + (bot - top) * ty) / 255f; + } +} diff --git a/CodenameOne/src/com/codename1/ui/plaf/GlassRecipe.java b/CodenameOne/src/com/codename1/ui/plaf/GlassRecipe.java index 201485b8dea..654344f3e4d 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/GlassRecipe.java +++ b/CodenameOne/src/com/codename1/ui/plaf/GlassRecipe.java @@ -181,12 +181,33 @@ public static GlassRecipe liquidChrome27(boolean dark) { : new GlassRecipe(Kind.LIQUID_CHROME, 1.1f, 0.85f, 20f, 0f, 0f); } - /// The iOS 27 floating-pill material. - /// - /// LIGHT is again measured as unchanged -- the fit returned 1.86 / 0.984 / - /// 111.4 against iOS 26's 1.80 / 1.000 / 108.0 -- so the iOS 26 values are - /// reused as the MATERIAL. DARK carries the luminance curve, which takes the - /// fit from rms 11.4/255 to 4.4/255. + /// The iOS 27 floating-pill material: the tab bar of a real + /// `UITabBarController`. + /// + /// MEASURED DIRECTLY, pixel against backdrop. The motion probe + /// (scripts/fidelity-app/ios-native-ref/motion-probe) puts a controller-managed + /// tab bar over three backdrops whose every pixel is known -- the shared + /// glass-backdrop.png, a field of sharp 23 pt colour bands with 1 pt rulers and + /// a flat 50% grey -- and takes lossless simulator screenshots. The bar interior (clear of the + /// ~10 pt refracting rim, the glyphs and the selection) is then fitted as + /// `clamp((lum + (c - lum) * sat) * scale + offset)` of the Gaussian-blurred + /// backdrop, over all three at once: the bands pin the blur radius down (the + /// photo is too smooth to show it) and the grey pins the absolute level, where + /// the live bar and the committed bare-UITabBar golden agree to the level (195 + /// light, 134 dark). + /// + /// Both fit best with a 24 px blur. LIGHT fits at rms 3.4/255; DARK at rms + /// 7.1/255, a luminance curve does not improve it, and what is left is a faint + /// unblurred copy of the backdrop mixed back in, which no recipe parameter + /// models. The offset is then re-anchored so flat grey lands exactly on the + /// measured level. Either way the material keeps the backdrop's colour at + /// full strength (sat x scale ~1.0) and only compresses its luminance: the bar + /// reads as tinted clear glass, not a frosted or darkened slab. That is the + /// whole recipe -- the theme gives the pill no fill of its own. + /// + /// The earlier recipe here was derived indirectly, by inverting the iOS 26 + /// constants out of a bare `UITabBar` tile, and rendered dark mode as a flat + /// charcoal (luma squeezed into 77..110) and light as milky white. /// /// Both appearances carry the iOS 27 edge outline (see {@link #getOutline()}), /// softer on the pill than on the panel: a 127 backdrop falls to about 85 on @@ -196,8 +217,8 @@ public static GlassRecipe liquidChrome27(boolean dark) { /// @return the iOS 27 floating-pill recipe public static GlassRecipe liquidPill27(boolean dark) { return dark - ? new GlassRecipe(Kind.LIQUID_PILL, 5.9f, 0.129f, 77.1f, 0f, 0.2f, 0.065f, 0.85f, 0.55f) - : new GlassRecipe(Kind.LIQUID_PILL, 1.8f, 1.0f, 108f, 0f, 0.2f, 0f, 0f, 0.55f); + ? new GlassRecipe(Kind.LIQUID_PILL, 1.925f, 0.517f, 67.8f, 0f, 0.2f, 0f, 0f, 0.55f) + : new GlassRecipe(Kind.LIQUID_PILL, 2.101f, 0.422f, 141.0f, 0f, 0.2f, 0f, 0f, 0.55f); } /// The iOS 27 glass-panel material, and the recipe that carries the method diff --git a/CodenameOne/src/com/codename1/ui/plaf/VibrancyMatrix.java b/CodenameOne/src/com/codename1/ui/plaf/VibrancyMatrix.java new file mode 100644 index 00000000000..59fed29ba9c --- /dev/null +++ b/CodenameOne/src/com/codename1/ui/plaf/VibrancyMatrix.java @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Codename One in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ +package com.codename1.ui.plaf; + +/// The colour matrix iOS uses to draw VIBRANT content over glass -- tab bar +/// icons and labels, among others. +/// +/// A vibrant glyph is not painted in its tint. Each of its pixels is a colour +/// transform of whatever lies BEHIND it: `out = clamp(M * backdrop + offset)`, +/// with the glyph's coverage deciding how much of `out` replaces the backdrop +/// (Graphics.colorMatrixRegion paints exactly that). The tint only chooses the +/// matrix. That is why the selected tab of an iOS tab bar is a different blue +/// over every backdrop, and far more vivid than the plain accent in dark mode. +/// +/// MEASURED, NOT APPROXIMATED BY EYE. The matrices were read from UIKit itself: the +/// motion probe (scripts/fidelity-app/ios-native-ref/motion-probe) sets a tab +/// bar's tint to thousands of colours on the iOS 27 simulator and reads back the +/// `vibrantColorMatrix` filter UIKit installs on the item layers. Their structure +/// is exact, with `t` the tint and `e = 0.5 * min(t) / max(t)`: +/// +/// - dark: `M = e * I + (0.5 - e) * 1 * t^T / |t|^2`, `offset = t` +/// - light: `M = c * (1 + t)(1 - t)^T + e * I`, +/// `offset = alpha * (1 + t) - 1 + e * t`, `c = (1 - alpha - e) / sum(1 - t)` +/// - grey tints (both): `M = g * I`, `offset = o` from a measured ramp +/// +/// The dark form reproduces 1200 held-out tints to 1e-5. The light `alpha` has no +/// closed form that survived testing, so it is a table over (chroma, normalised +/// value, hue position) least-squares fitted to 8239 measured tints; it reproduces +/// them to 0.0046 (p99 0.0024), which is under one level over the tab bar's light +/// glass. scripts/fidelity-app/tools/tab-motion/tabmotion.py regenerates it. +public final class VibrancyMatrix { + + // ---- generated tables (tabmotion.py vibrancy) ---- + /// Chroma nodes of the light-appearance table, in 1/255 units of max - min. + private static final int[] CHROMA_NODES = {0, 1, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 56, 64, 80, 96, 128, 160, 192, 224, 255}; + /// Nodes of the normalised value min / (1 - chroma). + private static final float[] VALUE_NODES = {0f, 0.02f, 0.05f, 0.1f, 0.2f, 0.35f, 0.5f, 0.65f, 0.8f, 0.9f, 0.95f, 0.98f, 1f}; + /// Hue-position nodes (mid - min) / (max - min): 0, 1/8 .. 1. + private static final int HUE_NODES = 9; + /// Light-appearance darkening alpha, [chroma][value][hue] flattened. + private static final float[] LIGHT_ALPHA = { + 0.76481f, 0.72290f, 0.69431f, 0.67977f, 0.67473f, 0.67978f, 0.69432f, 0.72292f, 0.76483f, 0.60830f, + 0.62616f, 0.63517f, 0.63824f, 0.63976f, 0.63828f, 0.63524f, 0.62622f, 0.60834f, 0.52368f, 0.55527f, + 0.57773f, 0.58903f, 0.59243f, 0.58910f, 0.57784f, 0.55535f, 0.52371f, 0.49362f, 0.51512f, 0.53284f, + 0.54363f, 0.54718f, 0.54371f, 0.53295f, 0.51521f, 0.49363f, 0.48951f, 0.49781f, 0.50606f, 0.51239f, + 0.51481f, 0.51247f, 0.50618f, 0.49789f, 0.48953f, 0.49336f, 0.49351f, 0.49478f, 0.49663f, 0.49754f, + 0.49672f, 0.49489f, 0.49359f, 0.49338f, 0.49798f, 0.49489f, 0.49266f, 0.49156f, 0.49128f, 0.49164f, + 0.49275f, 0.49495f, 0.49798f, 0.50172f, 0.49726f, 0.49316f, 0.49020f, 0.48912f, 0.49026f, 0.49323f, + 0.49731f, 0.50174f, 0.50415f, 0.49712f, 0.49065f, 0.48602f, 0.48433f, 0.48607f, 0.49072f, 0.49721f, + 0.50425f, 0.50270f, 0.49074f, 0.48081f, 0.47464f, 0.47259f, 0.47471f, 0.48097f, 0.49100f, 0.50302f, + 0.48992f, 0.47381f, 0.46198f, 0.45566f, 0.45372f, 0.45584f, 0.46235f, 0.47437f, 0.49063f, 0.45361f, + 0.44313f, 0.43684f, 0.43392f, 0.43276f, 0.43436f, 0.43758f, 0.44402f, 0.45464f, 0.38628f, 0.40109f, + 0.41065f, 0.41526f, 0.41728f, 0.41608f, 0.41186f, 0.40223f, 0.38708f, 0.84980f, 0.76600f, 0.73798f, + 0.74329f, 0.75530f, 0.74324f, 0.73789f, 0.76586f, 0.84961f, 0.55313f, 0.63215f, 0.65036f, 0.64346f, + 0.63269f, 0.64346f, 0.65036f, 0.63214f, 0.55309f, 0.52474f, 0.55544f, 0.57264f, 0.57134f, 0.56633f, + 0.57141f, 0.57276f, 0.55555f, 0.52471f, 0.51164f, 0.51817f, 0.52610f, 0.52977f, 0.53043f, 0.52992f, + 0.52633f, 0.51840f, 0.51189f, 0.50568f, 0.50301f, 0.50503f, 0.50871f, 0.51059f, 0.50893f, 0.50531f, + 0.50323f, 0.50568f, 0.50294f, 0.49861f, 0.49794f, 0.49970f, 0.50102f, 0.49990f, 0.49818f, 0.49876f, + 0.50293f, 0.50157f, 0.49845f, 0.49695f, 0.49696f, 0.49742f, 0.49708f, 0.49711f, 0.49855f, 0.50156f, + 0.50045f, 0.49902f, 0.49733f, 0.49610f, 0.49582f, 0.49616f, 0.49743f, 0.49910f, 0.50044f, 0.49891f, + 0.49778f, 0.49544f, 0.49342f, 0.49275f, 0.49345f, 0.49550f, 0.49784f, 0.49891f, 0.49616f, 0.49147f, + 0.48698f, 0.48523f, 0.48509f, 0.48520f, 0.48692f, 0.49142f, 0.49615f, 0.49037f, 0.47493f, 0.46628f, + 0.46668f, 0.46911f, 0.46651f, 0.46596f, 0.47451f, 0.49007f, 0.47716f, 0.44078f, 0.43050f, 0.43202f, + 0.43651f, 0.43150f, 0.42971f, 0.43978f, 0.47548f, 0.35196f, 0.38229f, 0.38909f, 0.38197f, 0.37378f, + 0.38081f, 0.38744f, 0.38111f, 0.35196f, 0.84961f, 0.79580f, 0.78529f, 0.80930f, 0.84941f, 0.80920f, + 0.78510f, 0.79552f, 0.84921f, 0.59602f, 0.64733f, 0.65487f, 0.63541f, 0.59596f, 0.63537f, 0.65481f, + 0.64723f, 0.59591f, 0.54621f, 0.56135f, 0.56752f, 0.55686f, 0.54618f, 0.55690f, 0.56760f, 0.56144f, + 0.54612f, 0.52283f, 0.52246f, 0.52477f, 0.52434f, 0.52283f, 0.52454f, 0.52507f, 0.52280f, 0.52343f, + 0.51110f, 0.50758f, 0.50780f, 0.51004f, 0.51103f, 0.51043f, 0.50826f, 0.50790f, 0.51113f, 0.50582f, + 0.50275f, 0.50230f, 0.50416f, 0.50580f, 0.50437f, 0.50259f, 0.50295f, 0.50576f, 0.50312f, 0.50139f, + 0.50090f, 0.50179f, 0.50311f, 0.50189f, 0.50109f, 0.50153f, 0.50310f, 0.50093f, 0.50059f, 0.50020f, + 0.50020f, 0.50090f, 0.50020f, 0.50035f, 0.50071f, 0.50088f, 0.49801f, 0.49832f, 0.49780f, 0.49742f, + 0.49802f, 0.49737f, 0.49788f, 0.49837f, 0.49794f, 0.49228f, 0.49139f, 0.49011f, 0.49096f, 0.49242f, + 0.49085f, 0.48987f, 0.49106f, 0.49229f, 0.48188f, 0.47350f, 0.47045f, 0.47585f, 0.48131f, 0.47544f, + 0.46949f, 0.47208f, 0.48078f, 0.45796f, 0.43451f, 0.42907f, 0.43646f, 0.45549f, 0.43490f, 0.42672f, + 0.43152f, 0.45262f, 0.35392f, 0.36929f, 0.36654f, 0.34860f, 0.32392f, 0.34496f, 0.36166f, 0.36582f, + 0.35392f, 0.84941f, 0.82014f, 0.83414f, 0.85676f, 0.85279f, 0.85660f, 0.83385f, 0.81972f, 0.84882f, + 0.62814f, 0.65913f, 0.64119f, 0.62150f, 0.63279f, 0.62146f, 0.64106f, 0.65893f, 0.62791f, 0.56502f, + 0.56989f, 0.56952f, 0.56271f, 0.55417f, 0.56265f, 0.56948f, 0.56985f, 0.56486f, 0.53346f, 0.53032f, + 0.53312f, 0.53361f, 0.52861f, 0.53375f, 0.53335f, 0.53056f, 0.53412f, 0.51642f, 0.51371f, 0.51498f, + 0.51705f, 0.51594f, 0.51741f, 0.51558f, 0.51401f, 0.51649f, 0.50867f, 0.50691f, 0.50751f, 0.50920f, + 0.50900f, 0.50896f, 0.50764f, 0.50711f, 0.50857f, 0.50468f, 0.50385f, 0.50410f, 0.50494f, 0.50505f, + 0.50485f, 0.50423f, 0.50405f, 0.50462f, 0.50152f, 0.50153f, 0.50142f, 0.50152f, 0.50174f, 0.50139f, + 0.50160f, 0.50172f, 0.50144f, 0.49697f, 0.49777f, 0.49715f, 0.49679f, 0.49763f, 0.49664f, 0.49726f, + 0.49781f, 0.49679f, 0.48831f, 0.48955f, 0.48806f, 0.48809f, 0.49124f, 0.48792f, 0.48771f, 0.48887f, + 0.48763f, 0.47442f, 0.47086f, 0.47129f, 0.47482f, 0.47831f, 0.47440f, 0.46988f, 0.46825f, 0.47218f, + 0.44370f, 0.42982f, 0.43573f, 0.44263f, 0.43600f, 0.43989f, 0.43155f, 0.42452f, 0.43415f, 0.35588f, + 0.35905f, 0.34444f, 0.32699f, 0.32344f, 0.32060f, 0.33644f, 0.35350f, 0.35588f, 0.84922f, 0.83640f, + 0.84902f, 0.84720f, 0.84882f, 0.84699f, 0.84862f, 0.83580f, 0.84842f, 0.65308f, 0.67238f, 0.65299f, + 0.66207f, 0.65290f, 0.66199f, 0.65281f, 0.67206f, 0.65271f, 0.58160f, 0.58447f, 0.58157f, 0.57985f, + 0.58152f, 0.57989f, 0.58146f, 0.58422f, 0.58141f, 0.54439f, 0.54313f, 0.54380f, 0.54321f, 0.54378f, + 0.54323f, 0.54373f, 0.54273f, 0.54370f, 0.52181f, 0.52168f, 0.52181f, 0.52261f, 0.52172f, 0.52120f, + 0.52176f, 0.52169f, 0.52177f, 0.51144f, 0.51132f, 0.51145f, 0.51209f, 0.51143f, 0.51110f, 0.51141f, + 0.51146f, 0.51141f, 0.50622f, 0.50614f, 0.50620f, 0.50656f, 0.50618f, 0.50606f, 0.50615f, 0.50642f, + 0.50612f, 0.50190f, 0.50209f, 0.50188f, 0.50201f, 0.50184f, 0.50226f, 0.50183f, 0.50250f, 0.50179f, + 0.49612f, 0.49642f, 0.49612f, 0.49593f, 0.49606f, 0.49638f, 0.49579f, 0.49663f, 0.49584f, 0.48588f, + 0.48602f, 0.48568f, 0.48564f, 0.48549f, 0.48573f, 0.48520f, 0.48489f, 0.48465f, 0.46783f, 0.46552f, + 0.46685f, 0.46686f, 0.46590f, 0.46579f, 0.46499f, 0.46147f, 0.46416f, 0.43303f, 0.42394f, 0.42915f, + 0.42332f, 0.42547f, 0.41959f, 0.42216f, 0.41509f, 0.41948f, 0.35784f, 0.35376f, 0.33984f, 0.33341f, + 0.32784f, 0.32730f, 0.33137f, 0.34683f, 0.35784f, 0.84883f, 0.84817f, 0.84956f, 0.84786f, 0.84823f, + 0.84756f, 0.84896f, 0.84727f, 0.84763f, 0.68883f, 0.68959f, 0.68695f, 0.68942f, 0.68848f, 0.68924f, + 0.68661f, 0.68907f, 0.68814f, 0.60896f, 0.60916f, 0.60833f, 0.60905f, 0.60875f, 0.60894f, 0.60814f, + 0.60884f, 0.60853f, 0.56281f, 0.56285f, 0.56250f, 0.56173f, 0.56266f, 0.56276f, 0.56225f, 0.56158f, + 0.56255f, 0.53209f, 0.53181f, 0.53330f, 0.53113f, 0.53206f, 0.53197f, 0.53268f, 0.53167f, 0.53173f, + 0.51702f, 0.51681f, 0.51742f, 0.51668f, 0.51694f, 0.51678f, 0.51721f, 0.51677f, 0.51680f, 0.50928f, + 0.50928f, 0.50920f, 0.50923f, 0.50918f, 0.50921f, 0.50903f, 0.50915f, 0.50908f, 0.50301f, 0.50294f, + 0.50285f, 0.50287f, 0.50282f, 0.50395f, 0.50034f, 0.50389f, 0.50269f, 0.49456f, 0.49443f, 0.49422f, + 0.49413f, 0.49416f, 0.49575f, 0.49053f, 0.49543f, 0.49376f, 0.47983f, 0.47981f, 0.47926f, 0.47867f, + 0.47846f, 0.47889f, 0.47767f, 0.47773f, 0.47734f, 0.45795f, 0.45638f, 0.45583f, 0.45459f, 0.45384f, + 0.45279f, 0.45258f, 0.45118f, 0.45063f, 0.41903f, 0.41559f, 0.41342f, 0.40946f, 0.40696f, 0.40410f, + 0.40257f, 0.40006f, 0.39912f, 0.36176f, 0.35264f, 0.34313f, 0.33647f, 0.33176f, 0.33059f, 0.33411f, + 0.34518f, 0.36176f, 0.84845f, 0.84824f, 0.84804f, 0.84784f, 0.84764f, 0.84743f, 0.84723f, 0.84703f, + 0.84683f, 0.71320f, 0.71307f, 0.71294f, 0.71281f, 0.71268f, 0.71254f, 0.71242f, 0.71229f, 0.71216f, + 0.63255f, 0.63246f, 0.63237f, 0.63228f, 0.63219f, 0.63211f, 0.63202f, 0.63193f, 0.63184f, 0.57904f, + 0.57864f, 0.57894f, 0.57888f, 0.57884f, 0.57876f, 0.57870f, 0.57865f, 0.57860f, 0.54170f, 0.54144f, + 0.54178f, 0.54173f, 0.54158f, 0.54164f, 0.54161f, 0.54155f, 0.54140f, 0.52238f, 0.52234f, 0.52231f, + 0.52228f, 0.52222f, 0.52210f, 0.52212f, 0.52224f, 0.52206f, 0.51233f, 0.51302f, 0.51217f, 0.51208f, + 0.51213f, 0.51316f, 0.51235f, 0.51051f, 0.51193f, 0.50414f, 0.50399f, 0.50401f, 0.50390f, 0.50383f, + 0.50366f, 0.50366f, 0.50374f, 0.50358f, 0.49312f, 0.49293f, 0.49277f, 0.49260f, 0.49244f, 0.49230f, + 0.49214f, 0.49197f, 0.49192f, 0.47502f, 0.47433f, 0.47382f, 0.47333f, 0.47284f, 0.47236f, 0.47190f, + 0.47145f, 0.47100f, 0.44939f, 0.44740f, 0.44595f, 0.44453f, 0.44316f, 0.44184f, 0.44109f, 0.43956f, + 0.43835f, 0.41114f, 0.40703f, 0.40297f, 0.39906f, 0.39544f, 0.39225f, 0.39034f, 0.38805f, 0.38704f, + 0.36569f, 0.35639f, 0.34769f, 0.34037f, 0.33565f, 0.33486f, 0.33922f, 0.34953f, 0.36569f, 0.84807f, + 0.84781f, 0.84755f, 0.84729f, 0.84704f, 0.84679f, 0.84653f, 0.84628f, 0.84603f, 0.73107f, 0.73089f, + 0.73070f, 0.73053f, 0.73035f, 0.73017f, 0.73000f, 0.72982f, 0.72965f, 0.65207f, 0.65194f, 0.65182f, + 0.65169f, 0.65156f, 0.65144f, 0.65131f, 0.65119f, 0.65106f, 0.59360f, 0.59285f, 0.59407f, 0.59248f, + 0.59321f, 0.59306f, 0.59331f, 0.59276f, 0.59286f, 0.55123f, 0.55081f, 0.54937f, 0.55204f, 0.55089f, + 0.55126f, 0.54880f, 0.55198f, 0.55060f, 0.52764f, 0.52811f, 0.52723f, 0.52724f, 0.52746f, 0.52763f, + 0.52775f, 0.52618f, 0.52717f, 0.51536f, 0.51459f, 0.51535f, 0.51540f, 0.51497f, 0.51401f, 0.51465f, + 0.51658f, 0.51480f, 0.50533f, 0.50532f, 0.50528f, 0.50469f, 0.50495f, 0.50511f, 0.50450f, 0.50426f, + 0.50446f, 0.49197f, 0.49103f, 0.49225f, 0.49097f, 0.49060f, 0.49058f, 0.49145f, 0.48928f, 0.49008f, + 0.47085f, 0.46970f, 0.46958f, 0.46817f, 0.46998f, 0.46551f, 0.46726f, 0.46610f, 0.46533f, 0.44252f, + 0.44048f, 0.43845f, 0.43649f, 0.43474f, 0.43200f, 0.43371f, 0.43038f, 0.42832f, 0.40678f, 0.40186f, + 0.39701f, 0.39238f, 0.38822f, 0.38458f, 0.38395f, 0.37979f, 0.38032f, 0.36961f, 0.36028f, 0.35146f, + 0.34398f, 0.33957f, 0.33832f, 0.34230f, 0.35290f, 0.36961f, 0.84769f, 0.84737f, 0.84706f, 0.84675f, + 0.84644f, 0.84614f, 0.84583f, 0.84553f, 0.84522f, 0.74471f, 0.74447f, 0.74424f, 0.74402f, 0.74379f, + 0.74356f, 0.74333f, 0.74311f, 0.74288f, 0.66851f, 0.66833f, 0.66817f, 0.66800f, 0.66782f, 0.66766f, + 0.66749f, 0.66732f, 0.66716f, 0.60697f, 0.60694f, 0.60679f, 0.60665f, 0.60648f, 0.60642f, 0.60630f, + 0.60617f, 0.60600f, 0.56041f, 0.55946f, 0.55962f, 0.55964f, 0.55994f, 0.55932f, 0.55927f, 0.55918f, + 0.55953f, 0.53266f, 0.53274f, 0.53265f, 0.53257f, 0.53242f, 0.53237f, 0.53230f, 0.53220f, 0.53218f, + 0.51836f, 0.51830f, 0.51819f, 0.51808f, 0.51794f, 0.51789f, 0.51778f, 0.51771f, 0.51751f, 0.50657f, + 0.50634f, 0.50620f, 0.50606f, 0.50595f, 0.50580f, 0.50559f, 0.50545f, 0.50545f, 0.49117f, 0.49058f, + 0.49025f, 0.48982f, 0.48968f, 0.48938f, 0.48884f, 0.48844f, 0.48837f, 0.46741f, 0.46641f, 0.46541f, + 0.46443f, 0.46346f, 0.46252f, 0.46173f, 0.46126f, 0.46003f, 0.43790f, 0.43530f, 0.43273f, 0.43023f, + 0.42787f, 0.42563f, 0.42376f, 0.42246f, 0.42062f, 0.40462f, 0.39906f, 0.39365f, 0.38839f, 0.38387f, + 0.37984f, 0.37739f, 0.37589f, 0.37693f, 0.37353f, 0.36419f, 0.35553f, 0.34774f, 0.34350f, 0.34192f, + 0.34706f, 0.35636f, 0.37353f, 0.84694f, 0.84651f, 0.84609f, 0.84567f, 0.84525f, 0.84483f, 0.84442f, + 0.84401f, 0.84360f, 0.76415f, 0.76376f, 0.76342f, 0.76309f, 0.76275f, 0.76242f, 0.76209f, 0.76176f, + 0.76149f, 0.69252f, 0.69385f, 0.69358f, 0.69331f, 0.69310f, 0.69279f, 0.69252f, 0.69226f, 0.69043f, + 0.62794f, 0.62920f, 0.62894f, 0.62872f, 0.62839f, 0.62832f, 0.62808f, 0.62788f, 0.62634f, 0.57677f, + 0.57474f, 0.57485f, 0.57482f, 0.57618f, 0.57452f, 0.57456f, 0.57440f, 0.57550f, 0.54200f, 0.54217f, + 0.54226f, 0.54208f, 0.54167f, 0.54178f, 0.54162f, 0.54150f, 0.54082f, 0.52435f, 0.52429f, 0.52407f, + 0.52389f, 0.52365f, 0.52351f, 0.52333f, 0.52317f, 0.52290f, 0.50944f, 0.50896f, 0.50869f, 0.50841f, + 0.50822f, 0.50790f, 0.50771f, 0.50736f, 0.50736f, 0.48998f, 0.48952f, 0.48895f, 0.48838f, 0.48792f, + 0.48729f, 0.48626f, 0.48622f, 0.48554f, 0.46350f, 0.46143f, 0.45987f, 0.45835f, 0.45702f, 0.45564f, + 0.45426f, 0.45297f, 0.45260f, 0.43340f, 0.42916f, 0.42561f, 0.42218f, 0.41960f, 0.41671f, 0.41363f, + 0.41175f, 0.41148f, 0.40425f, 0.39784f, 0.39153f, 0.38563f, 0.38045f, 0.37646f, 0.37415f, 0.37398f, + 0.37637f, 0.38137f, 0.37208f, 0.36337f, 0.35609f, 0.35131f, 0.35053f, 0.35490f, 0.36522f, 0.38137f, + 0.84619f, 0.84566f, 0.84512f, 0.84458f, 0.84405f, 0.84352f, 0.84300f, 0.84248f, 0.84196f, 0.77717f, + 0.77672f, 0.77627f, 0.77582f, 0.77537f, 0.77493f, 0.77449f, 0.77405f, 0.77362f, 0.71286f, 0.71249f, + 0.71213f, 0.71174f, 0.71137f, 0.71101f, 0.71065f, 0.71028f, 0.70993f, 0.64923f, 0.64891f, 0.64781f, + 0.64843f, 0.64793f, 0.64772f, 0.64733f, 0.64720f, 0.64655f, 0.59064f, 0.58911f, 0.59054f, 0.59004f, + 0.58981f, 0.58949f, 0.59003f, 0.58892f, 0.58890f, 0.55202f, 0.55207f, 0.55158f, 0.55141f, 0.55111f, + 0.55091f, 0.55067f, 0.55064f, 0.55027f, 0.53021f, 0.53014f, 0.52983f, 0.52950f, 0.52906f, 0.52897f, + 0.52868f, 0.52842f, 0.52796f, 0.51237f, 0.51175f, 0.51130f, 0.51123f, 0.51066f, 0.51020f, 0.50987f, + 0.50930f, 0.50924f, 0.48950f, 0.48844f, 0.48770f, 0.48672f, 0.48620f, 0.48509f, 0.48450f, 0.48337f, + 0.48296f, 0.46014f, 0.45796f, 0.45578f, 0.45368f, 0.45168f, 0.44973f, 0.44798f, 0.44644f, 0.44509f, + 0.43134f, 0.42692f, 0.42257f, 0.41836f, 0.41454f, 0.41109f, 0.40846f, 0.40651f, 0.40590f, 0.40696f, + 0.39988f, 0.39303f, 0.38654f, 0.38118f, 0.37687f, 0.37542f, 0.37590f, 0.38024f, 0.38922f, 0.37984f, + 0.37122f, 0.36362f, 0.35917f, 0.35783f, 0.36275f, 0.37245f, 0.38922f, 0.84547f, 0.84480f, 0.84415f, + 0.84350f, 0.84285f, 0.84221f, 0.84157f, 0.84094f, 0.84031f, 0.78650f, 0.78593f, 0.78535f, 0.78479f, + 0.78423f, 0.78367f, 0.78312f, 0.78257f, 0.78203f, 0.72753f, 0.72703f, 0.72672f, 0.72604f, 0.72556f, + 0.72506f, 0.72461f, 0.72414f, 0.72370f, 0.66513f, 0.66530f, 0.66491f, 0.66451f, 0.66398f, 0.66398f, + 0.66333f, 0.66297f, 0.66202f, 0.60220f, 0.60387f, 0.60334f, 0.60272f, 0.60070f, 0.60192f, 0.60166f, + 0.60135f, 0.59948f, 0.56125f, 0.56083f, 0.56051f, 0.56022f, 0.55997f, 0.55945f, 0.55925f, 0.55876f, + 0.55842f, 0.53604f, 0.53590f, 0.53549f, 0.53506f, 0.53443f, 0.53420f, 0.53384f, 0.53347f, 0.53296f, + 0.51560f, 0.51476f, 0.51419f, 0.51370f, 0.51337f, 0.51252f, 0.51201f, 0.51137f, 0.51120f, 0.49023f, + 0.48871f, 0.48750f, 0.48639f, 0.48560f, 0.48408f, 0.48311f, 0.48199f, 0.48142f, 0.45922f, 0.45641f, + 0.45363f, 0.45093f, 0.44846f, 0.44605f, 0.44375f, 0.44196f, 0.44063f, 0.43234f, 0.42724f, 0.42222f, + 0.41743f, 0.41307f, 0.40936f, 0.40658f, 0.40499f, 0.40489f, 0.41133f, 0.40384f, 0.39655f, 0.38986f, + 0.38424f, 0.38035f, 0.37907f, 0.38076f, 0.38600f, 0.39706f, 0.38777f, 0.37906f, 0.37177f, 0.36698f, + 0.36623f, 0.37059f, 0.38085f, 0.39696f, 0.84405f, 0.84313f, 0.84222f, 0.84132f, 0.84043f, 0.83956f, + 0.83861f, 0.83782f, 0.83698f, 0.79888f, 0.79803f, 0.79721f, 0.79639f, 0.79559f, 0.79495f, 0.79392f, + 0.79300f, 0.79246f, 0.74917f, 0.74883f, 0.74811f, 0.74735f, 0.74622f, 0.74590f, 0.74519f, 0.74445f, + 0.74340f, 0.68881f, 0.68988f, 0.68957f, 0.68884f, 0.68627f, 0.68754f, 0.68702f, 0.68649f, 0.68391f, + 0.62553f, 0.62547f, 0.62521f, 0.62456f, 0.62335f, 0.62410f, 0.62281f, 0.62221f, 0.62127f, 0.57789f, + 0.57739f, 0.57689f, 0.57637f, 0.57567f, 0.57517f, 0.57492f, 0.57405f, 0.57349f, 0.54780f, 0.54736f, + 0.54664f, 0.54595f, 0.54499f, 0.54460f, 0.54387f, 0.54328f, 0.54248f, 0.52272f, 0.52154f, 0.52056f, + 0.51946f, 0.51878f, 0.51763f, 0.51686f, 0.51585f, 0.51534f, 0.49344f, 0.49136f, 0.48945f, 0.48764f, + 0.48600f, 0.48400f, 0.48251f, 0.48085f, 0.47987f, 0.46220f, 0.45808f, 0.45430f, 0.45061f, 0.44749f, + 0.44406f, 0.44131f, 0.43932f, 0.43821f, 0.43857f, 0.43226f, 0.42619f, 0.42050f, 0.41563f, 0.41144f, + 0.40886f, 0.40819f, 0.40950f, 0.42266f, 0.41459f, 0.40678f, 0.39970f, 0.39400f, 0.39047f, 0.38997f, + 0.39301f, 0.40017f, 0.41275f, 0.40345f, 0.39475f, 0.38746f, 0.38270f, 0.38192f, 0.38627f, 0.39650f, + 0.41260f, 0.84269f, 0.84150f, 0.84032f, 0.83916f, 0.83802f, 0.83689f, 0.83571f, 0.83468f, 0.83362f, + 0.80658f, 0.80546f, 0.80443f, 0.80334f, 0.80225f, 0.80125f, 0.80012f, 0.79904f, 0.79815f, 0.76427f, + 0.76305f, 0.76200f, 0.76104f, 0.76026f, 0.75916f, 0.75822f, 0.75727f, 0.75649f, 0.71165f, 0.70941f, + 0.70948f, 0.70799f, 0.70791f, 0.70652f, 0.70575f, 0.70489f, 0.70459f, 0.64669f, 0.64615f, 0.64548f, + 0.64462f, 0.64334f, 0.64363f, 0.64232f, 0.64154f, 0.64024f, 0.59361f, 0.59295f, 0.59206f, 0.59126f, + 0.59033f, 0.58950f, 0.58864f, 0.58777f, 0.58703f, 0.55946f, 0.55856f, 0.55746f, 0.55646f, 0.55527f, + 0.55437f, 0.55344f, 0.55255f, 0.55152f, 0.53087f, 0.52916f, 0.52771f, 0.52600f, 0.52518f, 0.52345f, + 0.52221f, 0.52054f, 0.51975f, 0.49850f, 0.49563f, 0.49294f, 0.49023f, 0.48815f, 0.48517f, 0.48330f, + 0.48156f, 0.48035f, 0.46804f, 0.46326f, 0.45850f, 0.45388f, 0.44964f, 0.44618f, 0.44303f, 0.44119f, + 0.44053f, 0.44837f, 0.44143f, 0.43470f, 0.42841f, 0.42298f, 0.41891f, 0.41678f, 0.41696f, 0.42017f, + 0.43597f, 0.42757f, 0.41949f, 0.41227f, 0.40665f, 0.40353f, 0.40387f, 0.40839f, 0.41767f, 0.42843f, + 0.41914f, 0.41043f, 0.40315f, 0.39835f, 0.39760f, 0.40196f, 0.41228f, 0.42845f, 0.84138f, 0.83991f, + 0.83845f, 0.83701f, 0.83560f, 0.83421f, 0.83285f, 0.83152f, 0.83023f, 0.81162f, 0.81017f, 0.80889f, + 0.80750f, 0.80613f, 0.80482f, 0.80353f, 0.80226f, 0.80107f, 0.77404f, 0.77333f, 0.77189f, 0.77057f, + 0.76896f, 0.76798f, 0.76705f, 0.76607f, 0.76412f, 0.72662f, 0.72492f, 0.72377f, 0.72257f, 0.72189f, + 0.71998f, 0.71898f, 0.71806f, 0.71731f, 0.66261f, 0.66230f, 0.66088f, 0.65950f, 0.65848f, 0.65758f, + 0.65711f, 0.65601f, 0.65396f, 0.60802f, 0.60708f, 0.60579f, 0.60453f, 0.60364f, 0.60221f, 0.60087f, + 0.60014f, 0.59901f, 0.57127f, 0.56987f, 0.56833f, 0.56681f, 0.56524f, 0.56401f, 0.56284f, 0.56158f, + 0.56042f, 0.53966f, 0.53750f, 0.53551f, 0.53362f, 0.53183f, 0.52991f, 0.52808f, 0.52639f, 0.52528f, + 0.50623f, 0.50267f, 0.49931f, 0.49599f, 0.49260f, 0.48993f, 0.48740f, 0.48537f, 0.48398f, 0.47720f, + 0.47160f, 0.46608f, 0.46081f, 0.45602f, 0.45198f, 0.44897f, 0.44715f, 0.44734f, 0.46023f, 0.45280f, + 0.44553f, 0.43882f, 0.43323f, 0.42905f, 0.42725f, 0.42857f, 0.43326f, 0.45018f, 0.44156f, 0.43331f, + 0.42602f, 0.42048f, 0.41751f, 0.41852f, 0.42421f, 0.43473f, 0.44412f, 0.43482f, 0.42610f, 0.41879f, + 0.41408f, 0.41318f, 0.41759f, 0.42796f, 0.44412f, 0.84013f, 0.83837f, 0.83661f, 0.83487f, 0.83317f, + 0.83153f, 0.82991f, 0.82834f, 0.82680f, 0.81473f, 0.81336f, 0.81163f, 0.80989f, 0.80802f, 0.80673f, + 0.80518f, 0.80366f, 0.80188f, 0.78285f, 0.78115f, 0.77961f, 0.77805f, 0.77637f, 0.77500f, 0.77349f, + 0.77204f, 0.77051f, 0.73932f, 0.73745f, 0.73617f, 0.73468f, 0.73314f, 0.73135f, 0.73013f, 0.72858f, + 0.72759f, 0.67851f, 0.67706f, 0.67607f, 0.67461f, 0.67279f, 0.67179f, 0.67050f, 0.66922f, 0.66745f, + 0.62256f, 0.62058f, 0.61891f, 0.61729f, 0.61599f, 0.61409f, 0.61280f, 0.61166f, 0.61057f, 0.58304f, + 0.58098f, 0.57902f, 0.57713f, 0.57520f, 0.57347f, 0.57185f, 0.57034f, 0.56905f, 0.54937f, 0.54644f, + 0.54397f, 0.54138f, 0.53918f, 0.53687f, 0.53462f, 0.53251f, 0.53117f, 0.51501f, 0.51074f, 0.50661f, + 0.50260f, 0.49868f, 0.49558f, 0.49262f, 0.49047f, 0.48919f, 0.48796f, 0.48168f, 0.47556f, 0.46962f, + 0.46444f, 0.46025f, 0.45747f, 0.45617f, 0.45786f, 0.47333f, 0.46549f, 0.45787f, 0.45096f, 0.44526f, + 0.44145f, 0.44028f, 0.44267f, 0.44919f, 0.46488f, 0.45612f, 0.44766f, 0.44038f, 0.43496f, 0.43233f, + 0.43382f, 0.44028f, 0.45179f, 0.45980f, 0.45051f, 0.44179f, 0.43452f, 0.42975f, 0.42898f, 0.43333f, + 0.44365f, 0.45980f, 0.83896f, 0.83689f, 0.83482f, 0.83279f, 0.83076f, 0.82886f, 0.82697f, 0.82516f, + 0.82338f, 0.81733f, 0.81535f, 0.81333f, 0.81135f, 0.80935f, 0.80750f, 0.80567f, 0.80390f, 0.80217f, + 0.78894f, 0.78699f, 0.78496f, 0.78312f, 0.78117f, 0.77939f, 0.77757f, 0.77590f, 0.77426f, 0.74944f, + 0.74741f, 0.74561f, 0.74387f, 0.74194f, 0.74023f, 0.73843f, 0.73657f, 0.73514f, 0.69128f, 0.68964f, + 0.68771f, 0.68641f, 0.68419f, 0.68327f, 0.68040f, 0.67963f, 0.67792f, 0.63491f, 0.63292f, 0.63100f, + 0.62920f, 0.62720f, 0.62527f, 0.62354f, 0.62211f, 0.62037f, 0.59395f, 0.59177f, 0.58953f, 0.58725f, + 0.58493f, 0.58273f, 0.58075f, 0.57899f, 0.57735f, 0.55958f, 0.55638f, 0.55315f, 0.55016f, 0.54710f, + 0.54434f, 0.54193f, 0.53969f, 0.53796f, 0.52524f, 0.52027f, 0.51566f, 0.51099f, 0.50681f, 0.50284f, + 0.49976f, 0.49751f, 0.49670f, 0.49999f, 0.49318f, 0.48646f, 0.48008f, 0.47462f, 0.47049f, 0.46789f, + 0.46771f, 0.47004f, 0.48716f, 0.47893f, 0.47105f, 0.46391f, 0.45817f, 0.45447f, 0.45386f, 0.45735f, + 0.46476f, 0.47987f, 0.47100f, 0.46253f, 0.45512f, 0.44975f, 0.44744f, 0.44914f, 0.45577f, 0.46836f, + 0.47549f, 0.46620f, 0.45749f, 0.45021f, 0.44545f, 0.44466f, 0.44900f, 0.45914f, 0.47547f, 0.83693f, + 0.83415f, 0.83141f, 0.82872f, 0.82611f, 0.82357f, 0.82114f, 0.81887f, 0.81674f, 0.82039f, 0.81764f, + 0.81493f, 0.81228f, 0.80968f, 0.80717f, 0.80480f, 0.80255f, 0.80046f, 0.79814f, 0.79543f, 0.79277f, + 0.79017f, 0.78758f, 0.78514f, 0.78276f, 0.78060f, 0.77851f, 0.76553f, 0.76280f, 0.76009f, 0.75749f, + 0.75505f, 0.75272f, 0.75032f, 0.74767f, 0.74617f, 0.71344f, 0.71133f, 0.70859f, 0.70613f, 0.70297f, + 0.70112f, 0.69872f, 0.69663f, 0.69425f, 0.65857f, 0.65594f, 0.65354f, 0.65066f, 0.64703f, 0.64489f, + 0.64264f, 0.64057f, 0.63816f, 0.61756f, 0.61406f, 0.61055f, 0.60723f, 0.60423f, 0.60111f, 0.59844f, + 0.59619f, 0.59441f, 0.58186f, 0.57755f, 0.57320f, 0.56907f, 0.56504f, 0.56150f, 0.55839f, 0.55600f, + 0.55440f, 0.54856f, 0.54251f, 0.53665f, 0.53097f, 0.52592f, 0.52171f, 0.51834f, 0.51668f, 0.51688f, + 0.52659f, 0.51896f, 0.51158f, 0.50462f, 0.49879f, 0.49467f, 0.49275f, 0.49398f, 0.49883f, 0.51620f, + 0.50762f, 0.49941f, 0.49203f, 0.48630f, 0.48307f, 0.48354f, 0.48836f, 0.49795f, 0.51036f, 0.50135f, + 0.49275f, 0.48518f, 0.48010f, 0.47796f, 0.48023f, 0.48750f, 0.50130f, 0.50686f, 0.49754f, 0.48884f, + 0.48151f, 0.47679f, 0.47589f, 0.48016f, 0.49049f, 0.50685f, 0.83519f, 0.83166f, 0.82822f, 0.82484f, + 0.82152f, 0.81843f, 0.81548f, 0.81270f, 0.81020f, 0.82236f, 0.81886f, 0.81542f, 0.81204f, 0.80879f, + 0.80567f, 0.80274f, 0.79998f, 0.79740f, 0.80453f, 0.80098f, 0.79757f, 0.79426f, 0.79096f, 0.78782f, + 0.78500f, 0.78232f, 0.77990f, 0.77765f, 0.77406f, 0.77058f, 0.76716f, 0.76401f, 0.76098f, 0.75795f, + 0.75541f, 0.75310f, 0.73285f, 0.72917f, 0.72548f, 0.72254f, 0.71905f, 0.71621f, 0.71257f, 0.71054f, + 0.70816f, 0.68119f, 0.67710f, 0.67345f, 0.66965f, 0.66620f, 0.66257f, 0.65972f, 0.65719f, 0.65503f, + 0.64056f, 0.63606f, 0.63178f, 0.62723f, 0.62327f, 0.61962f, 0.61635f, 0.61351f, 0.61179f, 0.60560f, + 0.60011f, 0.59486f, 0.58963f, 0.58478f, 0.58063f, 0.57727f, 0.57478f, 0.57374f, 0.57444f, 0.56741f, + 0.56064f, 0.55417f, 0.54844f, 0.54398f, 0.54103f, 0.54030f, 0.54266f, 0.55511f, 0.54691f, 0.53892f, + 0.53158f, 0.52571f, 0.52179f, 0.52072f, 0.52360f, 0.53078f, 0.54619f, 0.53730f, 0.52884f, 0.52130f, + 0.51591f, 0.51329f, 0.51434f, 0.52020f, 0.53129f, 0.54130f, 0.53218f, 0.52355f, 0.51601f, 0.51088f, + 0.50904f, 0.51212f, 0.52036f, 0.53440f, 0.53824f, 0.52891f, 0.52018f, 0.51287f, 0.50821f, 0.50720f, + 0.51159f, 0.52185f, 0.53823f, 0.83326f, 0.82809f, 0.82308f, 0.81819f, 0.81357f, 0.80925f, 0.80537f, + 0.80211f, 0.79960f, 0.82510f, 0.81993f, 0.81498f, 0.81002f, 0.80536f, 0.80111f, 0.79735f, 0.79399f, + 0.79149f, 0.81354f, 0.80825f, 0.80313f, 0.79845f, 0.79376f, 0.78925f, 0.78550f, 0.78222f, 0.77997f, + 0.79525f, 0.78981f, 0.78479f, 0.77986f, 0.77526f, 0.77073f, 0.76702f, 0.76386f, 0.76146f, 0.76213f, + 0.75695f, 0.75153f, 0.74631f, 0.74147f, 0.73718f, 0.73321f, 0.73016f, 0.72827f, 0.72116f, 0.71532f, + 0.70955f, 0.70408f, 0.69895f, 0.69413f, 0.69044f, 0.68789f, 0.68633f, 0.68652f, 0.68003f, 0.67374f, + 0.66773f, 0.66225f, 0.65751f, 0.65395f, 0.65171f, 0.65142f, 0.65630f, 0.64901f, 0.64198f, 0.63527f, + 0.62928f, 0.62461f, 0.62148f, 0.62047f, 0.62223f, 0.62986f, 0.62171f, 0.61387f, 0.60639f, 0.60014f, + 0.59597f, 0.59417f, 0.59610f, 0.60192f, 0.61450f, 0.60570f, 0.59718f, 0.58973f, 0.58366f, 0.58045f, + 0.58115f, 0.58633f, 0.59674f, 0.60751f, 0.59839f, 0.58965f, 0.58220f, 0.57673f, 0.57474f, 0.57679f, + 0.58437f, 0.59757f, 0.60352f, 0.59431f, 0.58564f, 0.57820f, 0.57321f, 0.57171f, 0.57532f, 0.58443f, + 0.59923f, 0.60098f, 0.59167f, 0.58293f, 0.57556f, 0.57086f, 0.56997f, 0.57433f, 0.58471f, 0.60098f, + 0.83348f, 0.82675f, 0.82011f, 0.81372f, 0.80793f, 0.80264f, 0.79852f, 0.79552f, 0.79447f, 0.82851f, + 0.82172f, 0.81504f, 0.80874f, 0.80274f, 0.79772f, 0.79370f, 0.79005f, 0.78996f, 0.82106f, 0.81428f, + 0.80759f, 0.80124f, 0.79521f, 0.79016f, 0.78616f, 0.78354f, 0.78280f, 0.80902f, 0.80219f, 0.79544f, + 0.78895f, 0.78300f, 0.77785f, 0.77355f, 0.77105f, 0.77058f, 0.78699f, 0.77987f, 0.77297f, 0.76621f, + 0.76012f, 0.75486f, 0.75116f, 0.74885f, 0.74875f, 0.75718f, 0.74989f, 0.74243f, 0.73557f, 0.72937f, + 0.72438f, 0.72065f, 0.71927f, 0.72066f, 0.73124f, 0.72324f, 0.71564f, 0.70841f, 0.70204f, 0.69717f, + 0.69432f, 0.69419f, 0.69748f, 0.70773f, 0.69943f, 0.69129f, 0.68385f, 0.67757f, 0.67312f, 0.67112f, + 0.67287f, 0.67888f, 0.68720f, 0.67843f, 0.66981f, 0.66219f, 0.65606f, 0.65258f, 0.65247f, 0.65716f, + 0.66669f, 0.67486f, 0.66577f, 0.65704f, 0.64944f, 0.64396f, 0.64154f, 0.64340f, 0.65036f, 0.66289f, + 0.66916f, 0.65993f, 0.65122f, 0.64383f, 0.63862f, 0.63697f, 0.63981f, 0.64823f, 0.66267f, 0.66586f, + 0.65659f, 0.64788f, 0.64050f, 0.63557f, 0.63439f, 0.63823f, 0.64753f, 0.66301f, 0.66372f, 0.65442f, + 0.64561f, 0.63825f, 0.63368f, 0.63246f, 0.63681f, 0.64729f, 0.66371f, 0.83633f, 0.82820f, 0.82013f, + 0.81273f, 0.80603f, 0.80092f, 0.79745f, 0.79683f, 0.79934f, 0.83361f, 0.82550f, 0.81750f, 0.81013f, + 0.80348f, 0.79773f, 0.79524f, 0.79431f, 0.79784f, 0.82928f, 0.82117f, 0.81315f, 0.80572f, 0.79904f, + 0.79402f, 0.79100f, 0.79101f, 0.79360f, 0.82237f, 0.81416f, 0.80602f, 0.79854f, 0.79185f, 0.78678f, + 0.78359f, 0.78340f, 0.78685f, 0.80920f, 0.80067f, 0.79258f, 0.78491f, 0.77838f, 0.77340f, 0.77080f, + 0.77131f, 0.77537f, 0.79075f, 0.78221f, 0.77376f, 0.76605f, 0.75950f, 0.75482f, 0.75297f, 0.75460f, + 0.76045f, 0.77382f, 0.76499f, 0.75643f, 0.74869f, 0.74239f, 0.73820f, 0.73735f, 0.74023f, 0.74812f, + 0.75813f, 0.74907f, 0.74045f, 0.73269f, 0.72657f, 0.72304f, 0.72325f, 0.72797f, 0.73791f, 0.74366f, + 0.73452f, 0.72575f, 0.71807f, 0.71240f, 0.70985f, 0.71147f, 0.71829f, 0.73075f, 0.73484f, 0.72561f, + 0.71684f, 0.70928f, 0.70410f, 0.70227f, 0.70516f, 0.71372f, 0.72799f, 0.73056f, 0.72126f, 0.71255f, + 0.70508f, 0.69998f, 0.69878f, 0.70214f, 0.71170f, 0.72686f, 0.72810f, 0.71879f, 0.70997f, 0.70274f, + 0.69783f, 0.69673f, 0.70095f, 0.71061f, 0.72620f, 0.72647f, 0.71714f, 0.70846f, 0.70106f, 0.69640f, + 0.69539f, 0.69990f, 0.70993f, 0.72647f, 0.84192f, 0.83280f, 0.82392f, 0.81602f, 0.80952f, 0.80558f, + 0.80487f, 0.80899f, 0.81777f, 0.84084f, 0.83180f, 0.82305f, 0.81517f, 0.80859f, 0.80422f, 0.80484f, + 0.80883f, 0.81788f, 0.83903f, 0.83000f, 0.82130f, 0.81347f, 0.80739f, 0.80385f, 0.80328f, 0.80786f, + 0.81689f, 0.83605f, 0.82697f, 0.81819f, 0.81029f, 0.80398f, 0.80025f, 0.80003f, 0.80447f, 0.81424f, + 0.83025f, 0.82115f, 0.81232f, 0.80443f, 0.79828f, 0.79494f, 0.79511f, 0.79972f, 0.81036f, 0.82193f, + 0.81274f, 0.80391f, 0.79609f, 0.79010f, 0.78695f, 0.78794f, 0.79369f, 0.80481f, 0.81385f, 0.80462f, + 0.79577f, 0.78803f, 0.78225f, 0.77956f, 0.78102f, 0.78775f, 0.80021f, 0.80617f, 0.79695f, 0.78801f, + 0.78044f, 0.77486f, 0.77265f, 0.77505f, 0.78260f, 0.79615f, 0.79863f, 0.78936f, 0.78050f, 0.77312f, + 0.76791f, 0.76620f, 0.76929f, 0.77819f, 0.79270f, 0.79387f, 0.78458f, 0.77584f, 0.76834f, 0.76336f, + 0.76202f, 0.76571f, 0.77537f, 0.79081f, 0.79149f, 0.78220f, 0.77349f, 0.76621f, 0.76117f, 0.76023f, + 0.76420f, 0.77409f, 0.79006f, 0.79014f, 0.78085f, 0.77209f, 0.76476f, 0.76011f, 0.75915f, 0.76335f, + 0.77317f, 0.78920f, 0.78921f, 0.77989f, 0.77116f, 0.76381f, 0.75913f, 0.75813f, 0.76253f, 0.77271f, + 0.78915f, 0.84998f, 0.84066f, 0.83192f, 0.82458f, 0.81983f, 0.81892f, 0.82318f, 0.83357f, 0.84992f, + 0.84875f, 0.83881f, 0.82977f, 0.82232f, 0.81729f, 0.81612f, 0.82026f, 0.82990f, 0.84322f, 0.84880f, + 0.83841f, 0.82944f, 0.82227f, 0.81733f, 0.81619f, 0.82021f, 0.82984f, 0.84340f, 0.84984f, 0.84041f, + 0.83150f, 0.82389f, 0.81895f, 0.81781f, 0.82212f, 0.83225f, 0.84840f, 0.85013f, 0.84064f, 0.83178f, + 0.82446f, 0.81977f, 0.81809f, 0.82259f, 0.83310f, 0.84896f, 0.85038f, 0.84100f, 0.83216f, 0.82459f, + 0.81958f, 0.81906f, 0.82329f, 0.83307f, 0.84976f, 0.85056f, 0.84122f, 0.83241f, 0.82507f, 0.82028f, + 0.81902f, 0.82390f, 0.83424f, 0.85014f, 0.85048f, 0.84109f, 0.83253f, 0.82508f, 0.82009f, 0.81939f, + 0.82402f, 0.83416f, 0.85072f, 0.85042f, 0.84108f, 0.83237f, 0.82498f, 0.82047f, 0.81916f, 0.82323f, + 0.83460f, 0.85067f, 0.85024f, 0.84096f, 0.83225f, 0.82481f, 0.81982f, 0.81925f, 0.82388f, 0.83400f, + 0.85044f, 0.84997f, 0.84126f, 0.83281f, 0.82555f, 0.82087f, 0.82051f, 0.82541f, 0.83560f, 0.84977f, + 0.84986f, 0.84118f, 0.83274f, 0.82553f, 0.82099f, 0.82048f, 0.82526f, 0.83549f, 0.84951f, 0.85000f, + 0.84069f, 0.83186f, 0.82445f, 0.81990f, 0.81872f, 0.82311f, 0.83335f, 0.85000f + }; + /// Grey tints (both appearances): the diagonal and the offset for grey levels + /// 0, 17, 34 .. 255. + private static final float[] GREY_GAIN = { + 0.31250f, 0.31153f, 0.31070f, 0.31002f, 0.30947f, 0.30907f, 0.30879f, 0.30866f, 0.30866f, 0.30879f, + 0.30907f, 0.30947f, 0.31002f, 0.31070f, 0.31153f, 0.31250f + }; + private static final float[] GREY_OFFSET = { + -0.25000f, -0.17030f, -0.09114f, -0.01240f, 0.06602f, 0.14423f, 0.22233f, 0.30043f, 0.37862f, 0.45702f, + 0.53571f, 0.61482f, 0.69444f, 0.77469f, 0.85567f, 0.93750f + }; + // ---- end of generated tables ---- + + private VibrancyMatrix() { + } + + /// The vibrancy matrix for content tinted `rgb`, as 12 floats: three rows + /// (red, green, blue) of `[r, g, b, offset]`, in 0..1 units, the layout + /// Graphics.colorMatrixRegion takes. + /// + /// #### Parameters + /// + /// - `rgb`: the tint, 0xRRGGBB + /// + /// - `dark`: true for the dark appearance + /// + /// #### Returns + /// + /// a new 12-element matrix + public static float[] forTint(int rgb, boolean dark) { + double[] t = {((rgb >> 16) & 0xff) / 255.0, ((rgb >> 8) & 0xff) / 255.0, (rgb & 0xff) / 255.0}; + double mx = Math.max(t[0], Math.max(t[1], t[2])); + double mn = Math.min(t[0], Math.min(t[1], t[2])); + float[] m = new float[12]; + if (mx - mn < 1e-9) { + double gi = mx * 15; + int i = (int) Math.min(14, Math.floor(gi)); + double f = gi - i; + double gain = GREY_GAIN[i] * (1 - f) + GREY_GAIN[i + 1] * f; + double off = GREY_OFFSET[i] * (1 - f) + GREY_OFFSET[i + 1] * f; + for (int r = 0; r < 3; r++) { + m[r * 4 + r] = (float) gain; + m[r * 4 + 3] = (float) off; + } + return m; + } + double e = 0.5 * mn / mx; + if (dark) { + double tt = t[0] * t[0] + t[1] * t[1] + t[2] * t[2]; + double a = 0.5 - e; + for (int r = 0; r < 3; r++) { + for (int c = 0; c < 3; c++) { + m[r * 4 + c] = (float) ((r == c ? e : 0) + a * t[c] / tt); + } + m[r * 4 + 3] = (float) t[r]; + } + return m; + } + double alpha = lightAlpha(t, mx, mn); + double s = (1 - t[0]) + (1 - t[1]) + (1 - t[2]); + double c = (1 - alpha - e) / s; + for (int r = 0; r < 3; r++) { + for (int col = 0; col < 3; col++) { + m[r * 4 + col] = (float) (c * (1 + t[r]) * (1 - t[col]) + (r == col ? e : 0)); + } + m[r * 4 + 3] = (float) (alpha * (1 + t[r]) - 1 + e * t[r]); + } + return m; + } + + /// Trilinear lookup of the light darkening alpha. + static double lightAlpha(double[] t, double mx, double mn) { + double md = t[0] + t[1] + t[2] - mx - mn; + double chroma = mx - mn; + double value = chroma < 1 ? mn / (1 - chroma) : 0; + double hue = (md - mn) / chroma; + double c255 = chroma * 255; + int ci = CHROMA_NODES.length - 2; + for (int i = 0; i < CHROMA_NODES.length - 1; i++) { + if (c255 < CHROMA_NODES[i + 1]) { + ci = i; + break; + } + } + double fc = (c255 - CHROMA_NODES[ci]) / (CHROMA_NODES[ci + 1] - CHROMA_NODES[ci]); + int vi = VALUE_NODES.length - 2; + for (int i = 0; i < VALUE_NODES.length - 1; i++) { + if (value < VALUE_NODES[i + 1]) { + vi = i; + break; + } + } + double fv = (value - VALUE_NODES[vi]) / (VALUE_NODES[vi + 1] - VALUE_NODES[vi]); + double hx = hue * (HUE_NODES - 1); + int wi = (int) Math.min(HUE_NODES - 2, Math.floor(hx)); + double fw = hx - wi; + fc = clamp01(fc); + fv = clamp01(fv); + fw = clamp01(fw); + double acc = 0; + for (int dc = 0; dc < 2; dc++) { + for (int dv = 0; dv < 2; dv++) { + for (int dw = 0; dw < 2; dw++) { + double w = (dc == 1 ? fc : 1 - fc) * (dv == 1 ? fv : 1 - fv) * (dw == 1 ? fw : 1 - fw); + int idx = ((ci + dc) * VALUE_NODES.length + (vi + dv)) * HUE_NODES + (wi + dw); + acc += w * LIGHT_ALPHA[idx]; + } + } + } + return acc; + } + + private static double clamp01(double v) { + return v < 0 ? 0 : (v > 1 ? 1 : v); + } + + /// Applies a 12-float colour matrix to one 0xRRGGBB colour (clamped), the + /// per-pixel operation of Graphics.colorMatrixRegion at full coverage. + /// + /// #### Parameters + /// + /// - `m`: the matrix, as returned by `#forTint(int, boolean)` + /// + /// - `rgb`: the colour, 0xRRGGBB + /// + /// #### Returns + /// + /// the transformed colour, 0xRRGGBB + public static int apply(float[] m, int rgb) { + float r = ((rgb >> 16) & 0xff) / 255f; + float g = ((rgb >> 8) & 0xff) / 255f; + float b = (rgb & 0xff) / 255f; + int out = 0; + for (int row = 0; row < 3; row++) { + float v = m[row * 4] * r + m[row * 4 + 1] * g + m[row * 4 + 2] * b + m[row * 4 + 3]; + int iv = Math.round((v < 0 ? 0 : (v > 1 ? 1 : v)) * 255); + out = (out << 8) | iv; + } + return out; + } +} diff --git a/Ports/JavaSE/src/com/codename1/impl/javase/JavaSEPort.java b/Ports/JavaSE/src/com/codename1/impl/javase/JavaSEPort.java index 9056edff3c7..f82fc0f2c82 100644 --- a/Ports/JavaSE/src/com/codename1/impl/javase/JavaSEPort.java +++ b/Ports/JavaSE/src/com/codename1/impl/javase/JavaSEPort.java @@ -21105,6 +21105,177 @@ public boolean lensRegion(Object graphics, int x, int y, int width, int height, } } + @Override + public boolean isGlassLensRegionSupported(Object graphics) { + return isColorMatrixRegionSupported(graphics); + } + + /// Graphics.glassLensRegion over the simulator's backing buffer, through the + /// core reference (GlassLensBlend) so the simulator and the devices agree. + @Override + public boolean glassLensRegion(Object graphics, int x, int y, int width, int height, float cornerRadius, + float[] optics, float amount) { + if (width <= 0 || height <= 0 || optics == null || optics.length < com.codename1.ui.plaf.GlassLensBlend.COUNT) { + return true; + } + try { + BufferedImage dest; + double scale; + if (graphics instanceof NativeScreenGraphics) { + NativeScreenGraphics ng = (NativeScreenGraphics) graphics; + if (ng.sourceImage != null) { + dest = ng.sourceImage; + scale = 1.0; + } else if (canvas != null && canvas.edtBuffer != null) { + dest = canvas.edtBuffer; + scale = (double) dest.getWidth() / getDisplayWidthImpl(); + } else { + return false; + } + } else if (mutableImageGraphics.containsKey(graphics)) { + dest = mutableImageGraphics.get(graphics); + scale = 1.0; + } else { + return false; + } + float[] o = new float[optics.length]; + for (int i = 0; i < optics.length; i++) { + o[i] = optics[i]; + } + // Lengths scale with the buffer; levels (brightness, strengths) do not. + int[] lengths = {com.codename1.ui.plaf.GlassLensBlend.BEVEL, com.codename1.ui.plaf.GlassLensBlend.MAX_SHIFT, + com.codename1.ui.plaf.GlassLensBlend.OUTLINE_WIDTH, com.codename1.ui.plaf.GlassLensBlend.RIM_WIDTH, + com.codename1.ui.plaf.GlassLensBlend.END_SHADE_WIDTH, com.codename1.ui.plaf.GlassLensBlend.SHADOW_WIDTH}; + for (int i : lengths) { + o[i] = (float) (optics[i] * scale); + } + float lx = (float) (x * scale); + float ly = (float) (y * scale); + float lw = (float) (width * scale); + float lh = (float) (height * scale); + float cr = cornerRadius < 0 ? cornerRadius : (float) (cornerRadius * scale); + int margin = com.codename1.ui.plaf.GlassLensBlend.margin(o); + int reach = com.codename1.ui.plaf.GlassLensBlend.reach(o) + margin; + int dw = dest.getWidth(); + int dh = dest.getHeight(); + int sx0 = Math.max(0, (int) Math.floor(lx) - reach); + int sy0 = Math.max(0, (int) Math.floor(ly) - reach); + int sx1 = Math.min(dw, (int) Math.ceil(lx + lw) + reach); + int sy1 = Math.min(dh, (int) Math.ceil(ly + lh) + reach); + int ox0 = Math.max(0, (int) Math.floor(lx) - margin); + int oy0 = Math.max(0, (int) Math.floor(ly) - margin); + int ox1 = Math.min(dw, (int) Math.ceil(lx + lw) + margin); + int oy1 = Math.min(dh, (int) Math.ceil(ly + lh) + margin); + if (sx1 <= sx0 || sy1 <= sy0 || ox1 <= ox0 || oy1 <= oy0) { + return true; + } + int sw = sx1 - sx0; + int sh = sy1 - sy0; + int[] src = dest.getRGB(sx0, sy0, sw, sh, null, 0, sw); + int ow = ox1 - ox0; + int oh = oy1 - oy0; + int[] out = new int[ow * oh]; + com.codename1.ui.plaf.GlassLensBlend.apply(src, sw, sh, out, ox0 - sx0, oy0 - sy0, ow, oh, + lx - sx0, ly - sy0, lw, lh, cr, o, amount); + dest.setRGB(ox0, oy0, ow, oh, out, 0, ow); + return true; + } catch (Throwable t) { + return false; + } + } + + @Override + public boolean isColorMatrixRegionSupported(Object graphics) { + if (graphics instanceof NativeScreenGraphics) { + NativeScreenGraphics ng = (NativeScreenGraphics) graphics; + return ng.sourceImage != null || (canvas != null && canvas.edtBuffer != null); + } + return mutableImageGraphics.containsKey(graphics); + } + + /// Graphics.colorMatrixRegion over the simulator's backing buffer (or an + /// off-screen mutable image), through the core reference implementation so the + /// simulator and the devices agree. The mask is sampled at the buffer's zoom. + @Override + public boolean colorMatrixRegion(Object graphics, int x, int y, int width, int height, float[] matrix, + com.codename1.ui.Image mask, float cornerRadius, float amount) { + if (width <= 0 || height <= 0) { + return true; + } + try { + BufferedImage dest; + double scale; + if (graphics instanceof NativeScreenGraphics) { + NativeScreenGraphics ng = (NativeScreenGraphics) graphics; + if (ng.sourceImage != null) { + dest = ng.sourceImage; + scale = 1.0; + } else if (canvas != null && canvas.edtBuffer != null) { + dest = canvas.edtBuffer; + scale = (double) dest.getWidth() / getDisplayWidthImpl(); + } else { + return false; + } + } else if (mutableImageGraphics.containsKey(graphics)) { + dest = mutableImageGraphics.get(graphics); + scale = 1.0; + } else { + return false; + } + int rx = (int) Math.round(x * scale); + int ry = (int) Math.round(y * scale); + int rw = (int) Math.round(width * scale); + int rh = (int) Math.round(height * scale); + // Clip to the buffer, remembering where the clipped rect sits inside the + // full region so the shape and the mask stay anchored to the region. + int ox = 0; + int oy = 0; + int fullW = rw; + int fullH = rh; + if (rx < 0) { + ox = -rx; + rw += rx; + rx = 0; + } + if (ry < 0) { + oy = -ry; + rh += ry; + ry = 0; + } + if (rx + rw > dest.getWidth()) { + rw = dest.getWidth() - rx; + } + if (ry + rh > dest.getHeight()) { + rh = dest.getHeight() - ry; + } + if (rw <= 0 || rh <= 0) { + return true; + } + int[] full = new int[fullW * fullH]; + int[] part = dest.getRGB(rx, ry, rw, rh, null, 0, rw); + for (int yy = 0; yy < rh; yy++) { + System.arraycopy(part, yy * rw, full, (yy + oy) * fullW + ox, rw); + } + int[] maskPixels = null; + int mw = 0; + int mh = 0; + if (mask != null) { + maskPixels = mask.getRGB(); + mw = mask.getWidth(); + mh = mask.getHeight(); + } + float cr = cornerRadius < 0 ? cornerRadius : (float) (cornerRadius * scale); + com.codename1.ui.plaf.ColorMatrixBlend.apply(full, fullW, fullH, matrix, maskPixels, mw, mh, cr, amount); + for (int yy = 0; yy < rh; yy++) { + System.arraycopy(full, (yy + oy) * fullW + ox, part, yy * rw, rw); + } + dest.setRGB(rx, ry, rw, rh, part, 0, rw); + return true; + } catch (Throwable t) { + return false; + } + } + /// In-place lens over a copied ARGB region. cornerRadius < 0 -> capsule. Mirrors /// METALView.m glassApplyLens so the simulator and device agree. private static void applyLensBuffer(int[] src, int[] out, int rw, int rh, diff --git a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/BufferedGraphics.java b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/BufferedGraphics.java index 08a4f28f7c0..3a1317efb0d 100644 --- a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/BufferedGraphics.java +++ b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/BufferedGraphics.java @@ -1021,6 +1021,19 @@ public void lensRegion(int x, int y, int width, int height, float cornerRadius, magnify, aberration, tintColor, tintStrength)); } + @Override + public void colorMatrixRegion(int x, int y, int width, int height, float[] matrix, + HTML5Implementation.NativeImage mask, float cornerRadius, float amount) { + // The matrix recolours what is under it -- vibrant glyphs take their colour from the + // glass behind them. Promoted text is not under it, so it would keep its own colour + // over the effect instead of being recoloured with the rest. Back to the canvas. + noteAlphaIndependentRegion(x, y, width, height, cornerRadius > 0 + ? roundRectCoverTest(x, y, width, height, (int) (cornerRadius * 2), (int) (cornerRadius * 2)) + : null); + addOp(new com.codename1.impl.html5.graphics.ColorMatrixRegion(x, y, width, height, + matrix, mask, cornerRadius, amount)); + } + @Override public void clearRect(int x, int y, int width, int height) { // Erasing the canvas erases nothing in the layer above it, so text promoted out of this diff --git a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Graphics.java b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Graphics.java index 26a75837f3b..8f7cbb57685 100644 --- a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Graphics.java +++ b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Graphics.java @@ -477,6 +477,16 @@ public void lensRegion(int x, int y, int width, int height, float cornerRadius, magnify, aberration, tintColor, tintStrength)); } + /** + * In-place colour matrix (Graphics.colorMatrixRegion); see + * {@link com.codename1.impl.html5.graphics.ColorMatrixRegion}. + */ + public void colorMatrixRegion(int x, int y, int width, int height, float[] matrix, + HTML5Implementation.NativeImage mask, float cornerRadius, float amount) { + dispatchOp(new com.codename1.impl.html5.graphics.ColorMatrixRegion(x, y, width, height, + matrix, mask, cornerRadius, amount)); + } + public void clearRect(int x, int y, int width, int height) { primitiveRenderAdapter.clearRect(x, y, width, height); } diff --git a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Implementation.java b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Implementation.java index 937a2b8dd86..37699f9c91d 100644 --- a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Implementation.java +++ b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/HTML5Implementation.java @@ -8844,6 +8844,48 @@ public boolean lensRegion(Object graphics, int x, int y, int width, int height, return true; } + @Override + public boolean isColorMatrixRegionSupported(Object graphics) { + // Supported wherever lensRegion is: both ride the same surface command stream and + // are replayed by the host over the target surface's own pixels. + return graphics instanceof HTML5Graphics; + } + + @Override + public boolean colorMatrixRegion(Object graphics, int x, int y, int width, int height, float[] matrix, + Image mask, float cornerRadius, float amount) { + if (!(graphics instanceof HTML5Graphics)) { + return false; + } + if (width <= 0 || height <= 0 || amount <= 0) { + return true; + } + NativeImage nativeMask = null; + if (mask != null) { + Object peer = mask.getImage(); + if (!(peer instanceof NativeImage)) { + // An image with no native peer of its own (a FontImage, say): rasterize it + // into a mutable image, which does have one, so it can cross as a surface. + int mw = mask.getWidth(); + int mh = mask.getHeight(); + if (mw <= 0 || mh <= 0) { + return true; + } + Image raster = Image.createImage(mw, mh, 0); + raster.getGraphics().drawImage(mask, 0, 0); + peer = raster.getImage(); + if (!(peer instanceof NativeImage)) { + return false; + } + } + nativeMask = (NativeImage) peer; + } + // The host-side canvas bridge runs com.codename1.ui.plaf.ColorMatrixBlend's math, + // float for float, over the surface's own pixels during ordered command replay. + g(graphics).colorMatrixRegion(x, y, width, height, matrix, nativeMask, cornerRadius, amount); + return true; + } + @Override public Image gaussianBlurImage(Image image, float radius) { if (image == null) { @@ -12387,6 +12429,33 @@ public void draw(CanvasRenderingContext2D ctx, int x, int y){ draw(ctx, x, y, getWidth(), getHeight()); } + + /** + * Records a Graphics.colorMatrixRegion that uses this image as its mask. The mask + * crosses the way a drawImage source does: a loaded image as its host-ref, a mutable + * image by surface id after flushing its pending commands, so the host samples + * pixels that are actually there. An image with neither (still loading) records + * nothing: the host would have to skip the op anyway, because applying the matrix + * unmasked would recolour the whole region. + */ + public void recordColorMatrixRegion(SurfaceCommandRecorder recorder, int x, int y, int w, int h, + float[] matrix, float cornerRadius, float amount) { + switch (JavaScriptNativeImageAdapter.resolveSurfaceKind(imageModel)) { + case LOADED_IMAGE: + recorder.colorMatrixSelfRegion(x, y, w, h, matrix, cornerRadius, amount, + SurfaceCommandRecorder.COLOR_MATRIX_MASK_IMAGE, 0, img); + break; + case MUTABLE_SURFACE: + mutableGraphics.flush(); + retainBlitSource(NativeImage.this); + recorder.colorMatrixSelfRegion(x, y, w, h, matrix, cornerRadius, amount, + SurfaceCommandRecorder.COLOR_MATRIX_MASK_SURFACE, + mutableGraphics.getSurfaceId(), null); + break; + default: + break; + } + } } diff --git a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/ColorMatrixRegion.java b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/ColorMatrixRegion.java new file mode 100644 index 00000000000..40920f627f3 --- /dev/null +++ b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/ColorMatrixRegion.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ + +package com.codename1.impl.html5.graphics; + +import com.codename1.html5.js.canvas.CanvasRenderingContext2D; +import com.codename1.impl.html5.HTML5Implementation.NativeImage; + +/** + * In-place Graphics.colorMatrixRegion. Records + * {@link SurfaceCommandRecorder#OP_COLOR_MATRIX_SELF_REGION}: the host reads the + * region back, runs com.codename1.ui.plaf.ColorMatrixBlend's per-pixel math over + * it and draws the result back through the current clip. + * + *

The mask is resolved when the op EXECUTES, not when it is queued, the same + * way {@link DrawImage} resolves its image: a mutable mask is flushed at that + * point so the host holds its pixels before the op that samples them.

+ */ +public class ColorMatrixRegion implements ExecutableOp { + final int x, y, w, h; + final float[] matrix; + final NativeImage mask; + final float cornerRadius, amount; + + public ColorMatrixRegion(int x, int y, int w, int h, float[] matrix, NativeImage mask, + float cornerRadius, float amount) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + // Copied: the op runs after the caller returns and may reuse its array. + float[] m = new float[12]; + if (matrix != null) { + System.arraycopy(matrix, 0, m, 0, Math.min(12, matrix.length)); + } + this.matrix = m; + this.mask = mask; + this.cornerRadius = cornerRadius; + this.amount = amount; + } + + @Override + public void execute(CanvasRenderingContext2D context) { + if (!(context instanceof SurfaceCommandRecorder)) { + return; + } + SurfaceCommandRecorder recorder = (SurfaceCommandRecorder) context; + if (mask == null) { + recorder.colorMatrixSelfRegion(x, y, w, h, matrix, cornerRadius, amount, + SurfaceCommandRecorder.COLOR_MATRIX_MASK_NONE, 0, null); + } else { + mask.recordColorMatrixRegion(recorder, x, y, w, h, matrix, cornerRadius, amount); + } + } + + @Override + public String getDescription() { + return "ColorMatrixRegion"; + } +} diff --git a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/SurfaceCommandRecorder.java b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/SurfaceCommandRecorder.java index b39aac9dc46..795ba8358ad 100644 --- a/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/SurfaceCommandRecorder.java +++ b/Ports/JavaScriptPort/src/main/java/com/codename1/impl/html5/graphics/SurfaceCommandRecorder.java @@ -146,6 +146,22 @@ public final class SurfaceCommandRecorder implements CanvasRenderingContext2D { // saturation, scale, offset, refraction, specular. public static final int OP_GLASS_SELF_REGION = 82; + // Graphics.colorMatrixRegion: recolours the surface's own pixels through a + // 3x4 colour matrix, see com.codename1.ui.plaf.ColorMatrixBlend. 20 nums: + // x, y, w, h, cornerRadius, amount, the 12 matrix floats, maskKind (one of + // the COLOR_MATRIX_MASK_* values) and maskSurfaceId; plus ALWAYS 1 obj, + // the mask image's host-ref marker or null. The mask travels the way a + // drawImage source does: a loaded image as its host-ref, a mutable image + // by its surface id (flushed first, like a blit). + public static final int OP_COLOR_MATRIX_SELF_REGION = 83; + + /** No mask: the whole region (times the shape) is recoloured. */ + public static final int COLOR_MATRIX_MASK_NONE = 0; + /** The mask is a loaded image, carried in the op's obj slot. */ + public static final int COLOR_MATRIX_MASK_IMAGE = 1; + /** The mask is another surface, named by the maskSurfaceId num. */ + public static final int COLOR_MATRIX_MASK_SURFACE = 2; + // Text-layer DOM mutations. The layer renders text as real DOM above the canvas, so a frame // is only coherent if its elements and its pixels are applied together. Riding the command // stream is what guarantees that: the host applies these inside the same task that replays @@ -352,6 +368,22 @@ public void lensSelfRegion(double x, double y, double w, double h, double corner num(aberration); num(tintColor); num(tintStrength); } + /** + * Records an in-place colour matrix; see OP_COLOR_MATRIX_SELF_REGION. A + * matrix shorter than 12 floats is padded with zeros so the fixed arity the + * host reads never desyncs the ops behind this one. + */ + public void colorMatrixSelfRegion(double x, double y, double w, double h, float[] matrix, + double cornerRadius, double amount, int maskKind, int maskSurfaceId, Object maskImage) { + op(OP_COLOR_MATRIX_SELF_REGION); + num(x); num(y); num(w); num(h); num(cornerRadius); num(amount); + for (int i = 0; i < 12; i++) { + num(matrix != null && i < matrix.length ? matrix[i] : 0); + } + num(maskKind); num(maskSurfaceId); + obj(maskKind == COLOR_MATRIX_MASK_IMAGE ? maskImage : null); + } + /** Records a complete in-place Liquid Glass material; see OP_GLASS_SELF_REGION. */ public void glassSelfRegion(double x, double y, double w, double h, double blurRadius, double cornerRadius, double saturation, double scale, double offset, diff --git a/Ports/MacPort/nativeSources/METALView.h b/Ports/MacPort/nativeSources/METALView.h index bf30c8a37a7..d4358a69889 100644 --- a/Ports/MacPort/nativeSources/METALView.h +++ b/Ports/MacPort/nativeSources/METALView.h @@ -144,6 +144,10 @@ curve:(float)curve curveMid:(float)curveMid outline:(float)outline; - (void)lensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float)cornerRadius magnify:(float)magnify aberration:(float)aberration tintColor:(int)tintColor tintStrength:(float)tintStrength; +- (void)colorMatrixScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h matrix:(const float*)matrix + mask:(id)mask cornerRadius:(float)cornerRadius amount:(float)amount; +- (void)glassLensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float)cornerRadius + optics:(const float*)optics amount:(float)amount; /// Reads the finished frame back as an ARGB raster. Used by the screenshot /// pipeline and by Window.capture(). - (BOOL)readbackInto:(unsigned int *)argb width:(int)w height:(int)h; diff --git a/Ports/MacPort/nativeSources/METALView.m b/Ports/MacPort/nativeSources/METALView.m index bfc26f7bb36..bf50a27baef 100644 --- a/Ports/MacPort/nativeSources/METALView.m +++ b/Ports/MacPort/nativeSources/METALView.m @@ -3134,6 +3134,36 @@ - (void)glassScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h radius:(float)radiu int pad = (int)ceilf(rad) * 3 + 1; int bw = fw + 2 * pad, bh = fh + 2 * pad; + // GPU path: the whole material on the frame's own command buffer, no sync and + // no readback (see CN1MetalGlassEncode). The CPU path below is the fallback + // when the pipelines are unavailable, and CN1_GLASS_CPU=1 forces it. + static int cn1GlassForceCpu = -1; + if (cn1GlassForceCpu < 0) { + const char *env = getenv("CN1_GLASS_CPU"); + cn1GlassForceCpu = (env != NULL && env[0] == '1') ? 1 : 0; + } + if (!cn1GlassForceCpu) { + if (self.renderCommandEncoder != nil) { + CN1MetalEndFrame(); + [self.renderCommandEncoder endEncoding]; + self.renderCommandEncoder = nil; + } + if (self.commandBuffer == nil) { + self.commandBuffer = [self.commandQueue commandBuffer]; + } + CN1MetalGlassPatch patch; + if (CN1MetalGlassEncode(self.commandBuffer, self.screenTexture, fx, fy, fw, fh, rad, sat, scale, offset, + curve, curveMid, &patch)) { + [self createRenderPassDescriptor]; + if (self.renderPassDescriptor == nil) { return; } + self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; + [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; + CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); + CN1MetalDrawGlass(&patch, x, y, w, h, fw, fh, cornerRadius, (float)s, refract, specular, outline); + return; + } + } + // 1) End + commit the screen encoder so screenTexture holds the backdrop. if (self.renderCommandEncoder != nil) { CN1MetalEndFrame(); @@ -3376,6 +3406,128 @@ - (void)lensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float) #endif } +// Graphics.colorMatrixRegion on the live screen. Same GPU route as the lens: end +// the encoder, blit the painted region to a scratch texture on the frame's own +// command buffer, restart the encoder, then draw a quad that reads the scratch +// copy (and the mask) through cn1_fs_colormatrix. No CPU readback. +- (void)colorMatrixScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h matrix:(const float*)matrix + mask:(id)mask cornerRadius:(float)cornerRadius amount:(float)amount { + if (self.screenTexture == nil || w <= 0 || h <= 0 || amount <= 0.0f) { + return; + } + float sv = scaleValue > 0.0f ? scaleValue : 1.0f; + CGFloat s = CN1AppKitBackingScale(self) / sv; + int texW = (int)self.screenTexture.width, texH = (int)self.screenTexture.height; + int fx = (int)(x * s), fy = (int)(y * s), fw = (int)(w * s), fh = (int)(h * s); + if (fx < 0) { fw += fx; fx = 0; } + if (fy < 0) { fh += fy; fy = 0; } + if (fx + fw > texW) { fw = texW - fx; } + if (fy + fh > texH) { fh = texH - fy; } + if (fw <= 0 || fh <= 0) { return; } + + if (self.renderCommandEncoder != nil) { + CN1MetalEndFrame(); + [self.renderCommandEncoder endEncoding]; + self.renderCommandEncoder = nil; + } + if (self.commandBuffer == nil) { + self.commandBuffer = [self.commandQueue commandBuffer]; + } + id device = CN1MetalDevice(); + MTLTextureDescriptor *desc = [MTLTextureDescriptor + texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm width:fw height:fh mipmapped:NO]; + desc.usage = MTLTextureUsageShaderRead; + desc.storageMode = MTLStorageModePrivate; + id scratch = [device newTextureWithDescriptor:desc]; + if (scratch == nil) { [self setFramebuffer]; CN1_SCRATCH_RELEASE return; } + id blit = [self.commandBuffer blitCommandEncoder]; + [blit copyFromTexture:self.screenTexture sourceSlice:0 sourceLevel:0 + sourceOrigin:MTLOriginMake(fx, fy, 0) sourceSize:MTLSizeMake(fw, fh, 1) + toTexture:scratch destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [blit endEncoding]; + + [self createRenderPassDescriptor]; + if (self.renderPassDescriptor == nil) { CN1_SCRATCH_RELEASE return; } + self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; + [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; + CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); + + float crPx = cornerRadius < 0.0f ? -1.0f : cornerRadius * (float)s; + CN1MetalDrawColorMatrix(scratch, mask, x, y, w, h, fw, fh, matrix, crPx, amount); +#ifndef CN1_USE_ARC + [scratch release]; +#endif +} + +// Graphics.glassLensRegion on the live screen, on the GPU like the colour matrix: +// blit the lens plus the distance its refraction may reach, then draw the lens +// plus its margin (outline, shadow) with cn1_fs_glass_lens sampling the copy. +- (void)glassLensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float)cornerRadius + optics:(const float*)optics amount:(float)amount { + if (self.screenTexture == nil || w <= 0 || h <= 0 || amount <= 0.0f || optics == NULL) { + return; + } + float sv = scaleValue > 0.0f ? scaleValue : 1.0f; + CGFloat s = CN1AppKitBackingScale(self) / sv; + float o[16]; + for (int i = 0; i < 16; i++) { o[i] = optics[i]; } + // GlassLensBlend lengths: bevel, max shift, outline width, rim width, end-shade + // width, shadow width -- logical units in, physical pixels here. + static const int lengths[6] = { 0, 1, 4, 7, 9, 12 }; + for (int i = 0; i < 6; i++) { o[lengths[i]] *= (float)s; } + int margin = (int)ceilf(o[12] * 3.0f) + 1; + int reach = (int)ceilf(o[1]) + 1 + margin; + float lx = x * (float)s, ly = y * (float)s, lw = w * (float)s, lh = h * (float)s; + int texW = (int)self.screenTexture.width, texH = (int)self.screenTexture.height; + int sx0 = MAX(0, (int)floorf(lx) - reach), sy0 = MAX(0, (int)floorf(ly) - reach); + int sx1 = MIN(texW, (int)ceilf(lx + lw) + reach), sy1 = MIN(texH, (int)ceilf(ly + lh) + reach); + if (sx1 <= sx0 || sy1 <= sy0) { return; } + int sw = sx1 - sx0, sh = sy1 - sy0; + int ml = (int)ceilf(margin / (float)s); + int qx = x - ml, qy = y - ml, qw = w + 2 * ml, qh = h + 2 * ml; + + if (self.renderCommandEncoder != nil) { + CN1MetalEndFrame(); + [self.renderCommandEncoder endEncoding]; + self.renderCommandEncoder = nil; + } + if (self.commandBuffer == nil) { + self.commandBuffer = [self.commandQueue commandBuffer]; + } + id device = CN1MetalDevice(); + MTLTextureDescriptor *desc = [MTLTextureDescriptor + texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm width:sw height:sh mipmapped:NO]; + desc.usage = MTLTextureUsageShaderRead; + desc.storageMode = MTLStorageModePrivate; + id scratch = [device newTextureWithDescriptor:desc]; + CN1_TEX_NOTE("glassLensScratch", scratch); + if (scratch == nil) { [self setFramebuffer]; return; } + id blit = [self.commandBuffer blitCommandEncoder]; + [blit copyFromTexture:self.screenTexture sourceSlice:0 sourceLevel:0 + sourceOrigin:MTLOriginMake(sx0, sy0, 0) sourceSize:MTLSizeMake(sw, sh, 1) + toTexture:scratch destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [blit endEncoding]; + + [self createRenderPassDescriptor]; + if (self.renderPassDescriptor == nil) { +#ifndef CN1_USE_ARC + [scratch release]; +#endif + return; + } + self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; + [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; + CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); + + float crPx = cornerRadius < 0.0f ? -1.0f : cornerRadius * (float)s; + CN1MetalDrawGlassLens(scratch, sx0, sy0, sw, sh, qx, qy, qw, qh, (float)s, lx, ly, lw, lh, crPx, o, amount); +#ifndef CN1_USE_ARC + [scratch release]; +#endif +} + @end #endif diff --git a/Ports/iOSPort/nativeSources/BlurRegion.h b/Ports/iOSPort/nativeSources/BlurRegion.h index 9693bbdff34..d2460e7e6dc 100644 --- a/Ports/iOSPort/nativeSources/BlurRegion.h +++ b/Ports/iOSPort/nativeSources/BlurRegion.h @@ -23,6 +23,8 @@ #import #import "ExecutableOp.h" +@class GLUIImage; + // Queued op for CSS backdrop-filter:blur on the LIVE screen (real "Liquid // Glass"). Enqueued in paint order; during the drain (after the backdrop ops, // before the glass component's foreground) it asks the METALView to blur the @@ -52,6 +54,18 @@ float aberration; int tintColor; float tintStrength; + // When colorMatrix is YES this op runs Graphics.colorMatrixRegion + // (colorMatrixScreenRegionX): each pixel becomes mix(p, clamp(M.p + off), k) + // with k = amount * shape coverage * mask alpha. matrix is row-major + // [r0 g0 b0 off0 | r1 g1 b1 off1 | r2 g2 b2 off2], maskImage may be nil. + BOOL colorMatrix; + float matrix[12]; + GLUIImage* maskImage; + float amount; + // When glassLens is YES this op runs Graphics.glassLensRegion + // (glassLensScreenRegionX) with the GlassLensBlend parameters in optics. + BOOL glassLens; + float optics[16]; } -(id)initWithArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h r:(float)r; @@ -61,5 +75,10 @@ -(id)initWithLensArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h cornerRadius:(float)cr magnify:(float)mg aberration:(float)ab tintColor:(int)tc tintStrength:(float)ts; +-(id)initWithGlassLensArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h cornerRadius:(float)cr + optics:(const float*)o count:(int)count amount:(float)am; +-(id)initWithColorMatrixArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h + matrix:(const float*)m mask:(GLUIImage*)mask + cornerRadius:(float)cr amount:(float)am; @end diff --git a/Ports/iOSPort/nativeSources/BlurRegion.m b/Ports/iOSPort/nativeSources/BlurRegion.m index df18dc4888d..54809bc1c10 100644 --- a/Ports/iOSPort/nativeSources/BlurRegion.m +++ b/Ports/iOSPort/nativeSources/BlurRegion.m @@ -22,6 +22,7 @@ */ #import "BlurRegion.h" #import "CodenameOne_GLViewController.h" +#import "GLUIImage.h" #include "TargetConditionals.h" #ifdef CN1_USE_METAL #import "METALView.h" @@ -77,11 +78,58 @@ -(id)initWithLensArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h return self; } +-(id)initWithGlassLensArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h cornerRadius:(float)cr + optics:(const float*)o count:(int)count amount:(float)am { + x = xpos; + y = ypos; + width = w; + height = h; + glass = NO; + lens = NO; + colorMatrix = NO; + glassLens = YES; + for (int i = 0; i < 16; i++) { + optics[i] = i < count ? o[i] : 0.0f; + } + cornerRadius = cr; + amount = am; + return self; +} + +-(id)initWithColorMatrixArgs:(int)xpos ypos:(int)ypos w:(int)w h:(int)h + matrix:(const float*)m mask:(GLUIImage*)mask + cornerRadius:(float)cr amount:(float)am { + x = xpos; + y = ypos; + width = w; + height = h; + glass = NO; + lens = NO; + colorMatrix = YES; + for (int i = 0; i < 12; i++) { + matrix[i] = m[i]; + } + maskImage = mask; +#ifndef CN1_USE_ARC + [maskImage retain]; +#endif + cornerRadius = cr; + amount = am; + return self; +} + -(void)execute { #if defined(CN1_USE_METAL) && !TARGET_OS_WATCH id view = [[CodenameOne_GLViewController instance] renderingView]; if ([view isKindOfClass:[METALView class]]) { - if (lens) { + if (glassLens) { + [(METALView*)view glassLensScreenRegionX:x y:y w:width h:height cornerRadius:cornerRadius + optics:optics amount:amount]; + } else if (colorMatrix) { + [(METALView*)view colorMatrixScreenRegionX:x y:y w:width h:height matrix:matrix + mask:(maskImage == nil ? nil : [maskImage getMTLTexture]) + cornerRadius:cornerRadius amount:amount]; + } else if (lens) { [(METALView*)view lensScreenRegionX:x y:y w:width h:height cornerRadius:cornerRadius magnify:magnify aberration:aberration tintColor:tintColor tintStrength:tintStrength]; @@ -105,6 +153,7 @@ -(NSString*)getName { #ifndef CN1_USE_ARC -(void)dealloc { + [maskImage release]; [super dealloc]; } #endif diff --git a/Ports/iOSPort/nativeSources/CN1MetalPipelineCache.m b/Ports/iOSPort/nativeSources/CN1MetalPipelineCache.m index 1fb459a57f9..8ba41398bd0 100644 --- a/Ports/iOSPort/nativeSources/CN1MetalPipelineCache.m +++ b/Ports/iOSPort/nativeSources/CN1MetalPipelineCache.m @@ -147,6 +147,36 @@ static void configureStencilWriteOnly(MTLRenderPipelineColorAttachmentDescriptor desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_lens"]; configureBlendPremultiplied(desc.colorAttachments[0]); break; + case CN1MetalPipelineGlassMaterial: + desc.vertexFunction = [library newFunctionWithName:@"cn1_vs_fullscreen"]; + desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_glass_material"]; + configureBlendDisabled(desc.colorAttachments[0]); + break; + case CN1MetalPipelineGlassBoxH: + desc.vertexFunction = [library newFunctionWithName:@"cn1_vs_fullscreen"]; + desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_glass_box_h"]; + configureBlendDisabled(desc.colorAttachments[0]); + break; + case CN1MetalPipelineGlassBoxV: + desc.vertexFunction = [library newFunctionWithName:@"cn1_vs_fullscreen"]; + desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_glass_box_v"]; + configureBlendDisabled(desc.colorAttachments[0]); + break; + case CN1MetalPipelineGlassOptics: + desc.vertexFunction = [library newFunctionWithName:@"cn1_vs_textured"]; + desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_glass_optics"]; + configureBlendPremultiplied(desc.colorAttachments[0]); + break; + case CN1MetalPipelineGlassLens: + desc.vertexFunction = [library newFunctionWithName:@"cn1_vs_textured"]; + desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_glass_lens"]; + configureBlendDisabled(desc.colorAttachments[0]); + break; + case CN1MetalPipelineColorMatrix: + desc.vertexFunction = [library newFunctionWithName:@"cn1_vs_textured"]; + desc.fragmentFunction = [library newFunctionWithName:@"cn1_fs_colormatrix"]; + configureBlendPremultiplied(desc.colorAttachments[0]); + break; default: return nil; } @@ -156,6 +186,11 @@ static void configureStencilWriteOnly(MTLRenderPipelineColorAttachmentDescriptor // this Metal aborts the draw call with a pixel-format mismatch even // for shaders that never engage the stencil test. desc.stencilAttachmentPixelFormat = MTLPixelFormatStencil8; + if (pipeline == CN1MetalPipelineGlassMaterial || pipeline == CN1MetalPipelineGlassBoxH + || pipeline == CN1MetalPipelineGlassBoxV) { + // Offscreen passes into scratch textures, which carry no stencil. + desc.stencilAttachmentPixelFormat = MTLPixelFormatInvalid; + } if (desc.vertexFunction == nil || desc.fragmentFunction == nil) { NSLog(@"CN1MetalPipelineCache: shader function missing for pipeline %ld", (long)pipeline); return nil; diff --git a/Ports/iOSPort/nativeSources/CN1MetalShaders.metal b/Ports/iOSPort/nativeSources/CN1MetalShaders.metal index 4cdfdb2b82e..6601346ca93 100644 --- a/Ports/iOSPort/nativeSources/CN1MetalShaders.metal +++ b/Ports/iOSPort/nativeSources/CN1MetalShaders.metal @@ -514,6 +514,321 @@ fragment float4 cn1_fs_lens( return float4(fr / 255.0 * alpha, fg / 255.0 * alpha, fb / 255.0 * alpha, alpha); } +// Graphics.colorMatrixRegion. Mirrors com.codename1.ui.plaf.ColorMatrixBlend (the +// reference the JavaSE port runs): v = clamp(M.p + off), k = amount * shape * mask +// alpha, result mix(p, v, k). Drawn premultiplied as (v*k, k) OVER p, which is the +// same mix and leaves the destination alpha alone. +fragment float4 cn1_fs_colormatrix( + VertexOutTextured in [[stage_in]], + constant float4 *rows [[buffer(0)]], // 3 matrix rows (r,g,b,off), then (fw, fh, cornerRadiusPx, amount) + constant float4 &flags [[buffer(1)]], // x: 1 = mask bound + texture2d src [[texture(0)]], + texture2d mask [[texture(1)]]) +{ + constexpr sampler nearestSmp(mag_filter::nearest, min_filter::nearest, address::clamp_to_edge); + // The mask may be stretched over the region (the pulsing tab bar), so it is + // filtered; the source is the region itself, pixel for pixel. + constexpr sampler maskSmp(mag_filter::linear, min_filter::linear, address::clamp_to_edge); + float fw = rows[3].x, fh = rows[3].y, cornerRadius = rows[3].z, amount = rows[3].w; + float hw = fw * 0.5, hh = fh * 0.5; + float k = amount; + if (cornerRadius != 0.0) { + float r = (cornerRadius < 0.0) ? min(hw, hh) : min(cornerRadius, min(hw, hh)); + float px = in.texcoord.x * fw - hw; + float py = in.texcoord.y * fh - hh; + float dxe = abs(px) - (hw - r); + float dye = abs(py) - (hh - r); + float ax = max(dxe, 0.0), ay = max(dye, 0.0); + float sdf = sqrt(ax * ax + ay * ay) + min(max(dxe, dye), 0.0) - r; + k *= clamp(0.5 - sdf, 0.0, 1.0); + } + if (flags.x > 0.5) { + k *= mask.sample(maskSmp, in.texcoord).a; + } + if (k <= 0.0) { return float4(0.0); } + float3 p = src.sample(nearestSmp, in.texcoord).rgb; + float3 v = float3(dot(rows[0].xyz, p) + rows[0].w, + dot(rows[1].xyz, p) + rows[1].w, + dot(rows[2].xyz, p) + rows[2].w); + v = clamp(v, 0.0, 1.0); + k = min(k, 1.0); + return float4(v * k, k); +} + +// ---- Liquid Glass on the GPU (CN1MetalGlassEncode / CN1MetalDrawGlass) ---- +// A port of METALView.m's CPU glass (the material loop, glassGaussianBlur and +// glassApplyOptics) that keeps its integer rounding: every intermediate is an +// 8-bit value, truncated or rounded exactly where the C code does, so the GPU +// patch matches the CPU one. + +struct VertexOutFullscreen { + float4 position [[position]]; +}; + +// One triangle covering the viewport; the fragment works from [[position]]. +vertex VertexOutFullscreen cn1_vs_fullscreen(uint vid [[vertex_id]]) { + float2 p = float2(float((vid << 1) & 2), float(vid & 2)); + VertexOutFullscreen o; + o.position = float4(p.x * 2.0 - 1.0, 1.0 - p.y * 2.0, 0.0, 1.0); + return o; +} + +static inline int cn1_glass_byte(float unit) { + return int(rint(unit * 255.0)); +} + +// params: x,y = the padded buffer's origin inside `src`; z,w = src size. +// material: sat, scale, offset, curve; material2.x = curveMid. +fragment float4 cn1_fs_glass_material( + VertexOutFullscreen in [[stage_in]], + constant int4 ¶ms [[buffer(0)]], + constant float4 &material [[buffer(1)]], + constant float4 &material2 [[buffer(2)]], + texture2d src [[texture(0)]]) +{ + int bx = int(in.position.x); + int by = int(in.position.y); + int ax = clamp(bx + params.x, 0, params.z - 1); + int ay = clamp(by + params.y, 0, params.w - 1); + float4 c = src.read(uint2(ax, ay)); + float rch = float(cn1_glass_byte(c.r)); + float gch = float(cn1_glass_byte(c.g)); + float bch = float(cn1_glass_byte(c.b)); + float sat = material.x, scale = material.y, offset = material.z, curve = material.w; + float lum = 0.2126 * rch + 0.7152 * gch + 0.0722 * bch; + float rr = (lum + (rch - lum) * sat) * scale + offset; + float gg = (lum + (gch - lum) * sat) * scale + offset; + float bb = (lum + (bch - lum) * sat) * scale + offset; + if (curve != 0.0) { + float d = lum / 255.0 - material2.x; + float k = curve * 255.0 * d * d; + rr += k; gg += k; bb += k; + } + // (int) in C truncates toward zero; the clamp comes first. + float ri = rr < 0.0 ? 0.0 : (rr > 255.0 ? 255.0 : trunc(rr)); + float gi = gg < 0.0 ? 0.0 : (gg > 255.0 ? 255.0 : trunc(gg)); + float bi = bb < 0.0 ? 0.0 : (bb > 255.0 ? 255.0 : trunc(bb)); + return float4(ri, gi, bi, 255.0) / 255.0; +} + +// One direction of a box-blur iteration: the mean of 2r+1 edge-clamped +// samples, rounded like glassBoxBlurOnce. params: x = r, y = width, z = height. +static inline float4 cn1_glass_box(VertexOutFullscreen in, int4 params, + texture2d src, bool horizontal) { + int x = int(in.position.x); + int y = int(in.position.y); + int r = params.x; + int sr = 0, sg = 0, sb = 0; + for (int k = -r; k <= r; k++) { + int xx = horizontal ? clamp(x + k, 0, params.y - 1) : x; + int yy = horizontal ? y : clamp(y + k, 0, params.z - 1); + float4 c = src.read(uint2(xx, yy)); + sr += cn1_glass_byte(c.r); + sg += cn1_glass_byte(c.g); + sb += cn1_glass_byte(c.b); + } + float norm = 1.0 / float(2 * r + 1); + return float4(float(int(float(sr) * norm + 0.5)), float(int(float(sg) * norm + 0.5)), + float(int(float(sb) * norm + 0.5)), 255.0) / 255.0; +} + +fragment float4 cn1_fs_glass_box_h(VertexOutFullscreen in [[stage_in]], constant int4 ¶ms [[buffer(0)]], + texture2d src [[texture(0)]]) { + return cn1_glass_box(in, params, src, true); +} + +fragment float4 cn1_fs_glass_box_v(VertexOutFullscreen in [[stage_in]], constant int4 ¶ms [[buffer(0)]], + texture2d src [[texture(0)]]) { + return cn1_glass_box(in, params, src, false); +} + +static inline int cn1_glass_bilerp(int c00, int c10, int c01, int c11, float tx, float ty) { + float top = float(c00) + float(c10 - c00) * tx; + float bot = float(c01) + float(c11 - c01) * tx; + return int(top + (bot - top) * ty + 0.5); +} + +static inline int3 cn1_glass_texel(texture2d t, int x, int y) { + float4 c = t.read(uint2(x, y)); + return int3(cn1_glass_byte(c.r), cn1_glass_byte(c.g), cn1_glass_byte(c.b)); +} + +static inline int cn1_glass_outline_channel(int c, int b, float alpha, float w) { + float v = float(c) * alpha; + float under = float(b) * (1.0 - alpha); + v = v + under; + float dark = 76.0 * w; + float alt = 0.78 * w * float(b); + if (alt < dark) { dark = alt; } + v = v - dark; + return v <= 0.0 ? 0 : (v >= 255.0 ? 255 : int(v + 0.5)); +} + +// The optics of glassApplyOptics, drawn as the patch itself. +// p0: fw, fh, cornerRadius (logical; < 0 = capsule), s +// p1: refract, specular, outline, unused +// p2 (int): pad, bw, bh, unused; p3 (int): rawX, rawY, rawW, rawH +fragment float4 cn1_fs_glass_optics( + VertexOutTextured in [[stage_in]], + constant float4 &p0 [[buffer(0)]], + constant float4 &p1 [[buffer(1)]], + constant int4 &p2 [[buffer(2)]], + constant int4 &p3 [[buffer(3)]], + texture2d blurred [[texture(0)]], + texture2d raw [[texture(1)]]) +{ + float fw = p0.x, fh = p0.y, cornerRadius = p0.z, s = p0.w; + float refract = p1.x, specular = p1.y, outline = p1.z; + int pad = p2.x, bw = p2.y, bh = p2.z; + int x = clamp(int(in.texcoord.x * fw), 0, int(fw) - 1); + int y = clamp(int(in.texcoord.y * fh), 0, int(fh) - 1); + int rw = int(fw), rh = int(fh); + float hw = float(rw) / 2.0, hh = float(rh) / 2.0; + float minhh = hw < hh ? hw : hh; + float r; + if (cornerRadius < 0.0) { r = minhh; } else { r = cornerRadius * s; if (r > minhh) r = minhh; } + if (r < 0.0) r = 0.0; + float band = minhh * 0.6; + float rimW = 3.0 * s; + float px = float(x) + 0.5, py = float(y) + 0.5; + float dx = fabs(px - hw) - (hw - r); + float dy = fabs(py - hh) - (hh - r); + float axx = dx > 0.0 ? dx : 0.0, ayy = dy > 0.0 ? dy : 0.0; + float outside = sqrt(axx * axx + ayy * ayy); + float mxv = dx > dy ? dx : dy; + float inside = mxv < 0.0 ? mxv : 0.0; + float depth = -(outside + inside - r); + if (depth <= 0.0) { return float4(0.0); } + float alpha = depth >= 1.0 ? 1.0 : depth; + if (cornerRadius == 0.0) { + float fb = float(rh) * 0.22; + if (fb > 1.0 && py > float(rh) - fb) { + float fade = (float(rh) - py) / fb; + if (fade < 0.0) fade = 0.0; + alpha *= fade; + } + } + float sx = float(x), sy = float(y); + if (refract > 0.0 && band > 0.0 && depth < band) { + float t = 1.0 - depth / band; + float distortion = 1.0 - sqrt(max(0.0, 1.0 - t * t)); + sx = float(x) - (px - hw) * distortion * refract; + sy = float(y) - (py - hh) * distortion * refract; + } + float fx = sx + float(pad), fy = sy + float(pad); + fx = clamp(fx, 0.0, float(bw - 1)); + fy = clamp(fy, 0.0, float(bh - 1)); + int x0 = int(fx), y0 = int(fy); + int x1 = x0 + 1 < bw ? x0 + 1 : x0, y1 = y0 + 1 < bh ? y0 + 1 : y0; + float tx = fx - float(x0), ty = fy - float(y0); + int3 c00 = cn1_glass_texel(blurred, x0, y0), c10 = cn1_glass_texel(blurred, x1, y0); + int3 c01 = cn1_glass_texel(blurred, x0, y1), c11 = cn1_glass_texel(blurred, x1, y1); + int rr = cn1_glass_bilerp(c00.x, c10.x, c01.x, c11.x, tx, ty); + int gg = cn1_glass_bilerp(c00.y, c10.y, c01.y, c11.y, tx, ty); + int bb = cn1_glass_bilerp(c00.z, c10.z, c01.z, c11.z, tx, ty); + if (specular > 0.0 && depth < rimW) { + float rim = 1.0 - depth / rimW; + float topBias = 0.55 + 0.45 * (1.0 - py / float(rh)); + int add = int(specular * rim * topBias * 70.0); + rr = min(rr + add, 255); + gg = min(gg + add, 255); + bb = min(bb + add, 255); + } + if (outline > 0.0 && depth < 1.0 && p3.z > 0) { + float wx; + if (dx > 0.0 && dy > 0.0) { wx = outside > 0.0 ? axx / outside : 0.0; } + else { wx = dx >= dy ? 1.0 : 0.0; } + float ow = outline * wx; + if (ow > 0.0) { + int3 bk = cn1_glass_texel(raw, clamp(x + p3.x, 0, p3.z - 1), clamp(y + p3.y, 0, p3.w - 1)); + rr = cn1_glass_outline_channel(rr, bk.x, alpha, ow); + gg = cn1_glass_outline_channel(gg, bk.y, alpha, ow); + bb = cn1_glass_outline_channel(bb, bk.z, alpha, ow); + return float4(float(rr), float(gg), float(bb), 255.0) / 255.0; + } + } + int a = int(alpha * 255.0); + return float4(float(rr * a / 255), float(gg * a / 255), float(bb * a / 255), float(a)) / 255.0; +} + +// Graphics.glassLensRegion -- a line-for-line port of +// com.codename1.ui.plaf.GlassLensBlend.apply (the reference the JavaSE port runs). +// geo: the quad in physical pixels; lens: the lens rect (physical); +// src: the blit's physical origin and size; misc.x: corner radius (< 0 capsule), +// misc.y: amount; o: the GlassLensBlend parameters (lengths in physical pixels). +static inline float cn1_glass_lens_disp(float s, float h, float mx) { + if (s >= h || h <= 0.0) { return 0.0; } + float t = (h - s) / h; + float d = (h - s) / sqrt(max(1e-6, 1.0 - t * t)); + return min(d, mx); +} + +fragment float4 cn1_fs_glass_lens( + VertexOutTextured in [[stage_in]], + constant float4 &geo [[buffer(0)]], + constant float4 &lens [[buffer(1)]], + constant float4 &srcr [[buffer(2)]], + constant float4 &misc [[buffer(3)]], + constant float *o [[buffer(4)]], + texture2d src [[texture(0)]]) +{ + constexpr sampler lin(mag_filter::linear, min_filter::linear, address::clamp_to_edge); + float2 P = geo.xy + in.texcoord * geo.zw; // pixel centre, physical + float2 size = float2(src.get_width(), src.get_height()); + float2 tp = P - srcr.xy; // inside the blit + float4 base4 = src.sample(lin, tp / size); + float3 base = base4.rgb; + float amount = misc.y; + float hw = lens.z * 0.5, hh = lens.w * 0.5; + float2 c = lens.xy + float2(hw, hh); + float r = misc.x < 0.0 ? min(hw, hh) : min(misc.x, min(hw, hh)); + float px = P.x - c.x, py = P.y - c.y; + float dx = fabs(px) - (hw - r), dy = fabs(py) - (hh - r); + float ax = max(dx, 0.0), ay = max(dy, 0.0); + float outsideD = sqrt(ax * ax + ay * ay); + float sdf = outsideD + min(max(dx, dy), 0.0) - r; + float nx, ny; + if (dx > 0.0 && dy > 0.0 && outsideD > 0.0) { nx = ax / outsideD; ny = ay / outsideD; } + else if (dx > dy) { nx = 1.0; ny = 0.0; } + else { nx = 0.0; ny = 1.0; } + nx = px < 0.0 ? -nx : nx; + ny = py < 0.0 ? -ny : ny; + float s = -sdf; + float3 outc = base; + if (s > 0.0) { + float d = cn1_glass_lens_disp(s, o[0], o[1]); + float disp = o[2]; + float2 n = float2(nx, ny); + float cr = src.sample(lin, (tp + n * d * (1.0 - disp)) / size).r; + float cg = src.sample(lin, (tp + n * d) / size).g; + float cb = src.sample(lin, (tp + n * d * (1.0 + disp)) / size).b; + float shade = 1.0; + if (o[9] > 0.0) { + float w = o[9]; + float band = s < w * 0.7 ? 1.0 : (s >= w ? 0.0 : smoothstep(0.0, 1.0, (w - s) / (w * 0.3))); + shade -= o[8] * fabs(nx) * band; + } + float rim = 0.0; + float past = s - o[4]; + if (o[7] > 0.0 && past >= 0.0) { + rim = (o[5] + o[6] * fabs(ny)) * exp(-past / o[7]); + } + float3 inside = float3(cr, cg, cb) * shade + o[10] + rim; + float cov = min(s, 1.0); + outc = base + (inside - base) * cov; + } else if (o[11] > 0.0 && o[12] > 0.0 && ny > 0.0) { + float t = (sdf - o[12]) / o[12]; + outc *= 1.0 - o[11] * ny * exp(-t * t); + } + if (o[4] > 0.0) { + float halfW = o[4] * 0.5; + float ring = 1.0 - fabs(s - halfW) / halfW; + if (ring > 0.0) { outc *= 1.0 - o[3] * min(ring, 1.0); } + } + outc = base + (clamp(outc, 0.0, 1.0) - base) * amount; + return float4(outc, base4.a); +} + // Gaussian blur is implemented via MPSImageGaussianBlur on the host side // (CN1Metalcompat.m) rather than a hand-rolled fragment shader. MPS picks // the kernel width automatically from sigma and stays accurate across the diff --git a/Ports/iOSPort/nativeSources/CN1Metalcompat.h b/Ports/iOSPort/nativeSources/CN1Metalcompat.h index e3da5facb87..2514c988d36 100644 --- a/Ports/iOSPort/nativeSources/CN1Metalcompat.h +++ b/Ports/iOSPort/nativeSources/CN1Metalcompat.h @@ -66,6 +66,13 @@ typedef NS_ENUM(NSInteger, CN1MetalPipeline) { CN1MetalPipelineMultiStopGradient, // CSS-style multi-stop gradient (linear / radial / conic). CN1MetalPipelineLens, // iOS-26 selection-drop lens (samples a blitted bar // region on-GPU; warp + tint + light, see cn1_fs_lens). + CN1MetalPipelineColorMatrix, // Graphics.colorMatrixRegion (samples a blitted screen + // region + optional mask; see cn1_fs_colormatrix). + CN1MetalPipelineGlassMaterial, // Liquid Glass on the GPU: colour material (offscreen, + CN1MetalPipelineGlassBoxH, // no stencil), the two passes of one box-blur + CN1MetalPipelineGlassBoxV, // iteration (offscreen), and the optics drawn on + CN1MetalPipelineGlassOptics, // screen. See CN1MetalGlassEncode. + CN1MetalPipelineGlassLens, // Graphics.glassLensRegion (see cn1_fs_glass_lens). CN1MetalPipelineCount }; @@ -207,6 +214,48 @@ void CN1MetalDrawLens(id texture, int x, int y, int w, int h, int fw, int fh, float magnify, float aberration, int tintColor, float tintStrength, float cornerRadiusPx); +// Graphics.colorMatrixRegion: draws a quad at (x,y,w,h) logical coords sampling +// `texture` (a fw x fh px blitted copy of that screen region) and, when non-nil, +// `mask` (stretched over the region, sampled the way CN1MetalDrawImage would +// draw it there). Each pixel becomes mix(p, clamp(M.p + off), k) with +// k = amount * shape coverage * mask alpha; matrix is row-major 3x4. +// cornerRadiusPx < 0 = capsule, 0 = the whole rectangle. +void CN1MetalDrawColorMatrix(id texture, id mask, int x, int y, int w, int h, + int fw, int fh, const float* matrix, float cornerRadiusPx, float amount); + +// Liquid Glass (glassScreenRegion) on the GPU, the same three stages as the CPU +// glassScreenRegionX path -- colour material, a triple box blur approximating a +// Gaussian, then the optics (shape, edge refraction, specular rim, outline) -- with +// the CPU code's integer rounding, so both produce the same patch. Encode runs the +// offscreen passes on `cb` (no render encoder may be open) and hands back the +// blurred material and the raw backdrop; Draw then draws the patch on the open +// screen encoder. Encode returns NO when the pipelines are unavailable. +typedef struct { + id blurred; // bw x bh, the component at (pad, pad) + id raw; // the unmodified backdrop around the component + int pad; + int bw; + int bh; + int rawX; // the component's origin inside `raw` + int rawY; + int rawW; // the part of `raw` holding backdrop pixels + int rawH; +} CN1MetalGlassPatch; +BOOL CN1MetalGlassEncode(id cb, id backdrop, int fx, int fy, int fw, int fh, + float rad, float sat, float scale, float offset, float curve, float curveMid, + CN1MetalGlassPatch *out); +void CN1MetalDrawGlass(const CN1MetalGlassPatch *patch, int x, int y, int w, int h, int fw, int fh, + float cornerRadius, float s, float refract, float specular, float outline); + +// Graphics.glassLensRegion: draws the quad (qx,qy,qw,qh) logical -- the lens plus +// its margin -- sampling `texture`, a blit of the screen whose pixel (0,0) is the +// physical pixel (srcX, srcY). The lens rect (lx,ly,lw,lh) and the optics lengths +// are in physical pixels; s = physical pixels per logical unit. +void CN1MetalDrawGlassLens(id texture, int srcX, int srcY, int srcW, int srcH, + int qx, int qy, int qw, int qh, float s, + float lx, float ly, float lw, float lh, float cornerRadiusPx, + const float* optics, float amount); + // Tile an RGBA image across (x,y,w,h). imageWidth/imageHeight are the // natural size of the source UIImage. Issues one textured quad per // tile (full or clipped at the right/bottom edges); a future batched diff --git a/Ports/iOSPort/nativeSources/CN1Metalcompat.m b/Ports/iOSPort/nativeSources/CN1Metalcompat.m index a4bb9ef9d76..94309811776 100644 --- a/Ports/iOSPort/nativeSources/CN1Metalcompat.m +++ b/Ports/iOSPort/nativeSources/CN1Metalcompat.m @@ -863,6 +863,237 @@ void CN1MetalDrawLens(id texture, int x, int y, int w, int h, [activeEncoder drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4]; } +void CN1MetalDrawColorMatrix(id texture, id mask, int x, int y, int w, int h, + int fw, int fh, const float* matrix, float cornerRadiusPx, float amount) { + if (activeEncoder == nil || pipelineCache == nil || texture == nil || matrix == NULL) { + return; + } + id state = [pipelineCache pipelineFor:CN1MetalPipelineColorMatrix]; + if (state == nil) { + return; + } + bindPipelineStateIfChanged(state); + float vertices[8] = { + (float)x, (float)y, + (float)(x+w), (float)y, + (float)x, (float)(y+h), + (float)(x+w), (float)(y+h) + }; + // The source is a direct blit of the screen region (row 0 = region top) and the + // mask is sampled exactly as CN1MetalDrawImage would draw it over the region, so + // both use the V=0-at-top mapping. + static const float texcoords[8] = { 0, 0, 1, 0, 0, 1, 1, 1 }; + [activeEncoder setVertexBytes:vertices length:sizeof(float) * 8 atIndex:0]; + uploadMatricesIfChanged(1); + [activeEncoder setVertexBytes:texcoords length:sizeof(float) * 8 atIndex:2]; + simd_float4 rows[4] = { + (simd_float4){ matrix[0], matrix[1], matrix[2], matrix[3] }, + (simd_float4){ matrix[4], matrix[5], matrix[6], matrix[7] }, + (simd_float4){ matrix[8], matrix[9], matrix[10], matrix[11] }, + (simd_float4){ (float)fw, (float)fh, cornerRadiusPx, amount } + }; + simd_float4 flags = (simd_float4){ mask != nil ? 1.0f : 0.0f, 0.0f, 0.0f, 0.0f }; + [activeEncoder setFragmentBytes:rows length:sizeof(rows) atIndex:0]; + [activeEncoder setFragmentBytes:&flags length:sizeof(flags) atIndex:1]; + [activeEncoder setFragmentTexture:texture atIndex:0]; + // A bound texture is required even when unused; the source doubles as a dummy. + [activeEncoder setFragmentTexture:(mask != nil ? mask : texture) atIndex:1]; + [activeEncoder drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4]; +} + +// Scratch textures of the GPU glass, reused across frames: 0 = the raw backdrop, +// 1 and 2 = the material / blur ping-pong pair. Sizes are rounded up so a glass +// rect that changes every frame (the pulsing tab bar) does not reallocate them. +static id cn1GlassScratch[3]; + +static id cn1GlassTexture(int slot, int w, int h) { + id t = cn1GlassScratch[slot]; + if (t != nil && (int)t.width >= w && (int)t.height >= h) { + return t; + } + id device = CN1MetalDevice(); + if (device == nil) { + return nil; + } + int aw = (w + 63) & ~63; + int ah = (h + 63) & ~63; + if (t != nil) { + aw = MAX(aw, (int)t.width); + ah = MAX(ah, (int)t.height); + } + MTLTextureDescriptor *desc = [MTLTextureDescriptor + texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm width:aw height:ah mipmapped:NO]; + desc.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead; + desc.storageMode = MTLStorageModePrivate; + id nt = [device newTextureWithDescriptor:desc]; + CN1_TEX_NOTE("glassGpuScratch", nt); + if (nt == nil) { + return nil; + } +#ifndef CN1_USE_ARC + [cn1GlassScratch[slot] release]; +#endif + cn1GlassScratch[slot] = nt; + return nt; +} + +// One offscreen full-viewport pass of a glass pipeline. +static void cn1GlassPass(id cb, id ps, id target, + int w, int h, id src, const void *b0, size_t l0, const void *b1, size_t l1, + const void *b2, size_t l2) { + MTLRenderPassDescriptor *d = [MTLRenderPassDescriptor renderPassDescriptor]; + d.colorAttachments[0].texture = target; + d.colorAttachments[0].loadAction = MTLLoadActionDontCare; + d.colorAttachments[0].storeAction = MTLStoreActionStore; + id enc = [cb renderCommandEncoderWithDescriptor:d]; + if (enc == nil) { + return; + } + [enc setRenderPipelineState:ps]; + [enc setViewport:(MTLViewport){ 0.0, 0.0, (double)w, (double)h, 0.0, 1.0 }]; + if (b0 != NULL) { [enc setFragmentBytes:b0 length:l0 atIndex:0]; } + if (b1 != NULL) { [enc setFragmentBytes:b1 length:l1 atIndex:1]; } + if (b2 != NULL) { [enc setFragmentBytes:b2 length:l2 atIndex:2]; } + [enc setFragmentTexture:src atIndex:0]; + [enc drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:3]; + [enc endEncoding]; +} + +BOOL CN1MetalGlassEncode(id cb, id backdrop, int fx, int fy, int fw, int fh, + float rad, float sat, float scale, float offset, float curve, float curveMid, + CN1MetalGlassPatch *out) { + if (cb == nil || backdrop == nil || pipelineCache == nil || out == NULL || fw <= 0 || fh <= 0) { + return NO; + } + id pm = [pipelineCache pipelineFor:CN1MetalPipelineGlassMaterial]; + id ph = [pipelineCache pipelineFor:CN1MetalPipelineGlassBoxH]; + id pv = [pipelineCache pipelineFor:CN1MetalPipelineGlassBoxV]; + id po = [pipelineCache pipelineFor:CN1MetalPipelineGlassOptics]; + if (pm == nil || ph == nil || pv == nil || po == nil) { + return NO; + } + int texW = (int)backdrop.width, texH = (int)backdrop.height; + int pad = (int)ceilf(rad) * 3 + 1; + int bw = fw + 2 * pad, bh = fh + 2 * pad; + int ax0 = fx - pad; if (ax0 < 0) ax0 = 0; + int ay0 = fy - pad; if (ay0 < 0) ay0 = 0; + int ax1 = fx + fw + pad; if (ax1 > texW) ax1 = texW; + int ay1 = fy + fh + pad; if (ay1 > texH) ay1 = texH; + int aw = ax1 - ax0, ah = ay1 - ay0; + if (aw <= 0 || ah <= 0) { + return NO; + } + id a = cn1GlassTexture(0, aw, ah); + id b = cn1GlassTexture(1, bw, bh); + id t = cn1GlassTexture(2, bw, bh); + if (a == nil || b == nil || t == nil) { + return NO; + } + id blit = [cb blitCommandEncoder]; + [blit copyFromTexture:backdrop sourceSlice:0 sourceLevel:0 + sourceOrigin:MTLOriginMake(ax0, ay0, 0) sourceSize:MTLSizeMake(aw, ah, 1) + toTexture:a destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [blit endEncoding]; + // 1) Colour material into the padded buffer, edges replicated. + simd_int4 mp = (simd_int4){ fx - pad - ax0, fy - pad - ay0, aw, ah }; + simd_float4 m1 = (simd_float4){ sat, scale, offset, curve }; + simd_float4 m2 = (simd_float4){ curveMid, 0, 0, 0 }; + cn1GlassPass(cb, pm, b, bw, bh, a, &mp, sizeof(mp), &m1, sizeof(m1), &m2, sizeof(m2)); + // 2) Three box-blur iterations (glassGaussianBlur), each horizontal then vertical. + if (rad >= 0.75f) { + int r = (int)(rad + 0.5f); + if (r < 1) { r = 1; } + simd_int4 bp = (simd_int4){ r, bw, bh, 0 }; + for (int i = 0; i < 3; i++) { + cn1GlassPass(cb, ph, t, bw, bh, b, &bp, sizeof(bp), NULL, 0, NULL, 0); + cn1GlassPass(cb, pv, b, bw, bh, t, &bp, sizeof(bp), NULL, 0, NULL, 0); + } + } + out->blurred = b; + out->raw = a; + out->pad = pad; + out->bw = bw; + out->bh = bh; + out->rawX = fx - ax0; + out->rawY = fy - ay0; + out->rawW = aw; + out->rawH = ah; + return YES; +} + +void CN1MetalDrawGlass(const CN1MetalGlassPatch *patch, int x, int y, int w, int h, int fw, int fh, + float cornerRadius, float s, float refract, float specular, float outline) { + if (activeEncoder == nil || pipelineCache == nil || patch == NULL || patch->blurred == nil) { + return; + } + id state = [pipelineCache pipelineFor:CN1MetalPipelineGlassOptics]; + if (state == nil) { + return; + } + bindPipelineStateIfChanged(state); + float vertices[8] = { + (float)x, (float)y, + (float)(x+w), (float)y, + (float)x, (float)(y+h), + (float)(x+w), (float)(y+h) + }; + static const float texcoords[8] = { 0, 0, 1, 0, 0, 1, 1, 1 }; + [activeEncoder setVertexBytes:vertices length:sizeof(float) * 8 atIndex:0]; + uploadMatricesIfChanged(1); + [activeEncoder setVertexBytes:texcoords length:sizeof(float) * 8 atIndex:2]; + simd_float4 p0 = (simd_float4){ (float)fw, (float)fh, cornerRadius, s }; + simd_float4 p1 = (simd_float4){ refract, specular, outline, 0 }; + simd_int4 p2 = (simd_int4){ patch->pad, patch->bw, patch->bh, 0 }; + simd_int4 p3 = (simd_int4){ patch->rawX, patch->rawY, patch->rawW, patch->rawH }; + [activeEncoder setFragmentBytes:&p0 length:sizeof(p0) atIndex:0]; + [activeEncoder setFragmentBytes:&p1 length:sizeof(p1) atIndex:1]; + [activeEncoder setFragmentBytes:&p2 length:sizeof(p2) atIndex:2]; + [activeEncoder setFragmentBytes:&p3 length:sizeof(p3) atIndex:3]; + [activeEncoder setFragmentTexture:patch->blurred atIndex:0]; + [activeEncoder setFragmentTexture:patch->raw atIndex:1]; + [activeEncoder drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4]; +} + +void CN1MetalDrawGlassLens(id texture, int srcX, int srcY, int srcW, int srcH, + int qx, int qy, int qw, int qh, float s, + float lx, float ly, float lw, float lh, float cornerRadiusPx, + const float* optics, float amount) { + if (activeEncoder == nil || pipelineCache == nil || texture == nil || optics == NULL) { + return; + } + id state = [pipelineCache pipelineFor:CN1MetalPipelineGlassLens]; + if (state == nil) { + return; + } + bindPipelineStateIfChanged(state); + float vertices[8] = { + (float)qx, (float)qy, + (float)(qx + qw), (float)qy, + (float)qx, (float)(qy + qh), + (float)(qx + qw), (float)(qy + qh) + }; + static const float texcoords[8] = { 0, 0, 1, 0, 0, 1, 1, 1 }; + [activeEncoder setVertexBytes:vertices length:sizeof(float) * 8 atIndex:0]; + uploadMatricesIfChanged(1); + [activeEncoder setVertexBytes:texcoords length:sizeof(float) * 8 atIndex:2]; + // geo: the quad in physical pixels (x, y, w, h); lens: the lens rect; + // src: the blit's origin and size; misc: corner radius, amount. + simd_float4 geo = (simd_float4){ qx * s, qy * s, qw * s, qh * s }; + simd_float4 lens = (simd_float4){ lx, ly, lw, lh }; + simd_float4 src = (simd_float4){ (float)srcX, (float)srcY, (float)srcW, (float)srcH }; + simd_float4 misc = (simd_float4){ cornerRadiusPx, amount, 0, 0 }; + float o[16]; + for (int i = 0; i < 16; i++) { o[i] = optics[i]; } + [activeEncoder setFragmentBytes:&geo length:sizeof(geo) atIndex:0]; + [activeEncoder setFragmentBytes:&lens length:sizeof(lens) atIndex:1]; + [activeEncoder setFragmentBytes:&src length:sizeof(src) atIndex:2]; + [activeEncoder setFragmentBytes:&misc length:sizeof(misc) atIndex:3]; + [activeEncoder setFragmentBytes:o length:sizeof(o) atIndex:4]; + [activeEncoder setFragmentTexture:texture atIndex:0]; + [activeEncoder drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4]; +} + void CN1MetalTileImage(id texture, int alpha, int x, int y, int width, int height, int imageWidth, int imageHeight) { @@ -1771,13 +2002,32 @@ BOOL CN1MetalBeginMutableImageDraw(GLUIImage *image) { id device = CN1MetalDevice(); id stencilTex = nil; if (device != nil) { - MTLTextureDescriptor *stencilDesc = [MTLTextureDescriptor - texture2DDescriptorWithPixelFormat:MTLPixelFormatStencil8 - width:(NSUInteger)w height:(NSUInteger)h mipmapped:NO]; - stencilDesc.usage = MTLTextureUsageRenderTarget; - stencilDesc.storageMode = MTLStorageModePrivate; - stencilTex = [device newTextureWithDescriptor:stencilDesc]; - CN1_TEX_NOTE("mutableDrawStencil", stencilTex); + // The stencil only lives for one pass (cleared on load, never stored), + // so passes of the same size share one texture: Metal orders passes on + // this queue, and allocating (and zeroing) a fresh image-sized texture + // per pass dominated frames that draw into an image every frame. + static id cachedStencil = nil; + if (cachedStencil != nil && (int)cachedStencil.width == w && (int)cachedStencil.height == h) { + stencilTex = cachedStencil; +#ifndef CN1_USE_ARC + [stencilTex retain]; +#endif + } else { + MTLTextureDescriptor *stencilDesc = [MTLTextureDescriptor + texture2DDescriptorWithPixelFormat:MTLPixelFormatStencil8 + width:(NSUInteger)w height:(NSUInteger)h mipmapped:NO]; + stencilDesc.usage = MTLTextureUsageRenderTarget; + stencilDesc.storageMode = MTLStorageModePrivate; + stencilTex = [device newTextureWithDescriptor:stencilDesc]; + CN1_TEX_NOTE("mutableDrawStencil", stencilTex); + if (stencilTex != nil) { +#ifndef CN1_USE_ARC + [stencilTex retain]; + [cachedStencil release]; +#endif + cachedStencil = stencilTex; + } + } if (stencilTex != nil) { desc.stencilAttachment.texture = stencilTex; desc.stencilAttachment.loadAction = MTLLoadActionClear; diff --git a/Ports/iOSPort/nativeSources/CodenameOne_GLViewController.m b/Ports/iOSPort/nativeSources/CodenameOne_GLViewController.m index 6fa5aaa83fd..4bbd28a9936 100644 --- a/Ports/iOSPort/nativeSources/CodenameOne_GLViewController.m +++ b/Ports/iOSPort/nativeSources/CodenameOne_GLViewController.m @@ -2718,6 +2718,34 @@ void Java_com_codename1_impl_ios_IOSImplementation_setNativeClippingPolygonGloba #endif } +void Java_com_codename1_impl_ios_IOSImplementation_nativeGlassLensScreenRegionImpl +(int x, int y, int width, int height, float cornerRadius, const float* optics, int count, float amount) { + BlurRegion* f = [[BlurRegion alloc] initWithGlassLensArgs:x ypos:y w:width h:height cornerRadius:cornerRadius + optics:optics count:count amount:amount]; + [CodenameOne_GLViewController upcoming:f]; +#ifndef CN1_USE_ARC + [f release]; +#endif +} + +// Defined further down; declared here for the mask hand-off below. +void* Java_com_codename1_impl_ios_IOSImplementation_finishDrawingOnImageImpl(); + +void Java_com_codename1_impl_ios_IOSImplementation_nativeColorMatrixScreenRegionImpl +(int x, int y, int width, int height, const float* matrix, void* maskPeer, float cornerRadius, float amount) { + if (maskPeer != NULL && ((BRIDGE_CAST void*)[CodenameOne_GLViewController instance].currentMutableImage) == maskPeer) { + // The mask is still being drawn into; close it so its texture is complete. + Java_com_codename1_impl_ios_IOSImplementation_finishDrawingOnImageImpl(); + } + BlurRegion* f = [[BlurRegion alloc] initWithColorMatrixArgs:x ypos:y w:width h:height matrix:matrix + mask:(BRIDGE_CAST GLUIImage*)maskPeer + cornerRadius:cornerRadius amount:amount]; + [CodenameOne_GLViewController upcoming:f]; +#ifndef CN1_USE_ARC + [f release]; +#endif +} + void Java_com_codename1_impl_ios_IOSImplementation_nativeRotateGlobalImpl (float angle, int x, int y) { //CN1Log(@"Java_com_codename1_impl_ios_IOSImplementation_nativeDrawLineGlobalImpl started"); diff --git a/Ports/iOSPort/nativeSources/IOSNative.m b/Ports/iOSPort/nativeSources/IOSNative.m index d26f8ef658a..478f226296f 100644 --- a/Ports/iOSPort/nativeSources/IOSNative.m +++ b/Ports/iOSPort/nativeSources/IOSNative.m @@ -2393,6 +2393,38 @@ void com_codename1_impl_ios_IOSNative_nativeGlassScreenRegion___int_int_int_int_ POOL_END(); } +extern void Java_com_codename1_impl_ios_IOSImplementation_nativeGlassLensScreenRegionImpl(int x, int y, int width, int height, float cornerRadius, const float* optics, int count, float amount); +void com_codename1_impl_ios_IOSNative_nativeGlassLensScreenRegion___int_int_int_int_float_float_1ARRAY_float(CN1_THREAD_STATE_MULTI_ARG JAVA_OBJECT instanceObject, JAVA_INT x, JAVA_INT y, JAVA_INT w, JAVA_INT h, JAVA_FLOAT cornerRadius, JAVA_OBJECT optics, JAVA_FLOAT amount) +{ + POOL_BEGIN(); + if (optics != JAVA_NULL) { + float o[16]; + int n = ((JAVA_ARRAY)optics)->length; + if (n > 16) { n = 16; } + JAVA_ARRAY_FLOAT* data = (JAVA_ARRAY_FLOAT*)((JAVA_ARRAY)optics)->data; + for (int i = 0; i < n; i++) { + o[i] = data[i]; + } + Java_com_codename1_impl_ios_IOSImplementation_nativeGlassLensScreenRegionImpl(x, y, w, h, cornerRadius, o, n, amount); + } + POOL_END(); +} + +extern void Java_com_codename1_impl_ios_IOSImplementation_nativeColorMatrixScreenRegionImpl(int x, int y, int width, int height, const float* matrix, void* maskPeer, float cornerRadius, float amount); +void com_codename1_impl_ios_IOSNative_nativeColorMatrixScreenRegion___int_int_int_int_float_1ARRAY_long_float_float(CN1_THREAD_STATE_MULTI_ARG JAVA_OBJECT instanceObject, JAVA_INT x, JAVA_INT y, JAVA_INT w, JAVA_INT h, JAVA_OBJECT matrix, JAVA_LONG maskPeer, JAVA_FLOAT cornerRadius, JAVA_FLOAT amount) +{ + POOL_BEGIN(); + if (matrix != JAVA_NULL && ((JAVA_ARRAY)matrix)->length >= 12) { + float m[12]; + JAVA_ARRAY_FLOAT* data = (JAVA_ARRAY_FLOAT*)((JAVA_ARRAY)matrix)->data; + for (int i = 0; i < 12; i++) { + m[i] = data[i]; + } + Java_com_codename1_impl_ios_IOSImplementation_nativeColorMatrixScreenRegionImpl(x, y, w, h, m, (void*)maskPeer, cornerRadius, amount); + } + POOL_END(); +} + extern void Java_com_codename1_impl_ios_IOSImplementation_nativeLensScreenRegionImpl(int x, int y, int width, int height, float cornerRadius, float magnify, float aberration, int tintColor, float tintStrength); void com_codename1_impl_ios_IOSNative_nativeLensScreenRegion___int_int_int_int_float_float_float_int_float(CN1_THREAD_STATE_MULTI_ARG JAVA_OBJECT instanceObject, JAVA_INT n1, JAVA_INT n2, JAVA_INT n3, JAVA_INT n4, JAVA_FLOAT n5, JAVA_FLOAT n6, JAVA_FLOAT n7, JAVA_INT n8, JAVA_FLOAT n9) { diff --git a/Ports/iOSPort/nativeSources/METALView.h b/Ports/iOSPort/nativeSources/METALView.h index 9e156baca64..c1ab10465c3 100644 --- a/Ports/iOSPort/nativeSources/METALView.h +++ b/Ports/iOSPort/nativeSources/METALView.h @@ -100,6 +100,10 @@ curve:(float)curve curveMid:(float)curveMid outline:(float)outline; - (void)lensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float)cornerRadius magnify:(float)magnify aberration:(float)aberration tintColor:(int)tintColor tintStrength:(float)tintStrength; +- (void)colorMatrixScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h matrix:(const float*)matrix + mask:(id)mask cornerRadius:(float)cornerRadius amount:(float)amount; +- (void)glassLensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float)cornerRadius + optics:(const float*)optics amount:(float)amount; -(void)presentPreservedFrameIfNeeded; -(void)updateFrameBufferSize:(int)w h:(int)h; -(void)invalidateRetainedFramebuffer; diff --git a/Ports/iOSPort/nativeSources/METALView.m b/Ports/iOSPort/nativeSources/METALView.m index 24ad9d48c5c..2fcaec813d6 100644 --- a/Ports/iOSPort/nativeSources/METALView.m +++ b/Ports/iOSPort/nativeSources/METALView.m @@ -1314,6 +1314,36 @@ - (void)glassScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h radius:(float)radiu int pad = (int)ceilf(rad) * 3 + 1; int bw = fw + 2 * pad, bh = fh + 2 * pad; + // GPU path: the whole material on the frame's own command buffer, no sync and + // no readback (see CN1MetalGlassEncode). The CPU path below is the fallback + // when the pipelines are unavailable, and CN1_GLASS_CPU=1 forces it. + static int cn1GlassForceCpu = -1; + if (cn1GlassForceCpu < 0) { + const char *env = getenv("CN1_GLASS_CPU"); + cn1GlassForceCpu = (env != NULL && env[0] == '1') ? 1 : 0; + } + if (!cn1GlassForceCpu) { + if (self.renderCommandEncoder != nil) { + CN1MetalEndFrame(); + [self.renderCommandEncoder endEncoding]; + self.renderCommandEncoder = nil; + } + if (self.commandBuffer == nil) { + self.commandBuffer = [self.commandQueue commandBuffer]; + } + CN1MetalGlassPatch patch; + if (CN1MetalGlassEncode(self.commandBuffer, [self backdropTexture], fx, fy, fw, fh, rad, sat, scale, offset, + curve, curveMid, &patch)) { + [self createRenderPassDescriptor]; + if (self.renderPassDescriptor == nil) { return; } + self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; + [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; + CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); + CN1MetalDrawGlass(&patch, x, y, w, h, fw, fh, cornerRadius, (float)s, refract, specular, outline); + return; + } + } + // 1) End + commit the screen encoder so screenTexture holds the backdrop. if (self.renderCommandEncoder != nil) { CN1MetalEndFrame(); @@ -1542,7 +1572,12 @@ - (void)lensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float) // 4) Restart a render encoder on the SAME command buffer (loadAction Load preserves the // bar) and re-publish it to the CN1Metalcompat draw layer. [self createRenderPassDescriptor]; - if (self.renderPassDescriptor == nil) { return; } + if (self.renderPassDescriptor == nil) { +#ifndef CN1_USE_ARC + [scratch release]; +#endif + return; + } self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); @@ -1550,6 +1585,139 @@ - (void)lensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float) // 5) Draw the lens quad sampling scratch (cornerRadius logical -> physical px; < 0 = capsule). float crPx = cornerRadius < 0.0f ? -1.0f : cornerRadius * (float)s; CN1MetalDrawLens(scratch, x, y, w, h, fw, fh, magnify, aberration, tintColor, tintStrength, crPx); + // The command buffer retains what it encodes; drop the +1 from newTexture. +#ifndef CN1_USE_ARC + [scratch release]; +#endif +} + +// Graphics.colorMatrixRegion on the live screen. Same GPU route as the lens: end +// the encoder, blit the painted region to a scratch texture on the frame's own +// command buffer, restart the encoder, then draw a quad that reads the scratch +// copy (and the mask) through cn1_fs_colormatrix. No CPU readback. +- (void)colorMatrixScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h matrix:(const float*)matrix + mask:(id)mask cornerRadius:(float)cornerRadius amount:(float)amount { + if ([self backdropTexture] == nil || w <= 0 || h <= 0 || amount <= 0.0f) { + return; + } + float sv = scaleValue > 0.0f ? scaleValue : 1.0f; + CGFloat s = self.contentScaleFactor / sv; + int texW = (int)[self backdropTexture].width, texH = (int)[self backdropTexture].height; + int fx = (int)(x * s), fy = (int)(y * s), fw = (int)(w * s), fh = (int)(h * s); + if (fx < 0) { fw += fx; fx = 0; } + if (fy < 0) { fh += fy; fy = 0; } + if (fx + fw > texW) { fw = texW - fx; } + if (fy + fh > texH) { fh = texH - fy; } + if (fw <= 0 || fh <= 0) { return; } + + if (self.renderCommandEncoder != nil) { + CN1MetalEndFrame(); + [self.renderCommandEncoder endEncoding]; + self.renderCommandEncoder = nil; + } + if (self.commandBuffer == nil) { + self.commandBuffer = [self.commandQueue commandBuffer]; + } + id device = CN1MetalDevice(); + MTLTextureDescriptor *desc = [MTLTextureDescriptor + texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm width:fw height:fh mipmapped:NO]; + desc.usage = MTLTextureUsageShaderRead; + desc.storageMode = MTLStorageModePrivate; + id scratch = [device newTextureWithDescriptor:desc]; + CN1_TEX_NOTE("colorMatrixScratch", scratch); + if (scratch == nil) { [self setFramebuffer]; return; } + id blit = [self.commandBuffer blitCommandEncoder]; + [blit copyFromTexture:[self backdropTexture] sourceSlice:0 sourceLevel:0 + sourceOrigin:MTLOriginMake(fx, fy, 0) sourceSize:MTLSizeMake(fw, fh, 1) + toTexture:scratch destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [blit endEncoding]; + + [self createRenderPassDescriptor]; + if (self.renderPassDescriptor == nil) { +#ifndef CN1_USE_ARC + [scratch release]; +#endif + return; + } + self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; + [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; + CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); + + float crPx = cornerRadius < 0.0f ? -1.0f : cornerRadius * (float)s; + CN1MetalDrawColorMatrix(scratch, mask, x, y, w, h, fw, fh, matrix, crPx, amount); + // The command buffer retains what it encodes; drop the +1 from newTexture. +#ifndef CN1_USE_ARC + [scratch release]; +#endif +} + +// Graphics.glassLensRegion on the live screen, on the GPU like the colour matrix: +// blit the lens plus the distance its refraction may reach, then draw the lens +// plus its margin (outline, shadow) with cn1_fs_glass_lens sampling the copy. +- (void)glassLensScreenRegionX:(int)x y:(int)y w:(int)w h:(int)h cornerRadius:(float)cornerRadius + optics:(const float*)optics amount:(float)amount { + if ([self backdropTexture] == nil || w <= 0 || h <= 0 || amount <= 0.0f || optics == NULL) { + return; + } + float sv = scaleValue > 0.0f ? scaleValue : 1.0f; + CGFloat s = self.contentScaleFactor / sv; + float o[16]; + for (int i = 0; i < 16; i++) { o[i] = optics[i]; } + // GlassLensBlend lengths: bevel, max shift, outline width, rim width, end-shade + // width, shadow width -- logical units in, physical pixels here. + static const int lengths[6] = { 0, 1, 4, 7, 9, 12 }; + for (int i = 0; i < 6; i++) { o[lengths[i]] *= (float)s; } + int margin = (int)ceilf(o[12] * 3.0f) + 1; + int reach = (int)ceilf(o[1]) + 1 + margin; + float lx = x * (float)s, ly = y * (float)s, lw = w * (float)s, lh = h * (float)s; + int texW = (int)[self backdropTexture].width, texH = (int)[self backdropTexture].height; + int sx0 = MAX(0, (int)floorf(lx) - reach), sy0 = MAX(0, (int)floorf(ly) - reach); + int sx1 = MIN(texW, (int)ceilf(lx + lw) + reach), sy1 = MIN(texH, (int)ceilf(ly + lh) + reach); + if (sx1 <= sx0 || sy1 <= sy0) { return; } + int sw = sx1 - sx0, sh = sy1 - sy0; + int ml = (int)ceilf(margin / (float)s); + int qx = x - ml, qy = y - ml, qw = w + 2 * ml, qh = h + 2 * ml; + + if (self.renderCommandEncoder != nil) { + CN1MetalEndFrame(); + [self.renderCommandEncoder endEncoding]; + self.renderCommandEncoder = nil; + } + if (self.commandBuffer == nil) { + self.commandBuffer = [self.commandQueue commandBuffer]; + } + id device = CN1MetalDevice(); + MTLTextureDescriptor *desc = [MTLTextureDescriptor + texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm width:sw height:sh mipmapped:NO]; + desc.usage = MTLTextureUsageShaderRead; + desc.storageMode = MTLStorageModePrivate; + id scratch = [device newTextureWithDescriptor:desc]; + CN1_TEX_NOTE("glassLensScratch", scratch); + if (scratch == nil) { [self setFramebuffer]; return; } + id blit = [self.commandBuffer blitCommandEncoder]; + [blit copyFromTexture:[self backdropTexture] sourceSlice:0 sourceLevel:0 + sourceOrigin:MTLOriginMake(sx0, sy0, 0) sourceSize:MTLSizeMake(sw, sh, 1) + toTexture:scratch destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [blit endEncoding]; + + [self createRenderPassDescriptor]; + if (self.renderPassDescriptor == nil) { +#ifndef CN1_USE_ARC + [scratch release]; +#endif + return; + } + self.renderCommandEncoder = [self.commandBuffer renderCommandEncoderWithDescriptor:self.renderPassDescriptor]; + [self.renderCommandEncoder setViewport:(MTLViewport){ 0.0, 0.0, (double)framebufferWidth, (double)framebufferHeight, 0.0, 1.0 }]; + CN1MetalBeginFrame(self.renderCommandEncoder, projectionMatrix, framebufferWidth, framebufferHeight); + + float crPx = cornerRadius < 0.0f ? -1.0f : cornerRadius * (float)s; + CN1MetalDrawGlassLens(scratch, sx0, sy0, sw, sh, qx, qy, qw, qh, (float)s, lx, ly, lw, lh, crPx, o, amount); +#ifndef CN1_USE_ARC + [scratch release]; +#endif } // Put the frame held in screenTexture onto \a dst (a drawable's texture), diff --git a/Ports/iOSPort/nativeSources/iOSModern27Theme.res b/Ports/iOSPort/nativeSources/iOSModern27Theme.res index e108e1ba1874663e7a068bba57f14fb64f992b51..3b00f7e7cc7a0c2a437b96507ed0f9bb45db3bd7 100644 GIT binary patch delta 1649 zcmZWpT}+!*82--tmHt2}r7d4ap|lJr$U<#beloK-*qqD4+%Tw_S>h6nA1?V+>+qb_E*?i!~wAuiX+a+#;w6g;o+TjWOZEj0+9*oUathcG0wb-uHRV z^ZuOk$8Y-Y*Y#5pd2rWyYgWu;GE|;@wwQejQtb==@X#y%UaSri%Yt$4ZfQ-2EC_-v z7l@n~4vqQ;LxHfn_stW-!Qn8A-i%r4ze{!W!hnx<#~PtSrsJ_1>IfIold_2}#TxO^ z8u8KDMIHS(RziKUhn{<+qe1zkT9J3sjBLZJS4a`P6IN4Iyo_$ihv-tjkIq-A>4o@< z^yQd@*HU05GW|JTLv4{l`gy`c4T(nOST3E4m(a#5qjQZaZ;KMT|J4A;sAF0Q6C#h8!-Is`qrd z_YC3RI^xpj0dD-pKqMS7v9^4MHXJb!Ls1@=c71UG&q~CA$1UU&L&csdpP=7B?1u9F zScgO^OpbjRcdF!?>`&u7Ke}uo4Z7py?W6wQQ$c?u(mfLBdpGD0cLYZU{HH^sg6M5- z5$sRJ`6}(^z!48_*~x3c)>gsFQ(2u|gTbJZz%#iJw6+Q6Cxc4B*RqeLEMAU9Jo`vW zjFX55&sC9IO(w1w$yyKk`-aZH^tM0_3s1tYbJ&ajRFNjq_R&EHi5_%-zDE?sGUy$L zN_1|LI@Pgs!(;ql9ApJQb{!7TGe@&<^u~2Ckph-4NNiqaoSy(48o$l4ydQ!k`riZ` zA_}*0l4-`aNu7af3fA1ftbz0oFs0yHhSQFt zo-BNO3FZ{-H)0?uC#x0hQtF+Pa4`l;TJBB}o8Qif#bj8aS8r>vKMtih6^EOJxvL=v zXiWeX?fz%Im`=ctmOMZ(GY`rZy;CEaaXJo~=-7Q&FcTTwt6&qEee7HXFTbaFXBAv5 z(34~a&s-*YG$+AAV=)c?VOO3B?B4(bP9>oL-%COR5%B9IIIyRasMPH}27^kq_st!v<8%(vE{qL4Rmhxq9lwBW-P(CTs=7m{@-qcd`; zia$j-zYY>zmbK^!6BYi#V%WM4_53ZusdYHUM3>j08jbg$K%=qaqqQP-9v+YQM zoqE38JH$yR;!eg4rJ$Zw?@Y7mXH%dB#$8FV14|Mb{FSqKkCghm(oCo|t<--p&FUW+ zfZh5Pf$21}^}JDI;I-$~zcNNDiH$BMY*?`YWl`7f@aHKLZ-TV%0nFQ{i*@2dWlnCF zXxm%p_g!Lbc3G$EMQ7eZRiLp!v|@%Wc(kNJ^b%#SxI8vZLb2yEJ|}v!POkBYdY7;tQErS<%d#o4=Rw@osAi zbn+wC{;FM?K+yQA6|NcXA3Z)grbvRjRx@9*I?8&lv{dnzvQM#2rJYaZLVPakmxSME z*9c|Mn|qkBkoEC%IZ1dur$guLuelRF{L`Z~bT7(O`{6??8*G1mMVEf|%F5$DN>@NV zZE-;bm0aNFUxq#A85eA=qwz+#K$jb#)|^)%;--iOhp=laEom@K*K{yo`@1C_%#x0t z6f=y+=(h=MrXSMS;Y$46-K~U@v_Hz4C_agG^y*psuwE1?^~u5GgRhSd9ubS@`t@zq z%q|Wj>9uwiq66pfuS!{`@{1IpFXo}gL3<=gzsFdRKbdx$v+v-eV50>eK%)bX8vg6hF*(+^!+LOh!9rxODn1{Y9d#VQBl~(DQ94@S* zt+CM4U*V6m{U&}u#hZAZ?|t4wQ(xm}=D~09+W@2}lE*MxU0tQ#Ja)OnK}aAjMMRhK zxJeW|TR^q;@O?eVLMUJ(&tzPL1&q+>W~c(E;kg3tKtx#(q{JzxsY#qsl%31cY#92k zfNjl!AR%pfXh@pUB3^T{e{^Jg;MfTN_-p{;)Vhd0fb_y5Ha&>(_9AX;_<#E*YAA|< zE?fS}l*l#7tLk>-E626Ol{OZ!t?Y59i{3T~Kq97PNF)%iKY(#J=>&y<& z`z35^lyPZg`=JYOL72srFrUkXA#TDl-rd9c`uYi?ti{%|Bc6*<7NnP>?1oAgbR`}i5@x{Wj^}I HV4wU4NwSv{ diff --git a/Ports/iOSPort/src/com/codename1/impl/ios/IOSImplementation.java b/Ports/iOSPort/src/com/codename1/impl/ios/IOSImplementation.java index fcc2223ab4c..3a9a5ef02ec 100644 --- a/Ports/iOSPort/src/com/codename1/impl/ios/IOSImplementation.java +++ b/Ports/iOSPort/src/com/codename1/impl/ios/IOSImplementation.java @@ -3429,6 +3429,63 @@ public boolean glassRegion(Object graphics, int x, int y, int width, int height, return true; } + @Override + public boolean isGlassLensRegionSupported(Object graphics) { + return ((NativeGraphics) graphics).associatedImage == null; + } + + @Override + public boolean glassLensRegion(Object graphics, int x, int y, int width, int height, float cornerRadius, + float[] optics, float amount) { + if (width <= 0 || height <= 0 || amount <= 0) { + return true; + } + NativeGraphics ng = (NativeGraphics) graphics; + // Live screen only, on the GPU (cn1_fs_glass_lens), like colorMatrixRegion. + if (ng.associatedImage != null || optics == null) { + return false; + } + ng.checkControl(); + nativeInstance.nativeGlassLensScreenRegion(x, y, width, height, cornerRadius, optics, amount); + return true; + } + + @Override + public boolean isColorMatrixRegionSupported(Object graphics) { + return ((NativeGraphics) graphics).associatedImage == null; + } + + @Override + public boolean colorMatrixRegion(Object graphics, int x, int y, int width, int height, float[] matrix, + com.codename1.ui.Image mask, float cornerRadius, float amount) { + if (width <= 0 || height <= 0 || amount <= 0) { + return true; + } + NativeGraphics ng = (NativeGraphics) graphics; + // Live screen only, on the GPU (cn1_fs_colormatrix). Off-screen images return + // false so the caller can fall back, as lensRegion does. + if (ng.associatedImage != null || matrix == null || matrix.length < 12) { + return false; + } + long maskPeer = 0; + if (mask != null) { + Object nativeMask = mask.getImage(); + if (!(nativeMask instanceof NativeImage)) { + return false; + } + maskPeer = ((NativeImage) nativeMask).peer; + } + // Hand control back to the screen first: the mask was usually just painted, + // and finishing it here gives its NativeImage the finished peer the op must + // sample (the native side cannot update the Java peer). + ng.checkControl(); + if (mask != null) { + maskPeer = ((NativeImage) mask.getImage()).peer; + } + nativeInstance.nativeColorMatrixScreenRegion(x, y, width, height, matrix, maskPeer, cornerRadius, amount); + return true; + } + @Override public boolean lensRegion(Object graphics, int x, int y, int width, int height, float cornerRadius, float magnify, float aberration, int tintColor, float tintStrength) { if (width <= 0 || height <= 0) { diff --git a/Ports/iOSPort/src/com/codename1/impl/ios/IOSNative.java b/Ports/iOSPort/src/com/codename1/impl/ios/IOSNative.java index cec7281b322..989e490ee6b 100644 --- a/Ports/iOSPort/src/com/codename1/impl/ios/IOSNative.java +++ b/Ports/iOSPort/src/com/codename1/impl/ios/IOSNative.java @@ -108,6 +108,12 @@ native void editStringAt(int x, int y, int w, int h, long peer, boolean singleLi native void nativeGlassScreenRegion(int x, int y, int width, int height, float radius, float cornerRadius, float sat, float scale, float offset, float refract, float specular, float curve, float curveMid, float outline); // Queues a live-screen iOS 26 selection-drop LENS op (magnify + chromatic // aberration + dark->accent tint over the painted content). See lensScreenRegionX. + // Graphics.colorMatrixRegion on the live screen: matrix is 12 floats (3 rows of + // r, g, b, offset), maskPeer an image peer or 0. See colorMatrixScreenRegionX. + // Graphics.glassLensRegion on the live screen: optics are the GlassLensBlend + // parameters. See glassLensScreenRegionX. + native void nativeGlassLensScreenRegion(int x, int y, int width, int height, float cornerRadius, float[] optics, float amount); + native void nativeColorMatrixScreenRegion(int x, int y, int width, int height, float[] matrix, long maskPeer, float cornerRadius, float amount); native void nativeLensScreenRegion(int x, int y, int width, int height, float cornerRadius, float magnify, float aberration, int tintColor, float tintStrength); // Renders an Apple SF Symbol to a GLUIImage peer (iOS 13+). Returns 0 when the // symbol is unavailable; writes the pixel width/height into widthHeight[0]/[1]. diff --git a/Themes/iOSModern27Theme.res b/Themes/iOSModern27Theme.res index e108e1ba1874663e7a068bba57f14fb64f992b51..3b00f7e7cc7a0c2a437b96507ed0f9bb45db3bd7 100644 GIT binary patch delta 1649 zcmZWpT}+!*82--tmHt2}r7d4ap|lJr$U<#beloK-*qqD4+%Tw_S>h6nA1?V+>+qb_E*?i!~wAuiX+a+#;w6g;o+TjWOZEj0+9*oUathcG0wb-uHRV z^ZuOk$8Y-Y*Y#5pd2rWyYgWu;GE|;@wwQejQtb==@X#y%UaSri%Yt$4ZfQ-2EC_-v z7l@n~4vqQ;LxHfn_stW-!Qn8A-i%r4ze{!W!hnx<#~PtSrsJ_1>IfIold_2}#TxO^ z8u8KDMIHS(RziKUhn{<+qe1zkT9J3sjBLZJS4a`P6IN4Iyo_$ihv-tjkIq-A>4o@< z^yQd@*HU05GW|JTLv4{l`gy`c4T(nOST3E4m(a#5qjQZaZ;KMT|J4A;sAF0Q6C#h8!-Is`qrd z_YC3RI^xpj0dD-pKqMS7v9^4MHXJb!Ls1@=c71UG&q~CA$1UU&L&csdpP=7B?1u9F zScgO^OpbjRcdF!?>`&u7Ke}uo4Z7py?W6wQQ$c?u(mfLBdpGD0cLYZU{HH^sg6M5- z5$sRJ`6}(^z!48_*~x3c)>gsFQ(2u|gTbJZz%#iJw6+Q6Cxc4B*RqeLEMAU9Jo`vW zjFX55&sC9IO(w1w$yyKk`-aZH^tM0_3s1tYbJ&ajRFNjq_R&EHi5_%-zDE?sGUy$L zN_1|LI@Pgs!(;ql9ApJQb{!7TGe@&<^u~2Ckph-4NNiqaoSy(48o$l4ydQ!k`riZ` zA_}*0l4-`aNu7af3fA1ftbz0oFs0yHhSQFt zo-BNO3FZ{-H)0?uC#x0hQtF+Pa4`l;TJBB}o8Qif#bj8aS8r>vKMtih6^EOJxvL=v zXiWeX?fz%Im`=ctmOMZ(GY`rZy;CEaaXJo~=-7Q&FcTTwt6&qEee7HXFTbaFXBAv5 z(34~a&s-*YG$+AAV=)c?VOO3B?B4(bP9>oL-%COR5%B9IIIyRasMPH}27^kq_st!v<8%(vE{qL4Rmhxq9lwBW-P(CTs=7m{@-qcd`; zia$j-zYY>zmbK^!6BYi#V%WM4_53ZusdYHUM3>j08jbg$K%=qaqqQP-9v+YQM zoqE38JH$yR;!eg4rJ$Zw?@Y7mXH%dB#$8FV14|Mb{FSqKkCghm(oCo|t<--p&FUW+ zfZh5Pf$21}^}JDI;I-$~zcNNDiH$BMY*?`YWl`7f@aHKLZ-TV%0nFQ{i*@2dWlnCF zXxm%p_g!Lbc3G$EMQ7eZRiLp!v|@%Wc(kNJ^b%#SxI8vZLb2yEJ|}v!POkBYdY7;tQErS<%d#o4=Rw@osAi zbn+wC{;FM?K+yQA6|NcXA3Z)grbvRjRx@9*I?8&lv{dnzvQM#2rJYaZLVPakmxSME z*9c|Mn|qkBkoEC%IZ1dur$guLuelRF{L`Z~bT7(O`{6??8*G1mMVEf|%F5$DN>@NV zZE-;bm0aNFUxq#A85eA=qwz+#K$jb#)|^)%;--iOhp=laEom@K*K{yo`@1C_%#x0t z6f=y+=(h=MrXSMS;Y$46-K~U@v_Hz4C_agG^y*psuwE1?^~u5GgRhSd9ubS@`t@zq z%q|Wj>9uwiq66pfuS!{`@{1IpFXo}gL3<=gzsFdRKbdx$v+v-eV50>eK%)bX8vg6hF*(+^!+LOh!9rxODn1{Y9d#VQBl~(DQ94@S* zt+CM4U*V6m{U&}u#hZAZ?|t4wQ(xm}=D~09+W@2}lE*MxU0tQ#Ja)OnK}aAjMMRhK zxJeW|TR^q;@O?eVLMUJ(&tzPL1&q+>W~c(E;kg3tKtx#(q{JzxsY#qsl%31cY#92k zfNjl!AR%pfXh@pUB3^T{e{^Jg;MfTN_-p{;)Vhd0fb_y5Ha&>(_9AX;_<#E*YAA|< zE?fS}l*l#7tLk>-E626Ol{OZ!t?Y59i{3T~Kq97PNF)%iKY(#J=>&y<& z`z35^lyPZg`=JYOL72srFrUkXA#TDl-rd9c`uYi?ti{%|Bc6*<7NnP>?1oAgbR`}i5@x{Wj^}I HV4wU4NwSv{ diff --git a/docs/developer-guide/Native-Themes.asciidoc b/docs/developer-guide/Native-Themes.asciidoc index c30fb1f17db..5866c737cfa 100644 --- a/docs/developer-guide/Native-Themes.asciidoc +++ b/docs/developer-guide/Native-Themes.asciidoc @@ -700,6 +700,90 @@ doubles the bounce. |The accent the dark glyph is tinted to inside the drop. |=== +The iOS 27 theme uses a third preset, `ios27`, which is time based rather +than a fixed-duration morph. Its curves are measured from a real +`UITabBarController` on the iOS 27 simulator, frame by frame, and played back +by `TabGlassMotion`: + +* on a tap the selection lens *lifts*: it grows, its platter fades so it + becomes clear glass, and the tab content seen through it magnifies; +* it travels on a spring, stretching while it accelerates and squashing on + arrival in proportion to the distance, then settles with a second, smaller + wobble; +* the whole bar -- glass, content and lens -- pulses in scale, and a soft glow + spreads from the touch point. + +The motion follows the gesture, not just the tap, the way UIKit's does: + +* holding a press keeps the lens lifted and the bar grown until the finger + lifts; +* pressing the selected tab lifts and pulses the lens in place; +* dragging along the bar pulls the lens with the finger (a *scrub*), and + letting go selects the tab under the finger, with the lens settling there; +* every release ends in a small wobble about a second after the finger lifts. + +The accent color lives in a second copy of the tab content, visible only +through the lens, so the color travels with the glass. Where the port +supports `Graphics.colorMatrixRegion` (iOS, macOS, the JavaScript port and the +simulator), the tab content is *vibrant* like UIKit's: each glyph pixel is a +color matrix of the glass behind it rather than flat paint, so labels and the +accent pick up the colors under the bar. The selection platter is likewise the +bar's own glass seen through a color matrix, not a translucent fill. With this +preset the tabs are painted with their normal style outside the lens and with +their *pressed* style inside it: the theme's `Tab`/`TabIcon` colors are the +unselected ones and `Tab.pressed`/`TabIcon.pressed` the selected ones. Tab +backgrounds should stay transparent. + +The motion reaches past the bar's visible pill, so the bar reserves room for +it inside its own bounds: the theme widens the `TabsContainer` padding by the +slack, narrows its margin by the same amount so the pill stays where it was, +and names the slack in constants. Everything the motion paints then stays +inside the bar's own bounds and repaint region. + +[cols="3,1,4", options="header"] +|=== +|Constant |iOS 27 |Effect + +|`@tabsMorphPreset` +|`ios27` +|Selects the measured time-based motion described above. + +|`@tabsGlassSlackXMm` / `@tabsGlassSlackYMm` +|`2` / `1` +|How much of the `TabsContainer` padding is motion slack rather than pill. + +|`@tabSelInsetMm` +|`0.66` +|Inset of the resting lens inside the pill. + +|`@tabSelPillColorInt` / `@tabSelPillAlphaInt` +|`0` / `35` +|Color and alpha of the resting selection platter on ports without +`colorMatrixRegion`. + +|`@tabSelPillColorDarkInt` / `@tabSelPillAlphaDarkInt` +|`0` / `67` +|The same platter in the dark appearance; defaults to the light values. + +|`@tabGlassLensLightAlphaInt` +|`28` +|White wash of the lifted lens, which reads brighter than the bar. + +|`@tabGlassRimAlphaInt` / `@tabGlassEdgeAlphaInt` +|`150` / `110` +|Alpha of the lifted lens's bright inner rim and dark edge ring, scaled by +the lift. + +|`@tabGlassGlowPct` +|`40` +|Strength of the touch glow; `0` turns it off. + +|`@tabGlassSpecularAlphaInt` / `@tabGlassSpecularDarkAlphaInt` +|`145` / `90` +|Peak alpha of the bright rim along the bar's top and bottom edges; `0` +(the default) draws none. +|=== + Similarly, the *Liquid Glass backdrop materials* themselves are typed, named recipes (`GlassRecipe`): a theme assigns `chrome` (edge-anchored bars), `pill` (the floating tab bar) or `panel` (buttons, dialogs, panels diff --git a/docs/videos/README.md b/docs/videos/README.md new file mode 100644 index 00000000000..89c61cc9679 --- /dev/null +++ b/docs/videos/README.md @@ -0,0 +1,8 @@ +# Videos + +- `tabs-side-by-side-light-bar.mp4`, `tabs-side-by-side-dark-bar.mp4` -- the iOS 27 + tab bar, native `UITabBarController` on top and Codename One below, driven by the + same real touches on the iOS 27 simulator: six taps, a held press, a tap on the + selected tab, a slow drag and a flick. Each gesture has a 4.2 second slot aligned + on its touch, so the two bars can be compared gesture by gesture. Recorded with + `scripts/record-ios-tabs-side-by-side.sh`. diff --git a/docs/videos/tabs-side-by-side-dark-bar.mp4 b/docs/videos/tabs-side-by-side-dark-bar.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..7ed811ae943a529c3e8532f81609464231086a5c GIT binary patch literal 5342317 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�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
    Tx;d%&sO`!U)cdx`UM&tEuw1!qVmOmn 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

    L6olw3rx*ZuwP&>e?NW?k?WiRKuAK+ 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

    A-xLT? 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 P|poHLH1lcr6VxQIZfChpXQxNv5 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

    >SqZslp@p>uPlhIzK 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