Mercurial > emacs
annotate src/xftfont.c @ 112119:48f5ac42611a
Reconcile with changes in line movement behavior for long text lines
that cross more than a single physical window line, ie when truncate-lines
is nil.
(allout-next-visible-heading): Provide for change in line-move behavior on
long lines when truncate-lines is nil. In that case, line-move can wind up
on the same textual line when it moves to the next window line, and moving
to the bullet position after the move yields zero advancement. Add logic
to detect and compensate for the lack of progress.
(allout-current-topic-collapsed-p): move-end-of-line respect for field
boundaries is different when operating with body lines shorter than window
width versus ones greater than window width, which can yield false
negatives in this function. Avoid difference by applying move-end-of-line
while field-text-motion is inhibited.
author | Ken Manheimer <ken.manheimer@gmail.com> |
---|---|
date | Tue, 04 Jan 2011 14:44:10 -0500 |
parents | 1e7d8f405703 |
children | 417b1e4d63cd |
rev | line source |
---|---|
90400 | 1 /* xftfont.c -- XFT font driver. |
106815 | 2 Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
3 Copyright (C) 2006, 2007, 2008, 2009, 2010 | |
90400 | 4 National Institute of Advanced Industrial Science and Technology (AIST) |
5 Registration Number H13PRO009 | |
6 | |
7 This file is part of GNU Emacs. | |
8 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94941
diff
changeset
|
9 GNU Emacs is free software: you can redistribute it and/or modify |
90400 | 10 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94941
diff
changeset
|
11 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94941
diff
changeset
|
12 (at your option) any later version. |
90400 | 13 |
14 GNU Emacs is distributed in the hope that it will be useful, | |
15 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 GNU General Public License for more details. | |
18 | |
19 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94941
diff
changeset
|
20 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
90400 | 21 |
22 #include <config.h> | |
23 #include <stdio.h> | |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
103838
diff
changeset
|
24 #include <setjmp.h> |
90400 | 25 #include <X11/Xlib.h> |
26 #include <X11/Xft/Xft.h> | |
27 | |
28 #include "lisp.h" | |
29 #include "dispextern.h" | |
30 #include "xterm.h" | |
31 #include "frame.h" | |
32 #include "blockinput.h" | |
33 #include "character.h" | |
34 #include "charset.h" | |
111038
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
35 #include "composite.h" |
90400 | 36 #include "fontset.h" |
37 #include "font.h" | |
91143 | 38 #include "ftfont.h" |
90400 | 39 |
40 /* Xft font driver. */ | |
41 | |
42 static Lisp_Object Qxft; | |
106558
3d091f151696
xftfont.c: Parse symbolic names for constants also.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106538
diff
changeset
|
43 static Lisp_Object QChinting, QCautohint, QChintstyle, QCrgba, QCembolden, |
3d091f151696
xftfont.c: Parse symbolic names for constants also.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106538
diff
changeset
|
44 QClcdfilter; |
90400 | 45 |
46 /* The actual structure for Xft font that can be casted to struct | |
47 font. */ | |
48 | |
49 struct xftfont_info | |
50 { | |
51 struct font font; | |
106538
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
52 /* The following five members must be here in this order to be |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
53 compatible with struct ftfont_info (in ftfont.c). */ |
91143 | 54 #ifdef HAVE_LIBOTF |
55 int maybe_otf; /* Flag to tell if this may be OTF or not. */ | |
56 OTF *otf; | |
91163 | 57 #endif /* HAVE_LIBOTF */ |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
58 FT_Size ft_size; |
101555
a8e049b0d2c2
(struct xftfont_info): New member `index'.
Kenichi Handa <handa@m17n.org>
parents:
100951
diff
changeset
|
59 int index; |
106538
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
60 FT_Matrix matrix; |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
61 Display *display; |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
62 int screen; |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
63 XftFont *xftfont; |
90400 | 64 }; |
65 | |
66 /* Structure pointed by (struct face *)->extra */ | |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
67 |
90400 | 68 struct xftface_info |
69 { | |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
70 XftColor xft_fg; /* color for face->foreground */ |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
71 XftColor xft_bg; /* color for face->background */ |
90400 | 72 }; |
73 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
74 static void xftfont_get_colors (FRAME_PTR, struct face *, GC gc, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
75 struct xftface_info *, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
76 XftColor *fg, XftColor *bg); |
90400 | 77 |
78 | |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
79 /* Setup foreground and background colors of GC into FG and BG. If |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
80 XFTFACE_INFO is not NULL, reuse the colors in it if possible. BG |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
81 may be NULL. */ |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
82 |
90400 | 83 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
84 xftfont_get_colors (FRAME_PTR f, struct face *face, GC gc, struct xftface_info *xftface_info, XftColor *fg, XftColor *bg) |
90400 | 85 { |
86 if (xftface_info && face->gc == gc) | |
87 { | |
88 *fg = xftface_info->xft_fg; | |
89 if (bg) | |
90 *bg = xftface_info->xft_bg; | |
91 } | |
92 else | |
93 { | |
94 XGCValues xgcv; | |
95 int fg_done = 0, bg_done = 0; | |
96 | |
97 BLOCK_INPUT; | |
98 XGetGCValues (FRAME_X_DISPLAY (f), gc, | |
99 GCForeground | GCBackground, &xgcv); | |
100 if (xftface_info) | |
101 { | |
102 if (xgcv.foreground == face->foreground) | |
103 *fg = xftface_info->xft_fg, fg_done = 1; | |
104 else if (xgcv.foreground == face->background) | |
105 *fg = xftface_info->xft_bg, fg_done = 1; | |
106 if (! bg) | |
107 bg_done = 1; | |
108 else if (xgcv.background == face->background) | |
109 *bg = xftface_info->xft_bg, bg_done = 1; | |
110 else if (xgcv.background == face->foreground) | |
111 *bg = xftface_info->xft_fg, bg_done = 1; | |
112 } | |
113 | |
114 if (fg_done + bg_done < 2) | |
115 { | |
116 XColor colors[2]; | |
117 | |
118 colors[0].pixel = fg->pixel = xgcv.foreground; | |
119 if (bg) | |
120 colors[1].pixel = bg->pixel = xgcv.background; | |
121 XQueryColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), colors, | |
122 bg ? 2 : 1); | |
123 fg->color.alpha = 0xFFFF; | |
124 fg->color.red = colors[0].red; | |
125 fg->color.green = colors[0].green; | |
126 fg->color.blue = colors[0].blue; | |
127 if (bg) | |
128 { | |
129 bg->color.alpha = 0xFFFF; | |
130 bg->color.red = colors[1].red; | |
131 bg->color.green = colors[1].green; | |
132 bg->color.blue = colors[1].blue; | |
133 } | |
134 } | |
135 UNBLOCK_INPUT; | |
136 } | |
137 } | |
138 | |
139 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
140 static Lisp_Object xftfont_list (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
141 static Lisp_Object xftfont_match (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
142 static Lisp_Object xftfont_open (FRAME_PTR, Lisp_Object, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
143 static void xftfont_close (FRAME_PTR, struct font *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
144 static int xftfont_prepare_face (FRAME_PTR, struct face *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
145 static void xftfont_done_face (FRAME_PTR, struct face *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
146 static int xftfont_has_char (Lisp_Object, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
147 static unsigned xftfont_encode_char (struct font *, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
148 static int xftfont_text_extents (struct font *, unsigned *, int, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
149 struct font_metrics *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
150 static int xftfont_draw (struct glyph_string *, int, int, int, int, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109081
diff
changeset
|
151 static int xftfont_end_for_frame (FRAME_PTR f); |
90400 | 152 |
153 struct font_driver xftfont_driver; | |
154 | |
155 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
156 xftfont_list (Lisp_Object frame, Lisp_Object spec) |
90400 | 157 { |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
158 Lisp_Object list = ftfont_driver.list (frame, spec), tail; |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101640
diff
changeset
|
159 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
160 for (tail = list; CONSP (tail); tail = XCDR (tail)) |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
161 ASET (XCAR (tail), FONT_TYPE_INDEX, Qxft); |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
162 return list; |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
163 } |
90400 | 164 |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
165 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
166 xftfont_match (Lisp_Object frame, Lisp_Object spec) |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
167 { |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
168 Lisp_Object entity = ftfont_driver.match (frame, spec); |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
169 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
170 if (! NILP (entity)) |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
171 ASET (entity, FONT_TYPE_INDEX, Qxft); |
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
172 return entity; |
90400 | 173 } |
174 | |
175 static FcChar8 ascii_printable[95]; | |
176 | |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
177 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
178 xftfont_fix_match (FcPattern *pat, FcPattern *match) |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
179 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
180 /* These values are not used for matching (except antialias), but for |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
181 rendering, so make sure they are carried over to the match. |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
182 We also put antialias here because most fonts are antialiased, so |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
183 the match will have antialias true. */ |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
184 |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
185 FcBool b = FcTrue; |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
186 int i; |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
187 double dpi; |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
188 |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
189 FcPatternGetBool (pat, FC_ANTIALIAS, 0, &b); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
190 if (! b) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
191 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
192 FcPatternDel (match, FC_ANTIALIAS); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
193 FcPatternAddBool (match, FC_ANTIALIAS, FcFalse); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
194 } |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
195 FcPatternGetBool (pat, FC_HINTING, 0, &b); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
196 if (! b) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
197 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
198 FcPatternDel (match, FC_HINTING); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
199 FcPatternAddBool (match, FC_HINTING, FcFalse); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
200 } |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
201 if (FcResultMatch == FcPatternGetInteger (pat, FC_HINT_STYLE, 0, &i)) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
202 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
203 FcPatternDel (match, FC_HINT_STYLE); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
204 FcPatternAddInteger (match, FC_HINT_STYLE, i); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
205 } |
106092
6804c4648fee
* xftfont.c (xftfont_fix_match): Older versions of fontconfig does
Jan Djärv <jan.h.d@swipnet.se>
parents:
106089
diff
changeset
|
206 #ifndef FC_LCD_FILTER |
106089 | 207 /* Older fontconfig versions don't have FC_LCD_FILTER. */ |
106092
6804c4648fee
* xftfont.c (xftfont_fix_match): Older versions of fontconfig does
Jan Djärv <jan.h.d@swipnet.se>
parents:
106089
diff
changeset
|
208 #define FC_LCD_FILTER "lcdfilter" |
6804c4648fee
* xftfont.c (xftfont_fix_match): Older versions of fontconfig does
Jan Djärv <jan.h.d@swipnet.se>
parents:
106089
diff
changeset
|
209 #endif |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
210 if (FcResultMatch == FcPatternGetInteger (pat, FC_LCD_FILTER, 0, &i)) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
211 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
212 FcPatternDel (match, FC_LCD_FILTER); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
213 FcPatternAddInteger (match, FC_LCD_FILTER, i); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
214 } |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
215 if (FcResultMatch == FcPatternGetInteger (pat, FC_RGBA, 0, &i)) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
216 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
217 FcPatternDel (match, FC_RGBA); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
218 FcPatternAddInteger (match, FC_RGBA, i); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
219 } |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
220 if (FcResultMatch == FcPatternGetDouble (pat, FC_DPI, 0, &dpi)) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
221 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
222 FcPatternDel (match, FC_DPI); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
223 FcPatternAddDouble (match, FC_DPI, dpi); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
224 } |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
225 } |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
226 |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
227 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
228 xftfont_add_rendering_parameters (FcPattern *pat, Lisp_Object entity) |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
229 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
230 Lisp_Object tail; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
231 int ival; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
232 |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
233 for (tail = AREF (entity, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
234 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
235 Lisp_Object key = XCAR (XCAR (tail)); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
236 Lisp_Object val = XCDR (XCAR (tail)); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
237 |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
238 if (EQ (key, QCantialias)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
239 FcPatternAddBool (pat, FC_ANTIALIAS, NILP (val) ? FcFalse : FcTrue); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
240 else if (EQ (key, QChinting)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
241 FcPatternAddBool (pat, FC_HINTING, NILP (val) ? FcFalse : FcTrue); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
242 else if (EQ (key, QCautohint)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
243 FcPatternAddBool (pat, FC_AUTOHINT, NILP (val) ? FcFalse : FcTrue); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
244 else if (EQ (key, QChintstyle)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
245 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
246 if (INTEGERP (val)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
247 FcPatternAddInteger (pat, FC_HINT_STYLE, XINT (val)); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
248 else if (SYMBOLP (val) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
249 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
250 FcPatternAddInteger (pat, FC_HINT_STYLE, ival); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
251 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
252 else if (EQ (key, QCrgba)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
253 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
254 if (INTEGERP (val)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
255 FcPatternAddInteger (pat, FC_RGBA, XINT (val)); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
256 else if (SYMBOLP (val) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
257 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
258 FcPatternAddInteger (pat, FC_RGBA, ival); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
259 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
260 else if (EQ (key, QClcdfilter)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
261 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
262 if (INTEGERP (val)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
263 FcPatternAddInteger (pat, FC_LCD_FILTER, ival = XINT (val)); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
264 else if (SYMBOLP (val) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
265 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
266 FcPatternAddInteger (pat, FC_LCD_FILTER, ival); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
267 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
268 #ifdef FC_EMBOLDEN |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
269 else if (EQ (key, QCembolden)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
270 FcPatternAddBool (pat, FC_EMBOLDEN, NILP (val) ? FcFalse : FcTrue); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
271 #endif |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
272 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
273 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
274 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
275 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
276 xftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size) |
90400 | 277 { |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
278 FcResult result; |
90400 | 279 Display *display = FRAME_X_DISPLAY (f); |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
280 Lisp_Object val, filename, index, font_object; |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
281 FcPattern *pat = NULL, *match; |
90460
86449661f321
(xftfont_open): Change coding style of error
Kenichi Handa <handa@m17n.org>
parents:
90442
diff
changeset
|
282 struct xftfont_info *xftfont_info = NULL; |
90400 | 283 struct font *font; |
284 double size = 0; | |
90460
86449661f321
(xftfont_open): Change coding style of error
Kenichi Handa <handa@m17n.org>
parents:
90442
diff
changeset
|
285 XftFont *xftfont = NULL; |
90400 | 286 int spacing; |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
287 char name[256]; |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
288 int len, i; |
90959
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
289 XGlyphInfo extents; |
91226
040f2e332dc3
(struct xftfont_info): Delete the member ft_face.
Kenichi Handa <handa@m17n.org>
parents:
91163
diff
changeset
|
290 FT_Face ft_face; |
106538
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
291 FcMatrix *matrix; |
90400 | 292 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
293 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX)); |
95102
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
294 if (! CONSP (val)) |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
295 return Qnil; |
95102
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
296 val = XCDR (val); |
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
297 filename = XCAR (val); |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
298 index = XCDR (val); |
90400 | 299 size = XINT (AREF (entity, FONT_SIZE_INDEX)); |
300 if (size == 0) | |
301 size = pixel_size; | |
302 pat = FcPatternCreate (); | |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
303 FcPatternAddInteger (pat, FC_WEIGHT, FONT_WEIGHT_NUMERIC (entity)); |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
304 i = FONT_SLANT_NUMERIC (entity) - 100; |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
305 if (i < 0) i = 0; |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
306 FcPatternAddInteger (pat, FC_SLANT, i); |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
307 FcPatternAddInteger (pat, FC_WIDTH, FONT_WIDTH_NUMERIC (entity)); |
90400 | 308 FcPatternAddDouble (pat, FC_PIXEL_SIZE, pixel_size); |
90714
698001835583
(xftfont_open): Call FcConfigSubstitute.
Kenichi Handa <handa@m17n.org>
parents:
90712
diff
changeset
|
309 val = AREF (entity, FONT_FAMILY_INDEX); |
698001835583
(xftfont_open): Call FcConfigSubstitute.
Kenichi Handa <handa@m17n.org>
parents:
90712
diff
changeset
|
310 if (! NILP (val)) |
698001835583
(xftfont_open): Call FcConfigSubstitute.
Kenichi Handa <handa@m17n.org>
parents:
90712
diff
changeset
|
311 FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) SDATA (SYMBOL_NAME (val))); |
96094
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
312 val = AREF (entity, FONT_FOUNDRY_INDEX); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
313 if (! NILP (val)) |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
314 FcPatternAddString (pat, FC_FOUNDRY, (FcChar8 *) SDATA (SYMBOL_NAME (val))); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
315 val = AREF (entity, FONT_SPACING_INDEX); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
316 if (! NILP (val)) |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
317 FcPatternAddInteger (pat, FC_SPACING, XINT (val)); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
318 val = AREF (entity, FONT_DPI_INDEX); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
319 if (! NILP (val)) |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
320 { |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
321 double dbl = XINT (val); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
322 |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
323 FcPatternAddDouble (pat, FC_DPI, dbl); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
324 } |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
325 val = AREF (entity, FONT_AVGWIDTH_INDEX); |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
326 if (INTEGERP (val) && XINT (val) == 0) |
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
327 FcPatternAddBool (pat, FC_SCALABLE, FcTrue); |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
328 /* This is necessary to identify the exact font (e.g. 10x20.pcf.gz |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
329 over 10x20-ISO8859-1.pcf.gz). */ |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
330 FcPatternAddCharSet (pat, FC_CHARSET, ftfont_get_fc_charset (entity)); |
96094
0304b3142c84
(xftfont_open): Add FOUNDRY, SPACING, DPI, SCALABLE to the pattern.
Kenichi Handa <handa@m17n.org>
parents:
96075
diff
changeset
|
331 |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
332 xftfont_add_rendering_parameters (pat, entity); |
90442
d6abf2344438
(xftfont_open): Make the font name fontconfig's
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
333 |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
334 FcPatternAddString (pat, FC_FILE, (FcChar8 *) SDATA (filename)); |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
335 FcPatternAddInteger (pat, FC_INDEX, XINT (index)); |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101640
diff
changeset
|
336 |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
337 |
90442
d6abf2344438
(xftfont_open): Make the font name fontconfig's
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
338 BLOCK_INPUT; |
103199
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
339 /* Make sure that the Xrender extension is added before the Xft one. |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
340 Otherwise, the close-display hook set by Xft is called after the |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
341 one for Xrender, and the former tries to re-add the latter. This |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
342 results in inconsistency of internal states and leads to X |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
343 protocol error when one reconnects to the same X server. |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
344 (Bug#1696) */ |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
345 { |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
346 int event_base, error_base; |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
347 XRenderQueryExtension (display, &event_base, &error_base); |
3b14cedd241f
(xftfont_open): Make sure that Xrender extension is added
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
102992
diff
changeset
|
348 } |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
349 |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
350 /* Substitute in values from X resources and XftDefaultSet. */ |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
351 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat); |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
352 match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result); |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
353 xftfont_fix_match (pat, match); |
106558
3d091f151696
xftfont.c: Parse symbolic names for constants also.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106538
diff
changeset
|
354 |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
355 FcPatternDestroy (pat); |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
356 xftfont = XftFontOpenPattern (display, match); |
103650
e561e9f73ad4
* xftfont.c (xftfont_open): Avoid passing NULL argument to
Chong Yidong <cyd@stupidchicken.com>
parents:
103199
diff
changeset
|
357 if (!xftfont) |
e561e9f73ad4
* xftfont.c (xftfont_open): Avoid passing NULL argument to
Chong Yidong <cyd@stupidchicken.com>
parents:
103199
diff
changeset
|
358 { |
e561e9f73ad4
* xftfont.c (xftfont_open): Avoid passing NULL argument to
Chong Yidong <cyd@stupidchicken.com>
parents:
103199
diff
changeset
|
359 UNBLOCK_INPUT; |
e561e9f73ad4
* xftfont.c (xftfont_open): Avoid passing NULL argument to
Chong Yidong <cyd@stupidchicken.com>
parents:
103199
diff
changeset
|
360 XftPatternDestroy (match); |
e561e9f73ad4
* xftfont.c (xftfont_open): Avoid passing NULL argument to
Chong Yidong <cyd@stupidchicken.com>
parents:
103199
diff
changeset
|
361 return Qnil; |
e561e9f73ad4
* xftfont.c (xftfont_open): Avoid passing NULL argument to
Chong Yidong <cyd@stupidchicken.com>
parents:
103199
diff
changeset
|
362 } |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
363 ft_face = XftLockFace (xftfont); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
364 UNBLOCK_INPUT; |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
365 |
90400 | 366 /* We should not destroy PAT here because it is kept in XFTFONT and |
367 destroyed automatically when XFTFONT is closed. */ | |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
368 font_object = font_make_object (VECSIZE (struct xftfont_info), entity, size); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
369 ASET (font_object, FONT_TYPE_INDEX, Qxft); |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
370 len = font_unparse_xlfd (entity, size, name, 256); |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
371 if (len > 0) |
100551
42e9e426d886
(xftfont_open): Genarate a multibyte string if give names are utf-8.
Kenichi Handa <handa@m17n.org>
parents:
100427
diff
changeset
|
372 ASET (font_object, FONT_NAME_INDEX, make_string (name, len)); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
373 len = font_unparse_fcname (entity, size, name, 256); |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
374 if (len > 0) |
100551
42e9e426d886
(xftfont_open): Genarate a multibyte string if give names are utf-8.
Kenichi Handa <handa@m17n.org>
parents:
100427
diff
changeset
|
375 ASET (font_object, FONT_FULLNAME_INDEX, make_string (name, len)); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
376 else |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
377 ASET (font_object, FONT_FULLNAME_INDEX, |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
378 AREF (font_object, FONT_NAME_INDEX)); |
95102
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
379 ASET (font_object, FONT_FILE_INDEX, filename); |
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
380 ASET (font_object, FONT_FORMAT_INDEX, |
96431
abddf0a4cec0
(xftfont_open): Don't call FcConfigSubstitute and
Kenichi Handa <handa@m17n.org>
parents:
96146
diff
changeset
|
381 ftfont_font_format (xftfont->pattern, filename)); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
382 font = XFONT_OBJECT (font_object); |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
383 font->pixel_size = pixel_size; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
384 font->driver = &xftfont_driver; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
385 font->encoding_charset = font->repertory_charset = -1; |
90400 | 386 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
387 xftfont_info = (struct xftfont_info *) font; |
90400 | 388 xftfont_info->display = display; |
389 xftfont_info->screen = FRAME_X_SCREEN_NUMBER (f); | |
390 xftfont_info->xftfont = xftfont; | |
106538
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
391 /* This means that there's no need of transformation. */ |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
392 xftfont_info->matrix.xx = 0; |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
393 if (FcPatternGetMatrix (xftfont->pattern, FC_MATRIX, 0, &matrix) |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
394 == FcResultMatch) |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
395 { |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
396 xftfont_info->matrix.xx = 0x10000L * matrix->xx; |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
397 xftfont_info->matrix.yy = 0x10000L * matrix->yy; |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
398 xftfont_info->matrix.xy = 0x10000L * matrix->xy; |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
399 xftfont_info->matrix.yx = 0x10000L * matrix->yx; |
500878bee91d
(struct xftfont_info): New member matrix.
Kenichi Handa <handa@m17n.org>
parents:
106290
diff
changeset
|
400 } |
90400 | 401 font->pixel_size = size; |
402 font->driver = &xftfont_driver; | |
95102
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
403 if (INTEGERP (AREF (entity, FONT_SPACING_INDEX))) |
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
404 spacing = XINT (AREF (entity, FONT_SPACING_INDEX)); |
a3868b9c34f4
(xftfont_open): Ajusted for the change of extra info
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
405 else |
90400 | 406 spacing = FC_PROPORTIONAL; |
90959
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
407 if (! ascii_printable[0]) |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
408 { |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
409 int i; |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
410 for (i = 0; i < 95; i++) |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
411 ascii_printable[i] = ' ' + i; |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
412 } |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
413 BLOCK_INPUT; |
109081
bcae1f83a33e
Check FC_DUAL too. For such fonts, check width one by one.
Kenichi Handa <handa@etlken>
parents:
106815
diff
changeset
|
414 if (spacing != FC_PROPORTIONAL && spacing != FC_DUAL) |
90959
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
415 { |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
416 font->min_width = font->average_width = font->space_width |
90959
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
417 = xftfont->max_advance_width; |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
418 XftTextExtents8 (display, xftfont, ascii_printable + 1, 94, &extents); |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
419 } |
90400 | 420 else |
421 { | |
422 XftTextExtents8 (display, xftfont, ascii_printable, 1, &extents); | |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
423 font->space_width = extents.xOff; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
424 if (font->space_width <= 0) |
90400 | 425 /* dirty workaround */ |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101640
diff
changeset
|
426 font->space_width = pixel_size; |
90400 | 427 XftTextExtents8 (display, xftfont, ascii_printable + 1, 94, &extents); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
428 font->average_width = (font->space_width + extents.xOff) / 95; |
90400 | 429 } |
90442
d6abf2344438
(xftfont_open): Make the font name fontconfig's
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
430 UNBLOCK_INPUT; |
90400 | 431 |
90959
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
432 font->ascent = xftfont->ascent; |
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
433 font->descent = xftfont->descent; |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
434 if (pixel_size >= 5) |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
435 { |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
436 /* The above condition is a dirty workaround because |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
437 XftTextExtents8 behaves strangely for some fonts |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
438 (e.g. "Dejavu Sans Mono") when pixel_size is less than 5. */ |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
439 if (font->ascent < extents.y) |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
440 font->ascent = extents.y; |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
441 if (font->descent < extents.height - extents.y) |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
442 font->descent = extents.height - extents.y; |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
443 } |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
444 font->height = font->ascent + font->descent; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
445 |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
446 if (XINT (AREF (entity, FONT_SIZE_INDEX)) == 0) |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
447 { |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
448 int upEM = ft_face->units_per_EM; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
449 |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
450 font->underline_position = -ft_face->underline_position * size / upEM; |
102861
0ea82e792866
(xftfont_open): Fix setting font->underline_thickness.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
451 font->underline_thickness = ft_face->underline_thickness * size / upEM; |
95293
089ad7a58f94
(xftfont_open): Delete unused variable. If
Kenichi Handa <handa@m17n.org>
parents:
95102
diff
changeset
|
452 if (font->underline_thickness > 2) |
089ad7a58f94
(xftfont_open): Delete unused variable. If
Kenichi Handa <handa@m17n.org>
parents:
95102
diff
changeset
|
453 font->underline_position -= font->underline_thickness / 2; |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
454 } |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
455 else |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
456 { |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
457 font->underline_position = -1; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
458 font->underline_thickness = 0; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
459 } |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
460 #ifdef HAVE_LIBOTF |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
461 xftfont_info->maybe_otf = ft_face->face_flags & FT_FACE_FLAG_SFNT; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
462 xftfont_info->otf = NULL; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
463 #endif /* HAVE_LIBOTF */ |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
464 xftfont_info->ft_size = ft_face->size; |
90959
3f83c9d3f96c
(xftfont_open): If one of font's ASCII glyph has
Kenichi Handa <handa@m17n.org>
parents:
90714
diff
changeset
|
465 |
90400 | 466 /* Unfortunately Xft doesn't provide a way to get minimum char |
467 width. So, we use space_width instead. */ | |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
468 font->min_width = font->space_width; |
90400 | 469 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
470 font->baseline_offset = 0; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
471 font->relative_compose = 0; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
472 font->default_ascent = 0; |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
473 font->vertical_centering = 0; |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
474 #ifdef FT_BDF_H |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
475 if (! (ft_face->face_flags & FT_FACE_FLAG_SFNT)) |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
476 { |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
477 BDF_PropertyRec rec; |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
478 |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
479 if (FT_Get_BDF_Property (ft_face, "_MULE_BASELINE_OFFSET", &rec) == 0 |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
480 && rec.type == BDF_PROPERTY_TYPE_INTEGER) |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
481 font->baseline_offset = rec.u.integer; |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
482 if (FT_Get_BDF_Property (ft_face, "_MULE_RELATIVE_COMPOSE", &rec) == 0 |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
483 && rec.type == BDF_PROPERTY_TYPE_INTEGER) |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
484 font->relative_compose = rec.u.integer; |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
485 if (FT_Get_BDF_Property (ft_face, "_MULE_DEFAULT_ASCENT", &rec) == 0 |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
486 && rec.type == BDF_PROPERTY_TYPE_INTEGER) |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
487 font->default_ascent = rec.u.integer; |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
488 } |
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
489 #endif |
90400 | 490 |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
491 return font_object; |
90400 | 492 } |
493 | |
494 static void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
495 xftfont_close (FRAME_PTR f, struct font *font) |
90400 | 496 { |
497 struct xftfont_info *xftfont_info = (struct xftfont_info *) font; | |
498 | |
91143 | 499 #ifdef HAVE_LIBOTF |
500 if (xftfont_info->otf) | |
501 OTF_close (xftfont_info->otf); | |
502 #endif | |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
503 BLOCK_INPUT; |
96562
ea11c7e02573
(struct xftfont_info): New member ft_size. Make the
Kenichi Handa <handa@m17n.org>
parents:
96431
diff
changeset
|
504 XftUnlockFace (xftfont_info->xftfont); |
90400 | 505 XftFontClose (xftfont_info->display, xftfont_info->xftfont); |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
506 UNBLOCK_INPUT; |
90400 | 507 } |
508 | |
509 static int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
510 xftfont_prepare_face (FRAME_PTR f, struct face *face) |
90400 | 511 { |
90489
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
512 struct xftface_info *xftface_info; |
90400 | 513 |
90499
32b8f672da38
(xftfont_prepare_face): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
90489
diff
changeset
|
514 #if 0 |
32b8f672da38
(xftfont_prepare_face): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
90489
diff
changeset
|
515 /* This doesn't work if face->ascii_face doesn't use an Xft font. */ |
90489
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
516 if (face != face->ascii_face) |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
517 { |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
518 face->extra = face->ascii_face->extra; |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
519 return 0; |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
520 } |
90499
32b8f672da38
(xftfont_prepare_face): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
90489
diff
changeset
|
521 #endif |
90489
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
522 |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
523 xftface_info = malloc (sizeof (struct xftface_info)); |
90400 | 524 if (! xftface_info) |
525 return -1; | |
526 xftfont_get_colors (f, face, face->gc, NULL, | |
527 &xftface_info->xft_fg, &xftface_info->xft_bg); | |
528 face->extra = xftface_info; | |
529 return 0; | |
530 } | |
531 | |
532 static void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
533 xftfont_done_face (FRAME_PTR f, struct face *face) |
90400 | 534 { |
90489
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
535 struct xftface_info *xftface_info; |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101640
diff
changeset
|
536 |
90499
32b8f672da38
(xftfont_prepare_face): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
90489
diff
changeset
|
537 #if 0 |
32b8f672da38
(xftfont_prepare_face): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
90489
diff
changeset
|
538 /* This doesn't work if face->ascii_face doesn't use an Xft font. */ |
90489
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
539 if (face != face->ascii_face |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
540 || ! face->extra) |
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
541 return; |
90499
32b8f672da38
(xftfont_prepare_face): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
90489
diff
changeset
|
542 #endif |
90400 | 543 |
90489
78a820ef12db
(xftfont_prepare_face): Make non-ascii face share
Kenichi Handa <handa@m17n.org>
parents:
90473
diff
changeset
|
544 xftface_info = (struct xftface_info *) face->extra; |
90527
63b888896eba
* xftfont.c (xftfont_done_face): Call XftDrawDestroy only if xftface_info
Jan Djärv <jan.h.d@swipnet.se>
parents:
90511
diff
changeset
|
545 if (xftface_info) |
63b888896eba
* xftfont.c (xftfont_done_face): Call XftDrawDestroy only if xftface_info
Jan Djärv <jan.h.d@swipnet.se>
parents:
90511
diff
changeset
|
546 { |
63b888896eba
* xftfont.c (xftfont_done_face): Call XftDrawDestroy only if xftface_info
Jan Djärv <jan.h.d@swipnet.se>
parents:
90511
diff
changeset
|
547 free (xftface_info); |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
548 face->extra = NULL; |
90527
63b888896eba
* xftfont.c (xftfont_done_face): Call XftDrawDestroy only if xftface_info
Jan Djärv <jan.h.d@swipnet.se>
parents:
90511
diff
changeset
|
549 } |
90400 | 550 } |
551 | |
101640
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
552 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
553 xftfont_has_char (Lisp_Object font, int c) |
101640
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
554 { |
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
555 struct xftfont_info *xftfont_info; |
102992
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
556 struct charset *cs = NULL; |
101640
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
557 |
102992
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
558 if (EQ (AREF (font, FONT_ADSTYLE_INDEX), Qja) |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
559 && charset_jisx0208 >= 0) |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
560 cs = CHARSET_FROM_ID (charset_jisx0208); |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
561 else if (EQ (AREF (font, FONT_ADSTYLE_INDEX), Qko) |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
562 && charset_ksc5601 >= 0) |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
563 cs = CHARSET_FROM_ID (charset_ksc5601); |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
564 if (cs) |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
565 return (ENCODE_CHAR (cs, c) != CHARSET_INVALID_CODE (cs)); |
64cdf8a83bdd
(xftfont_has_char): Special handling of `ja' and `ko' adstyle.
Kenichi Handa <handa@m17n.org>
parents:
102861
diff
changeset
|
566 |
103838
a7805f91abdd
(xftfont_open): Fix typo: FC_RGBA->FC_HINT_STYLE.
Kenichi Handa <handa@m17n.org>
parents:
103650
diff
changeset
|
567 if (FONT_ENTITY_P (font)) |
a7805f91abdd
(xftfont_open): Fix typo: FC_RGBA->FC_HINT_STYLE.
Kenichi Handa <handa@m17n.org>
parents:
103650
diff
changeset
|
568 return ftfont_driver.has_char (font, c); |
101640
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
569 xftfont_info = (struct xftfont_info *) XFONT_OBJECT (font); |
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
570 return (XftCharExists (xftfont_info->display, xftfont_info->xftfont, |
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
571 (FcChar32) c) == FcTrue); |
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
572 } |
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
573 |
90400 | 574 static unsigned |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
575 xftfont_encode_char (struct font *font, int c) |
90400 | 576 { |
577 struct xftfont_info *xftfont_info = (struct xftfont_info *) font; | |
578 unsigned code = XftCharIndex (xftfont_info->display, xftfont_info->xftfont, | |
579 (FcChar32) c); | |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101640
diff
changeset
|
580 |
91269
421d7c7d296a
(xftfont_encode_char): Use the macro FONT_INVALID_CODE.
Kenichi Handa <handa@m17n.org>
parents:
91243
diff
changeset
|
581 return (code ? code : FONT_INVALID_CODE); |
90400 | 582 } |
583 | |
584 static int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
585 xftfont_text_extents (struct font *font, unsigned int *code, int nglyphs, struct font_metrics *metrics) |
90400 | 586 { |
587 struct xftfont_info *xftfont_info = (struct xftfont_info *) font; | |
588 XGlyphInfo extents; | |
589 | |
590 BLOCK_INPUT; | |
591 XftGlyphExtents (xftfont_info->display, xftfont_info->xftfont, code, nglyphs, | |
592 &extents); | |
593 UNBLOCK_INPUT; | |
594 if (metrics) | |
595 { | |
596 metrics->lbearing = - extents.x; | |
597 metrics->rbearing = - extents.x + extents.width; | |
598 metrics->width = extents.xOff; | |
599 metrics->ascent = extents.y; | |
90616
68d59ef20174
(xftfont_text_extents): Fix calculation of descent
Kenichi Handa <handa@m17n.org>
parents:
90589
diff
changeset
|
600 metrics->descent = extents.height - extents.y; |
90400 | 601 } |
602 return extents.xOff; | |
603 } | |
604 | |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
605 static XftDraw * |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
606 xftfont_get_xft_draw (FRAME_PTR f) |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
607 { |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101640
diff
changeset
|
608 XftDraw *xft_draw = font_get_frame_data (f, &xftfont_driver); |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
609 |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
610 if (! xft_draw) |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
611 { |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
612 BLOCK_INPUT; |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
613 xft_draw= XftDrawCreate (FRAME_X_DISPLAY (f), |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
614 FRAME_X_WINDOW (f), |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
615 FRAME_X_VISUAL (f), |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
616 FRAME_X_COLORMAP (f)); |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
617 UNBLOCK_INPUT; |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
618 if (! xft_draw) |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
619 abort (); |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
620 font_put_frame_data (f, &xftfont_driver, xft_draw); |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
621 } |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
622 return xft_draw; |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
623 } |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
624 |
90400 | 625 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
626 xftfont_draw (struct glyph_string *s, int from, int to, int x, int y, int with_background) |
90400 | 627 { |
628 FRAME_PTR f = s->f; | |
629 struct face *face = s->face; | |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
630 struct xftfont_info *xftfont_info = (struct xftfont_info *) s->font; |
91011
7239c19e55e9
(xftfont_draw): If s->font_info != s->face->font_info,
Kenichi Handa <handa@m17n.org>
parents:
90959
diff
changeset
|
631 struct xftface_info *xftface_info = NULL; |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
632 XftDraw *xft_draw = xftfont_get_xft_draw (f); |
90400 | 633 FT_UInt *code; |
634 XftColor fg, bg; | |
635 int len = to - from; | |
636 int i; | |
637 | |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
638 if (s->font == face->font) |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
639 xftface_info = (struct xftface_info *) face->extra; |
90400 | 640 xftfont_get_colors (f, face, s->gc, xftface_info, |
90426
e9ed7d437c21
(xftfont_default_fid): Set fid_known to 1.
Kenichi Handa <handa@m17n.org>
parents:
90400
diff
changeset
|
641 &fg, with_background ? &bg : NULL); |
90400 | 642 BLOCK_INPUT; |
91027
04b81a720da9
(xftfont_draw): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents:
91011
diff
changeset
|
643 if (s->num_clips > 0) |
04b81a720da9
(xftfont_draw): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents:
91011
diff
changeset
|
644 XftDrawSetClipRectangles (xft_draw, 0, 0, s->clip, s->num_clips); |
04b81a720da9
(xftfont_draw): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents:
91011
diff
changeset
|
645 else |
04b81a720da9
(xftfont_draw): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents:
91011
diff
changeset
|
646 XftDrawSetClip (xft_draw, NULL); |
04b81a720da9
(xftfont_draw): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents:
91011
diff
changeset
|
647 |
90400 | 648 if (with_background) |
94941
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
649 XftDrawRect (xft_draw, &bg, |
8cbdb26068b4
(xftfont_list): Adjusted for the change of `list'
Kenichi Handa <handa@m17n.org>
parents:
92184
diff
changeset
|
650 x, y - face->font->ascent, s->width, face->font->height); |
90400 | 651 code = alloca (sizeof (FT_UInt) * len); |
652 for (i = 0; i < len; i++) | |
653 code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8) | |
654 | XCHAR2B_BYTE2 (s->char2b + from + i)); | |
655 | |
92184
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
656 if (s->padding_p) |
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
657 for (i = 0; i < len; i++) |
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
658 XftDrawGlyphs (xft_draw, &fg, xftfont_info->xftfont, |
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
659 x + i, y, code + i, 1); |
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
660 else |
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
661 XftDrawGlyphs (xft_draw, &fg, xftfont_info->xftfont, |
6218afb021ac
(xftfont_draw): Pay attention to s->padding_p.
Kenichi Handa <handa@m17n.org>
parents:
91907
diff
changeset
|
662 x, y, code, len); |
90400 | 663 UNBLOCK_INPUT; |
664 | |
665 return len; | |
666 } | |
667 | |
111038
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
668 Lisp_Object |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
669 xftfont_shape (Lisp_Object lgstring) |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
670 { |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
671 struct font *font; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
672 struct xftfont_info *xftfont_info; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
673 FT_Face ft_face; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
674 Lisp_Object val; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
675 |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
676 CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
677 xftfont_info = (struct xftfont_info *) font; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
678 ft_face = XftLockFace (xftfont_info->xftfont); |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
679 xftfont_info->ft_size = ft_face->size; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
680 val = ftfont_driver.shape (lgstring); |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
681 XftUnlockFace (xftfont_info->xftfont); |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
682 return val; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
683 } |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
684 |
90400 | 685 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
686 xftfont_end_for_frame (FRAME_PTR f) |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
687 { |
106290
8671036bedc4
Don't crash if an X terminal is deleted with force == t.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106092
diff
changeset
|
688 XftDraw *xft_draw; |
8671036bedc4
Don't crash if an X terminal is deleted with force == t.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106092
diff
changeset
|
689 |
8671036bedc4
Don't crash if an X terminal is deleted with force == t.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106092
diff
changeset
|
690 /* Don't do anything if display is dead */ |
8671036bedc4
Don't crash if an X terminal is deleted with force == t.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106092
diff
changeset
|
691 if (FRAME_X_DISPLAY (f) == NULL) return 0; |
8671036bedc4
Don't crash if an X terminal is deleted with force == t.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106092
diff
changeset
|
692 |
8671036bedc4
Don't crash if an X terminal is deleted with force == t.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106092
diff
changeset
|
693 xft_draw = font_get_frame_data (f, &xftfont_driver); |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
694 |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
695 if (xft_draw) |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
696 { |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
697 BLOCK_INPUT; |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
698 XftDrawDestroy (xft_draw); |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
699 UNBLOCK_INPUT; |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
700 font_put_frame_data (f, &xftfont_driver, NULL); |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
701 } |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
702 return 0; |
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
703 } |
90400 | 704 |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
705 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
706 xftfont_cached_font_ok (struct frame *f, Lisp_Object font_object, Lisp_Object entity) |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
707 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
708 struct xftfont_info *info = (struct xftfont_info *) XFONT_OBJECT (font_object); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
709 FcPattern *oldpat = info->xftfont->pattern; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
710 Display *display = FRAME_X_DISPLAY (f); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
711 FcPattern *pat = FcPatternCreate (); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
712 FcBool b1, b2; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
713 int ok = 0, i1, i2, r1, r2; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
714 |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
715 xftfont_add_rendering_parameters (pat, entity); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
716 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
717 |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
718 r1 = FcPatternGetBool (pat, FC_ANTIALIAS, 0, &b1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
719 r2 = FcPatternGetBool (oldpat, FC_ANTIALIAS, 0, &b2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
720 if (r1 != r2 || b1 != b2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
721 r1 = FcPatternGetBool (pat, FC_HINTING, 0, &b1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
722 r2 = FcPatternGetBool (oldpat, FC_HINTING, 0, &b2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
723 if (r1 != r2 || b1 != b2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
724 r1 = FcPatternGetBool (pat, FC_AUTOHINT, 0, &b1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
725 r2 = FcPatternGetBool (oldpat, FC_AUTOHINT, 0, &b2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
726 if (r1 != r2 || b1 != b2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
727 #ifdef FC_EMBOLDEN |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
728 r1 = FcPatternGetBool (pat, FC_EMBOLDEN, 0, &b1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
729 r2 = FcPatternGetBool (oldpat, FC_EMBOLDEN, 0, &b2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
730 if (r1 != r2 || b1 != b2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
731 #endif |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
732 r1 = FcPatternGetInteger (pat, FC_HINT_STYLE, 0, &i1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
733 r2 = FcPatternGetInteger (oldpat, FC_HINT_STYLE, 0, &i2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
734 if (r1 != r2 || i1 != i2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
735 r1 = FcPatternGetInteger (pat, FC_LCD_FILTER, 0, &i1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
736 r2 = FcPatternGetInteger (oldpat, FC_LCD_FILTER, 0, &i2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
737 if (r1 != r2 || i1 != i2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
738 r1 = FcPatternGetInteger (pat, FC_RGBA, 0, &i1); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
739 r2 = FcPatternGetInteger (oldpat, FC_RGBA, 0, &i2); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
740 if (r1 != r2 || i1 != i2) goto out; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
741 |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
742 ok = 1; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
743 out: |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
744 FcPatternDestroy (pat); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
745 return ok; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
746 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
747 |
90400 | 748 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
749 syms_of_xftfont (void) |
90400 | 750 { |
751 DEFSYM (Qxft, "xft"); | |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
752 DEFSYM (QChinting, ":hinting"); |
100301
5c8b389c391a
(syms_of_xftfont): Fix typo.
Chong Yidong <cyd@stupidchicken.com>
parents:
96562
diff
changeset
|
753 DEFSYM (QCautohint, ":autohint"); |
96075
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
754 DEFSYM (QChintstyle, ":hintstyle"); |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
755 DEFSYM (QCrgba, ":rgba"); |
3376493a3ad4
(QChinting , QCautohint, QChintstyle, QCrgba)
Kenichi Handa <handa@m17n.org>
parents:
95293
diff
changeset
|
756 DEFSYM (QCembolden, ":embolden"); |
106558
3d091f151696
xftfont.c: Parse symbolic names for constants also.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106538
diff
changeset
|
757 DEFSYM (QClcdfilter, ":lcdfilter"); |
90400 | 758 |
759 xftfont_driver = ftfont_driver; | |
760 xftfont_driver.type = Qxft; | |
761 xftfont_driver.get_cache = xfont_driver.get_cache; | |
762 xftfont_driver.list = xftfont_list; | |
90559
fb5d3ac2d786
(xftfont_match): New function.
Kenichi Handa <handa@m17n.org>
parents:
90527
diff
changeset
|
763 xftfont_driver.match = xftfont_match; |
90400 | 764 xftfont_driver.open = xftfont_open; |
765 xftfont_driver.close = xftfont_close; | |
766 xftfont_driver.prepare_face = xftfont_prepare_face; | |
767 xftfont_driver.done_face = xftfont_done_face; | |
101640
6a674ba1901f
(xftfont_has_char): New function.
Kenichi Handa <handa@m17n.org>
parents:
101555
diff
changeset
|
768 xftfont_driver.has_char = xftfont_has_char; |
90400 | 769 xftfont_driver.encode_char = xftfont_encode_char; |
770 xftfont_driver.text_extents = xftfont_text_extents; | |
771 xftfont_driver.draw = xftfont_draw; | |
91110
82a42637237c
(struct xftface_info): Delete the member xft_draw.
Kenichi Handa <handa@m17n.org>
parents:
91027
diff
changeset
|
772 xftfont_driver.end_for_frame = xftfont_end_for_frame; |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106558
diff
changeset
|
773 xftfont_driver.cached_font_ok = xftfont_cached_font_ok; |
111038
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
774 #if defined (HAVE_M17N_FLT) && defined (HAVE_LIBOTF) |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
775 xftfont_driver.shape = xftfont_shape; |
8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
Kenichi Handa <handa@m17n.org>
parents:
109081
diff
changeset
|
776 #endif |
90400 | 777 |
778 register_font_driver (&xftfont_driver, NULL); | |
779 } | |
90427 | 780 |
781 /* arch-tag: 64ec61bf-7c8e-4fe6-b953-c6a85d5e1605 | |
782 (do not change this comment) */ |