Repository navigation
The dropper's magnifier: a clear liquid orb over the zoom (native on macOS), the same at every zoom - #3
Draft
foxnne wants to merge 4 commits into
Draft
The dropper's magnifier: a clear liquid orb over the zoom (native on macOS), the same at every zoom#3foxnne wants to merge 4 commits into
foxnne wants to merge 4 commits into
Conversation
…zoom
The first step of pixi's dropper orb from fizzy's native windows plan (#226): the magnifier that
shows while the dropper reads the canvas (right-click held, the sample key or button, a touch
held) is now an orb of fizzy's liquid glass, not an opaque bordered frame.
- **Glass.** The orb's middle is a pixel-exact zoom of the art round the pixel being read, and its
edge is fizzy's glass bending that zoom toward the rim (`core.LiquidField.drawPicture`). On
macOS, Windows and Linux that is Apple's lens on the window opacity slider. On the web, which
publishes no slider look, it is the earlier clear liquid glass; the picture reaches past the orb
(`pictureMargin`) for that glass's rim to pull from. The middle takes no frost, tint or lift,
so a colour picked through it is the colour under it. With no glass program (the glass renderer
off, a WebGL without it, or an SDK before `drawPicture`), it is a plain disc with a rim.
- **Every zoom.** A pixel of the art in the orb is 4x its size on the canvas, held between 7 and
21 pixels across the orb, in whole screen pixels. Before, the zoom was the canvas's times
8 / (1 + zoom): under 1/7 it was smaller than the canvas, and past 8 it showed less than two
pixels. The read pixel sits at the centre, framed by a crosshair that leaves it in sight. The
picture shows the canvas's background past the art's edge, and the checkerboard only under the
art.
- **Motion.** It grows out of the pointer and follows it on a spring (`core.Spring`), resting up
and to the right of it. It is slid back onto the screen it is on, never flipped, and that screen
can be a popped-out float's window (`core.screens`).
- One module for both canvases: `widgets/magnifier.zig` (drawing) and
`widgets/magnifier_geometry.zig` (std-only numbers, tested), used by the file canvas and the
packed-atlas preview.
The glass needs fizzy's `LiquidField.drawPicture` (fizzy ccr-7f00e3d0-sjpshu, in the next SDK
release). Against sdk 0.2.17, which this still pins, the orb draws as the plain disc
(`@hasDecl`). To see the glass now, build against a local fizzy (`.fizzy = .{ .path = ... }`).
Checked: `zig test src/widgets/magnifier_geometry.zig` (5 pass, sweeping zoom 0.01 to 256 at
scales 1 to 3), `zig fmt`, `zig ast-check`. Not built or run here: dependency downloads are
blocked in the environment this was written in.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Euk6iCavQdW7MG5FN2vvFw
…on is Tried on a Mac, the orb read as a zoomed picture with a bent edge, nothing like the drop zones. The orb is now the drop zones' own glass (`core.dialogs.carriedField`): frosted over the canvas behind it, bending it at the rim, tinted and lit on the window opacity slider as the app's glass is. The pixel-exact zoom is a disc in it, inside a ring of that glass 16 points wide, its edge fading into the glass over 3 points, with the crosshair on the read pixel. Without the glass (the blur off and no glass program), the orb is the dialogs' fill, as the drop zones are then. - No shadow ring: the drop zones have none. - No new SDK call: `carriedField` is in sdk 0.2.17. The orb matches the host's drop zones once pixi builds against the SDK carrying #227's glass, which is fizzy#228's 0.2.18. - The zoom's pixel size is reckoned over the zoom, not the whole orb. It is rounded within its bounds, which smaller cells otherwise overshot at some UI scales. Checked: `zig test src/widgets/magnifier_geometry.zig` (5 pass), `zig fmt`, `zig ast-check`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Euk6iCavQdW7MG5FN2vvFw
2 of 8 tasks
…ere, with a thin rim Tried on a Mac, the orb in the app's glass read as a thick grey border round the zoom, not as glass. - **macOS 26** (fizzy offering the OS's glass, `core.native_glass.offered`, fizzy#228): the orb is declared as a piece of fizzy's overlay of Liquid Glass, the drop zones' own glass. The zoom and crosshair are a layer of their own the overlay takes over it (`core.screens.markCarried`), as it takes the drop zones' icons. Pixi draws no glass then. - **Elsewhere** (and against an SDK without `offered`): the app's drop glass, as before. - **The rim** left round the zoom is 4 points, as fizzy leaves round the carried view's picture on its drop, not 16. The zoom fades into it over 1.5 points. Checked: `zig test src/widgets/magnifier_geometry.zig` (5 pass), `zig fmt`, `zig ast-check`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Euk6iCavQdW7MG5FN2vvFw
Tried on a Mac and the web, the orb with its zoom laid over a rim of frosted glass read as flat: nothing under the glass to refract, and on macOS the native glass bent nothing either. The user asked for no frost and a lot of refraction, a liquid orb as the drop zones are. The glass now goes over the zoom. - **macOS 26**, where fizzy offers the OS's glass: the zoom is drawn in the app's window and a clear piece of Liquid Glass (`frost = 0`, the lens alone) is declared over it for fizzy's overlay. The OS's lens refracts the window beneath it. - **Elsewhere**: `LiquidField.drawPicture` over the zoom. Its middle is the zoom as it is, and its rim bends it toward the edge (Apple's lens on the slider natively; on the web the earlier glass, the picture reaching past the orb for it to pull from). It is at full refraction and bends 1.35 times as hard as the drop zones. Without a glass program, a plain disc with a rim. - The zoom is the whole orb again, with no ring round it. Checked: `zig test src/widgets/magnifier_geometry.zig` (5 pass), `zig fmt`, `zig ast-check`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Euk6iCavQdW7MG5FN2vvFw
foxnne
added a commit
to fizzyedit/fizzy
that referenced
this pull request
Oct 8, 2026
Part of #226 ## What changes Two pieces pixi's dropper magnifier (fizzyedit/pixi#3) needs to be a clear liquid orb over its zoom, with no frost and strong refraction: native Liquid Glass on macOS, the app's glass everywhere else. And the SDK release that ships them, so the orb can be tried against `main` as soon as this merges. **`core.native_glass.offered`** - The app publishes each frame whether the OS draws glass declared outside a view drag (`publishOffered`, from `Popout.beginFrame`'s `nativeGlass()`). - A plugin that sees it declares its glass with `native_glass.add`. Fizzy's overlay of Liquid Glass already stays up while any glass is declared. - Pixi declares a clear piece (`frost = 0`, the lens alone) over a zoom it draws in the window, so the OS's lens refracts the window beneath. - Off macOS 26, or with native glass off, `offered()` is false. **`LiquidField.drawPicture` / `pictureMargin` / `lens`, and `glass_look.forLens`** - The app's glass as a lens over a picture the plugin drew. The middle is the picture as it is, with no frost, colour or lift; the rim bends and lights it. - It reads no capture, so the middle stays pixel-exact. - On the web, where no look is published, it is the earlier glass. `pictureMargin` says how far past the shapes the picture should reach for that glass's rim, at the strongest shape lens. **Tried and dropped:** pixi tried the drop zones' frosted glass with its zoom laid over it. On a Mac it read as a thick grey border or a flat rim. **Merged with main** (#234–#236, #239, #240). ## SDK impact - [ ] None - [ ] Core-only or additive: reaches plugins at the next SDK release - [ ] Fingerprint moved: recorded in `sdk/src/version.zig`, `sdk_version` untouched, PR labelled `sdk` - [x] SDK release: bumps `sdk_version`, lists the `sdk` PRs since the last `sdk-v*` tag `sdk_version` goes 0.2.17 → 0.2.18 (ef95301). Since `sdk-v0.2.17` this release carries: - this PR's core additions; - #223, #224 and #227's core (the one-slider glass, `glass_look`, `core.native_glass`, `core.screens`'s menus and dialogs). The fingerprint has not moved, so installed plugins keep loading. Merging tags `sdk-v0.2.18` and, per #240, asks the store plugins to repin. ## Verified - `zig test core/gfx/glass_look.zig`: 13 pass. - `zig fmt --check` and `zig ast-check` on the changed files. - `tests/integration.zig` compiles `drawPicture` and checks `pictureMargin`. - CI: Linux, macOS, Windows, integration and the Windows cross-build on this head. - [x] macOS: pixi's orb tried locally against this branch by the maintainer, who approved it. - [ ] Windows: - [ ] Linux: - [ ] Web: ## Follow-ups - pixi#3 repinned to `sdk-v0.2.18` once it's tagged. - The orb pinching off pixi's sample button and merging with it (the plan's next step for this consumer). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Euk6iCavQdW7MG5FN2vvFw --------- Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The first step of pixi's dropper orb from fizzy's native windows plan (fizzyedit/fizzy#226). The magnifier that shows while the dropper reads the canvas (right-click held, the sample key or button, a touch held) becomes a clear orb of liquid glass over a pixel-exact zoom. It has no frost and refracts hard at its rim, as a drop of water would.
Glass
core.native_glass.offered, sdk: release 0.2.18, a plugin's glass over its picture and native fizzy#228): the zoom is drawn in the app's window, and a clear piece of Liquid Glass (frost = 0, the lens alone) is declared over it for fizzy's overlay. The OS's lens refracts the window beneath.core.LiquidField.drawPictureover the zoom. Its middle is the zoom as it is; its rim bends it toward the edge.Every zoom
Motion and placement
Code:
src/widgets/magnifier.zigandsrc/widgets/magnifier_geometry.zig(std-only, tested), shared by the file canvas and the packed-atlas preview.Before merge
sdk-v0.2.18published.zig fetch --save=fizzy https://github.com/fizzyedit/fizzy/releases/download/sdk-v0.2.18/fizzy-sdk-v0.2.18.tar.gzFIZZY_NATIVE_GLASS=0, and on the web: zoom far out, 1×, 8× and 32×+; a popped-out float; motion off; the packed-atlas preview.Checked so far
zig test src/widgets/magnifier_geometry.zig: 5 pass.zig fmt --checkandzig ast-check.🤖 Generated with Claude Code
https://claude.ai/code/session_01Euk6iCavQdW7MG5FN2vvFw