comparison src/font-mgr.h @ 5118:e0db3c197671 ben-lisp-object

merge up to latest default branch, doesn't compile yet
author Ben Wing <ben@xemacs.org>
date Sat, 26 Dec 2009 21:18:49 -0600
parents 75975fd0b7fc
children d1247f3cc363
comparison
equal deleted inserted replaced
5117:3742ea8250b5 5118:e0db3c197671
1 /* Lisp font data structures for X and Xft.
2
3 Copyright (C) 2003 Eric Knauel and Matthias Neubauer
4 Copyright (C) 2005 Eric Knauel
5 Copyright (C) 2004, 2005 Free Software Foundation, Inc.
6
7 Authors: Eric Knauel <knauel@informatik.uni-tuebingen.de>
8 Matthias Neubauer <neubauer@informatik.uni-freiburg.de>
9 Stephen J. Turnbull <stephen@xemacs.org>
10 Created: 27 Oct 2003
11 Updated: 05 Mar 2005 by Stephen J. Turnbull
12
13 This file is part of XEmacs.
14
15 XEmacs is free software; you can redistribute it and/or modify it
16 under the terms of the GNU General Public License as published by the
17 Free Software Foundation; either version 2, or (at your option) any
18 later version.
19
20 XEmacs is distributed in the hope that it will be useful, but WITHOUT
21 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with XEmacs; see the file COPYING. If not, write to
27 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
28 Boston, MA 02111-1307, USA. */
29
30 /* Synched up with: Not in GNU Emacs. */
31
32 /* This module provides the Lisp interface to fonts in X11, including Xft,
33 but (at least at first) not GTK+ or Qt.
34
35 It should be renamed to fonts-x.h.
36
37 Sealevel code should be in ../lwlib/lwlib-fonts.h or
38 ../lwlib/lwlib-colors.h.
39 */
40
41
42 #ifndef INCLUDED_font_mgr_h_
43 #define INCLUDED_font_mgr_h_
44
45 #include "../lwlib/lwlib-fonts.h"
46 #include "../lwlib/lwlib-colors.h"
47
48 extern Fixnum debug_xft;
49
50 /* Standard for fontconfig. Use a macro to show we're not guessing. */
51 #define Qfc_font_name_encoding Qutf_8
52
53 #define XE_XLFD_MAKE_LISP_STRING(s) (make_string(s, strlen(s)))
54
55 struct fc_pattern
56 {
57 struct LCRECORD_HEADER header;
58 FcPattern *fcpatPtr;
59 };
60
61 typedef struct fc_pattern fc_pattern;
62
63 DECLARE_LISP_OBJECT(fc_pattern, struct fc_pattern);
64 #define XFCPATTERN(x) XRECORD (x, fc_pattern, struct fc_pattern)
65 #define wrap_fcpattern(p) wrap_record (p, fc_pattern)
66 #define FCPATTERNP(x) RECORDP (x, fc_pattern)
67 #define CHECK_FCPATTERN(x) CHECK_RECORD (x, fc_pattern)
68 #define CONCHECK_FCPATTERN(x) CONCHECK_RECORD (x, fc_pattern)
69 #define XFCPATTERN_PTR(x) (XFCPATTERN(x)->fcpatPtr)
70
71 #define FONTCONFIG_EXPOSE_CONFIG
72 #ifdef FONTCONFIG_EXPOSE_CONFIG
73
74 struct fc_config
75 {
76 struct LCRECORD_HEADER header;
77 FcConfig *fccfgPtr;
78 };
79
80 typedef struct fc_config fc_config;
81
82 DECLARE_LISP_OBJECT(fc_config, struct fc_config);
83 #define XFCCONFIG(x) XRECORD (x, fc_config, struct fc_config)
84 #define wrap_fcconfig(p) wrap_record (p, fc_config)
85 #define FCCONFIGP(x) RECORDP (x, fc_config)
86 #define CHECK_FCCONFIG(x) CHECK_RECORD (x, fc_config)
87 #define CONCHECK_FCCONFIG(x) CONCHECK_RECORD (x, fc_config)
88 #define XFCCONFIG_PTR(x) (XFCCONFIG(x)->fccfgPtr)
89
90 #endif /* FONTCONFIG_EXPOSE_CONFIG */
91
92 #ifdef USE_XFT
93
94 #ifndef HAVE_FCCONFIGGETRESCANINTERVAL
95 /* Older fontconfig versions misspell this function name. */
96 #define FcConfigGetRescanInterval FcConfigGetRescanInverval
97 #endif /* */
98
99 #ifndef HAVE_FCCONFIGSETRESCANINTERVAL
100 /* Older fontconfig versions misspell this function name. */
101 #define FcConfigSetRescanInterval FcConfigSetRescanInverval
102 #endif /* */
103
104 /*
105 The format of a fontname (as returned by fontconfig) is not well-documented,
106 But the character repertoire is represented in an ASCII-compatible way. See
107 fccharset.c (FcCharSetUnparse). So we can use UTF-8 for long names.
108
109 Currently we have a hack where different versions of the unparsed name are
110 used in different contexts fairly arbitrarily. I don't think this is close
111 to coherency; even without the charset and lang properties fontconfig names
112 are too unwieldy to use. We need to rethink the approach here. I think
113 probably Lisp_Font_Instance.name should contain the font name as specified
114 to Lisp (almost surely much shorter than shortname, even, and most likely
115 wildcarded), while Lisp_Font_Instance.truename should contain the longname.
116 For now, I'm going to #ifdef the return values defaulting to short. -- sjt
117 */
118
119 /* DEBUGGING STUFF */
120
121 /* print message to stderr: one internal-format string argument */
122 #define DEBUG_XFT0(level,s) \
123 if (debug_xft > level) stderr_out (s)
124
125 /* print message to stderr: one formatted argument */
126 #define DEBUG_XFT1(level,format,x1) \
127 if (debug_xft > level) stderr_out (format, x1)
128
129 /* print message to stderr: two formatted arguments */
130 #define DEBUG_XFT2(level,format,x1,x2) \
131 if (debug_xft > level) stderr_out (format, x1, x2)
132
133 /* print message to stderr: three formatted arguments */
134 #define DEBUG_XFT3(level,format,x1,x2,x3) \
135 if (debug_xft > level) stderr_out (format, x1, x2, x3)
136
137 /* print message to stderr: four formatted arguments */
138 #define DEBUG_XFT4(level,format,x1,x2,x3,x4) \
139 if (debug_xft > level) stderr_out (format, x1, x2, x3, x4)
140
141 /* print an Xft pattern to stderr
142 LEVEL is the debug level (to compare to debug_xft)
143 FORMAT is a newline-terminated printf format with one %s for the pattern
144 and must be internal format (eg, pure ASCII)
145 PATTERN is an FcPattern *. */
146 #define PRINT_XFT_PATTERN(level,format,pattern) \
147 do { \
148 DECLARE_EISTRING (eistrpxft_name); \
149 Extbyte *name = (Extbyte *) FcNameUnparse (pattern); \
150 \
151 eicpy_ext(eistrpxft_name, \
152 name ? name : "FONT WITH NULL NAME", \
153 Qfc_font_name_encoding); \
154 DEBUG_XFT1 (level, format, eidata(eistrpxft_name)); \
155 free (name); \
156 } while (0)
157
158 /* print a progress message
159 LEVEL is the debug level (to compare to debug_xft)
160 FONT is the Xft font name in Mule internal encoding (from an eistring).
161 LANG is the language being checked for support (must be ASCII). */
162 #define CHECKING_LANG(level,font,lang) \
163 do { \
164 DEBUG_XFT2 (level, "checking if %s handles %s\n", font, lang); \
165 } while (0)
166
167 #else /* USE_XFT */
168
169 #endif /* USE_XFT */
170
171 #endif /* INCLUDED_font_mgr_h_ */