Add support for all Pango font weight options

This commit is contained in:
Simon Long 2025-04-23 14:15:08 +01:00
parent 44295c0c13
commit 07ec2b781b
3 changed files with 62 additions and 5 deletions

View file

@ -12,7 +12,17 @@ enum font_slant {
enum font_weight {
FONT_WEIGHT_NORMAL = 0,
FONT_WEIGHT_BOLD
FONT_WEIGHT_THIN,
FONT_WEIGHT_ULTRALIGHT,
FONT_WEIGHT_LIGHT,
FONT_WEIGHT_SEMILIGHT,
FONT_WEIGHT_BOOK,
FONT_WEIGHT_MEDIUM,
FONT_WEIGHT_SEMIBOLD,
FONT_WEIGHT_BOLD,
FONT_WEIGHT_ULTRABOLD,
FONT_WEIGHT_HEAVY,
FONT_WEIGHT_ULTRAHEAVY
};
struct font {

View file

@ -23,8 +23,32 @@ font_to_pango_desc(struct font *font)
if (font->slant == FONT_SLANT_OBLIQUE) {
pango_font_description_set_style(desc, PANGO_STYLE_OBLIQUE);
}
if (font->weight == FONT_WEIGHT_BOLD) {
pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
switch (font->weight)
{
case FONT_WEIGHT_THIN: pango_font_description_set_weight(desc, PANGO_WEIGHT_THIN);
break;
case FONT_WEIGHT_ULTRALIGHT: pango_font_description_set_weight(desc, PANGO_WEIGHT_ULTRALIGHT);
break;
case FONT_WEIGHT_LIGHT: pango_font_description_set_weight(desc, PANGO_WEIGHT_LIGHT);
break;
case FONT_WEIGHT_SEMILIGHT: pango_font_description_set_weight(desc, PANGO_WEIGHT_SEMILIGHT);
break;
case FONT_WEIGHT_BOOK: pango_font_description_set_weight(desc, PANGO_WEIGHT_BOOK);
break;
case FONT_WEIGHT_MEDIUM: pango_font_description_set_weight(desc, PANGO_WEIGHT_MEDIUM);
break;
case FONT_WEIGHT_SEMIBOLD: pango_font_description_set_weight(desc, PANGO_WEIGHT_SEMIBOLD);
break;
case FONT_WEIGHT_BOLD: pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
break;
case FONT_WEIGHT_ULTRABOLD: pango_font_description_set_weight(desc, PANGO_WEIGHT_ULTRABOLD);
break;
case FONT_WEIGHT_HEAVY: pango_font_description_set_weight(desc, PANGO_WEIGHT_HEAVY);
break;
case FONT_WEIGHT_ULTRAHEAVY: pango_font_description_set_weight(desc, PANGO_WEIGHT_ULTRAHEAVY);
break;
default: pango_font_description_set_weight(desc, PANGO_WEIGHT_NORMAL);
break;
}
return desc;
}

View file

@ -862,8 +862,31 @@ set_font_attr(struct font *font, const char *nodename, const char *content)
font->slant = FONT_SLANT_NORMAL;
}
} else if (!strcmp(nodename, "weight")) {
font->weight = !strcasecmp(content, "bold") ?
FONT_WEIGHT_BOLD : FONT_WEIGHT_NORMAL;
if (!strcasecmp(content, "thin")) {
font->weight = FONT_WEIGHT_THIN;
} else if (!strcasecmp(content, "ultralight")) {
font->weight = FONT_WEIGHT_ULTRALIGHT;
} else if (!strcasecmp(content, "light")) {
font->weight = FONT_WEIGHT_LIGHT;
} else if (!strcasecmp(content, "semilight")) {
font->weight = FONT_WEIGHT_SEMILIGHT;
} else if (!strcasecmp(content, "book")) {
font->weight = FONT_WEIGHT_BOOK;
} else if (!strcasecmp(content, "medium")) {
font->weight = FONT_WEIGHT_MEDIUM;
} else if (!strcasecmp(content, "semibold")) {
font->weight = FONT_WEIGHT_SEMIBOLD;
} else if (!strcasecmp(content, "bold")) {
font->weight = FONT_WEIGHT_BOLD;
} else if (!strcasecmp(content, "ultrabold")) {
font->weight = FONT_WEIGHT_ULTRABOLD;
} else if (!strcasecmp(content, "heavy")) {
font->weight = FONT_WEIGHT_HEAVY;
} else if (!strcasecmp(content, "ultraheavy")) {
font->weight = FONT_WEIGHT_ULTRAHEAVY;
} else {
font->weight = FONT_WEIGHT_NORMAL;
}
}
}