ganjoorandroid/app
anas f49d9f080f Ask the font only for the axis it has
Reported from a Xiaomi on Android 16: the naskh weight control does nothing.

Both bundled faces carry exactly one variable axis, wght 400-700, and nothing
else. The code asked for two. FontVariation.Settings(weight, style) sends ital
alongside wght, and a font with no italic axis is entitled to refuse the whole
request rather than the part it cannot honour. AOSP ignores the stray axis,
which is why this renders correctly on an emulator and not on the device.

When a platform does refuse it, nothing visibly fails. Each entry in the family
declares the weight it was asked for, so the text matches an entry claiming 700,
draws with 400 glyphs, and is never a candidate for synthetic bolding either —
the one fallback that would have covered it is ruled out by the declaration.
Every weight then looks identical, with no error anywhere.

So: request wght only.

The same declaration broke API 24 and 25 outright, where variable axes do not
exist at all. The comment claimed Android would synthesise the heavier weights
there; it would not, for the reason above. Below 26 the family is now a single
entry at its real weight, so asking for bold synthesises bold.

Measured on an API 30 emulator, same poem, only the preference changed: naskh
+42% ink at Bold, nastaliq +11%, and the two faces differ from each other, so
both files load and both respond. Whether it settles HyperOS is for the device
to say — this removes the cause I can see from here.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-08 00:29:03 +02:00
..
src Ask the font only for the axis it has 2026-10-08 00:29:03 +02:00
.gitignore Initial Android Studio Compose scaffold 2026-10-03 22:16:22 +02:00
build.gradle.kts Release 0.4.0 2026-10-07 18:47:06 +02:00