Mercurial > hg > xemacs-beta
diff lwlib/lwlib-fonts.c @ 3094:ad2f4ae9895b
[xemacs-hg @ 2005-11-26 11:45:47 by stephent]
Xft merge. <87k6ev4p8q.fsf@tleepslib.sk.tsukuba.ac.jp>
author | stephent |
---|---|
date | Sat, 26 Nov 2005 11:46:25 +0000 |
parents | |
children | 15fb91e3a115 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lwlib/lwlib-fonts.c Sat Nov 26 11:46:25 2005 +0000 @@ -0,0 +1,115 @@ +/* Font handling code for X and Xft. + +Copyright (C) 2003 Eric Knauel +Copyright (C) 2004 Free Software Foundation, Inc. + +Author: Stephen J. Turnbull <stephen@xemacs.org> +Created: 24 Jul 2004 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +XEmacs is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include "lwlib-fonts.h" + +#if 0 +/* these are all from ../src; if we need them move the code */ +#include "lisp.h" +#include "device.h" +#include "device-impl.h" +#include "console-x-impl.h" +#include "xft-fonts.h" +#endif + +/* + * code for handling Xft + */ + +#ifdef USE_XFT + +/* helper function to correctly open Xft/core fonts by name + #### Can't we use FcParseName here? + #### Is this done so often that the logic needs to be hard-coded in C? + + Daniel Pittman sez: Older code tried to enforce that an XLFD font was + not scaled, while this version just doesn't care. I think that is a + better behavior, since if someone really wants a scaled font we should + oblige them. + + Stephen sez: This whole function was ill-conceived, and I'm not sure it + succeeds at any of the things it attempts to do. First, we should be + using fontconfig directly. I'm not sure what Xft (or fontconfig) will + try to do if passed an XLFD. As for scaled fonts, both options are + equally bad. The problem is that the X server will often scale bitmap + fonts willy-nilly; it's worth trying to avoid that, but I can't say + whether that's worth overriding somebody who knows what they're doing. + In any case, I think we should find out what Xft (fontconfig?) is able + and willing to do with XLFDs, and probably move the logic to LISP. +*/ +XftFont * +xft_open_font_by_name (Display *dpy, char *name) +{ + XftFont *res = NULL; + + /* if (!NILP (Fxft_xlfd_font_name_p (make_string (name, strlen (name))))) */ + /* #### this is bogus but ... */ + int count = 0; + char *pos = name; + /* extra parens shut up gcc */ + while ((pos = index (pos, '-'))) + { + count++; + pos++; + } + + /* #### hard-coding DefaultScreen is evil! */ + if (count == 14 /* fully-qualified XLFD */ + || (count < 14 /* heuristic for wildcarded XLFD */ + && count >= 5 + && index (name, '*'))) + res = XftFontOpenXlfd (dpy, DefaultScreen (dpy), name); + else + res = XftFontOpenName (dpy, DefaultScreen (dpy), name); + + /* Try for a generic monospace font + #### Why? Menus don't need to line up in columns! */ + if (!res) + res = XftFontOpenName (dpy, DefaultScreen (dpy), "monospace"); + /* Try for anything we can get */ + if (!res) + res = XftFontOpenName (dpy, DefaultScreen (dpy), ""); + + if (!res) + { + /* #### This is Just So Wrong ... ! */ + /* sorry folks ... */ + fprintf (stderr, + "Unable to find any usable XFT font, even the defaults!\n"); + abort (); + return 0; + } + + return res; +} + +#endif /* USE_XFT */ + +/* End of lwlib-fonts.c */