diff options
author | rcombs <rcombs@rcombs.me> | 2023-01-22 15:56:03 -0600 |
---|---|---|
committer | Oleg Oshmyan <chortos@inbox.lv> | 2023-02-17 00:09:18 +0200 |
commit | 6f026e0e5517cbf5873fe827207afa34a5551e03 (patch) | |
tree | fface6bf0bbdc26efc2c85bf46b974c501207d82 | |
parent | 077328ca6715e2e2826881003946640f56cb763c (diff) | |
download | libass-6f026e0e5517cbf5873fe827207afa34a5551e03.tar.bz2 libass-6f026e0e5517cbf5873fe827207afa34a5551e03.tar.xz |
ass_font: add special-casing for weights under 10
GDI uses this lookup table to convert these values to the usual scale.
-rw-r--r-- | libass/ass_font.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c index d875e1b..de59c7f 100644 --- a/libass/ass_font.c +++ b/libass/ass_font.c @@ -504,10 +504,31 @@ void ass_face_set_size(FT_Face face, double size) int ass_face_get_weight(FT_Face face) { TT_OS2 *os2 = FT_Get_Sfnt_Table(face, FT_SFNT_OS2); - if (os2 && os2->usWeightClass) - return os2->usWeightClass; - else + FT_UShort os2Weight = os2 ? os2->usWeightClass : 0; + switch (os2Weight) { + case 0: return 300 * !!(face->style_flags & FT_STYLE_FLAG_BOLD) + 400; + case 1: + return 100; + case 2: + return 200; + case 3: + return 300; + case 4: + return 350; + case 5: + return 400; + case 6: + return 600; + case 7: + return 700; + case 8: + return 800; + case 9: + return 900; + default: + return os2Weight; + } } /** |