1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-03 04:22:47 -05:00

Support font fallback even when an X11 server-side font is selected,

by introducing a wrapper around an individual unifont which falls back
to Pango (which already has built-in fallback) in the case where the
selected font doesn't support the glyph in question.

The wrapper itself is a (vestigial) subclass of unifont, to minimise
disturbance at the call sites.

[originally from svn r9293]
This commit is contained in:
Simon Tatham
2011-09-16 19:18:54 +00:00
parent 24bad48f00
commit 92688ff47b
3 changed files with 310 additions and 45 deletions

View File

@ -2745,8 +2745,8 @@ void setup_fonts_ucs(struct gui_data *inst)
unifont_destroy(inst->fonts[3]);
fs = conf_get_fontspec(inst->conf, CONF_font);
inst->fonts[0] = unifont_create(inst->area, fs->name, FALSE, FALSE,
shadowboldoffset, shadowbold);
inst->fonts[0] = multifont_create(inst->area, fs->name, FALSE, FALSE,
shadowboldoffset, shadowbold);
if (!inst->fonts[0]) {
fprintf(stderr, "%s: unable to load font \"%s\"\n", appname,
fs->name);
@ -2757,8 +2757,8 @@ void setup_fonts_ucs(struct gui_data *inst)
if (shadowbold || !fs->name[0]) {
inst->fonts[1] = NULL;
} else {
inst->fonts[1] = unifont_create(inst->area, fs->name, FALSE, TRUE,
shadowboldoffset, shadowbold);
inst->fonts[1] = multifont_create(inst->area, fs->name, FALSE, TRUE,
shadowboldoffset, shadowbold);
if (!inst->fonts[1]) {
fprintf(stderr, "%s: unable to load bold font \"%s\"\n", appname,
fs->name);
@ -2768,8 +2768,8 @@ void setup_fonts_ucs(struct gui_data *inst)
fs = conf_get_fontspec(inst->conf, CONF_widefont);
if (fs->name[0]) {
inst->fonts[2] = unifont_create(inst->area, fs->name, TRUE, FALSE,
shadowboldoffset, shadowbold);
inst->fonts[2] = multifont_create(inst->area, fs->name, TRUE, FALSE,
shadowboldoffset, shadowbold);
if (!inst->fonts[2]) {
fprintf(stderr, "%s: unable to load wide font \"%s\"\n", appname,
fs->name);
@ -2783,8 +2783,8 @@ void setup_fonts_ucs(struct gui_data *inst)
if (shadowbold || !fs->name[0]) {
inst->fonts[3] = NULL;
} else {
inst->fonts[3] = unifont_create(inst->area, fs->name, TRUE, TRUE,
shadowboldoffset, shadowbold);
inst->fonts[3] = multifont_create(inst->area, fs->name, TRUE, TRUE,
shadowboldoffset, shadowbold);
if (!inst->fonts[3]) {
fprintf(stderr, "%s: unable to load wide bold font \"%s\"\n", appname,
fs->name);