Mercurial > emacs
annotate src/w32font.c @ 91207:c814dfe04708
(w32font.o): Depend on w32font.h.
| author | Jason Rumney <jasonr@gnu.org> |
|---|---|
| date | Sat, 08 Dec 2007 01:48:02 +0000 |
| parents | bbdb7226d848 |
| children | 98329725c530 |
| rev | line source |
|---|---|
| 90869 | 1 /* Font backend for the Microsoft W32 API. |
| 2 Copyright (C) 2007 Free Software Foundation, Inc. | |
| 3 | |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
| 8 the Free Software Foundation; either version 2, or (at your option) | |
| 9 any later version. | |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
| 18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
| 19 Boston, MA 02110-1301, USA. */ | |
| 20 | |
| 21 #include <config.h> | |
| 22 #include <windows.h> | |
| 23 | |
| 24 #include "lisp.h" | |
| 25 #include "w32term.h" | |
| 26 #include "frame.h" | |
| 27 #include "dispextern.h" | |
| 28 #include "character.h" | |
| 29 #include "charset.h" | |
| 30 #include "fontset.h" | |
| 31 #include "font.h" | |
| 32 | |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
33 /* Cleartype available on Windows XP, cleartype_natural from XP SP1. |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
34 The latter does not try to fit cleartype smoothed fonts into the |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
35 same bounding box as the non-antialiased version of the font. |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
36 */ |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
37 #ifndef CLEARTYPE_QUALITY |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
38 #define CLEARTYPE_QUALITY 5 |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
39 #endif |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
40 #ifndef CLEARTYPE_NATURAL_QUALITY |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
41 #define CLEARTYPE_NATURAL_QUALITY 6 |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
42 #endif |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
43 |
| 90869 | 44 /* The actual structure for a w32 font, that can be cast to struct font. */ |
| 45 struct w32font_info | |
| 46 { | |
| 47 struct font font; | |
| 48 TEXTMETRIC metrics; | |
| 49 }; | |
| 50 | |
| 51 extern struct font_driver w32font_driver; | |
| 52 | |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
53 Lisp_Object Qgdi; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
54 extern Lisp_Object QCfamily; /* reuse from xfaces.c */ |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
55 static Lisp_Object Qmonospace, Qsans_serif, Qserif, Qmono, Qsans, Qsans__serif; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
56 static Lisp_Object Qscript, Qdecorative, Qraster, Qoutline, Qunknown; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
57 |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
58 /* antialiasing */ |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
59 extern Lisp_Object QCantialias; /* defined in font.c */ |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
60 extern Lisp_Object Qnone; /* reuse from w32fns.c */ |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
61 static Lisp_Object Qstandard, Qsubpixel, Qnatural; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
62 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
63 /* scripts */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
64 static Lisp_Object Qlatin, Qgreek, Qcoptic, Qcyrillic, Qarmenian, Qhebrew; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
65 static Lisp_Object Qarabic, Qsyriac, Qnko, Qthaana, Qdevanagari, Qbengali; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
66 static Lisp_Object Qgurmukhi, Qgujarati, Qoriya, Qtamil, Qtelugu; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
67 static Lisp_Object Qkannada, Qmalayalam, Qsinhala, Qthai, Qlao; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
68 static Lisp_Object Qtibetan, Qmyanmar, Qgeorgian, Qhangul, Qethiopic; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
69 static Lisp_Object Qcherokee, Qcanadian_aboriginal, Qogham, Qrunic; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
70 static Lisp_Object Qkhmer, Qmongolian, Qsymbol, Qbraille, Qhan; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
71 static Lisp_Object Qideographic_description, Qcjk_misc, Qkana, Qbopomofo; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
72 static Lisp_Object Qkanbun, Qyi, Qbyzantine_musical_symbol; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
73 static Lisp_Object Qmusical_symbol, Qmathematical; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
74 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
75 /* Font spacing symbols - defined in font.c. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
76 extern Lisp_Object Qc, Qp, Qm; |
| 90869 | 77 |
| 78 static void fill_in_logfont P_ ((FRAME_PTR f, LOGFONT *logfont, | |
| 79 Lisp_Object font_spec)); | |
| 80 | |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
81 static BYTE w32_antialias_type P_ ((Lisp_Object type)); |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
82 static Lisp_Object lispy_antialias_type P_ ((BYTE type)); |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
83 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
84 static Lisp_Object font_supported_scripts P_ ((FONTSIGNATURE * sig)); |
| 90869 | 85 |
| 86 /* From old font code in w32fns.c */ | |
| 87 char * w32_to_x_charset P_ ((int charset, char * matching)); | |
| 88 | |
| 89 static Lisp_Object w32_registry P_ ((LONG w32_charset)); | |
| 90 | |
| 91 /* EnumFontFamiliesEx callbacks. */ | |
| 92 static int CALLBACK add_font_entity_to_list P_ ((ENUMLOGFONTEX *, | |
| 93 NEWTEXTMETRICEX *, | |
| 94 DWORD, LPARAM)); | |
| 95 static int CALLBACK add_one_font_entity_to_list P_ ((ENUMLOGFONTEX *, | |
| 96 NEWTEXTMETRICEX *, | |
| 97 DWORD, LPARAM)); | |
| 98 static int CALLBACK add_font_name_to_list P_ ((ENUMLOGFONTEX *, | |
| 99 NEWTEXTMETRICEX *, | |
| 100 DWORD, LPARAM)); | |
| 101 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
102 /* struct passed in as LPARAM arg to EnumFontFamiliesEx, for keeping track |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
103 of what we really want. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
104 struct font_callback_data |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
105 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
106 /* The logfont we are matching against. EnumFontFamiliesEx only matches |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
107 face name and charset, so we need to manually match everything else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
108 in the callback function. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
109 LOGFONT pattern; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
110 /* The original font spec or entity. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
111 Lisp_Object orig_font_spec; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
112 /* The frame the font is being loaded on. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
113 Lisp_Object frame; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
114 /* The list to add matches to. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
115 Lisp_Object list; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
116 }; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
117 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
118 /* Handles the problem that EnumFontFamiliesEx will not return all |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
119 style variations if the font name is not specified. */ |
|
91182
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
120 static void list_all_matching_fonts P_ ((struct font_callback_data *match)); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
121 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
122 |
| 90869 | 123 /* MingW headers only define this when _WIN32_WINNT >= 0x0500, but we |
| 124 target older versions. */ | |
|
91182
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
125 #ifndef GGI_MARK_NONEXISTING_GLYPHS |
| 90869 | 126 #define GGI_MARK_NONEXISTING_GLYPHS 1 |
|
91182
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
127 #endif |
| 90869 | 128 |
| 129 static int | |
| 130 memq_no_quit (elt, list) | |
| 131 Lisp_Object elt, list; | |
| 132 { | |
| 133 while (CONSP (list) && ! EQ (XCAR (list), elt)) | |
| 134 list = XCDR (list); | |
| 135 return (CONSP (list)); | |
| 136 } | |
| 137 | |
| 138 /* w32 implementation of get_cache for font backend. | |
| 139 Return a cache of font-entities on FRAME. The cache must be a | |
| 140 cons whose cdr part is the actual cache area. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
141 static Lisp_Object |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
142 w32font_get_cache (frame) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
143 Lisp_Object frame; |
| 90869 | 144 { |
| 145 struct w32_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (frame)); | |
| 146 | |
| 147 return (dpyinfo->name_list_element); | |
| 148 } | |
| 149 | |
| 150 /* w32 implementation of list for font backend. | |
| 151 List fonts exactly matching with FONT_SPEC on FRAME. The value | |
| 152 is a vector of font-entities. This is the sole API that | |
| 153 allocates font-entities. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
154 static Lisp_Object |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
155 w32font_list (frame, font_spec) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
156 Lisp_Object frame, font_spec; |
| 90869 | 157 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
158 struct font_callback_data match_data; |
| 90869 | 159 HDC dc; |
| 160 FRAME_PTR f = XFRAME (frame); | |
| 161 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
162 match_data.orig_font_spec = font_spec; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
163 match_data.list = Qnil; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
164 match_data.frame = frame; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
165 bzero (&match_data.pattern, sizeof (LOGFONT)); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
166 fill_in_logfont (f, &match_data.pattern, font_spec); |
| 90869 | 167 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
168 if (match_data.pattern.lfFaceName[0] == '\0') |
| 90869 | 169 { |
| 170 /* EnumFontFamiliesEx does not take other fields into account if | |
| 171 font name is blank, so need to use two passes. */ | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
172 list_all_matching_fonts (&match_data); |
| 90869 | 173 } |
| 174 else | |
| 175 { | |
| 176 dc = get_frame_dc (f); | |
| 177 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
178 EnumFontFamiliesEx (dc, &match_data.pattern, |
| 90869 | 179 (FONTENUMPROC) add_font_entity_to_list, |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
180 (LPARAM) &match_data, 0); |
| 90869 | 181 release_frame_dc (f, dc); |
| 182 } | |
| 183 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
184 return NILP (match_data.list) ? null_vector : Fvconcat (1, &match_data.list); |
| 90869 | 185 } |
| 186 | |
| 187 /* w32 implementation of match for font backend. | |
| 188 Return a font entity most closely matching with FONT_SPEC on | |
| 189 FRAME. The closeness is detemined by the font backend, thus | |
| 190 `face-font-selection-order' is ignored here. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
191 static Lisp_Object |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
192 w32font_match (frame, font_spec) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
193 Lisp_Object frame, font_spec; |
| 90869 | 194 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
195 struct font_callback_data match_data; |
| 90869 | 196 HDC dc; |
| 197 FRAME_PTR f = XFRAME (frame); | |
| 198 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
199 match_data.orig_font_spec = font_spec; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
200 match_data.frame = frame; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
201 match_data.list = Qnil; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
202 bzero (&match_data.pattern, sizeof (LOGFONT)); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
203 fill_in_logfont (f, &match_data.pattern, font_spec); |
| 90869 | 204 |
| 205 dc = get_frame_dc (f); | |
| 206 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
207 EnumFontFamiliesEx (dc, &match_data.pattern, |
| 90869 | 208 (FONTENUMPROC) add_one_font_entity_to_list, |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
209 (LPARAM) &match_data, 0); |
| 90869 | 210 release_frame_dc (f, dc); |
| 211 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
212 return NILP (match_data.list) ? Qnil : XCAR (match_data.list); |
| 90869 | 213 } |
| 214 | |
| 215 | |
| 216 /* w32 implementation of list_family for font backend. | |
| 217 List available families. The value is a list of family names | |
| 218 (symbols). */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
219 static Lisp_Object |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
220 w32font_list_family (frame) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
221 Lisp_Object frame; |
| 90869 | 222 { |
| 223 Lisp_Object list = Qnil; | |
| 224 LOGFONT font_match_pattern; | |
| 225 HDC dc; | |
| 226 FRAME_PTR f = XFRAME (frame); | |
| 227 | |
| 228 bzero (&font_match_pattern, sizeof (font_match_pattern)); | |
| 229 | |
| 230 dc = get_frame_dc (f); | |
| 231 | |
| 232 EnumFontFamiliesEx (dc, &font_match_pattern, | |
| 233 (FONTENUMPROC) add_font_name_to_list, | |
| 234 (LPARAM) &list, 0); | |
| 235 release_frame_dc (f, dc); | |
| 236 | |
| 237 return list; | |
| 238 } | |
| 239 | |
| 240 /* w32 implementation of open for font backend. | |
| 241 Open a font specified by FONT_ENTITY on frame F. | |
| 242 If the font is scalable, open it with PIXEL_SIZE. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
243 static struct font * |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
244 w32font_open (f, font_entity, pixel_size) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
245 FRAME_PTR f; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
246 Lisp_Object font_entity; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
247 int pixel_size; |
| 90869 | 248 { |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
249 int len, size; |
| 90869 | 250 LOGFONT logfont; |
| 251 HDC dc; | |
| 252 HFONT hfont, old_font; | |
|
90887
aa7f1d212e78
(font_put_extra): Expose externally.
Jason Rumney <jasonr@gnu.org>
parents:
90879
diff
changeset
|
253 Lisp_Object val, extra; |
| 90869 | 254 /* For backwards compatibility. */ |
| 255 W32FontStruct *compat_w32_font; | |
| 256 | |
| 257 struct w32font_info *w32_font = xmalloc (sizeof (struct w32font_info)); | |
| 258 | |
| 259 struct font * font = (struct font *) w32_font; | |
| 260 if (!font) | |
| 261 return NULL; | |
| 262 | |
| 263 bzero (&logfont, sizeof (logfont)); | |
| 264 fill_in_logfont (f, &logfont, font_entity); | |
| 265 | |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
266 size = XINT (AREF (font_entity, FONT_SIZE_INDEX)); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
267 if (!size) |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
268 size = pixel_size; |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
269 |
|
90894
2f6131d7643f
(w32font_open): Make lfHeight negative.
Jason Rumney <jasonr@gnu.org>
parents:
90889
diff
changeset
|
270 logfont.lfHeight = -size; |
| 90869 | 271 hfont = CreateFontIndirect (&logfont); |
| 272 | |
| 273 if (hfont == NULL) | |
| 274 { | |
| 275 xfree (w32_font); | |
| 276 return NULL; | |
| 277 } | |
| 278 | |
| 279 /* Get the metrics for this font. */ | |
| 280 dc = get_frame_dc (f); | |
| 281 old_font = SelectObject (dc, hfont); | |
| 282 | |
| 283 GetTextMetrics (dc, &w32_font->metrics); | |
| 284 | |
| 285 SelectObject (dc, old_font); | |
| 286 release_frame_dc (f, dc); | |
| 287 /* W32FontStruct - we should get rid of this, and use the w32font_info | |
| 288 struct for any W32 specific fields. font->font.font can then be hfont. */ | |
| 289 font->font.font = xmalloc (sizeof (W32FontStruct)); | |
| 290 compat_w32_font = (W32FontStruct *) font->font.font; | |
| 291 bzero (compat_w32_font, sizeof (W32FontStruct)); | |
| 292 compat_w32_font->font_type = UNICODE_FONT; | |
| 293 /* Duplicate the text metrics. */ | |
| 294 bcopy (&w32_font->metrics, &compat_w32_font->tm, sizeof (TEXTMETRIC)); | |
| 295 compat_w32_font->hfont = hfont; | |
| 296 | |
| 297 len = strlen (logfont.lfFaceName); | |
| 298 font->font.name = (char *) xmalloc (len + 1); | |
| 299 bcopy (logfont.lfFaceName, font->font.name, len); | |
| 300 font->font.name[len] = '\0'; | |
| 301 font->font.full_name = font->font.name; | |
| 302 font->font.charset = 0; | |
| 303 font->font.codepage = 0; | |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
304 font->font.size = w32_font->metrics.tmMaxCharWidth; |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
305 font->font.height = w32_font->metrics.tmHeight |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
306 + w32_font->metrics.tmExternalLeading; |
| 90869 | 307 font->font.space_width = font->font.average_width |
| 308 = w32_font->metrics.tmAveCharWidth; | |
| 309 | |
| 310 font->font.vertical_centering = 0; | |
| 311 font->font.encoding_type = 0; | |
| 312 font->font.baseline_offset = 0; | |
| 313 font->font.relative_compose = 0; | |
| 314 font->font.default_ascent = w32_font->metrics.tmAscent; | |
| 315 font->font.font_encoder = NULL; | |
| 316 font->entity = font_entity; | |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
317 font->pixel_size = size; |
| 90869 | 318 font->driver = &w32font_driver; |
| 90964 | 319 font->format = Qgdi; |
| 90869 | 320 font->file_name = NULL; |
| 321 font->encoding_charset = -1; | |
| 322 font->repertory_charset = -1; | |
| 323 font->min_width = 0; | |
| 324 font->ascent = w32_font->metrics.tmAscent; | |
| 325 font->descent = w32_font->metrics.tmDescent; | |
| 326 font->scalable = w32_font->metrics.tmPitchAndFamily & TMPF_VECTOR; | |
| 327 | |
| 328 return font; | |
| 329 } | |
| 330 | |
| 331 /* w32 implementation of close for font_backend. | |
| 332 Close FONT on frame F. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
333 static void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
334 w32font_close (f, font) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
335 FRAME_PTR f; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
336 struct font *font; |
| 90869 | 337 { |
| 338 if (font->font.font) | |
| 339 { | |
| 340 W32FontStruct *old_w32_font = (W32FontStruct *)font->font.font; | |
|
90933
bd1251472ab9
(w32font_close): Delete the GDI font object.
Jason Rumney <jasonr@gnu.org>
parents:
90915
diff
changeset
|
341 DeleteObject (old_w32_font->hfont); |
| 90869 | 342 xfree (old_w32_font); |
| 343 font->font.font = 0; | |
| 344 } | |
| 345 | |
| 346 if (font->font.name) | |
| 347 xfree (font->font.name); | |
| 348 xfree (font); | |
| 349 } | |
| 350 | |
| 351 /* w32 implementation of has_char for font backend. | |
| 352 Optional. | |
| 353 If FONT_ENTITY has a glyph for character C (Unicode code point), | |
| 354 return 1. If not, return 0. If a font must be opened to check | |
| 355 it, return -1. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
356 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
357 w32font_has_char (entity, c) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
358 Lisp_Object entity; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
359 int c; |
| 90869 | 360 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
361 Lisp_Object supported_scripts, extra, script; |
| 90869 | 362 DWORD mask; |
| 363 | |
|
90887
aa7f1d212e78
(font_put_extra): Expose externally.
Jason Rumney <jasonr@gnu.org>
parents:
90879
diff
changeset
|
364 extra = AREF (entity, FONT_EXTRA_INDEX); |
|
aa7f1d212e78
(font_put_extra): Expose externally.
Jason Rumney <jasonr@gnu.org>
parents:
90879
diff
changeset
|
365 if (!CONSP (extra)) |
|
aa7f1d212e78
(font_put_extra): Expose externally.
Jason Rumney <jasonr@gnu.org>
parents:
90879
diff
changeset
|
366 return -1; |
|
aa7f1d212e78
(font_put_extra): Expose externally.
Jason Rumney <jasonr@gnu.org>
parents:
90879
diff
changeset
|
367 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
368 supported_scripts = assq_no_quit (QCscript, extra); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
369 if (!CONSP (supported_scripts)) |
| 90869 | 370 return -1; |
| 371 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
372 supported_scripts = XCDR (supported_scripts); |
| 90869 | 373 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
374 script = CHAR_TABLE_REF (Vchar_script_table, c); |
| 90869 | 375 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
376 return (memq_no_quit (script, supported_scripts)) ? 1 : 0; |
| 90869 | 377 } |
| 378 | |
| 379 /* w32 implementation of encode_char for font backend. | |
| 380 Return a glyph code of FONT for characer C (Unicode code point). | |
| 381 If FONT doesn't have such a glyph, return FONT_INVALID_CODE. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
382 static unsigned |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
383 w32font_encode_char (font, c) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
384 struct font *font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
385 int c; |
| 90869 | 386 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
387 /* Avoid unneccesary conversion - all the Win32 APIs will take a unicode |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
388 character. */ |
| 90869 | 389 return c; |
| 390 } | |
| 391 | |
| 392 /* w32 implementation of text_extents for font backend. | |
| 393 Perform the size computation of glyphs of FONT and fillin members | |
| 394 of METRICS. The glyphs are specified by their glyph codes in | |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
395 CODE (length NGLYPHS). Apparently metrics can be NULL, in this |
| 90869 | 396 case just return the overall width. */ |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
397 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
398 w32font_text_extents (font, code, nglyphs, metrics) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
399 struct font *font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
400 unsigned *code; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
401 int nglyphs; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
402 struct font_metrics *metrics; |
| 90869 | 403 { |
| 404 int i; | |
| 405 HFONT old_font; | |
| 406 /* FIXME: Be nice if we had a frame here, rather than getting the desktop's | |
| 407 device context to measure against... */ | |
| 408 HDC dc = GetDC (NULL); | |
| 409 int total_width = 0; | |
| 410 WORD *wcode = alloca(nglyphs * sizeof (WORD)); | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
411 SIZE size; |
| 90869 | 412 |
| 413 old_font = SelectObject (dc, ((W32FontStruct *)(font->font.font))->hfont); | |
| 414 | |
| 415 if (metrics) | |
| 416 { | |
| 417 GLYPHMETRICS gm; | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
418 MAT2 transform; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
419 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
420 /* Set transform to the identity matrix. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
421 bzero (&transform, sizeof (transform)); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
422 transform.eM11.value = 1; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
423 transform.eM22.value = 1; |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
424 metrics->width = 0; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
425 metrics->ascent = 0; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
426 metrics->descent = 0; |
| 90869 | 427 |
| 428 for (i = 0; i < nglyphs; i++) | |
| 429 { | |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
430 if (GetGlyphOutlineW (dc, *(code + i), GGO_METRICS, &gm, 0, |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
431 NULL, &transform) != GDI_ERROR) |
| 90869 | 432 { |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
433 int new_val = metrics->width + gm.gmBlackBoxX |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
434 + gm.gmptGlyphOrigin.x; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
435 |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
436 metrics->rbearing = max (metrics->rbearing, new_val); |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
437 metrics->width += gm.gmCellIncX; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
438 new_val = -gm.gmptGlyphOrigin.y; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
439 metrics->ascent = max (metrics->ascent, new_val); |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
440 new_val = gm.gmBlackBoxY + gm.gmptGlyphOrigin.y; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
441 metrics->descent = max (metrics->descent, new_val); |
|
90908
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
442 } |
| 90869 | 443 else |
| 444 { | |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
445 /* Rely on an estimate based on the overall font metrics. */ |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
446 break; |
| 90869 | 447 } |
| 448 } | |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
449 |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
450 /* If we got through everything, return. */ |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
451 if (i == nglyphs) |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
452 { |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
453 /* Restore state and release DC. */ |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
454 SelectObject (dc, old_font); |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
455 ReleaseDC (NULL, dc); |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
456 |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
457 return metrics->width; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
458 } |
| 90869 | 459 } |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
460 |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
461 for (i = 0; i < nglyphs; i++) |
| 90869 | 462 { |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
463 if (code[i] < 0x10000) |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
464 wcode[i] = code[i]; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
465 else |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
466 { |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
467 /* TODO: Convert to surrogate, reallocating array if needed */ |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
468 wcode[i] = 0xffff; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
469 } |
| 90869 | 470 } |
| 471 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
472 if (GetTextExtentPoint32W (dc, wcode, nglyphs, &size)) |
| 90869 | 473 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
474 total_width = size.cx; |
| 90869 | 475 } |
| 476 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
477 if (!total_width) |
| 90869 | 478 { |
| 479 RECT rect; | |
| 480 rect.top = 0; rect.bottom = font->font.height; rect.left = 0; rect.right = 1; | |
| 481 DrawTextW (dc, wcode, nglyphs, &rect, | |
| 482 DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE); | |
| 483 total_width = rect.right; | |
| 484 } | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
485 |
|
91034
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
486 if (metrics) |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
487 { |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
488 metrics->width = total_width; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
489 metrics->ascent = font->ascent; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
490 metrics->descent = font->descent; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
491 metrics->lbearing = 0; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
492 metrics->rbearing = total_width |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
493 + ((struct w32font_info *) font)->metrics.tmOverhang; |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
494 } |
|
fe9053c62d68
(w32font_text_extents): Calculate metrics for the whole string.
Jason Rumney <jasonr@gnu.org>
parents:
91030
diff
changeset
|
495 |
| 90869 | 496 /* Restore state and release DC. */ |
| 497 SelectObject (dc, old_font); | |
| 498 ReleaseDC (NULL, dc); | |
| 499 | |
| 500 return total_width; | |
| 501 } | |
| 502 | |
| 503 /* w32 implementation of draw for font backend. | |
| 504 Optional. | |
| 505 Draw glyphs between FROM and TO of S->char2b at (X Y) pixel | |
| 506 position of frame F with S->FACE and S->GC. If WITH_BACKGROUND | |
| 507 is nonzero, fill the background in advance. It is assured that | |
|
91182
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
508 WITH_BACKGROUND is zero when (FROM > 0 || TO < S->nchars). |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
509 |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
510 TODO: Currently this assumes that the colors and fonts are already |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
511 set in the DC. This seems to be true now, but maybe only due to |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
512 the old font code setting it up. It may be safer to resolve faces |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
513 and fonts in here and set them explicitly |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
514 */ |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
515 |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
516 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
517 w32font_draw (s, from, to, x, y, with_background) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
518 struct glyph_string *s; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
519 int from, to, x, y, with_background; |
| 90869 | 520 { |
| 521 UINT options = 0; | |
|
91030
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
522 HRGN orig_clip; |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
523 |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
524 /* Save clip region for later restoration. */ |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
525 GetClipRgn(s->hdc, orig_clip); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
526 |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
527 if (s->num_clips > 0) |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
528 { |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
529 HRGN new_clip = CreateRectRgnIndirect (s->clip); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
530 |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
531 if (s->num_clips > 1) |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
532 { |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
533 HRGN clip2 = CreateRectRgnIndirect (s->clip + 1); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
534 |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
535 CombineRgn (new_clip, new_clip, clip2, RGN_OR); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
536 DeleteObject (clip2); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
537 } |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
538 |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
539 SelectClipRgn (s->hdc, new_clip); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
540 DeleteObject (new_clip); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
541 } |
| 90869 | 542 |
|
91128
8eb56b57e4a0
(w32font_draw): Fill background manually.
Jason Rumney <jasonr@gnu.org>
parents:
91124
diff
changeset
|
543 /* Using OPAQUE background mode can clear more background than expected |
|
8eb56b57e4a0
(w32font_draw): Fill background manually.
Jason Rumney <jasonr@gnu.org>
parents:
91124
diff
changeset
|
544 when Cleartype is used. Draw the background manually to avoid this. */ |
|
8eb56b57e4a0
(w32font_draw): Fill background manually.
Jason Rumney <jasonr@gnu.org>
parents:
91124
diff
changeset
|
545 SetBkMode (s->hdc, TRANSPARENT); |
| 90869 | 546 if (with_background) |
| 547 { | |
|
90908
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
548 HBRUSH brush; |
|
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
549 RECT rect; |
|
91128
8eb56b57e4a0
(w32font_draw): Fill background manually.
Jason Rumney <jasonr@gnu.org>
parents:
91124
diff
changeset
|
550 struct font *font = (struct font *) s->face->font_info; |
|
90908
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
551 |
|
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
552 brush = CreateSolidBrush (s->gc->background); |
|
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
553 rect.left = x; |
|
91128
8eb56b57e4a0
(w32font_draw): Fill background manually.
Jason Rumney <jasonr@gnu.org>
parents:
91124
diff
changeset
|
554 rect.top = y - font->ascent; |
|
90908
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
555 rect.right = x + s->width; |
|
91128
8eb56b57e4a0
(w32font_draw): Fill background manually.
Jason Rumney <jasonr@gnu.org>
parents:
91124
diff
changeset
|
556 rect.bottom = y + font->descent; |
|
90908
523a5c7f67ea
(w32font_open): Don't set font_idx.
Jason Rumney <jasonr@gnu.org>
parents:
90906
diff
changeset
|
557 FillRect (s->hdc, &rect, brush); |
|
90915
9aac5aff0dda
(w32font_draw): Delete brush after using it.
Jason Rumney <jasonr@gnu.org>
parents:
90908
diff
changeset
|
558 DeleteObject (brush); |
| 90869 | 559 } |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
560 |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
561 ExtTextOutW (s->hdc, x, y, options, NULL, s->char2b + from, to - from, NULL); |
|
91030
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
562 |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
563 /* Restore clip region. */ |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
564 if (s->num_clips > 0) |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
565 { |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
566 SelectClipRgn (s->hdc, orig_clip); |
|
8be09e8e2c97
(w32font_draw): Do clipping here.
Jason Rumney <jasonr@gnu.org>
parents:
90964
diff
changeset
|
567 } |
| 90869 | 568 } |
| 569 | |
| 570 /* w32 implementation of free_entity for font backend. | |
| 571 Optional (if FONT_EXTRA_INDEX is not Lisp_Save_Value). | |
| 572 Free FONT_EXTRA_INDEX field of FONT_ENTITY. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
573 static void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
574 w32font_free_entity (Lisp_Object entity); |
| 90869 | 575 */ |
| 576 | |
| 577 /* w32 implementation of prepare_face for font backend. | |
| 578 Optional (if FACE->extra is not used). | |
| 579 Prepare FACE for displaying characters by FONT on frame F by | |
| 580 storing some data in FACE->extra. If successful, return 0. | |
| 581 Otherwise, return -1. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
582 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
583 w32font_prepare_face (FRAME_PTR f, struct face *face); |
| 90869 | 584 */ |
| 585 /* w32 implementation of done_face for font backend. | |
| 586 Optional. | |
| 587 Done FACE for displaying characters by FACE->font on frame F. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
588 static void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
589 w32font_done_face (FRAME_PTR f, struct face *face); */ |
| 90869 | 590 |
| 591 /* w32 implementation of get_bitmap for font backend. | |
| 592 Optional. | |
| 593 Store bitmap data for glyph-code CODE of FONT in BITMAP. It is | |
|
90915
9aac5aff0dda
(w32font_draw): Delete brush after using it.
Jason Rumney <jasonr@gnu.org>
parents:
90908
diff
changeset
|
594 intended that this method is called from the other font-driver |
| 90869 | 595 for actual drawing. |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
596 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
597 w32font_get_bitmap (struct font *font, unsigned code, |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
598 struct font_bitmap *bitmap, int bits_per_pixel); |
| 90869 | 599 */ |
| 600 /* w32 implementation of free_bitmap for font backend. | |
| 601 Optional. | |
| 602 Free bitmap data in BITMAP. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
603 static void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
604 w32font_free_bitmap (struct font *font, struct font_bitmap *bitmap); |
| 90869 | 605 */ |
| 606 /* w32 implementation of get_outline for font backend. | |
| 607 Optional. | |
| 608 Return an outline data for glyph-code CODE of FONT. The format | |
| 609 of the outline data depends on the font-driver. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
610 static void * |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
611 w32font_get_outline (struct font *font, unsigned code); |
| 90869 | 612 */ |
| 613 /* w32 implementation of free_outline for font backend. | |
| 614 Optional. | |
| 615 Free OUTLINE (that is obtained by the above method). | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
616 static void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
617 w32font_free_outline (struct font *font, void *outline); |
| 90869 | 618 */ |
| 619 /* w32 implementation of anchor_point for font backend. | |
| 620 Optional. | |
| 621 Get coordinates of the INDEXth anchor point of the glyph whose | |
| 622 code is CODE. Store the coordinates in *X and *Y. Return 0 if | |
| 623 the operations was successfull. Otherwise return -1. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
624 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
625 w32font_anchor_point (struct font *font, unsigned code, |
| 90869 | 626 int index, int *x, int *y); |
| 627 */ | |
| 628 /* w32 implementation of otf_capability for font backend. | |
| 629 Optional. | |
| 630 Return a list describing which scripts/languages FONT | |
| 631 supports by which GSUB/GPOS features of OpenType tables. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
632 static Lisp_Object |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
633 w32font_otf_capability (struct font *font); |
| 90869 | 634 */ |
| 635 /* w32 implementation of otf_drive for font backend. | |
| 636 Optional. | |
| 637 Apply FONT's OTF-FEATURES to the glyph string. | |
| 638 | |
| 639 FEATURES specifies which OTF features to apply in this format: | |
| 640 (SCRIPT LANGSYS GSUB-FEATURE GPOS-FEATURE) | |
| 641 See the documentation of `font-drive-otf' for the detail. | |
| 642 | |
| 643 This method applies the specified features to the codes in the | |
| 644 elements of GSTRING-IN (between FROMth and TOth). The output | |
| 645 codes are stored in GSTRING-OUT at the IDXth element and the | |
| 646 following elements. | |
| 647 | |
| 648 Return the number of output codes. If none of the features are | |
| 649 applicable to the input data, return 0. If GSTRING-OUT is too | |
| 650 short, return -1. | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
651 static int |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
652 w32font_otf_drive (struct font *font, Lisp_Object features, |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
653 Lisp_Object gstring_in, int from, int to, |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
654 Lisp_Object gstring_out, int idx, |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
655 int alternate_subst); |
| 90869 | 656 */ |
| 657 | |
| 658 /* Callback function for EnumFontFamiliesEx. | |
| 659 * Adds the name of a font to a Lisp list (passed in as the lParam arg). */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
660 static int CALLBACK |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
661 add_font_name_to_list (logical_font, physical_font, font_type, list_object) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
662 ENUMLOGFONTEX *logical_font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
663 NEWTEXTMETRICEX *physical_font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
664 DWORD font_type; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
665 LPARAM list_object; |
| 90869 | 666 { |
| 667 Lisp_Object* list = (Lisp_Object *) list_object; | |
|
91070
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
668 Lisp_Object family; |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
669 |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
670 /* Skip vertical fonts (intended only for printing) */ |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
671 if (logical_font->elfLogFont.lfFaceName[0] == '@') |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
672 return 1; |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
673 |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
674 family = intern_downcase (logical_font->elfLogFont.lfFaceName, |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
675 strlen (logical_font->elfLogFont.lfFaceName)); |
| 90869 | 676 if (! memq_no_quit (family, *list)) |
| 677 *list = Fcons (family, *list); | |
| 678 | |
| 679 return 1; | |
| 680 } | |
| 681 | |
| 682 /* Convert an enumerated Windows font to an Emacs font entity. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
683 static Lisp_Object |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
684 w32_enumfont_pattern_entity (frame, logical_font, physical_font, |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
685 font_type, requested_font) |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
686 Lisp_Object frame; |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
687 ENUMLOGFONTEX *logical_font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
688 NEWTEXTMETRICEX *physical_font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
689 DWORD font_type; |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
690 LOGFONT *requested_font; |
| 90869 | 691 { |
| 692 Lisp_Object entity, tem; | |
| 693 LOGFONT *lf = (LOGFONT*) logical_font; | |
| 694 BYTE generic_type; | |
| 695 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
696 entity = Fmake_vector (make_number (FONT_ENTITY_MAX), Qnil); |
| 90869 | 697 |
| 90964 | 698 ASET (entity, FONT_TYPE_INDEX, Qgdi); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
699 ASET (entity, FONT_FRAME_INDEX, frame); |
| 90869 | 700 ASET (entity, FONT_REGISTRY_INDEX, w32_registry (lf->lfCharSet)); |
| 701 ASET (entity, FONT_OBJLIST_INDEX, Qnil); | |
| 702 | |
| 703 /* Foundry is difficult to get in readable form on Windows. | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
704 But Emacs crashes if it is not set, so set it to something more |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
705 generic. Thes values make xflds compatible with Emacs 22. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
706 if (lf->lfOutPrecision == OUT_STRING_PRECIS) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
707 tem = Qraster; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
708 else if (lf->lfOutPrecision == OUT_STROKE_PRECIS) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
709 tem = Qoutline; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
710 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
711 tem = Qunknown; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
712 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
713 ASET (entity, FONT_FOUNDRY_INDEX, tem); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
714 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
715 /* Save the generic family in the extra info, as it is likely to be |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
716 useful to users looking for a close match. */ |
| 90869 | 717 generic_type = physical_font->ntmTm.tmPitchAndFamily & 0xF0; |
| 718 if (generic_type == FF_DECORATIVE) | |
| 719 tem = Qdecorative; | |
| 720 else if (generic_type == FF_MODERN) | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
721 tem = Qmonospace; |
| 90869 | 722 else if (generic_type == FF_ROMAN) |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
723 tem = Qserif; |
| 90869 | 724 else if (generic_type == FF_SCRIPT) |
| 725 tem = Qscript; | |
| 726 else if (generic_type == FF_SWISS) | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
727 tem = Qsans_serif; |
| 90869 | 728 else |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
729 tem = Qnil; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
730 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
731 if (! NILP (tem)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
732 font_put_extra (entity, QCfamily, tem); |
| 90869 | 733 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
734 if (physical_font->ntmTm.tmPitchAndFamily & 0x01) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
735 font_put_extra (entity, QCspacing, make_number (FONT_SPACING_PROPORTIONAL)); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
736 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
737 font_put_extra (entity, QCspacing, make_number (FONT_SPACING_MONO)); |
| 90869 | 738 |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
739 if (requested_font->lfQuality != DEFAULT_QUALITY) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
740 { |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
741 font_put_extra (entity, QCantialias, |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
742 lispy_antialias_type (requested_font->lfQuality)); |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
743 } |
| 90869 | 744 ASET (entity, FONT_FAMILY_INDEX, |
| 745 intern_downcase (lf->lfFaceName, strlen (lf->lfFaceName))); | |
| 746 | |
| 747 ASET (entity, FONT_WEIGHT_INDEX, make_number (lf->lfWeight)); | |
| 748 ASET (entity, FONT_SLANT_INDEX, make_number (lf->lfItalic ? 200 : 100)); | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
749 /* TODO: PANOSE struct has this info, but need to call GetOutlineTextMetrics |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
750 to get it. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
751 ASET (entity, FONT_WIDTH_INDEX, make_number (100)); |
| 90869 | 752 |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
753 if (font_type & RASTER_FONTTYPE) |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
754 ASET (entity, FONT_SIZE_INDEX, make_number (physical_font->ntmTm.tmHeight)); |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
755 else |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
756 ASET (entity, FONT_SIZE_INDEX, make_number (0)); |
| 90869 | 757 |
| 758 /* Cache unicode codepoints covered by this font, as there is no other way | |
| 759 of getting this information easily. */ | |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
760 if (font_type & TRUETYPE_FONTTYPE) |
| 90869 | 761 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
762 font_put_extra (entity, QCscript, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
763 font_supported_scripts (&physical_font->ntmFontSig)); |
| 90869 | 764 } |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
765 |
| 90869 | 766 return entity; |
| 767 } | |
| 768 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
769 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
770 /* Convert generic families to the family portion of lfPitchAndFamily. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
771 BYTE |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
772 w32_generic_family (Lisp_Object name) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
773 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
774 /* Generic families. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
775 if (EQ (name, Qmonospace) || EQ (name, Qmono)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
776 return FF_MODERN; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
777 else if (EQ (name, Qsans_serif) || EQ (name, Qsans__serif) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
778 || EQ (name, Qsans)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
779 return FF_SWISS; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
780 else if (EQ (name, Qserif)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
781 return FF_ROMAN; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
782 else if (EQ (name, Qdecorative)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
783 return FF_DECORATIVE; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
784 else if (EQ (name, Qscript)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
785 return FF_SCRIPT; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
786 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
787 return FF_DONTCARE; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
788 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
789 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
790 static int |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
791 logfonts_match (font, pattern) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
792 LOGFONT *font, *pattern; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
793 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
794 /* Only check height for raster fonts. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
795 if (pattern->lfHeight && font->lfOutPrecision == OUT_STRING_PRECIS |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
796 && font->lfHeight != pattern->lfHeight) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
797 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
798 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
799 /* Have some flexibility with weights. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
800 if (pattern->lfWeight |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
801 && ((font->lfWeight < (pattern->lfWeight - 150)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
802 || font->lfWeight > (pattern->lfWeight + 150))) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
803 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
804 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
805 /* Charset and face should be OK. Italic has to be checked |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
806 against the original spec, in case we don't have any preference. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
807 return 1; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
808 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
809 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
810 static int |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
811 font_matches_spec (type, font, spec) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
812 DWORD type; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
813 NEWTEXTMETRICEX *font; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
814 Lisp_Object spec; |
| 90869 | 815 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
816 Lisp_Object extra, val; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
817 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
818 /* Check italic. Can't check logfonts, since it is a boolean field, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
819 so there is no difference between "non-italic" and "don't care". */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
820 val = AREF (spec, FONT_SLANT_INDEX); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
821 if (INTEGERP (val)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
822 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
823 int slant = XINT (val); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
824 if ((slant > 150 && !font->ntmTm.tmItalic) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
825 || (slant <= 150 && font->ntmTm.tmItalic)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
826 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
827 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
828 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
829 /* Check extra parameters. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
830 for (extra = AREF (spec, FONT_EXTRA_INDEX); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
831 CONSP (extra); extra = XCDR (extra)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
832 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
833 Lisp_Object extra_entry; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
834 extra_entry = XCAR (extra); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
835 if (CONSP (extra_entry)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
836 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
837 Lisp_Object key = XCAR (extra_entry); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
838 val = XCDR (extra_entry); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
839 if (EQ (key, QCfamily)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
840 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
841 /* Generic family. Most useful when there is no font name |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
842 specified. eg, if a script does not exist in the default |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
843 font, we could look for a font with the same generic family |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
844 that does support the script. Full PANOSE support would |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
845 be better, but we need to open the font to get that. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
846 BYTE w32_family = w32_generic_family (val); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
847 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
848 /* Reject if FF_DONTCARE is returned, as it means the |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
849 font spec is bad. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
850 if (w32_family == FF_DONTCARE |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
851 || w32_family != (font->ntmTm.tmPitchAndFamily & 0xF0)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
852 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
853 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
854 else if (EQ (key, QCspacing)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
855 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
856 int proportional; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
857 if (INTEGERP (val)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
858 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
859 int spacing = XINT (val); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
860 proportional = (spacing < FONT_SPACING_MONO); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
861 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
862 else if (EQ (val, Qp)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
863 proportional = 1; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
864 else if (EQ (val, Qc) || EQ (val, Qm)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
865 proportional = 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
866 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
867 return 0; /* Bad font spec. */ |
| 90869 | 868 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
869 if ((proportional && !(font->ntmTm.tmPitchAndFamily & 0x01)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
870 || (!proportional && (font->ntmTm.tmPitchAndFamily & 0x01))) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
871 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
872 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
873 else if (EQ (key, QCscript) && SYMBOLP (val)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
874 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
875 /* Only truetype fonts will have information about what |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
876 scripts they support. This probably means the user |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
877 will have to force Emacs to use raster, postscript |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
878 or atm fonts for non-ASCII text. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
879 if (type & TRUETYPE_FONTTYPE) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
880 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
881 Lisp_Object support |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
882 = font_supported_scripts (&font->ntmFontSig); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
883 if (! memq_no_quit (val, support)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
884 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
885 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
886 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
887 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
888 /* Return specific matches, but play it safe. Fonts |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
889 that cover more than their charset would suggest |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
890 are likely to be truetype or opentype fonts, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
891 covered above. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
892 if (EQ (val, Qlatin)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
893 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
894 /* Although every charset but symbol, thai and |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
895 arabic contains the basic ASCII set of latin |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
896 characters, Emacs expects much more. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
897 if (font->ntmTm.tmCharSet != ANSI_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
898 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
899 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
900 else if (EQ (val, Qsymbol)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
901 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
902 if (font->ntmTm.tmCharSet != SYMBOL_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
903 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
904 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
905 else if (EQ (val, Qcyrillic)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
906 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
907 if (font->ntmTm.tmCharSet != RUSSIAN_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
908 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
909 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
910 else if (EQ (val, Qgreek)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
911 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
912 if (font->ntmTm.tmCharSet != GREEK_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
913 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
914 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
915 else if (EQ (val, Qarabic)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
916 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
917 if (font->ntmTm.tmCharSet != ARABIC_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
918 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
919 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
920 else if (EQ (val, Qhebrew)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
921 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
922 if (font->ntmTm.tmCharSet != HEBREW_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
923 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
924 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
925 else if (EQ (val, Qthai)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
926 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
927 if (font->ntmTm.tmCharSet != THAI_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
928 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
929 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
930 else if (EQ (val, Qkana)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
931 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
932 if (font->ntmTm.tmCharSet != SHIFTJIS_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
933 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
934 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
935 else if (EQ (val, Qbopomofo)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
936 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
937 if (font->ntmTm.tmCharSet != CHINESEBIG5_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
938 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
939 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
940 else if (EQ (val, Qhangul)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
941 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
942 if (font->ntmTm.tmCharSet != HANGUL_CHARSET |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
943 && font->ntmTm.tmCharSet != JOHAB_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
944 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
945 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
946 else if (EQ (val, Qhan)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
947 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
948 if (font->ntmTm.tmCharSet != CHINESEBIG5_CHARSET |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
949 && font->ntmTm.tmCharSet != GB2312_CHARSET |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
950 && font->ntmTm.tmCharSet != HANGUL_CHARSET |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
951 && font->ntmTm.tmCharSet != JOHAB_CHARSET |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
952 && font->ntmTm.tmCharSet != SHIFTJIS_CHARSET) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
953 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
954 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
955 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
956 /* Other scripts unlikely to be handled. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
957 return 0; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
958 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
959 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
960 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
961 } |
| 90869 | 962 return 1; |
| 963 } | |
| 964 | |
| 965 /* Callback function for EnumFontFamiliesEx. | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
966 * Checks if a font matches everything we are trying to check agaist, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
967 * and if so, adds it to a list. Both the data we are checking against |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
968 * and the list to which the fonts are added are passed in via the |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
969 * lparam argument, in the form of a font_callback_data struct. */ |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
970 static int CALLBACK |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
971 add_font_entity_to_list (logical_font, physical_font, font_type, lParam) |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
972 ENUMLOGFONTEX *logical_font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
973 NEWTEXTMETRICEX *physical_font; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
974 DWORD font_type; |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
975 LPARAM lParam; |
| 90869 | 976 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
977 struct font_callback_data *match_data |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
978 = (struct font_callback_data *) lParam; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
979 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
980 if (logfonts_match (&logical_font->elfLogFont, &match_data->pattern) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
981 && font_matches_spec (font_type, physical_font, |
|
91070
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
982 match_data->orig_font_spec) |
|
2060802cc53f
(add_font_name_to_list): Avoid vertical fonts.
Jason Rumney <jasonr@gnu.org>
parents:
91034
diff
changeset
|
983 /* Avoid Windows substitution so we can control substitution with |
|
91182
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
984 alternate-fontname-alist. Full name may have Bold and/or Italic |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
985 appended, so only compare the beginning of the name. */ |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
986 && !strnicmp ((char *)&logical_font->elfFullName, |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
987 (char *)&match_data->pattern.lfFaceName, |
|
bbdb7226d848
(add_font_entity_to_list): Compare only the beginning of full name.
Jason Rumney <jasonr@gnu.org>
parents:
91158
diff
changeset
|
988 min (strlen(&match_data->pattern.lfFaceName), LF_FACESIZE))) |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
989 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
990 Lisp_Object entity |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
991 = w32_enumfont_pattern_entity (match_data->frame, logical_font, |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
992 physical_font, font_type, |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
993 &match_data->pattern); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
994 if (!NILP (entity)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
995 match_data->list = Fcons (entity, match_data->list); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
996 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
997 return 1; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
998 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
999 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1000 /* Callback function for EnumFontFamiliesEx. |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1001 * Terminates the search once we have a match. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1002 static int CALLBACK |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1003 add_one_font_entity_to_list (logical_font, physical_font, font_type, lParam) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1004 ENUMLOGFONTEX *logical_font; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1005 NEWTEXTMETRICEX *physical_font; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1006 DWORD font_type; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1007 LPARAM lParam; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1008 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1009 struct font_callback_data *match_data |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1010 = (struct font_callback_data *) lParam; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1011 add_font_entity_to_list (logical_font, physical_font, font_type, lParam); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1012 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1013 /* If we have a font in the list, terminate the search. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1014 return !NILP (match_data->list); |
| 90869 | 1015 } |
| 1016 | |
| 1017 /* Convert a Lisp font registry (symbol) to a windows charset. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1018 static LONG |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1019 registry_to_w32_charset (charset) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1020 Lisp_Object charset; |
| 90869 | 1021 { |
| 1022 if (EQ (charset, Qiso10646_1) || EQ (charset, Qunicode_bmp) | |
| 1023 || EQ (charset, Qunicode_sip)) | |
| 1024 return DEFAULT_CHARSET; /* UNICODE_CHARSET not defined in MingW32 */ | |
| 1025 else if (EQ (charset, Qiso8859_1)) | |
| 1026 return ANSI_CHARSET; | |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1027 else if (SYMBOLP (charset)) |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1028 return x_to_w32_charset (SDATA (SYMBOL_NAME (charset))); |
| 90869 | 1029 else if (STRINGP (charset)) |
| 1030 return x_to_w32_charset (SDATA (charset)); | |
| 1031 else | |
| 1032 return DEFAULT_CHARSET; | |
| 1033 } | |
| 1034 | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1035 static Lisp_Object |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1036 w32_registry (w32_charset) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1037 LONG w32_charset; |
| 90869 | 1038 { |
| 1039 if (w32_charset == ANSI_CHARSET) | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1040 return Qiso10646_1; |
| 90869 | 1041 else |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1042 { |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1043 char * charset = w32_to_x_charset (w32_charset, NULL); |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1044 return intern_downcase (charset, strlen(charset)); |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1045 } |
| 90869 | 1046 } |
| 1047 | |
| 1048 /* Fill in all the available details of LOGFONT from FONT_SPEC. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1049 static void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1050 fill_in_logfont (f, logfont, font_spec) |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1051 FRAME_PTR f; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1052 LOGFONT *logfont; |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1053 Lisp_Object font_spec; |
| 90869 | 1054 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1055 Lisp_Object tmp, extra; |
| 90869 | 1056 int dpi = FRAME_W32_DISPLAY_INFO (f)->resy; |
| 1057 | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1058 extra = AREF (font_spec, FONT_EXTRA_INDEX); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1059 /* Allow user to override dpi settings. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1060 if (CONSP (extra)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1061 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1062 tmp = assq_no_quit (QCdpi, extra); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1063 if (CONSP (tmp) && INTEGERP (XCDR (tmp))) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1064 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1065 dpi = XINT (XCDR (tmp)); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1066 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1067 else if (CONSP (tmp) && FLOATP (XCDR (tmp))) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1068 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1069 dpi = (int) (XFLOAT_DATA (XCDR (tmp)) + 0.5); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1070 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1071 } |
| 90869 | 1072 |
| 1073 /* Height */ | |
| 1074 tmp = AREF (font_spec, FONT_SIZE_INDEX); | |
| 1075 if (INTEGERP (tmp)) | |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1076 logfont->lfHeight = -1 * XINT (tmp); |
| 90869 | 1077 else if (FLOATP (tmp)) |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1078 logfont->lfHeight = (int) (-1.0 * dpi * XFLOAT_DATA (tmp) / 72.27 + 0.5); |
| 90869 | 1079 |
| 1080 /* Escapement */ | |
| 1081 | |
| 1082 /* Orientation */ | |
| 1083 | |
| 1084 /* Weight */ | |
| 1085 tmp = AREF (font_spec, FONT_WEIGHT_INDEX); | |
| 1086 if (INTEGERP (tmp)) | |
| 1087 logfont->lfWeight = XINT (tmp); | |
| 1088 | |
| 1089 /* Italic */ | |
| 1090 tmp = AREF (font_spec, FONT_SLANT_INDEX); | |
| 1091 if (INTEGERP (tmp)) | |
| 1092 { | |
| 1093 int slant = XINT (tmp); | |
| 1094 logfont->lfItalic = slant > 150 ? 1 : 0; | |
| 1095 } | |
| 1096 | |
| 1097 /* Underline */ | |
| 1098 | |
| 1099 /* Strikeout */ | |
| 1100 | |
| 1101 /* Charset */ | |
| 1102 tmp = AREF (font_spec, FONT_REGISTRY_INDEX); | |
| 1103 if (! NILP (tmp)) | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1104 logfont->lfCharSet = registry_to_w32_charset (tmp); |
| 90869 | 1105 |
| 1106 /* Out Precision */ | |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1107 |
| 90869 | 1108 /* Clip Precision */ |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1109 |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1110 /* Quality */ |
|
90879
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1111 logfont->lfQuality = DEFAULT_QUALITY; |
|
82b86c925f88
* w32font.c (w32font_open): Handle size, height and pixel_size better.
Jason Rumney <jasonr@gnu.org>
parents:
90869
diff
changeset
|
1112 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1113 /* Generic Family and Face Name */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1114 logfont->lfPitchAndFamily = FF_DONTCARE | DEFAULT_PITCH; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1115 |
| 90869 | 1116 tmp = AREF (font_spec, FONT_FAMILY_INDEX); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1117 if (! NILP (tmp)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1118 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1119 logfont->lfPitchAndFamily = w32_generic_family (tmp) | DEFAULT_PITCH; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1120 if ((logfont->lfPitchAndFamily & 0xF0) != FF_DONTCARE) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1121 ; /* Font name was generic, don't fill in font name. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1122 /* Font families are interned, but allow for strings also in case of |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1123 user input. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1124 else if (SYMBOLP (tmp)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1125 strncpy (logfont->lfFaceName, SDATA (SYMBOL_NAME (tmp)), LF_FACESIZE); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1126 else if (STRINGP (tmp)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1127 strncpy (logfont->lfFaceName, SDATA (tmp), LF_FACESIZE); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1128 } |
| 90869 | 1129 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1130 /* Process EXTRA info. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1131 for ( ; CONSP (extra); extra = XCDR (extra)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1132 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1133 tmp = XCAR (extra); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1134 if (CONSP (tmp)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1135 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1136 Lisp_Object key, val; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1137 key = XCAR (tmp), val = XCDR (tmp); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1138 if (EQ (key, QCfamily)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1139 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1140 /* Override generic family. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1141 BYTE family = w32_generic_family (val); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1142 if (family != FF_DONTCARE) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1143 logfont->lfPitchAndFamily |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1144 = logfont->lfPitchAndFamily & 0x0F | family; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1145 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1146 else if (EQ (key, QCspacing)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1147 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1148 /* Set pitch based on the spacing property. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1149 if (INTEGERP (val)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1150 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1151 int spacing = XINT (val); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1152 if (spacing < FONT_SPACING_MONO) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1153 logfont->lfPitchAndFamily |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1154 = logfont->lfPitchAndFamily & 0xF0 | VARIABLE_PITCH; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1155 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1156 logfont->lfPitchAndFamily |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1157 = logfont->lfPitchAndFamily & 0xF0 | FIXED_PITCH; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1158 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1159 else if (EQ (val, Qp)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1160 logfont->lfPitchAndFamily |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1161 = logfont->lfPitchAndFamily & 0xF0 | VARIABLE_PITCH; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1162 else if (EQ (val, Qc) || EQ (val, Qm)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1163 logfont->lfPitchAndFamily |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1164 = logfont->lfPitchAndFamily & 0xF0 | FIXED_PITCH; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1165 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1166 /* Only use QCscript if charset is not provided, or is unicode |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1167 and a single script is specified. This is rather crude, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1168 and is only used to narrow down the fonts returned where |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1169 there is a definite match. Some scripts, such as latin, han, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1170 cjk-misc match multiple lfCharSet values, so we can't pre-filter |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1171 them. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1172 else if (EQ (key, QCscript) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1173 && logfont->lfCharSet == DEFAULT_CHARSET |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1174 && SYMBOLP (val)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1175 { |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1176 if (EQ (val, Qgreek)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1177 logfont->lfCharSet = GREEK_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1178 else if (EQ (val, Qhangul)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1179 logfont->lfCharSet = HANGUL_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1180 else if (EQ (val, Qkana) || EQ (val, Qkanbun)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1181 logfont->lfCharSet = SHIFTJIS_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1182 else if (EQ (val, Qbopomofo)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1183 logfont->lfCharSet = CHINESEBIG5_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1184 /* GB 18030 supports tibetan, yi, mongolian, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1185 fonts that support it should show up if we ask for |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1186 GB2312 fonts. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1187 else if (EQ (val, Qtibetan) || EQ (val, Qyi) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1188 || EQ (val, Qmongolian)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1189 logfont->lfCharSet = GB2312_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1190 else if (EQ (val, Qhebrew)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1191 logfont->lfCharSet = HEBREW_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1192 else if (EQ (val, Qarabic)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1193 logfont->lfCharSet = ARABIC_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1194 else if (EQ (val, Qthai)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1195 logfont->lfCharSet = THAI_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1196 else if (EQ (val, Qsymbol)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1197 logfont->lfCharSet = SYMBOL_CHARSET; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1198 } |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1199 else if (EQ (key, QCantialias) && SYMBOLP (val)) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1200 { |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1201 logfont->lfQuality = w32_antialias_type (val); |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1202 } |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1203 } |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1204 } |
| 90869 | 1205 } |
| 1206 | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1207 static void |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1208 list_all_matching_fonts (match_data) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1209 struct font_callback_data *match_data; |
| 90869 | 1210 { |
| 1211 HDC dc; | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1212 Lisp_Object families = w32font_list_family (match_data->frame); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1213 struct frame *f = XFRAME (match_data->frame); |
| 90869 | 1214 |
| 1215 dc = get_frame_dc (f); | |
| 1216 | |
| 1217 while (!NILP (families)) | |
| 1218 { | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1219 /* TODO: Use the Unicode versions of the W32 APIs, so we can |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1220 handle non-ASCII font names. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1221 char *name; |
| 90869 | 1222 Lisp_Object family = CAR (families); |
| 1223 families = CDR (families); | |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1224 if (NILP (family)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1225 continue; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1226 else if (STRINGP (family)) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1227 name = SDATA (family); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1228 else |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1229 name = SDATA (SYMBOL_NAME (family)); |
| 90869 | 1230 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1231 strncpy (match_data->pattern.lfFaceName, name, LF_FACESIZE); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1232 match_data->pattern.lfFaceName[LF_FACESIZE - 1] = '\0'; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1233 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1234 EnumFontFamiliesEx (dc, &match_data->pattern, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1235 (FONTENUMPROC) add_font_entity_to_list, |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1236 (LPARAM) match_data, 0); |
| 90869 | 1237 } |
| 1238 | |
| 1239 release_frame_dc (f, dc); | |
| 1240 } | |
| 1241 | |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1242 static Lisp_Object |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1243 lispy_antialias_type (type) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1244 BYTE type; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1245 { |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1246 Lisp_Object lispy; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1247 |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1248 switch (type) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1249 { |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1250 case NONANTIALIASED_QUALITY: |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1251 lispy = Qnone; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1252 break; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1253 case ANTIALIASED_QUALITY: |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1254 lispy = Qstandard; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1255 break; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1256 case CLEARTYPE_QUALITY: |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1257 lispy = Qsubpixel; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1258 break; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1259 case CLEARTYPE_NATURAL_QUALITY: |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1260 lispy = Qnatural; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1261 break; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1262 default: |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1263 lispy = Qnil; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1264 break; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1265 } |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1266 return lispy; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1267 } |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1268 |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1269 /* Convert antialiasing symbols to lfQuality */ |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1270 static BYTE |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1271 w32_antialias_type (type) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1272 Lisp_Object type; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1273 { |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1274 if (EQ (type, Qnone)) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1275 return NONANTIALIASED_QUALITY; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1276 else if (EQ (type, Qstandard)) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1277 return ANTIALIASED_QUALITY; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1278 else if (EQ (type, Qsubpixel)) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1279 return CLEARTYPE_QUALITY; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1280 else if (EQ (type, Qnatural)) |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1281 return CLEARTYPE_NATURAL_QUALITY; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1282 else |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1283 return DEFAULT_QUALITY; |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1284 } |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1285 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1286 /* Return a list of all the scripts that the font supports. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1287 static Lisp_Object |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1288 font_supported_scripts (FONTSIGNATURE * sig) |
| 90869 | 1289 { |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1290 DWORD * subranges = sig->fsUsb; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1291 Lisp_Object supported = Qnil; |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1292 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1293 /* Match a single subrange. SYM is set if bit N is set in subranges. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1294 #define SUBRANGE(n,sym) \ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1295 if (subranges[(n) / 32] & (1 << ((n) % 32))) \ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1296 supported = Fcons ((sym), supported) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1297 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1298 /* Match multiple subranges. SYM is set if any MASK bit is set in |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1299 subranges[0 - 3]. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1300 #define MASK_ANY(mask0,mask1,mask2,mask3,sym) \ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1301 if ((subranges[0] & (mask0)) || (subranges[1] & (mask1)) \ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1302 || (subranges[2] & (mask2)) || (subranges[3] & (mask3))) \ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1303 supported = Fcons ((sym), supported) |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1304 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1305 SUBRANGE (0, Qlatin); /* There are many others... */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1306 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1307 SUBRANGE (7, Qgreek); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1308 SUBRANGE (8, Qcoptic); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1309 SUBRANGE (9, Qcyrillic); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1310 SUBRANGE (10, Qarmenian); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1311 SUBRANGE (11, Qhebrew); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1312 SUBRANGE (13, Qarabic); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1313 SUBRANGE (14, Qnko); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1314 SUBRANGE (15, Qdevanagari); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1315 SUBRANGE (16, Qbengali); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1316 SUBRANGE (17, Qgurmukhi); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1317 SUBRANGE (18, Qgujarati); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1318 SUBRANGE (19, Qoriya); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1319 SUBRANGE (20, Qtamil); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1320 SUBRANGE (21, Qtelugu); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1321 SUBRANGE (22, Qkannada); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1322 SUBRANGE (23, Qmalayalam); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1323 SUBRANGE (24, Qthai); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1324 SUBRANGE (25, Qlao); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1325 SUBRANGE (26, Qgeorgian); |
| 90869 | 1326 |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1327 SUBRANGE (48, Qcjk_misc); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1328 SUBRANGE (51, Qbopomofo); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1329 SUBRANGE (54, Qkanbun); /* Is this right? */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1330 SUBRANGE (56, Qhangul); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1331 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1332 SUBRANGE (59, Qhan); /* There are others, but this is the main one. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1333 SUBRANGE (59, Qideographic_description); /* Windows lumps this in */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1334 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1335 SUBRANGE (70, Qtibetan); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1336 SUBRANGE (71, Qsyriac); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1337 SUBRANGE (72, Qthaana); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1338 SUBRANGE (73, Qsinhala); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1339 SUBRANGE (74, Qmyanmar); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1340 SUBRANGE (75, Qethiopic); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1341 SUBRANGE (76, Qcherokee); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1342 SUBRANGE (77, Qcanadian_aboriginal); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1343 SUBRANGE (78, Qogham); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1344 SUBRANGE (79, Qrunic); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1345 SUBRANGE (80, Qkhmer); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1346 SUBRANGE (81, Qmongolian); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1347 SUBRANGE (82, Qbraille); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1348 SUBRANGE (83, Qyi); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1349 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1350 SUBRANGE (88, Qbyzantine_musical_symbol); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1351 SUBRANGE (88, Qmusical_symbol); /* Windows doesn't distinguish these. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1352 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1353 SUBRANGE (89, Qmathematical); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1354 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1355 /* Match either katakana or hiragana for kana. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1356 MASK_ANY (0, 0x00060000, 0, 0, Qkana); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1357 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1358 /* There isn't really a main symbol range, so include symbol if any |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1359 relevant range is set. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1360 MASK_ANY (0x8000000, 0x0000FFFF, 0, 0, Qsymbol); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1361 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1362 #undef SUBRANGE |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1363 #undef MASK_ANY |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1364 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1365 return supported; |
| 90869 | 1366 } |
| 1367 | |
| 1368 | |
| 1369 struct font_driver w32font_driver = | |
| 1370 { | |
| 90964 | 1371 0, /* Qgdi */ |
| 90869 | 1372 w32font_get_cache, |
| 1373 w32font_list, | |
| 1374 w32font_match, | |
| 1375 w32font_list_family, | |
| 1376 NULL, /* free_entity */ | |
| 1377 w32font_open, | |
| 1378 w32font_close, | |
| 1379 NULL, /* prepare_face */ | |
| 1380 NULL, /* done_face */ | |
| 1381 w32font_has_char, | |
| 1382 w32font_encode_char, | |
| 1383 w32font_text_extents, | |
| 1384 w32font_draw, | |
| 1385 NULL, /* get_bitmap */ | |
| 1386 NULL, /* free_bitmap */ | |
| 1387 NULL, /* get_outline */ | |
| 1388 NULL, /* free_outline */ | |
| 1389 NULL, /* anchor_point */ | |
| 1390 NULL, /* otf_capability */ | |
|
91158
5e7347695108
(w32font_driver): Add new fields.
Jason Rumney <jasonr@gnu.org>
parents:
91128
diff
changeset
|
1391 NULL, /* otf_drive */ |
|
5e7347695108
(w32font_driver): Add new fields.
Jason Rumney <jasonr@gnu.org>
parents:
91128
diff
changeset
|
1392 NULL, /* start_for_frame */ |
|
5e7347695108
(w32font_driver): Add new fields.
Jason Rumney <jasonr@gnu.org>
parents:
91128
diff
changeset
|
1393 NULL, /* end_for_frame */ |
|
5e7347695108
(w32font_driver): Add new fields.
Jason Rumney <jasonr@gnu.org>
parents:
91128
diff
changeset
|
1394 NULL /* shape */ |
| 90869 | 1395 }; |
| 1396 | |
| 1397 | |
| 1398 /* Initialize state that does not change between invocations. This is only | |
| 1399 called when Emacs is dumped. */ | |
|
90889
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1400 void |
|
0df73c71020b
* w32font.c (QCsubranges): New symbol.
Jason Rumney <jasonr@gnu.org>
parents:
90887
diff
changeset
|
1401 syms_of_w32font () |
| 90869 | 1402 { |
| 90964 | 1403 DEFSYM (Qgdi, "gdi"); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1404 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1405 /* Generic font families. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1406 DEFSYM (Qmonospace, "monospace"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1407 DEFSYM (Qserif, "serif"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1408 DEFSYM (Qsans_serif, "sans-serif"); |
| 90869 | 1409 DEFSYM (Qscript, "script"); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1410 DEFSYM (Qdecorative, "decorative"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1411 /* Aliases. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1412 DEFSYM (Qsans__serif, "sans_serif"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1413 DEFSYM (Qsans, "sans"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1414 DEFSYM (Qmono, "mono"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1415 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1416 /* Fake foundries. */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1417 DEFSYM (Qraster, "raster"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1418 DEFSYM (Qoutline, "outline"); |
| 90869 | 1419 DEFSYM (Qunknown, "unknown"); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1420 |
|
91124
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1421 /* Antialiasing. */ |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1422 DEFSYM (Qstandard, "standard"); |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1423 DEFSYM (Qsubpixel, "subpixel"); |
|
b656aee8436b
(CLEARTYPE_QUALITY, CLEARTYPE_NATURAL_QUALITY): Define
Jason Rumney <jasonr@gnu.org>
parents:
91070
diff
changeset
|
1424 DEFSYM (Qnatural, "natural"); |
|
90906
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1425 |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1426 /* Scripts */ |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1427 DEFSYM (Qlatin, "latin"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1428 DEFSYM (Qgreek, "greek"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1429 DEFSYM (Qcoptic, "coptic"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1430 DEFSYM (Qcyrillic, "cyrillic"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1431 DEFSYM (Qarmenian, "armenian"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1432 DEFSYM (Qhebrew, "hebrew"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1433 DEFSYM (Qarabic, "arabic"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1434 DEFSYM (Qsyriac, "syriac"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1435 DEFSYM (Qnko, "nko"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1436 DEFSYM (Qthaana, "thaana"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1437 DEFSYM (Qdevanagari, "devanagari"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1438 DEFSYM (Qbengali, "bengali"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1439 DEFSYM (Qgurmukhi, "gurmukhi"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1440 DEFSYM (Qgujarati, "gujarati"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1441 DEFSYM (Qoriya, "oriya"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1442 DEFSYM (Qtamil, "tamil"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1443 DEFSYM (Qtelugu, "telugu"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1444 DEFSYM (Qkannada, "kannada"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1445 DEFSYM (Qmalayalam, "malayalam"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1446 DEFSYM (Qsinhala, "sinhala"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1447 DEFSYM (Qthai, "thai"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1448 DEFSYM (Qlao, "lao"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1449 DEFSYM (Qtibetan, "tibetan"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1450 DEFSYM (Qmyanmar, "myanmar"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1451 DEFSYM (Qgeorgian, "georgian"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1452 DEFSYM (Qhangul, "hangul"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1453 DEFSYM (Qethiopic, "ethiopic"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1454 DEFSYM (Qcherokee, "cherokee"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1455 DEFSYM (Qcanadian_aboriginal, "canadian-aboriginal"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1456 DEFSYM (Qogham, "ogham"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1457 DEFSYM (Qrunic, "runic"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1458 DEFSYM (Qkhmer, "khmer"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1459 DEFSYM (Qmongolian, "mongolian"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1460 DEFSYM (Qsymbol, "symbol"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1461 DEFSYM (Qbraille, "braille"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1462 DEFSYM (Qhan, "han"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1463 DEFSYM (Qideographic_description, "ideographic-description"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1464 DEFSYM (Qcjk_misc, "cjk-misc"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1465 DEFSYM (Qkana, "kana"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1466 DEFSYM (Qbopomofo, "bopomofo"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1467 DEFSYM (Qkanbun, "kanbun"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1468 DEFSYM (Qyi, "yi"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1469 DEFSYM (Qbyzantine_musical_symbol, "byzantine-musical-symbol"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1470 DEFSYM (Qmusical_symbol, "musical-symbol"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1471 DEFSYM (Qmathematical, "mathematical"); |
|
f8694254fa1d
(w32font_info): Remove subranges.
Jason Rumney <jasonr@gnu.org>
parents:
90898
diff
changeset
|
1472 |
| 90964 | 1473 w32font_driver.type = Qgdi; |
| 90869 | 1474 register_font_driver (&w32font_driver, NULL); |
| 1475 } | |
| 90898 | 1476 |
| 1477 /* arch-tag: 65b8a3cd-46aa-4c0d-a1f3-99e75b9c07ee | |
| 1478 (do not change this comment) */ |
