mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-07 04:06:07 -05:00
font: sync cairo's options with the FC pattern
Configure cairo's 'options' with default values, then update the FontConfig pattern. Finally, update the cairo options after having retrieved the final FontConfig option.
This commit is contained in:
parent
8bd969262b
commit
89450bfd44
1 changed files with 24 additions and 1 deletions
25
font.c
25
font.c
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <fontconfig/fontconfig.h>
|
||||
#include <cairo-ft.h>
|
||||
|
|
@ -35,6 +36,12 @@ font_from_name(const char *name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
cairo_font_options_t *options = cairo_font_options_create();
|
||||
cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_DEFAULT);
|
||||
cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_DEFAULT);
|
||||
cairo_font_options_set_subpixel_order(options, CAIRO_SUBPIXEL_ORDER_DEFAULT);
|
||||
cairo_ft_font_options_substitute(options, pattern);
|
||||
|
||||
FcDefaultSubstitute(pattern);
|
||||
|
||||
FcResult result;
|
||||
|
|
@ -46,6 +53,23 @@ font_from_name(const char *name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
FcBool fc_hinting, fc_antialias;
|
||||
if (FcPatternGetBool(final_pattern, FC_HINTING,0, &fc_hinting) != FcResultMatch) {
|
||||
LOG_WARN("failed to get fontconfig hinting style");
|
||||
fc_hinting = FcTrue;
|
||||
}
|
||||
|
||||
if (FcPatternGetBool(final_pattern, FC_ANTIALIAS, 0, &fc_antialias) != FcResultMatch) {
|
||||
LOG_WARN("failed to get fontconfig antialias");
|
||||
fc_antialias = FcTrue;
|
||||
}
|
||||
|
||||
cairo_font_options_set_hint_style(
|
||||
options, fc_hinting ? CAIRO_HINT_STYLE_DEFAULT : CAIRO_HINT_STYLE_NONE);
|
||||
cairo_font_options_set_antialias(
|
||||
options, fc_antialias ? CAIRO_ANTIALIAS_DEFAULT : CAIRO_ANTIALIAS_NONE);
|
||||
assert(cairo_font_options_get_antialias(options) == CAIRO_ANTIALIAS_NONE);
|
||||
|
||||
double size;
|
||||
if (FcPatternGetDouble(final_pattern, FC_PIXEL_SIZE, 0, &size)) {
|
||||
LOG_ERR("%s: failed to get size", name);
|
||||
|
|
@ -68,7 +92,6 @@ font_from_name(const char *name)
|
|||
cairo_matrix_init_identity(&ctm);
|
||||
cairo_matrix_init_scale(&matrix, size, size);
|
||||
|
||||
cairo_font_options_t *options = cairo_font_options_create();
|
||||
cairo_scaled_font_t *scaled_font = cairo_scaled_font_create(
|
||||
face, &matrix, &ctm, options);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue