Skip to content

Find best matched font in TypefaceCompatApi29Impl - #212

Closed
RikkaW wants to merge 1 commit into
androidx:androidx-mainfrom
RikkaW:androidx-main
Closed

Find best matched font in TypefaceCompatApi29Impl#212
RikkaW wants to merge 1 commit into
androidx:androidx-mainfrom
RikkaW:androidx-main

Conversation

@RikkaW

@RikkaW RikkaW commented Jul 24, 2021

Copy link
Copy Markdown
Contributor

Proposed Changes

Use best-matched font rather than "hardcoded"

The original part

final FontStyle defaultStyle = new FontStyle(
        (style & Typeface.BOLD) != 0 ? FontStyle.FONT_WEIGHT_BOLD
                : FontStyle.FONT_WEIGHT_NORMAL,
        (style & Typeface.ITALIC) != 0 ? FontStyle.FONT_SLANT_ITALIC
                : FontStyle.FONT_SLANT_UPRIGHT
);
return new Typeface.CustomFallbackBuilder(familyBuilder.build())
       .setStyle(defaultStyle)
       .build();

This will make the final Typeface ALWAYS have either 400 (FONT_WEIGHT_NORMAL) or 700 (FONT_WEIGHT_BOLD) weight. It is incorrect since fonts passed to these methods could have other font-weight. For example, pass only one font with 500 weight, the final Typeface will have 400 weight, making the fallback font displayed as 400 weight rather than 500.

This pull request copies the platform's algorithm to find the best-match font from the font family.

Testing

Test: Observed that the font weight is correct

Issues Fixed

Fixes: Fix https://issuetracker.google.com/issues/194553426

@google-cla google-cla Bot added the cla: yes label Jul 24, 2021
@dlam

dlam commented Oct 6, 2021

Copy link
Copy Markdown
Contributor

Thanks for submitting this and also filing a bug for tracking! Sorry it took awhile to get to this, we're not "officially" taking PRs from Github for text, but spoke with the owner and he seems okay with this change 😃

@objcode

objcode commented Mar 28, 2022

Copy link
Copy Markdown
Collaborator

Thank you so much for the change 🥳 !

It looks like it should merge. I will see this CL through the rest of the way on the gerrit side.

Sorry about the delay in reviewing.

harryzz pushed a commit to harryzz/compose-multiplatform-core that referenced this pull request Jul 28, 2026
## Proposed Changes

Use best-matched font rather than "hardcoded"

The original part

```
final FontStyle defaultStyle = new FontStyle(
        (style & Typeface.BOLD) != 0 ? FontStyle.FONT_WEIGHT_BOLD
                : FontStyle.FONT_WEIGHT_NORMAL,
        (style & Typeface.ITALIC) != 0 ? FontStyle.FONT_SLANT_ITALIC
                : FontStyle.FONT_SLANT_UPRIGHT
);
return new Typeface.CustomFallbackBuilder(familyBuilder.build())
       .setStyle(defaultStyle)
       .build();
```

This will make the final `Typeface` ALWAYS have either 400 (FONT_WEIGHT_NORMAL) or 700 (FONT_WEIGHT_BOLD) weight. It is incorrect since fonts passed to these methods could have other font-weight. For example, pass only one font with 500 weight, the final `Typeface` will have 400 weight, making the fallback font displayed as 400 weight rather than 500.

This pull request copies the platform's algorithm to find the best-match font from the font family.

## Testing

Test: Observed that the font weight is correct

## Issues Fixed

Fixes: Fix https://issuetracker.google.com/issues/194553426

This is an imported pull request from androidx#212.

Resolves JetBrains#212
Github-Pr-Head-Sha: 6d53f95
GitOrigin-RevId: f7c3c64
Change-Id: Ife725d32e207b713811d6be3a728874ad6f2df76
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants