1
/* $XTermId: fontutils.c,v 1.327 2009/12/10 09:35:41 tom Exp $ */
1
/* $XTermId: fontutils.c,v 1.336 2010/01/01 15:02:26 tom Exp $ */
3
3
/************************************************************
5
Copyright 1998-2008,2009 by Thomas E. Dickey
5
Copyright 1998-2009,2010 by Thomas E. Dickey
1727
1727
#if OPT_RENDERFONT
1729
xtermCloseXft(TScreen * screen, XTermXftFonts * pub)
1731
if (pub->font != 0) {
1732
XftFontClose(screen->display, pub->font);
1729
1738
* Get the faceName/faceDoublesize resource setting. Strip off "xft:", which
1730
1739
* is not recognized by XftParseName().
1733
getFaceName(XtermWidget xw, char *wideName GCC_UNUSED)
1742
getFaceName(XtermWidget xw, Bool wideName GCC_UNUSED)
1735
1744
#if OPT_RENDERWIDE
1736
char *result = ((wideName != NULL)
1745
char *result = (wideName
1737
1746
? xw->misc.face_wide_name
1738
1747
: xw->misc.face_name);
1740
1749
char *result = xw->misc.face_name;
1742
if (!strncmp(result, "xft:", 4))
1751
if (!IsEmpty(result) && !strncmp(result, "xft:", 4))
1744
1753
return x_nonempty(result);
1757
* If we change the faceName, we'll have to re-acquire all of the fonts that
1758
* are derived from it.
1761
setFaceName(XtermWidget xw, const char *value)
1763
TScreen *screen = TScreenOf(xw);
1766
xw->misc.face_name = x_strdup(value);
1767
for (n = 0; n < NMENUFONTS; ++n) {
1768
xw->misc.face_size[n] = -1.0;
1769
xtermCloseXft(screen, &(screen->renderFontNorm[n]));
1770
xtermCloseXft(screen, &(screen->renderFontBold[n]));
1771
xtermCloseXft(screen, &(screen->renderFontBold[n]));
1773
xtermCloseXft(screen, &(screen->renderWideNorm[n]));
1774
xtermCloseXft(screen, &(screen->renderWideBold[n]));
1775
xtermCloseXft(screen, &(screen->renderWideItal[n]));
1767
1800
* overrides it.
1769
1802
if (xw->misc.render_font && !IsIconWin(screen, win)) {
1770
char *face_name = getFaceName(xw, NULL);
1803
char *face_name = getFaceName(xw, False);
1771
1804
int fontnum = screen->menu_font_number;
1772
1805
XftFont *norm = screen->renderFontNorm[fontnum].font;
1773
1806
XftFont *bold = screen->renderFontBold[fontnum].font;
1918
face_name = getFaceName(xw, xw->misc.face_wide_name);
1951
face_name = getFaceName(xw, True);
1919
1952
TRACE(("xtermComputeFontInfo wide(face %s, char_width %d)\n",
1920
1953
NonNull(face_name),
2616
2649
memset(&fnt, 0, sizeof(fnt));
2617
2650
screen->menu_font_sizes[fontnum] = -1;
2618
2651
if (xtermOpenFont(xw, screen->MenuFontName(fontnum), &fnt, fwAlways, True)) {
2619
screen->menu_font_sizes[fontnum] = FontSize(fnt.fs);
2620
TRACE(("menu_font_sizes[%d] = %ld\n", fontnum,
2621
screen->menu_font_sizes[fontnum]));
2652
if (fontnum <= fontMenu_lastBuiltin
2653
|| strcmp(fnt.fn, DEFFONT))
2654
screen->menu_font_sizes[fontnum] = FontSize(fnt.fs);
2622
2655
xtermCloseFont(xw, &fnt);
2984
3016
TRACE(("set myfonts." #field " reused\n")); \
3018
#define SAVE_FNAME(field, name) \
3019
if (myfonts.field != 0) { \
3020
if (screen->menu_font_names[which][name] == 0 \
3021
|| strcmp(screen->menu_font_names[which][name], myfonts.field)) { \
3022
TRACE(("updating menu_font_names[%d][" #name "] to %s\n", \
3023
which, myfonts.field)); \
3024
screen->menu_font_names[which][name] = x_strdup(myfonts.field); \
2986
3028
USE_CACHED(f_n, fNorm);
2987
3029
USE_CACHED(f_b, fBold);
2988
3030
#if OPT_WIDE_CHARS
2992
3034
if (xtermLoadFont(xw,
2994
3036
doresize, which)) {
3038
* If successful, save the data so that a subsequent query via
3039
* OSC-50 will return the expected values.
3041
SAVE_FNAME(f_n, fNorm);
3042
SAVE_FNAME(f_b, fBold);
3044
SAVE_FNAME(f_w, fWide);
3045
SAVE_FNAME(f_wb, fWBold);
2997
3048
xtermLoadFont(xw,
2998
3049
xtermFontName(screen->MenuFontName(oldFont)),
2999
3050
doresize, oldFont);
3051
Bell(XkbBI_MinorError, 0);
3055
Bell(XkbBI_MinorError, 0);
3004
Bell(XkbBI_MinorError, 0);