Mercurial > emacs
annotate src/nsfont.m @ 100292:816fe1a75404
Add Solaris on x86_64.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Tue, 09 Dec 2008 20:36:23 +0000 |
parents | ba4876d944bc |
children | e038c1a8307c |
rev | line source |
---|---|
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1 /* Font back-end driver for the NeXT/Open/GNUstep and MacOSX window system. |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
2 See font.h |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
3 Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
4 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
5 This file is part of GNU Emacs. |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
6 |
96692
6fad3f85eab7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
96689
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
96692
6fad3f85eab7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
96689
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
6fad3f85eab7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
96689
diff
changeset
|
10 (at your option) any later version. |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
11 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
15 GNU General Public License for more details. |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
16 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
96692
6fad3f85eab7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
96689
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
19 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
20 Author: Adrian Robert (arobert@cogsci.ucsd.edu) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
21 */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
22 |
99904
ba4876d944bc
Fix bug #1362. * image.c (x_clear_image_1): Do not free background under HAVE_NS, it is not an indexed color. * nsterm.m (free_indexed_color): Add argument checking. * nsfns.m: Move config.h to before system includes (advised by Dan N.).
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98451
diff
changeset
|
23 /* This should be the first include, as it may set up #defines affecting |
ba4876d944bc
Fix bug #1362. * image.c (x_clear_image_1): Do not free background under HAVE_NS, it is not an indexed color. * nsterm.m (free_indexed_color): Add argument checking. * nsfns.m: Move config.h to before system includes (advised by Dan N.).
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98451
diff
changeset
|
24 interpretation of even the system includes. */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
25 #include "config.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
26 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
27 #include "lisp.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
28 #include "dispextern.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
29 #include "composite.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
30 #include "blockinput.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
31 #include "charset.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
32 #include "frame.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
33 #include "window.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
34 #include "fontset.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
35 #include "nsterm.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
36 #include "frame.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
37 #include "character.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
38 #include "font.h" |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
39 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
40 #define NSFONT_TRACE 0 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
41 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
42 extern Lisp_Object Qns; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
43 extern Lisp_Object Qnormal, Qbold, Qitalic, Qcondensed, Qexpanded; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
44 static Lisp_Object Qapple, Qroman, Qmedium; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
45 extern Lisp_Object ns_expand_space; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
46 extern Lisp_Object Qappend; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
47 extern int ns_antialias_text, ns_use_qd_smoothing; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
48 extern float ns_antialias_threshold; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
49 extern int ns_tmp_flags; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
50 extern struct nsfont_info *ns_tmp_font; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
51 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
52 /* font glyph and metrics caching functions, implemented at end */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
53 static void ns_uni_to_glyphs (struct nsfont_info *font_info, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
54 unsigned char block); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
55 static void ns_glyph_metrics (struct nsfont_info *font_info, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
56 unsigned char block); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
57 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
58 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
59 /* ========================================================================== |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
60 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
61 Utilities |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
62 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
63 ========================================================================== */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
64 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
65 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
66 /* Replace spaces w/another character so emacs core font parsing routines |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
67 aren't thrown off. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
68 static void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
69 nsfont_escape_name (char *name) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
70 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
71 int i =0, len =strlen (name); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
72 for ( ; i<len; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
73 if (name[i] == ' ') |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
74 name[i] = '_'; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
75 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
76 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
77 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
78 /* Reconstruct spaces in a font family name passed through emacs. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
79 static void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
80 nsfont_unescape_name (char *name) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
81 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
82 int i =0, len =strlen (name); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
83 for ( ; i<len; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
84 if (name[i] == '_') |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
85 name[i] = ' '; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
86 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
87 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
88 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
89 /* Extract family name from a font spec. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
90 static NSString * |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
91 nsfont_get_family (Lisp_Object font_spec) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
92 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
93 Lisp_Object tem = AREF (font_spec, FONT_FAMILY_INDEX); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
94 if (NILP (tem)) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
95 return nil; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
96 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
97 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
98 char *tmp = strdup (SDATA (SYMBOL_NAME (tem))); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
99 NSString *family; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
100 nsfont_unescape_name (tmp); |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
101 /* TODO: this seems to be needed only for font names that are |
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
102 hard-coded into emacs, like 'helvetica' for splash screen */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
103 if (tmp) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
104 tmp[0] = toupper (tmp[0]); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
105 family = [NSString stringWithUTF8String: tmp]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
106 free (tmp); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
107 return family; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
108 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
109 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
110 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
111 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
112 /* Converts FONT_WEIGHT, FONT_SLANT, FONT_WIDTH to NSFont traits. */ |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
113 /* TODO (20080601): The font backend's strategy for handling font |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
114 styles continues to evolve. When/if this stabilizes, we |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
115 can change the code here to be more sophisticated and accurate. |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
116 For now, we rely on "normal/plain" style being numeric 100. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
117 #define STYLE_REF 100 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
118 static unsigned int |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
119 nsfont_spec_to_traits (Lisp_Object font_spec) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
120 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
121 unsigned int traits = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
122 int n; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
123 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
124 n = FONT_WEIGHT_NUMERIC (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
125 if (n != -1) |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
126 traits |= (n > STYLE_REF) ? NSBoldFontMask |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
127 : (n < STYLE_REF) ? NSUnboldFontMask : 0; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
128 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
129 n = FONT_SLANT_NUMERIC (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
130 if (n != -1) |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
131 traits |= (n > STYLE_REF) ? NSItalicFontMask |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
132 : (n < STYLE_REF) ? NSUnitalicFontMask : 0; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
133 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
134 n = FONT_WIDTH_NUMERIC (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
135 if (n > -1) |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
136 traits |= (n > STYLE_REF + 10) ? NSExpandedFontMask |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
137 : (n < STYLE_REF - 10) ? NSExpandedFontMask : 0; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
138 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
139 /*fprintf (stderr, " returning traits = %u\n", traits); */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
140 return traits; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
141 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
142 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
143 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
144 /* Converts NSArray of PS name, non-family part, weight, and traits to a |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
145 font backend font-entity. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
146 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
147 nsfont_fmember_to_entity (NSString *family, NSArray *famMember) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
148 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
149 Lisp_Object font_entity = font_make_entity (); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
150 unsigned int traits = [[famMember objectAtIndex: 3] unsignedIntValue]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
151 /* NSString *psName = [famMember objectAtIndex: 0]; */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
152 NSMutableString *suffix = [[famMember objectAtIndex: 1] mutableCopy]; |
96813
ece3c792fb2e
nsfont.m: duplicate UTF8Strings before modifying with nsfont_escape_family_name - patch due to Seiji Zenitani
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96812
diff
changeset
|
153 char *escapedFamily = strdup ([family UTF8String]); |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
154 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
155 nsfont_escape_name (escapedFamily); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
156 [suffix replaceOccurrencesOfString: @" " withString: @"" options: 0 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
157 range: NSMakeRange (0, [suffix length])]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
158 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
159 ASET (font_entity, FONT_TYPE_INDEX, Qns); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
160 ASET (font_entity, FONT_FOUNDRY_INDEX, Qapple); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
161 ASET (font_entity, FONT_FAMILY_INDEX, intern (escapedFamily)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
162 ASET (font_entity, FONT_ADSTYLE_INDEX, intern ([suffix UTF8String])); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
163 ASET (font_entity, FONT_REGISTRY_INDEX, Qiso10646_1); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
164 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
165 FONT_SET_STYLE (font_entity, FONT_WEIGHT_INDEX, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
166 traits & NSBoldFontMask ? Qbold : Qmedium); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
167 FONT_SET_STYLE (font_entity, FONT_SLANT_INDEX, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
168 traits & NSItalicFontMask ? Qitalic : Qnormal); /*XXX: should be Qroman */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
169 FONT_SET_STYLE (font_entity, FONT_WIDTH_INDEX, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
170 traits & NSCondensedFontMask ? Qcondensed : |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
171 traits & NSExpandedFontMask ? Qexpanded : Qnormal); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
172 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
173 ASET (font_entity, FONT_SIZE_INDEX, make_number (0)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
174 ASET (font_entity, FONT_EXTRA_INDEX, Qnil); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
175 ASET (font_entity, FONT_OBJLIST_INDEX, Qnil); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
176 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
177 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
178 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
179 fprintf (stderr, "created font_entity:\n "); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
180 debug_print (font_entity); |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
181 } |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
182 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
183 [suffix release]; |
96813
ece3c792fb2e
nsfont.m: duplicate UTF8Strings before modifying with nsfont_escape_family_name - patch due to Seiji Zenitani
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96812
diff
changeset
|
184 free (escapedFamily); |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
185 return font_entity; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
186 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
187 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
188 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
189 /* Computes Hamming distance btwn two "vectors" of 0's and 1's. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
190 static int |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
191 nsfont_trait_distance (unsigned int traits1, unsigned int traits2) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
192 { |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
193 int i, d = 0; |
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
194 for (i = 0; i < sizeof (unsigned int) * 8; i++) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
195 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
196 d += (traits1 & 0x1) ^ (traits2 & 0x1); |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
197 traits1 >>= 1; |
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
198 traits2 >>= 1; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
199 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
200 return d; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
201 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
202 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
203 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
204 /* Default font entity based on Monaco. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
205 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
206 nsfont_fallback_entity () |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
207 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
208 NSString *family = [[NSFont userFixedPitchFontOfSize: 0] familyName]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
209 NSArray *famMemberSpec = [NSArray arrayWithObjects: family, @"", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
210 [NSNumber numberWithUnsignedInt: 5], |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
211 [NSNumber numberWithUnsignedInt: 0], nil]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
212 return nsfont_fmember_to_entity (family, famMemberSpec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
213 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
214 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
215 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
216 /* ========================================================================== |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
217 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
218 Font driver implementation |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
219 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
220 ========================================================================== */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
221 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
222 static Lisp_Object nsfont_get_cache (FRAME_PTR frame); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
223 static Lisp_Object nsfont_list (Lisp_Object frame, Lisp_Object font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
224 static Lisp_Object nsfont_match (Lisp_Object frame, Lisp_Object font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
225 static Lisp_Object nsfont_list_family (Lisp_Object frame); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
226 static Lisp_Object nsfont_open (FRAME_PTR f, Lisp_Object font_entity, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
227 int pixel_size); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
228 static void nsfont_close (FRAME_PTR f, struct font *font); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
229 static int nsfont_has_char (Lisp_Object entity, int c); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
230 static unsigned int nsfont_encode_char (struct font *font, int c); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
231 static int nsfont_text_extents (struct font *font, unsigned int *code, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
232 int nglyphs, struct font_metrics *metrics); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
233 static int nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
234 int with_background); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
235 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
236 struct font_driver nsfont_driver = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
237 { |
96759
1e2f7aab70ba
* Makefile.in: Undef LIB_STANDARD before defining it to silence warning
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96692
diff
changeset
|
238 0, /* Qns */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
239 1, /* case sensitive */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
240 nsfont_get_cache, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
241 nsfont_list, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
242 nsfont_match, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
243 nsfont_list_family, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
244 NULL, /*free_entity */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
245 nsfont_open, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
246 nsfont_close, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
247 NULL, /* prepare_face */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
248 NULL, /* done_face */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
249 nsfont_has_char, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
250 nsfont_encode_char, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
251 nsfont_text_extents, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
252 nsfont_draw, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
253 /* excluded: get_bitmap, free_bitmap, get_outline, free_outline, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
254 anchor_point, otf_capability, otf_driver, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
255 start_for_frame, end_for_frame, shape */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
256 }; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
257 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
258 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
259 /* Return a cache of font-entities on FRAME. The cache must be a |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
260 cons whose cdr part is the actual cache area. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
261 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
262 nsfont_get_cache (FRAME_PTR frame) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
263 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
264 Display_Info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
265 return (dpyinfo->name_list_element); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
266 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
267 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
268 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
269 /* List fonts exactly matching with FONT_SPEC on FRAME. The value |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
270 is a **list** of font-entities. This is the sole API that |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
271 allocates font-entities. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
272 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
273 nsfont_list (Lisp_Object frame, Lisp_Object font_spec) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
274 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
275 Lisp_Object list = Qnil; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
276 Lisp_Object tem; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
277 NSString *family; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
278 NSArray *families; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
279 NSEnumerator *famEnum; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
280 NSFontManager *fontMgr; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
281 unsigned int traits = nsfont_spec_to_traits (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
282 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
283 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
284 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
285 fprintf (stderr, "nsfont: list for fontspec:\n "); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
286 debug_print (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
287 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
288 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
289 /* if has non-unicode registry, give up */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
290 tem = AREF (font_spec, FONT_REGISTRY_INDEX); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
291 if (!EQ (tem, Qiso10646_1) && !EQ (tem, Qunicode_bmp)) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
292 return Qnil; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
293 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
294 fontMgr = [NSFontManager sharedFontManager]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
295 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
296 family = nsfont_get_family (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
297 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
298 if (family != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
299 families = [NSArray arrayWithObject: family]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
300 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
301 families = [fontMgr availableFontFamilies]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
302 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
303 for (famEnum = [families objectEnumerator]; family = [famEnum nextObject]; ) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
304 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
305 NSEnumerator *fm; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
306 NSArray *fmember, *firstMember = nil; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
307 unsigned int mtraits; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
308 BOOL foundItal = NO || (traits & NSUnitalicFontMask); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
309 NSArray *famMembers = [fontMgr availableMembersOfFontFamily: family]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
310 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
311 /* LastResort is special: not a family but a font name only */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
312 if ([@"LastResort" isEqualToString: family] && [famMembers count] == 0) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
313 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
314 famMembers = [NSArray arrayWithObject: [NSArray arrayWithObjects: |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
315 @"LastResort", @"", [NSNumber numberWithUnsignedInt: 5], |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
316 [NSNumber numberWithUnsignedInt: 0], nil]]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
317 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
318 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
319 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
320 /* fmember = [postscriptName style weight traits] */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
321 fm = [famMembers objectEnumerator]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
322 while (fmember = [fm nextObject]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
323 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
324 mtraits = [[fmember objectAtIndex: 3] unsignedIntValue]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
325 if ((mtraits & traits) == traits) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
326 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
327 list = Fcons (nsfont_fmember_to_entity (family, fmember), list); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
328 if (mtraits & NSItalicFontMask) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
329 foundItal = YES; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
330 if (firstMember == nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
331 firstMember = fmember; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
332 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
333 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
334 if (foundItal == NO && firstMember != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
335 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
336 /* no italic member found; add a synthesized one */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
337 NSMutableArray *smember = [firstMember mutableCopy]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
338 [smember replaceObjectAtIndex: 1 withObject: @"synthItal" ]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
339 mtraits = [[fmember objectAtIndex: 3] unsignedIntValue]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
340 mtraits |= NSItalicFontMask; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
341 [smember replaceObjectAtIndex: 3 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
342 withObject: [NSNumber numberWithUnsignedInt: mtraits]]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
343 /*NSLog (@"-- adding synthItal member: %@", smember); */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
344 list = Fcons (nsfont_fmember_to_entity (family, smember), list); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
345 [smember release]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
346 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
347 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
348 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
349 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
350 fprintf (stderr, " Returning %d entities.\n", XINT (Flength (list))); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
351 |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
352 return list; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
353 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
354 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
355 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
356 /* Return a font entity most closely maching with FONT_SPEC on |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
357 FRAME. The closeness is determined by the font backend, thus |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
358 `face-font-selection-order' is ignored here. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
359 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
360 nsfont_match (Lisp_Object frame, Lisp_Object font_spec) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
361 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
362 long traits = nsfont_spec_to_traits (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
363 NSFontManager *fontMgr = [NSFontManager sharedFontManager]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
364 NSString *family; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
365 Lisp_Object tem; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
366 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
367 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
368 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
369 fprintf (stderr, "nsfont: match for fontspec:\n "); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
370 debug_print (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
371 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
372 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
373 /* if has non-unicode registry, just return fallback */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
374 #if 0 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
375 tem = AREF (font_spec, FONT_ADSTYLE_INDEX); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
376 if (!NILP (tem)) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
377 fprintf (stderr, "adstyle: '%s'\n", SDATA (tem)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
378 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
379 tem = AREF (font_spec, FONT_REGISTRY_INDEX); |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
380 if (!NILP (tem) && !EQ (tem, Qiso10646_1) && !EQ (tem, Qunicode_bmp)) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
381 return nsfont_fallback_entity (); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
382 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
383 family = nsfont_get_family (font_spec); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
384 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
385 if (family != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
386 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
387 /* try to find close font in family */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
388 NSArray *famMembers = [fontMgr availableMembersOfFontFamily: family]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
389 NSEnumerator *fm = [famMembers objectEnumerator]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
390 NSArray *fmember; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
391 int minDist = sizeof (unsigned int) * 8 + 1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
392 int bestMatchIdx = -1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
393 int i; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
394 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
395 for (i =0; fmember = [fm nextObject]; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
396 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
397 unsigned int mtraits = [[fmember objectAtIndex: 3] unsignedIntValue]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
398 int dist = nsfont_trait_distance ((mtraits & traits), traits); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
399 if (dist < minDist) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
400 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
401 bestMatchIdx = i; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
402 minDist = dist; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
403 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
404 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
405 if (bestMatchIdx != -1) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
406 return nsfont_fmember_to_entity |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
407 (family, [famMembers objectAtIndex: bestMatchIdx]); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
408 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
409 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
410 /* no family that had members was given; find any font matching traits */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
411 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
412 NSArray *fontNames = [fontMgr availableFontNamesWithTraits: traits]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
413 if (fontNames && [fontNames count] > 0) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
414 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
415 NSString *fontName = [fontNames objectAtIndex: 0]; |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
416 /* XXX: is there a more efficient way to get family name? */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
417 NSFont *font = [NSFont fontWithName: fontName size: 0]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
418 if (font != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
419 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
420 /* now need to get suffix part of name.. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
421 NSString *family = [font familyName]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
422 NSEnumerator *fm = [[fontMgr availableMembersOfFontFamily: family] |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
423 objectEnumerator]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
424 NSArray *fmember; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
425 while (fmember = [fm nextObject]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
426 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
427 unsigned int mtraits = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
428 [[fmember objectAtIndex: 3] unsignedIntValue]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
429 if (mtraits & traits == traits) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
430 return nsfont_fmember_to_entity (family, fmember); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
431 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
432 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
433 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
434 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
435 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
436 /* if we get here, return the fallback */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
437 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
438 fprintf (stderr, " *** returning fallback\n"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
439 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
440 return nsfont_fallback_entity (); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
441 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
442 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
443 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
444 /* List available families. The value is a list of family names |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
445 (symbols). */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
446 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
447 nsfont_list_family (Lisp_Object frame) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
448 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
449 Lisp_Object list = Qnil; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
450 NSEnumerator *families = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
451 [[[NSFontManager sharedFontManager] availableFontFamilies] |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
452 objectEnumerator]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
453 NSString *family; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
454 while (family = [families nextObject]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
455 list = Fcons (intern ([family UTF8String]), list); |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
456 /* FIXME: escape the name? */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
457 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
458 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
459 fprintf (stderr, "nsfont: list families returning %d entries\n", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
460 XINT (Flength (list))); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
461 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
462 return list; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
463 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
464 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
465 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
466 /* utility: get width of a char c in screen font sfont */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
467 static float |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
468 nsfont_char_width (NSFont *sfont, int c) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
469 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
470 float w; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
471 NSString *cstr = [NSString stringWithFormat: @"%c", c]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
472 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
473 NSGlyph glyph = [sfont glyphWithName: cstr]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
474 if (glyph) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
475 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
476 float w = [sfont advancementForGlyph: glyph].width; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
477 if (w >= 1.5) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
478 return w; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
479 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
480 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
481 w = [sfont widthOfString: cstr]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
482 return max (w, 2.0); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
483 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
484 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
485 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
486 /* Open a font specified by FONT_ENTITY on frame F. If the font is |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
487 scalable, open it with PIXEL_SIZE. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
488 static Lisp_Object |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
489 nsfont_open (FRAME_PTR f, Lisp_Object font_entity, int pixel_size) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
490 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
491 BOOL synthItal; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
492 struct nsfont_info *font_info; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
493 struct font *font; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
494 unsigned int traits = nsfont_spec_to_traits (font_entity); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
495 NSFontManager *fontMgr = [NSFontManager sharedFontManager]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
496 NSString *family; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
497 NSFont *nsfont, *sfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
498 Lisp_Object tem; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
499 NSRect brect; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
500 Lisp_Object font_object; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
501 int i; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
502 int fixLeopardBug; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
503 static NSMutableDictionary *fontCache = nil; |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
504 NSNumber *cached; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
505 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
506 /* 2008/03/08: The same font may end up being requested for different |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
507 entities, due to small differences in numeric values or other issues, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
508 or for different copies of the same entity. Therefore we cache to |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
509 avoid creating multiple struct font objects (with metrics cache, etc.) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
510 for the same NSFont object. |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
511 2008/06/01: This is still an issue after font backend refactoring. */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
512 if (fontCache == nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
513 fontCache = [[NSMutableDictionary alloc] init]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
514 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
515 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
516 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
517 fprintf (stderr, "nsfont: open size %d of fontentity:\n ", pixel_size); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
518 debug_print (font_entity); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
519 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
520 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
521 if (pixel_size <= 0) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
522 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
523 /* try to get it out of frame params */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
524 Lisp_Object tem = get_frame_param (f, Qfontsize); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
525 pixel_size = NILP (tem) ? 0 : XFASTINT (tem); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
526 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
527 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
528 tem = AREF (font_entity, FONT_ADSTYLE_INDEX); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
529 synthItal = !NILP (tem) && !strncmp ("synthItal", SDATA (SYMBOL_NAME (tem)), |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
530 9); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
531 family = nsfont_get_family (font_entity); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
532 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
533 { |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
534 fprintf (stderr, "family: '%s'\ttraits = %ld\tbold = %d\titalic = %d\n", |
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
535 [family UTF8String], traits, traits & NSBoldFontMask, |
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
536 traits & NSItalicFontMask); |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
537 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
538 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
539 /* see http://cocoadev.com/forums/comments.php?DiscussionID =74 */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
540 fixLeopardBug = traits & NSBoldFontMask ? 10 : 5; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
541 nsfont = [fontMgr fontWithFamily: family |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
542 traits: traits weight: fixLeopardBug |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
543 size: pixel_size]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
544 /* if didn't find, try synthetic italic */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
545 if (nsfont == nil && synthItal && (traits & NSItalicFontMask)) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
546 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
547 nsfont = [fontMgr fontWithFamily: family |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
548 traits: traits & ~NSItalicFontMask |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
549 weight: fixLeopardBug size: pixel_size]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
550 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
551 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
552 /* LastResort not really a family */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
553 if (nsfont == nil && [@"LastResort" isEqualToString: family]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
554 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
555 nsfont = [NSFont fontWithName: @"LastResort" size: pixel_size]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
556 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
557 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
558 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
559 if (nsfont == nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
560 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
561 message_with_string ("*** Warning: font in family '%s' not found", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
562 build_string ([family UTF8String]), 1); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
563 nsfont = [NSFont userFixedPitchFontOfSize: pixel_size]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
564 if (!nsfont) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
565 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
566 fprintf (stderr, "*** Emacs.app: unable to load backup font\n"); |
96759
1e2f7aab70ba
* Makefile.in: Undef LIB_STANDARD before defining it to silence warning
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96692
diff
changeset
|
567 return Qnil; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
568 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
569 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
570 |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
571 if (NSFONT_TRACE) |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
572 NSLog (@"%@\n", nsfont); |
98399
6b3b02fd9846
* nsfont.m (nsfont_trait_distance): Fix bug. (nsfont_list): Return a list rather than a vector (syncs with Handa changes of 2008-05-14). (nsfont_open): Improve logging.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98371
diff
changeset
|
573 |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
574 /* Check the cache */ |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
575 cached = [fontCache objectForKey: nsfont]; |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
576 if (cached != nil && !synthItal) |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
577 { |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
578 if (NSFONT_TRACE) |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
579 fprintf(stderr, "*** nsfont_open CACHE HIT!\n"); |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
580 return (Lisp_Object)[cached unsignedLongValue]; |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
581 } |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
582 else |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
583 { |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
584 font_object = font_make_object (VECSIZE (struct nsfont_info), |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
585 font_entity, pixel_size); |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
586 if (!synthItal) |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
587 [fontCache |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
588 setObject: [NSNumber numberWithUnsignedLong: |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
589 (unsigned long)font_object] |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
590 forKey: nsfont]; |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
591 } |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
592 |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
593 font_info = (struct nsfont_info *) XFONT_OBJECT (font_object); |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
594 font = (struct font *)font_info; |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
595 if (!font) |
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
596 return Qnil; /* FIXME: other terms do, but return Qnil causes segfault */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
597 |
97198
cf43f4e3ecc8
clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96892
diff
changeset
|
598 font_info->glyphs = (unsigned short **) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
599 xmalloc (0x100 * sizeof (unsigned short *)); |
97198
cf43f4e3ecc8
clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96892
diff
changeset
|
600 font_info->metrics = (struct font_metrics **) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
601 xmalloc (0x100 * sizeof (struct font_metrics *)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
602 if (!font_info->glyphs || !font_info->metrics) |
96759
1e2f7aab70ba
* Makefile.in: Undef LIB_STANDARD before defining it to silence warning
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96692
diff
changeset
|
603 return Qnil; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
604 bzero (font_info->glyphs, 0x100 * sizeof (unsigned short *)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
605 bzero (font_info->metrics, 0x100 * sizeof (struct font_metrics *)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
606 |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98399
diff
changeset
|
607 BLOCK_INPUT; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
608 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
609 /* for metrics */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
610 sfont = [nsfont screenFont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
611 if (sfont == nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
612 sfont = nsfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
613 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
614 /* non-metric backend font struct fields */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
615 font = (struct font *) font_info; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
616 font->pixel_size = [sfont pointSize]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
617 font->driver = &nsfont_driver; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
618 font->encoding_type = FONT_ENCODING_NOT_DECIDED; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
619 font->encoding_charset = -1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
620 font->repertory_charset = -1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
621 font->default_ascent = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
622 font->vertical_centering = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
623 font->baseline_offset = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
624 font->relative_compose = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
625 font->font_encoder = NULL; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
626 |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
627 /* TODO: does anything care about this? */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
628 font->props[FONT_FORMAT_INDEX] = Qns; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
629 font->props[FONT_FILE_INDEX] = Qnil; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
630 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
631 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
632 double expand, shrink, hshrink; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
633 float full_height, min_height, hd; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
634 const char *fontName = [[nsfont fontName] UTF8String]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
635 int len = strlen (fontName); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
636 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
637 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
638 font_info->nsfont = sfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
639 #else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
640 font_info->nsfont = nsfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
641 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
642 [font_info->nsfont retain]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
643 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
644 /* set up ns_font (defined in nsgui.h) */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
645 font_info->name = (char *)xmalloc (strlen (fontName)+1); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
646 bcopy (fontName, font_info->name, strlen (fontName)+1); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
647 font_info->bold = [fontMgr traitsOfFont: nsfont] & NSBoldFontMask; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
648 font_info->ital = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
649 synthItal || ([fontMgr traitsOfFont: nsfont] & NSItalicFontMask); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
650 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
651 /* Metrics etc.; some fonts return an unusually large max advance, so we |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
652 only use it for fonts that have wide characters. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
653 font_info->width = ([sfont numberOfGlyphs] > 2000) ? |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
654 [sfont maximumAdvancement].width : nsfont_char_width (sfont, '0'); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
655 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
656 brect = [sfont boundingRectForFont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
657 full_height = brect.size.height; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
658 min_height = [sfont ascender] - [sfont descender]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
659 hd = full_height - min_height; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
660 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
661 if (!NUMBERP (ns_expand_space)) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
662 error ("No expand space defined"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
663 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
664 /* ns_expand_space = 0.0 is use standard height; less shrink, more expand */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
665 expand = XFLOATINT (ns_expand_space) + 0.5; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
666 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
667 if (expand < 0.0) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
668 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
669 shrink = 1 + expand; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
670 hshrink = 1 + expand / 2.0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
671 expand = 0.0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
672 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
673 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
674 shrink = hshrink = 1.0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
675 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
676 font_info->underpos = 2; /*[sfont underlinePosition] is often clipped out */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
677 font_info->underwidth = [sfont underlineThickness]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
678 font_info->size = font->pixel_size; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
679 font_info->voffset = lrint (hshrink * [sfont ascender] + expand * hd / 2); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
680 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
681 /* max bounds */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
682 font_info->max_bounds.ascent = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
683 lrint (hshrink * [sfont ascender] + expand * hd/2); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
684 font_info->max_bounds.descent = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
685 -lrint (hshrink* [sfont descender] - expand*hd/2); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
686 font_info->height = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
687 font_info->max_bounds.ascent + font_info->max_bounds.descent; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
688 font_info->max_bounds.width = lrint (font_info->width); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
689 font_info->max_bounds.lbearing = lrint (brect.origin.x); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
690 font_info->max_bounds.rbearing = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
691 lrint (brect.size.width - font_info->width); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
692 /*font_info->width + (font_info->ital ? 0.2 * font_info->height : 0); */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
693 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
694 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
695 /* set up synthItal and the CG font */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
696 font_info->synthItal = synthItal; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
697 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
698 ATSFontRef atsFont = ATSFontFindFromPostScriptName |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
699 ((CFStringRef)[nsfont fontName], kATSOptionFlagsDefault); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
700 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
701 if (atsFont == kATSFontRefUnspecified) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
702 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
703 /* see if we can get it by dropping italic (then synthesizing) */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
704 atsFont = ATSFontFindFromPostScriptName ((CFStringRef) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
705 [[fontMgr convertFont: nsfont toNotHaveTrait: NSItalicFontMask] |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
706 fontName], kATSOptionFlagsDefault); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
707 if (atsFont != kATSFontRefUnspecified) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
708 font_info->synthItal = YES; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
709 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
710 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
711 /* last resort fallback */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
712 atsFont = ATSFontFindFromPostScriptName |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
713 ((CFStringRef)@"Monaco", kATSOptionFlagsDefault); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
714 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
715 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
716 font_info->cgfont = CGFontCreateWithPlatformFont ((void*)&atsFont); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
717 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
718 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
719 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
720 /* set up metrics portion of font struct */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
721 font->ascent = [sfont ascender]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
722 font->descent = -[sfont descender]; |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
723 font->min_width = [sfont widthOfString: @"|"]; /* FIXME */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
724 font->space_width = lrint (nsfont_char_width (sfont, ' ')); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
725 font->average_width = lrint (font_info->width); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
726 font->max_width = lrint (font_info->max_bounds.width); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
727 font->height = lrint (font_info->height); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
728 font->underline_position = lrint (font_info->underpos); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
729 font->underline_thickness = lrint (font_info->underwidth); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
730 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
731 font->props[FONT_NAME_INDEX] = Ffont_xlfd_name (font_object, Qnil); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
732 font->props[FONT_FULLNAME_INDEX] = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
733 make_unibyte_string (font_info->name, strlen (font_info->name)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
734 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
735 UNBLOCK_INPUT; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
736 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
737 return font_object; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
738 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
739 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
740 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
741 /* Close FONT on frame F. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
742 static void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
743 nsfont_close (FRAME_PTR f, struct font *font) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
744 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
745 struct nsfont_info *font_info = (struct nsfont_info *)font; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
746 int i; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
747 |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
748 /* FIXME: this occurs apparently due to same failure to detect same font |
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
749 that causes need for cache in nsfont_open () |
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
750 (came after unicode-2 -> trunk) */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
751 if (!font_info) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
752 return; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
753 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
754 for (i =0; i<0x100; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
755 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
756 if (font_info->glyphs[i]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
757 xfree (font_info->glyphs[i]); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
758 if (font_info->metrics[i]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
759 xfree (font_info->metrics[i]); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
760 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
761 [font_info->nsfont release]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
762 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
763 CGFontRelease (font_info->cgfont); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
764 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
765 xfree (font_info->name); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
766 xfree (font_info); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
767 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
768 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
769 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
770 /* If FONT_ENTITY has a glyph for character C (Unicode code point), |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
771 return 1. If not, return 0. If a font must be opened to check |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
772 it, return -1. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
773 static int |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
774 nsfont_has_char (Lisp_Object entity, int c) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
775 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
776 return -1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
777 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
778 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
779 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
780 /* Return a glyph code of FONT for character C (Unicode code point). |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
781 If FONT doesn't have such a glyph, return FONT_INVALID_CODE. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
782 static unsigned int |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
783 nsfont_encode_char (struct font *font, int c) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
784 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
785 struct nsfont_info *font_info = (struct nsfont_info *)font; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
786 unsigned char high = (c & 0xff00) >> 8, low = c & 0x00ff; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
787 unsigned short g; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
788 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
789 if (c > 0xFFFF) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
790 return FONT_INVALID_CODE; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
791 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
792 /* did we already cache this block? */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
793 if (!font_info->glyphs[high]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
794 ns_uni_to_glyphs (font_info, high); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
795 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
796 g = font_info->glyphs[high][low]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
797 /*fprintf (stderr, "mapping char %d -> %d\n", c, g); */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
798 return g == 0xFFFF ? FONT_INVALID_CODE : g; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
799 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
800 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
801 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
802 /* Perform the size computation of glyphs of FONT and fill in members |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
803 of METRICS. The glyphs are specified by their glyph codes in |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
804 CODE (length NGLYPHS). */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
805 static int |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
806 nsfont_text_extents (struct font *font, unsigned int *code, int nglyphs, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
807 struct font_metrics *metrics) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
808 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
809 struct nsfont_info *font_info = (struct nsfont_info *)font; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
810 struct font_metrics *pcm; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
811 unsigned char high, low; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
812 int totalWidth = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
813 int i; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
814 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
815 bzero (metrics, sizeof (struct font_metrics)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
816 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
817 for (i =0; i<nglyphs; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
818 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
819 /* get metrics for this glyph, filling cache if need be */ |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
820 /* TODO: get metrics for whole string from an NSLayoutManager |
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
821 (if not too slow) */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
822 high = (code[i] & 0xFF00) >> 8; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
823 low = code[i] & 0x00FF; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
824 if (!font_info->metrics[high]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
825 ns_glyph_metrics (font_info, high); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
826 pcm = &(font_info->metrics[high][low]); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
827 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
828 if (metrics->lbearing > totalWidth + pcm->lbearing) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
829 metrics->lbearing = totalWidth + pcm->lbearing; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
830 if (metrics->rbearing < totalWidth + pcm->rbearing) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
831 metrics->rbearing = totalWidth + pcm->rbearing; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
832 if (metrics->ascent < pcm->ascent) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
833 metrics->ascent = pcm->ascent; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
834 if (metrics->descent < pcm->descent) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
835 metrics->descent = pcm->descent; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
836 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
837 totalWidth += pcm->width; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
838 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
839 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
840 metrics->width = totalWidth; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
841 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
842 return totalWidth; /* not specified in doc, but xfont.c does it */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
843 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
844 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
845 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
846 /* Draw glyphs between FROM and TO of S->char2b at (X Y) pixel |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
847 position of frame F with S->FACE and S->GC. If WITH_BACKGROUND |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
848 is nonzero, fill the background in advance. It is assured that |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
849 WITH_BACKGROUND is zero when (FROM > 0 || TO < S->nchars). */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
850 static int |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
851 nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
852 int with_background) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
853 /* NOTE: focus and clip must be set |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
854 also, currently assumed (true in nsterm.m call) from ==0, to ==nchars */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
855 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
856 static char cbuf[1024]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
857 char *c = cbuf; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
858 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
859 static float advances[1024]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
860 float *adv = advances; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
861 #else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
862 static CGSize advances[1024]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
863 CGSize *adv = advances; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
864 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
865 struct face *face; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
866 NSRect r; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
867 struct nsfont_info *font = ns_tmp_font; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
868 NSColor *col, *bgCol; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
869 unsigned short *t = s->char2b; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
870 int i, len; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
871 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
872 /* Select face based on input flags */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
873 switch (ns_tmp_flags) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
874 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
875 case NS_DUMPGLYPH_CURSOR: |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
876 face = s->face; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
877 break; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
878 case NS_DUMPGLYPH_MOUSEFACE: |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
879 face = FACE_FROM_ID (s->f, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
880 FRAME_NS_DISPLAY_INFO (s->f)->mouse_face_face_id); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
881 if (!face) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
882 face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
883 break; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
884 default: |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
885 face = s->face; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
886 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
887 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
888 r.origin.x = s->x; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
889 if (s->face->box != FACE_NO_BOX && s->first_glyph->left_box_line_p) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
890 r.origin.x += abs (s->face->box_line_width); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
891 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
892 r.origin.y = s->y; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
893 r.size.height = FONT_HEIGHT (font); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
894 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
895 /* Convert UTF-16 (?) to UTF-8 and determine advances. Note if we just ask |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
896 NS to render the string, it will come out differently from the individual |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
897 character widths added up because of layout processing. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
898 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
899 XCharStruct *cs; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
900 int cwidth, twidth = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
901 int hi, lo; |
98371
713cc05ca791
* nsfont.m (nsfont_draw): Fix up composition rendering.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98073
diff
changeset
|
902 char isComposite = s->first_glyph->type == COMPOSITE_GLYPH; |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
903 /* FIXME: composition: no vertical displacement is considered. */ |
98371
713cc05ca791
* nsfont.m (nsfont_draw): Fix up composition rendering.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98073
diff
changeset
|
904 t += s->cmp_from; /* advance into composition */ |
713cc05ca791
* nsfont.m (nsfont_draw): Fix up composition rendering.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98073
diff
changeset
|
905 for (i = s->cmp_from; i < s->nchars; i++, t++) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
906 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
907 hi = (*t & 0xFF00) >> 8; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
908 lo = *t & 0x00FF; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
909 if (isComposite) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
910 { |
98371
713cc05ca791
* nsfont.m (nsfont_draw): Fix up composition rendering.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98073
diff
changeset
|
911 cwidth = s->cmp->offsets[i * 2] /* (H offset) */ - twidth; |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
912 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
913 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
914 { |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
915 if (!font->metrics[hi]) /* FIXME: why/how can we need this now? */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
916 ns_glyph_metrics (font, hi); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
917 cwidth = font->metrics[hi][lo].width; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
918 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
919 twidth += cwidth; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
920 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
921 *adv++ = cwidth; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
922 CHAR_STRING_ADVANCE (*t, c); /* this converts the char to UTF-8 */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
923 #else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
924 (*adv++).width = cwidth; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
925 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
926 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
927 len = adv - advances; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
928 r.size.width = twidth; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
929 *c = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
930 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
931 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
932 /* fill background if requested */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
933 if (with_background) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
934 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
935 NSRect br = r; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
936 int fibw = FRAME_INTERNAL_BORDER_WIDTH (s->f); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
937 int mbox_line_width = max (s->face->box_line_width, 0); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
938 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
939 if (s->row->full_width_p) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
940 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
941 if (br.origin.x <= fibw + 1 + mbox_line_width) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
942 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
943 br.size.width += br.origin.x - mbox_line_width; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
944 br.origin.x = mbox_line_width; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
945 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
946 if (FRAME_PIXEL_WIDTH (s->f) - (br.origin.x + br.size.width) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
947 <= fibw+1) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
948 br.size.width += fibw; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
949 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
950 if (s->face->box == FACE_NO_BOX) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
951 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
952 /* expand unboxed top row over internal border */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
953 if (br.origin.y <= fibw + 1 + mbox_line_width) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
954 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
955 br.size.height += br.origin.y; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
956 br.origin.y = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
957 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
958 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
959 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
960 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
961 int correction = abs (s->face->box_line_width)+1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
962 br.origin.y += correction; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
963 br.size.height -= 2*correction; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
964 br.origin.x += correction; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
965 br.size.width -= 2*correction; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
966 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
967 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
968 if (!s->face->stipple) |
96812
eb46d3216494
apply fix from Chong Yidong to NS port ns_set_background_color(), and clean up comparison use of result from NS_FACE_BACKGROUND
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96759
diff
changeset
|
969 [(NS_FACE_BACKGROUND (face) != 0 |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
970 ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
971 : FRAME_BACKGROUND_COLOR (s->f)) set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
972 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
973 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
974 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (s->f); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
975 [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
976 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
977 NSRectFill (br); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
978 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
979 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
980 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
981 /* set up for character rendering */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
982 r.origin.y += font->voffset + (s->height - font->height)/2; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
983 |
97198
cf43f4e3ecc8
clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96892
diff
changeset
|
984 col = (NS_FACE_FOREGROUND (face) != 0 |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
985 ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
986 : FRAME_FOREGROUND_COLOR (s->f)); |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
987 /* FIXME: find another way to pass this */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
988 bgCol = (ns_tmp_flags != NS_DUMPGLYPH_FOREGROUND ? nil |
96812
eb46d3216494
apply fix from Chong Yidong to NS port ns_set_background_color(), and clean up comparison use of result from NS_FACE_BACKGROUND
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96759
diff
changeset
|
989 : (NS_FACE_BACKGROUND (face) != 0 |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
990 ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
991 : FRAME_BACKGROUND_COLOR (s->f))); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
992 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
993 /* render under GNUstep using DPS */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
994 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
995 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
996 NSGraphicsContext *context = GSCurrentContext (); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
997 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
998 DPSgsave (context); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
999 [font->nsfont set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1000 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1001 /* do erase if "foreground" mode */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1002 if (bgCol != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1003 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1004 [bgCol set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1005 DPSmoveto (context, r.origin.x, r.origin.y); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1006 /*[context GSSetTextDrawingMode: GSTextFillStroke]; /// not implemented yet */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1007 DPSxshow (context, cbuf, advances, len); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1008 DPSstroke (context); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1009 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1010 /*[context GSSetTextDrawingMode: GSTextFill]; /// not implemented yet */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1011 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1012 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1013 /* do underline */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1014 if (face->underline_p) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1015 { |
97584
06f7d5858c5a
* nsfns.m (ns-read-file-name): Add casts to avoid warning. (ns-convert-utf8-nfd-to-nfc): Warn if cannot execute correctly. * nsfont.m (nsfont_draw): Compare indexed colors to 0, not nil. * nsterm.h (EmacsView-unlockFocusNeedsFlush:): Add declaration. (EmacsApp-cursor_blink_handler): Remove declaration. * nsterm.m (ns_draw_glyph_string): Update first conditional body to match 01 Feb 2008 changes in xterm.c. (ns_read_socket): Add cast to avoid warning. (EmacsApp-application:openFiles:): Don't call replyToOpenOrPrint: on GNUstep.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
97198
diff
changeset
|
1016 if (face->underline_color != 0) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1017 [ns_lookup_indexed_color (face->underline_color, s->f) set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1018 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1019 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1020 DPSmoveto (context, r.origin.x, r.origin.y + font->underpos); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1021 DPSlineto (context, r.origin.x+r.size.width, r.origin.y+font->underpos); |
97584
06f7d5858c5a
* nsfns.m (ns-read-file-name): Add casts to avoid warning. (ns-convert-utf8-nfd-to-nfc): Warn if cannot execute correctly. * nsfont.m (nsfont_draw): Compare indexed colors to 0, not nil. * nsterm.h (EmacsView-unlockFocusNeedsFlush:): Add declaration. (EmacsApp-cursor_blink_handler): Remove declaration. * nsterm.m (ns_draw_glyph_string): Update first conditional body to match 01 Feb 2008 changes in xterm.c. (ns_read_socket): Add cast to avoid warning. (EmacsApp-application:openFiles:): Don't call replyToOpenOrPrint: on GNUstep.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
97198
diff
changeset
|
1022 if (face->underline_color != 0) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1023 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1024 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1025 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1026 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1027 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1028 /* draw with DPSxshow () */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1029 DPSmoveto (context, r.origin.x, r.origin.y); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1030 DPSxshow (context, cbuf, advances, len); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1031 DPSstroke (context); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1032 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1033 DPSgrestore (context); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1034 return to-from; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1035 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1036 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1037 #else /* NS_IMPL_COCOA */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1038 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1039 CGContextRef gcontext = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1040 [[NSGraphicsContext currentContext] graphicsPort]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1041 static CGAffineTransform fliptf; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1042 static BOOL firstTime = YES; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1043 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1044 if (firstTime) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1045 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1046 firstTime = NO; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1047 fliptf = CGAffineTransformMakeScale (1.0, -1.0); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1048 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1049 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1050 CGContextSaveGState (gcontext); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1051 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1052 fliptf.c = font->synthItal ? Fix2X (kATSItalicQDSkew) : 0.0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1053 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1054 CGContextSetFont (gcontext, font->cgfont); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1055 CGContextSetFontSize (gcontext, font->size); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1056 if (ns_antialias_text == NO || font->size <= ns_antialias_threshold) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1057 CGContextSetShouldAntialias (gcontext, 0); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1058 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1059 CGContextSetShouldAntialias (gcontext, 1); |
96817
6b7bbb1d9eb1
fix bug with quickdraw smoothing; also, in Makefile, clean out ns_appdir in 'clean' target
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96813
diff
changeset
|
1060 if (EQ (ns_use_qd_smoothing, Qt)) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1061 CGContextSetFontRenderingMode (gcontext, 2); /* 0 is Cocoa, 2 is QD */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1062 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1063 CGContextSetTextMatrix (gcontext, fliptf); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1064 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1065 if (bgCol != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1066 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1067 /* foreground drawing; erase first to avoid overstrike */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1068 [bgCol set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1069 CGContextSetTextDrawingMode (gcontext, kCGTextFillStroke); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1070 CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1071 CGContextShowGlyphsWithAdvances (gcontext, s->char2b, advances, len); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1072 CGContextSetTextDrawingMode (gcontext, kCGTextFill); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1073 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1074 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1075 if (face->underline_p) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1076 { |
97198
cf43f4e3ecc8
clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96892
diff
changeset
|
1077 if (face->underline_color != 0) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1078 [ns_lookup_indexed_color (face->underline_color, s->f) set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1079 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1080 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1081 CGContextBeginPath (gcontext); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1082 CGContextMoveToPoint (gcontext, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1083 r.origin.x, r.origin.y + font->underpos); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1084 CGContextAddLineToPoint (gcontext, r.origin.x + r.size.width, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1085 r.origin.y + font->underpos); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1086 CGContextStrokePath (gcontext); |
97198
cf43f4e3ecc8
clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96892
diff
changeset
|
1087 if (face->underline_color != 0) |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1088 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1089 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1090 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1091 [col set]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1092 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1093 CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y); |
98073
e77a63e6f983
* nsfont.m (nsfont_draw): Fix the references to missing gidx data
Teodor Zlatanov <tzz@lifelogs.com>
parents:
97584
diff
changeset
|
1094 CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1095 advances, len); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1096 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1097 if (face->overstrike) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1098 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1099 CGContextSetTextPosition (gcontext, r.origin.x+0.5, r.origin.y); |
98073
e77a63e6f983
* nsfont.m (nsfont_draw): Fix the references to missing gidx data
Teodor Zlatanov <tzz@lifelogs.com>
parents:
97584
diff
changeset
|
1100 CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1101 advances, len); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1102 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1103 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1104 CGContextRestoreGState (gcontext); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1105 return; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1106 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1107 #endif /* NS_IMPL_COCOA */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1108 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1109 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1110 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1111 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1112 /* Auto-creates a fontset built around the font in font_object, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1113 by creating an attributed string with characters from each |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1114 script, then requesting the NS text system to fix attributes |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1115 in range. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1116 void nsfont_make_fontset_for_font (Lisp_Object name, Lisp_Object font_object) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1117 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1118 Lisp_Object script, famAndReg; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1119 struct nsfont_info *font_info = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1120 (struct nsfont_info *)XFONT_OBJECT (font_object); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1121 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1122 /* NS text system (and char buf) init */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1123 static NSTextStorage *store; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1124 static NSLayoutManager *layout; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1125 static NSRange range; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1126 static NSMutableDictionary *attribs; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1127 static Lisp_Object *scripts; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1128 static int nscripts; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1129 static int *scriptsNchars; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1130 static BOOL firstTime = YES; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1131 Lisp_Object regString = build_string ("iso10646-1"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1132 int i, j; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1133 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1134 if (firstTime == YES) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1135 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1136 nscripts = XINT (Flength (Vscript_representative_chars)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1137 scriptsNchars = (int *) malloc (nscripts * sizeof (int)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1138 unsigned char *buf = malloc (4*nscripts*sizeof (char)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1139 Lisp_Object scriptsChars = Vscript_representative_chars; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1140 unsigned char *tpos = buf; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1141 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1142 scripts = (Lisp_Object *) malloc (nscripts * sizeof (Lisp_Object)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1143 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1144 for (i =0; i<nscripts; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1145 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1146 Lisp_Object sChars = XCAR (scriptsChars); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1147 Lisp_Object chars = XCDR (sChars); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1148 unsigned int ch, c =0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1149 scripts[i] = XCAR (sChars); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1150 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1151 while (CONSP (chars)) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1152 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1153 ch = XUINT (XCAR (chars)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1154 chars = XCDR (chars); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1155 CHAR_STRING_ADVANCE (ch, tpos); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1156 c++; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1157 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1158 scriptsNchars[i] = c; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1159 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1160 scriptsChars = XCDR (scriptsChars); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1161 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1162 *tpos = '\0'; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1163 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1164 store = [[NSTextStorage alloc] init]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1165 layout = [[NSLayoutManager alloc] init]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1166 [store addLayoutManager: layout]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1167 [layout release]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1168 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1169 [store beginEditing]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1170 [[store mutableString] appendString: |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1171 [NSString stringWithUTF8String: buf]]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1172 [store endEditing]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1173 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1174 free (buf); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1175 range = NSMakeRange (0, [store length]); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1176 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1177 attribs = [[NSMutableDictionary alloc] init]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1178 firstTime = NO; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1179 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1180 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1181 /* set the fonts */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1182 [store beginEditing]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1183 [store removeAttribute: NSFontAttributeName range: range]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1184 [attribs setObject: font_info->nsfont forKey: NSFontAttributeName]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1185 [store addAttributes: attribs range: range]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1186 [store endEditing]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1187 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1188 /* read them out */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1189 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1190 NSMutableDictionary *map = |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1191 [NSMutableDictionary dictionaryWithCapacity: nscripts * 4]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1192 NSEnumerator *fonts; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1193 NSFont *cfont = nil, *tfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1194 NSNumber *n; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1195 int idx = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1196 int max; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1197 for (i =0; i<nscripts; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1198 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1199 [map removeAllObjects]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1200 for (j =0; j<scriptsNchars[i]; j++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1201 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1202 cfont = [store attribute: NSFontAttributeName atIndex: idx++ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1203 effectiveRange: NULL]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1204 n = [map objectForKey: cfont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1205 if (n == nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1206 n = [NSNumber numberWithInt: 1]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1207 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1208 n = [NSNumber numberWithInt: [n intValue] + 1]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1209 [map setObject: n forKey: cfont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1210 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1211 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1212 /* majority rules */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1213 max = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1214 fonts = [map keyEnumerator]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1215 while (tfont = [fonts nextObject]) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1216 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1217 n = [map objectForKey: tfont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1218 if ([n intValue] > max) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1219 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1220 cfont = tfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1221 max = [n intValue]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1222 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1223 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1224 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1225 if (cfont != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1226 { |
96813
ece3c792fb2e
nsfont.m: duplicate UTF8Strings before modifying with nsfont_escape_family_name - patch due to Seiji Zenitani
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96812
diff
changeset
|
1227 char *family = strdup([[cfont familyName] UTF8String]); |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1228 Lisp_Object famAndReg; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1229 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1230 nsfont_escape_name (family); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1231 famAndReg = Fcons (build_string (family), regString); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1232 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1233 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1234 fprintf (stderr, "%s fontset: use '%s' for script '%s'\n", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1235 font_info->name, family, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1236 SDATA (SYMBOL_NAME (scripts[i]))); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1237 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1238 Fset_fontset_font (name, scripts[i], famAndReg, Qnil, Qnil); |
96813
ece3c792fb2e
nsfont.m: duplicate UTF8Strings before modifying with nsfont_escape_family_name - patch due to Seiji Zenitani
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96812
diff
changeset
|
1239 free (family); |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1240 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1241 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1242 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1243 fprintf (stderr, "%s fontset: none found for script '%s'\n", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1244 font_info->name, SDATA (SYMBOL_NAME (scripts[i]))); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1245 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1246 } /* for i = script */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1247 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1248 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1249 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1250 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1251 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1252 /* ========================================================================== |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1253 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1254 Font glyph and metrics caching functions |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1255 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1256 ========================================================================== */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1257 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1258 /* Find and cache corresponding glyph codes for unicode values in given |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1259 hi-byte block of 256. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1260 static void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1261 ns_uni_to_glyphs (struct nsfont_info *font_info, unsigned char block) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1262 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1263 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1264 static EmacsGlyphStorage *glyphStorage; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1265 static char firstTime = 1; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1266 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1267 unichar *unichars = xmalloc (0x101 * sizeof (unichar)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1268 unsigned int i, g, idx; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1269 unsigned short *glyphs; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1270 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1271 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1272 fprintf (stderr, "%p\tFinding glyphs for glyphs in block %d\n", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1273 font_info, block); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1274 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1275 BLOCK_INPUT; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1276 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1277 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1278 if (firstTime) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1279 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1280 firstTime = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1281 glyphStorage = [[EmacsGlyphStorage alloc] initWithCapacity: 0x100]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1282 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1283 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1284 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1285 font_info->glyphs[block] = xmalloc (0x100 * sizeof (unsigned short)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1286 if (!unichars || !(font_info->glyphs[block])) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1287 abort (); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1288 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1289 /* create a string containing all unicode characters in this block */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1290 for (idx = block<<8, i =0; i<0x100; idx++, i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1291 if (idx < 0xD800 || idx > 0xDFFF) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1292 unichars[i] = idx; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1293 else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1294 unichars[i] = 0xFEFF; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1295 unichars[0x100] = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1296 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1297 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1298 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1299 NSString *allChars = [[NSString alloc] |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1300 initWithCharactersNoCopy: unichars |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1301 length: 0x100 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1302 freeWhenDone: NO]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1303 NSGlyphGenerator *glyphGenerator = [NSGlyphGenerator sharedGlyphGenerator]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1304 /*NSCharacterSet *coveredChars = [nsfont coveredCharacterSet]; */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1305 unsigned int numGlyphs = [font_info->nsfont numberOfGlyphs]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1306 unsigned int gInd =0, cInd =0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1307 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1308 [glyphStorage setString: allChars font: font_info->nsfont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1309 [glyphGenerator generateGlyphsForGlyphStorage: glyphStorage |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1310 desiredNumberOfCharacters: glyphStorage->maxChar |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1311 glyphIndex: &gInd characterIndex: &cInd]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1312 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1313 glyphs = font_info->glyphs[block]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1314 for (i =0; i<0x100; i++, glyphs++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1315 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1316 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1317 g = unichars[i]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1318 #else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1319 g = glyphStorage->cglyphs[i]; |
96892
4aec559b9f05
NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96817
diff
changeset
|
1320 /* TODO: is this a good check? maybe need to use coveredChars.. */ |
96676
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1321 if (g > numGlyphs) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1322 g = 0xFFFF; /* hopefully unused... */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1323 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1324 *glyphs = g; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1325 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1326 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1327 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1328 [allChars release]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1329 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1330 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1331 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1332 UNBLOCK_INPUT; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1333 xfree (unichars); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1334 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1335 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1336 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1337 /* Determine and cache metrics for corresponding glyph codes in given |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1338 hi-byte block of 256. */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1339 static void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1340 ns_glyph_metrics (struct nsfont_info *font_info, unsigned char block) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1341 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1342 unsigned int i, g; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1343 unsigned int numGlyphs = [font_info->nsfont numberOfGlyphs]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1344 NSFont *sfont; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1345 struct font_metrics *metrics; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1346 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1347 if (NSFONT_TRACE) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1348 fprintf (stderr, "%p\tComputing metrics for glyphs in block %d\n", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1349 font_info, block); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1350 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1351 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1352 /* not implemented yet (as of startup 0.18), so punt */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1353 if (numGlyphs == 0) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1354 numGlyphs = 0x10000; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1355 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1356 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1357 BLOCK_INPUT; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1358 sfont = [font_info->nsfont screenFont]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1359 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1360 font_info->metrics[block] = xmalloc (0x100 * sizeof (struct font_metrics)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1361 bzero (font_info->metrics[block], 0x100 * sizeof (struct font_metrics)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1362 if (!(font_info->metrics[block])) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1363 abort (); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1364 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1365 metrics = font_info->metrics[block]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1366 for (g = block<<8, i =0; i<0x100 && g < numGlyphs; g++, i++, metrics++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1367 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1368 float w, lb, rb; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1369 NSRect r = [sfont boundingRectForGlyph: g]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1370 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1371 #ifdef NS_IMPL_GNUSTEP |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1372 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1373 /* lord help us */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1374 NSString *s = [NSString stringWithFormat: @"%c", g]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1375 w = [sfont widthOfString: s]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1376 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1377 #else |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1378 w = [sfont advancementForGlyph: g].width; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1379 #endif |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1380 w = max (w, 2.0); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1381 metrics->width = lrint (w); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1382 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1383 lb = r.origin.x; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1384 rb = r.size.width - w; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1385 if (lb < 0) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1386 metrics->lbearing = round (lb); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1387 if (font_info->ital) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1388 rb += 0.22 * font_info->height; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1389 metrics->rbearing = lrint (w + rb); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1390 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1391 metrics->descent = r.origin.y < 0 ? -r.origin.y : 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1392 /*lrint (hshrink * [sfont ascender] + expand * hd/2); */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1393 metrics->ascent = r.size.height - metrics->descent; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1394 /*-lrint (hshrink* [sfont descender] - expand * hd/2); */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1395 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1396 UNBLOCK_INPUT; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1397 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1398 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1399 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1400 #ifdef NS_IMPL_COCOA |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1401 /* helper for font glyph setup */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1402 @implementation EmacsGlyphStorage |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1403 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1404 - init |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1405 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1406 return [self initWithCapacity: 1024]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1407 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1408 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1409 - initWithCapacity: (unsigned long) c |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1410 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1411 self = [super init]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1412 maxChar = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1413 maxGlyph = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1414 dict = [NSMutableDictionary new]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1415 cglyphs = (CGGlyph *)xmalloc (c * sizeof (CGGlyph)); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1416 return self; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1417 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1418 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1419 - (void) dealloc |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1420 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1421 if (attrStr != nil) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1422 [attrStr release]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1423 [dict release]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1424 xfree (cglyphs); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1425 [super dealloc]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1426 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1427 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1428 - (void) setString: (NSString *)str font: (NSFont *)font |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1429 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1430 [dict setObject: font forKey: NSFontAttributeName]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1431 attrStr = [[NSAttributedString alloc] initWithString: str attributes: dict]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1432 maxChar = [str length]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1433 maxGlyph = 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1434 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1435 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1436 /* NSGlyphStorage protocol */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1437 - (unsigned int)layoutOptions |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1438 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1439 return 0; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1440 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1441 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1442 - (NSAttributedString *)attributedString |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1443 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1444 return attrStr; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1445 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1446 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1447 - (void)insertGlyphs: (const NSGlyph *)glyphs length: (unsigned int)length |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1448 forStartingGlyphAtIndex: (unsigned int)glyphIndex |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1449 characterIndex: (unsigned int)charIndex |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1450 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1451 len = glyphIndex+length; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1452 for (i =glyphIndex; i<len; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1453 cglyphs[i] = glyphs[i-glyphIndex]; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1454 if (len > maxGlyph) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1455 maxGlyph = len; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1456 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1457 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1458 - (void)setIntAttribute: (int)attributeTag value: (int)val |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1459 forGlyphAtIndex: (unsigned)glyphIndex |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1460 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1461 return; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1462 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1463 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1464 @end |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1465 #endif /* NS_IMPL_COCOA */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1466 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1467 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1468 /* Debugging */ |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1469 void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1470 dump_glyphstring (struct glyph_string *s) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1471 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1472 int i; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1473 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1474 fprintf (stderr, "Glyph string len = %d at (%d, %d) overhang (%d, %d), overlap = %d, bg_filled = %d:", |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1475 s->nchars, s->x, s->y, s->left_overhang, s->right_overhang, |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1476 s->row->overlapping_p, s->background_filled_p); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1477 for (i =0; i<s->nchars; i++) |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1478 fprintf (stderr, "%c", s->first_glyph[i].u.ch); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1479 fprintf (stderr, "\n"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1480 } |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1481 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1482 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1483 |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1484 void |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1485 syms_of_nsfont () |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1486 { |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1487 nsfont_driver.type = Qns; |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1488 register_font_driver (&nsfont_driver, NULL); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1489 DEFSYM (Qapple, "apple"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1490 DEFSYM (Qroman, "roman"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1491 DEFSYM (Qmedium, "medium"); |
336d4f3f5eca
adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff
changeset
|
1492 } |
96685 | 1493 |
96689
f34c4d928d39
Use nicer comment syntax for arch taglines in Objective-C files
Miles Bader <miles@gnu.org>
parents:
96685
diff
changeset
|
1494 // arch-tag: d6c3c6f0-62de-4978-8b1e-b7966fe02cae |