Repository navigation
Conversation
A text run with text_outline draws hollow: the outline of its glyphs, that many points wide and centred on their edges, in the run's colour. It works on leaf text and on runs inside composed text, and nested runs inherit it. Android draws it with Compose's Stroke draw style. SwiftUI can't stroke glyphs, so on iOS 18 a TextRenderer builds the outline from the glyphs: copies nudged out by half the width make the outer edge, and the overlap of copies nudged in, cut out of it, makes the inner edge. Text without an outline keeps the single attributed string it always had. Before iOS 18 outlined runs draw filled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 2026
simonhamp
added a commit
that referenced
this pull request
Oct 20, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
simonhamp
added a commit
to NativePHP/dev-null-app
that referenced
this pull request
Oct 20, 2026
The /dev/null wordmark's middle slash is now a hollow lane-0 outline, like the web's, using text-outline from NativePHP/mobile-air#549 and NativePHP/mobile-ui#142. It replaces the solid regular-weight slash #20 used because EDGE text couldn't stroke a glyph then. Main's lock already has a mobile-air combined head with #549. This moves nativephp/mobile-ui to the combined/dev-null-app head that has #142. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
simonhamp
added a commit
that referenced
this pull request
Oct 22, 2026
Brings in #149 (with #151), #152 and the final #145, plus everything else merged to main since #144. The four conflicts were all in files where combined's own changes (#145, #149, custom icons, the pager header and the sticky header) are now on main in their final form, so main's version wins. Combined still carries text-outline (#142) and the Android sheet handle on top of main. Co-Authored-By: Claude Opus 5.5 <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.
Text runs can now draw hollow: just the outline of their glyphs, in the run's own colour. This goes with NativePHP/mobile-air#549, which adds the
text-outlineclass and passes it as thetext_outlineprop. I needed it for the dev/null wordmark, whose middle slash the web draws as an orange outline with-webkit-text-stroke.How it draws
Strokedraw style, at the width in dp. That's a real centred stroke with no fill.TextRendererbuilds the outline out of the glyphs themselves. Copies nudged out by half the width in 16 directions make the outer edge. The part that copies nudged in by half the width all still cover is cut out of that, which makes the inner edge. The result is the same centred stroke.text-outline-0turns it off.Worth checking
Textvalues joined together, because aTextRenderercan only see attributes set onText, not on anAttributedString. Composed text without an outline still builds the one attributed string it always did, and the custom renderer is only installed when something is outlined.displayPaddingis half the outline width, so the outline isn't clipped at the edges.Screenshots
From the devnull app, where the wordmark's middle slash uses
text-outline text-theme-lane-0. The close-ups show the web on top, the app's earlier solid slash in the middle, andtext-outlineat the bottom, all at 17pt on iOS:Android close-ups, light and dark:
Testing
combined/dev-null-appbranches the devnull app uses.Docs: NativePHP/nativephp.com#565.
🤖 Generated with Claude Code