summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrcombs <rcombs@rcombs.me>2023-01-22 15:56:03 -0600
committerOleg Oshmyan <chortos@inbox.lv>2023-02-17 00:09:18 +0200
commit6f026e0e5517cbf5873fe827207afa34a5551e03 (patch)
treefface6bf0bbdc26efc2c85bf46b974c501207d82
parent077328ca6715e2e2826881003946640f56cb763c (diff)
downloadlibass-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.c27
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;
+ }
}
/**