Conversation
…cific font rendering
…using grapheme cluster counts and update app icon assets
- Fix Chrome/Chromium cursor appearing to the left of composition text:
Chromium ignores selectionRange.location when length == 0 (collapsed
cursor) and always positions the cursor at the start of the composition.
Workaround: pass selectionRange {0, utf16Length} for Chromium clients so
the cursor lands at the end of the selection (= end of composition).
Non-Chromium clients continue using the standard {utf16Length, 0} form.
Also adds a dedicated Chromium-specific path in getCursorRect that uses
selectedRange() first (which now correctly reports end-of-composition),
then falls back to the right edge of the last marked character.
- Add NSMarkedClauseSegment: 0 attribute so Chromium identifies the entire
composition string as one coherent segment.
- Replace AppIcon.icns with icon built in Icon Composer (Apple).
New .icns embeds both Default (light) and Dark appearance variants at
all standard sizes (16–512px × 1x and @2x), giving macOS automatic
appearance switching in the Dock and Launchpad.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…system font installation
…gn) and preserve font fixes
Bundled fonts are registered via ATSApplicationFontsPath; on launch a background task copies them into ~/Library/Fonts, replacing only older copies. NSFont.withBangla gives system fonts a July cascade for Bengali, used by the candidate panel and welcome window. Welcome window tabs now build lazily and the WebKit layout view is replaced by a native one. Uninstaller offers to remove the copied fonts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Extract candidate strings once in resolveSelectedIndex and reuse them for the panel and IMK candidates(). Treat a remembered index of 0 as "nothing remembered". Let Ctrl+Backspace reach riti for whole-word delete. Detect Chromium/Electron clients by the "<Name> Framework.framework" in the app's Frameworks dir so Arc and Cursor get the cursor workaround. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
DMG script now takes the pkg version from Info.plist too. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Vowel cards show the sign (আ / া) instead of a ক-based example. The phala and reph cards carry their marks; a ZWJ next to the hasanta makes the shaper emit the standalone subjoined form in July. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… layout grid - Candidate panel uses NSGlassEffectView on macOS 26+ with a custom elevated shadow; the flat panel remains as the pre-26 fallback - Numbers and words are vertically centered; selected row has more padding and an Enter symbol; larger fonts - Candidates found in the bundled dictionary get a checkmark; the word list preloads at launch off the main thread - Getting started header icon is centered against its title and subtitle - Avro Layout grid: 2x Bangla glyphs, 1.5x key labels, wider vowel separators Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Hi @Zibonnn, that's a lot of careful work, and I read all of it. Thank you. I can't take it as one PR though. It changes icons, fonts, the layout tab, the input controller and the build scripts together, and the input controller was rewritten for Several bugs you caught are fixed in The Chromium caret one I'd like to look at properly. Could you open an issue with the app and steps to reproduce? |
Summary
Design-driven changes to how Lekho looks and renders Bangla, plus correctness and size fixes that fell out along the way. 13 commits ahead of
main, no divergence.Icons (design)
Fonts and rendering (design)
fonts/, shipped in the app viaATSApplicationFontsPath, so the candidate panel and welcome window render Bangla in July regardless of what the user has installed. Both are open-source fonts released by the Government of Bangladesh.~/Library/Fontsso every app can use them. An existing copy is replaced only when the bundled one is newer;/Library/Fontsis never touched. The uninstaller offers to remove them.NSFont.withBangla(_:)builds one font whose cascade falls through to July (July-Bold for semibold and up) for Bengali. Latin, digits and emoji keep the system font, so mixed candidates line up.Welcome window (design)
LayoutWebViewand the WebKit dependency are gone. The layout is ~70 AppKit cards grouped by section with a live search field.আ / া,ই / ি) instead of a ক-based example...have no Avro rule, so the ZWNJ and nukta cards are dropped.cardHeaderandscrollingPagehelpers keep the tabs consistent.Input controller
selectionRange.locationfor a collapsed selection and puts the caret at 0. For Chromium clients we pass{0, N}(caret lands at the end), setmarkedClauseSegment, and anchor the panel fromselectedRange()with a marked-range fallback.<Name> Framework.framework, which catches Arc (company.thebrowser.Browser) and Cursor (com.todesktop.<hash>). Cached per bundle id.candidates(_:), instead of three walks over riti's list.UInt8(clamping:)on the selected index instead of a trapping conversion.Candidate panel
Build, scripts, CI
tiffRepresentationproduced 16-bit slices and a 2.2 MB icns. Now 900 KB.create_dmg.shreads the version from Info.plist for the DMG name, pkgbuild, and distribution XML.uninstall.shusesrm -rfon the/Applicationsentry, which may be a symlink or a real copy.env:and targets${{ github.repository_owner }}/homebrew-lekho, which resolves to your tap here.Notes for review
🤖 Generated with Claude Code