From e10019c64b4f4244730f88aee892a6b578397b99 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sun, 14 Nov 2010 21:50:24 +0000 Subject: Added alternative Xft font names (STR #2215) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7833 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/fl_font_xft.cxx | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/fl_font_xft.cxx b/src/fl_font_xft.cxx index d00404ced..e994dee84 100644 --- a/src/fl_font_xft.cxx +++ b/src/fl_font_xft.cxx @@ -418,18 +418,18 @@ static XFontStruct* load_xfont_for_xft2(void) { int size = fl_size_; const char *wt_med = "medium"; const char *wt_bold = "bold"; - char *weight = (char *)wt_med; // no specifc weight requested - accept any + const char *weight = wt_med; // no specifc weight requested - accept any char slant = 'r'; // regular non-italic by default char xlfd[128]; // we will put our synthetic XLFD in here char *pc = strdup(fl_fonts[fl_font_].name); // what font were we asked for? - char *name = pc; // keep a handle to the original name for freeing later + const char *name = pc; // keep a handle to the original name for freeing later // Parse the "fltk-name" of the font switch (*name++) { - case 'I': slant = 'i'; break; // italic - case 'P': slant = 'i'; // bold-italic (falls-through) - case 'B': weight = (char*)wt_bold; break; // bold - case ' ': break; // regular - default: name--; // no prefix, restore name + case 'I': slant = 'i'; break; // italic + case 'P': slant = 'i'; // bold-italic (falls-through) + case 'B': weight = wt_bold; break; // bold + case ' ': break; // regular + default: name--; // no prefix, restore name } // first, we do a query with no prefered size, to see if the font exists at all @@ -443,6 +443,23 @@ static XFontStruct* load_xfont_for_xft2(void) { //puts(xlfd); free(pc); // release our copy of the font name + // try alternative names + if (!xgl_font) { + if (!strcmp(name, "sans")) { + name = "helvetica"; + } else if (!strcmp(name, "mono")) { + name = "courier"; + } else if (!strcmp(name, "serif")) { + name = "times"; + } else if (!strcmp(name, "screen")) { + name = "lucidatypewriter"; + } else if (!strcmp(name, "dingbats")) { + name = "zapf dingbats"; + } + snprintf(xlfd, 128, "-*-*%s*-%s-%c-*--*-%d-*-*-*-*-*-*", name, weight, slant, (size*10)); + xgl_font = XLoadQueryFont(fl_display, xlfd); + } + // if we have nothing loaded, try a generic proportional font if(!xgl_font) { snprintf(xlfd, 128, "-*-helvetica-*-%c-*--*-%d-*-*-*-*-*-*", slant, (size*10)); -- cgit v1.2.3