annotate src/nsfont.m @ 110956:07776ed6876f

Remove trailing / from directory names. * configure (ns_appdir, OLDXMENU, TOOLTIP_SUPPORT): Remove trailing / from directory names.
author Dan Nicolaescu <dann@ics.uci.edu>
date Tue, 12 Oct 2010 14:03:09 -0700
parents d6fc586a0872
children 4afa0b625189
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105676
diff changeset
3 Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
96676
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. */
108861
ad09f2bfce51 Fix config.h includes.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 107229
diff changeset
25 #include <config.h>
105676
bb413968898a * nsterm.m:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105579
diff changeset
26 #include <setjmp.h>
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
27
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
28 #include "lisp.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
29 #include "dispextern.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
30 #include "composite.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
31 #include "blockinput.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
32 #include "charset.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
33 #include "frame.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
34 #include "window.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
35 #include "fontset.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
36 #include "nsterm.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
37 #include "frame.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
38 #include "character.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
39 #include "font.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
40
105160
8f8d95750940 * nsfont.m (ns_glyph_metrics): Remove GNUstep conditional for
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105156
diff changeset
41 /* TODO: Drop once we can assume gnustep-gui 0.17.1. */
104048
712697e0dfcc * nsfont.m (NSFontDescriptor.h): Explicitly include under GNUstep.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103990
diff changeset
42 #ifdef NS_IMPL_GNUSTEP
712697e0dfcc * nsfont.m (NSFontDescriptor.h): Explicitly include under GNUstep.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103990
diff changeset
43 #import <AppKit/NSFontDescriptor.h>
712697e0dfcc * nsfont.m (NSFontDescriptor.h): Explicitly include under GNUstep.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103990
diff changeset
44 #endif
712697e0dfcc * nsfont.m (NSFontDescriptor.h): Explicitly include under GNUstep.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103990
diff changeset
45
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
46 #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
47
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
48 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
49 extern Lisp_Object Qnormal, Qbold, Qitalic, Qcondensed, Qexpanded;
105156
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
50 static Lisp_Object Vns_reg_to_script;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
51 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
52 extern Lisp_Object Qappend;
107229
0255e27f26c9 * nsfont.m (nsfont_draw): ns_antialias_text should be a Lisp_Object (Bug#4736).
Chong Yidong <cyd@stupidchicken.com>
parents: 107114
diff changeset
53 extern Lisp_Object ns_antialias_text;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
54 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
55 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
56 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
57
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
58 /* 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
59 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
60 unsigned char block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
61 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
62 unsigned char block);
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
67 Utilities
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
68
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
69 ========================================================================== */
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
72 /* 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
73 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
74 static void
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
75 ns_escape_name (char *name)
96676
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 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
78 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
79 if (name[i] == ' ')
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
80 name[i] = '_';
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
83
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
84 /* 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
85 static void
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
86 ns_unescape_name (char *name)
96676
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 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
89 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
90 if (name[i] == '_')
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
91 name[i] = ' ';
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
94
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
95 /* 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
96 static NSString *
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
97 ns_get_family (Lisp_Object font_spec)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
98 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
99 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
100 if (NILP (tem))
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
101 return nil;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
102 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
103 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
104 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
105 NSString *family;
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
106 ns_unescape_name (tmp);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
107 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
108 free (tmp);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
109 return family;
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
113
103422
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
114 /* Return 0 if attr not set, else value (which might also be 0).
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
115 On Leopard 0 gets returned even on descriptors where the attribute
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
116 was never set, so there's no way to distinguish between unspecified
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
117 and set to not have. Callers should assume 0 means unspecified. */
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
118 static float
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
119 ns_attribute_fvalue (NSFontDescriptor *fdesc, NSString *trait)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
120 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
121 NSDictionary *tdict = [fdesc objectForKey: NSFontTraitsAttribute];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
122 NSNumber *val = [tdict objectForKey: trait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
123 return val == nil ? 0.0 : [val floatValue];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
124 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
125
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
126
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
127 /* Converts FONT_WEIGHT, FONT_SLANT, FONT_WIDTH, plus family and script/lang
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
128 to NSFont descriptor. Information under extra only needed for matching. */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
129 #define STYLE_REF 100
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
130 static NSFontDescriptor
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
131 *ns_spec_to_descriptor(Lisp_Object font_spec)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
132 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
133 NSFontDescriptor *fdesc;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
134 NSMutableDictionary *fdAttrs = [NSMutableDictionary new];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
135 NSMutableDictionary *tdict = [NSMutableDictionary new];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
136 NSString *family = ns_get_family (font_spec);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
137 float n;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
138
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
139 /* add each attr in font_spec to fdAttrs.. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
140 n = min (FONT_WEIGHT_NUMERIC (font_spec), 200);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
141 if (n != -1 && n != STYLE_REF)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
142 [tdict setObject: [NSNumber numberWithFloat: (n - 100.0) / 100.0]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
143 forKey: NSFontWeightTrait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
144 n = min (FONT_SLANT_NUMERIC (font_spec), 200);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
145 if (n != -1 && n != STYLE_REF)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
146 [tdict setObject: [NSNumber numberWithFloat: (n - 100.0) / 100.0]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
147 forKey: NSFontSlantTrait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
148 n = min (FONT_WIDTH_NUMERIC (font_spec), 200);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
149 if (n > -1 && (n > STYLE_REF + 10 || n < STYLE_REF - 10))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
150 [tdict setObject: [NSNumber numberWithFloat: (n - 100.0) / 100.0]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
151 forKey: NSFontWidthTrait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
152 if ([tdict count] > 0)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
153 [fdAttrs setObject: tdict forKey: NSFontTraitsAttribute];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
154
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
155 fdesc = [NSFontDescriptor fontDescriptorWithFontAttributes: fdAttrs];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
156 if (family != nil)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
157 fdesc = [fdesc fontDescriptorWithFamily: family];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
158 return fdesc;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
159 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
160
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
161
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
162 /* Converts NSFont descriptor to FONT_WEIGHT, FONT_SLANT, FONT_WIDTH, etc.. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
163 static Lisp_Object
109746
d6fc586a0872 Use const char* for -Wwrite_strings.
Jan D <jan.h.d@swipnet.se>
parents: 109653
diff changeset
164 ns_descriptor_to_entity (NSFontDescriptor *desc,
d6fc586a0872 Use const char* for -Wwrite_strings.
Jan D <jan.h.d@swipnet.se>
parents: 109653
diff changeset
165 Lisp_Object extra,
d6fc586a0872 Use const char* for -Wwrite_strings.
Jan D <jan.h.d@swipnet.se>
parents: 109653
diff changeset
166 const char *style)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
167 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
168 Lisp_Object font_entity = font_make_entity ();
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
169 /* NSString *psName = [desc postscriptName]; */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
170 NSString *family = [desc objectForKey: NSFontFamilyAttribute];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
171 unsigned int traits = [desc symbolicTraits];
104123
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
172 char *escapedFamily;
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
173
104123
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
174 /* Shouldn't happen, but on Tiger fallback desc gets name but no family. */
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
175 if (family == nil)
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
176 family = [desc objectForKey: NSFontNameAttribute];
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
177 if (family == nil)
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
178 family = [[NSFont userFixedPitchFontOfSize: 0] familyName];
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
179
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
180 escapedFamily = strdup ([family UTF8String]);
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
181 ns_escape_name (escapedFamily);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
182
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
183 ASET (font_entity, FONT_TYPE_INDEX, Qns);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
184 ASET (font_entity, FONT_FOUNDRY_INDEX, Qapple);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
185 ASET (font_entity, FONT_FAMILY_INDEX, intern (escapedFamily));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
186 ASET (font_entity, FONT_ADSTYLE_INDEX, style ? intern (style) : Qnil);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
187 ASET (font_entity, FONT_REGISTRY_INDEX, Qiso10646_1);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
188
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
189 FONT_SET_STYLE (font_entity, FONT_WEIGHT_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
190 traits & NSFontBoldTrait ? Qbold : Qmedium);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
191 /* FONT_SET_STYLE (font_entity, FONT_WEIGHT_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
192 make_number (100 + 100
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
193 * ns_attribute_fvalue (desc, NSFontWeightTrait)));*/
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
194 FONT_SET_STYLE (font_entity, FONT_SLANT_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
195 traits & NSFontItalicTrait ? Qitalic : Qnormal);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
196 /* FONT_SET_STYLE (font_entity, FONT_SLANT_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
197 make_number (100 + 100
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
198 * ns_attribute_fvalue (desc, NSFontSlantTrait)));*/
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
199 FONT_SET_STYLE (font_entity, FONT_WIDTH_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
200 traits & NSFontCondensedTrait ? Qcondensed :
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
201 traits & NSFontExpandedTrait ? Qexpanded : Qnormal);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
202 /* FONT_SET_STYLE (font_entity, FONT_WIDTH_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
203 make_number (100 + 100
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
204 * ns_attribute_fvalue (desc, NSFontWidthTrait)));*/
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
205
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
206 ASET (font_entity, FONT_SIZE_INDEX, make_number (0));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
207 ASET (font_entity, FONT_AVGWIDTH_INDEX, make_number (0));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
208 ASET (font_entity, FONT_SPACING_INDEX,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
209 make_number([desc symbolicTraits] & NSFontMonoSpaceTrait
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
210 ? FONT_SPACING_MONO : FONT_SPACING_PROPORTIONAL));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
211
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
212 ASET (font_entity, FONT_EXTRA_INDEX, extra);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
213 ASET (font_entity, FONT_OBJLIST_INDEX, Qnil);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
214
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
215 if (NSFONT_TRACE)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
216 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
217 fprintf (stderr, "created font_entity:\n ");
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
218 debug_print (font_entity);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
219 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
220
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
221 free (escapedFamily);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
222 return font_entity;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
223 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
224
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
225
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
226 /* Default font entity. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
227 static Lisp_Object
109653
9cfca8c9fb07 Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents: 109165
diff changeset
228 ns_fallback_entity (void)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
229 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
230 return ns_descriptor_to_entity ([[NSFont userFixedPitchFontOfSize: 0]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
231 fontDescriptor], Qnil, NULL);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
232 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
233
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
234
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
235 /* Utility: get width of a char c in screen font sfont */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
236 static float
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
237 ns_char_width (NSFont *sfont, int c)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
238 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
239 float w;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
240 NSString *cstr = [NSString stringWithFormat: @"%c", c];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
241 #ifdef NS_IMPL_COCOA
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
242 NSGlyph glyph = [sfont glyphWithName: cstr];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
243 if (glyph)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
244 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
245 float w = [sfont advancementForGlyph: glyph].width;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
246 if (w >= 1.5)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
247 return w;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
248 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
249 #endif
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
250 {
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
251 NSDictionary *attrsDictionary =
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
252 [NSDictionary dictionaryWithObject: sfont forKey: NSFontAttributeName];
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
253 w = [cstr sizeWithAttributes: attrsDictionary].width;
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
254 }
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
255 return max (w, 2.0);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
256 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
257
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
258
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
259 /* Return whether set1 covers set2 to a reasonable extent given by pct.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
260 We check, out of each 16 unicode char range containing chars in set2,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
261 whether at least one character is present in set1.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
262 This must be true for pct of the pairs to consider it covering. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
263 static BOOL
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
264 ns_charset_covers(NSCharacterSet *set1, NSCharacterSet *set2, float pct)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
265 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
266 const unsigned short *bytes1 = [[set1 bitmapRepresentation] bytes];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
267 const unsigned short *bytes2 = [[set2 bitmapRepresentation] bytes];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
268 int i, off = 0, tot = 0;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
269
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
270 for (i=0; i<4096; i++, bytes1++, bytes2++)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
271 if (*bytes2)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
272 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
273 tot++;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
274 if (*bytes1 == 0) // *bytes1 & *bytes2 != *bytes2
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
275 off++;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
276 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
277 //fprintf(stderr, "off = %d\ttot = %d\n", off,tot);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
278 return (float)off / tot < 1.0 - pct;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
279 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
280
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
281
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
282 /* Convert :lang property to a script. Use of :lang property by font backend
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
283 seems to be limited for now (2009/05) to ja, zh, and ko. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
284 static NSString
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
285 *ns_lang_to_script (Lisp_Object lang)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
286 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
287 if (!strcmp (SDATA (SYMBOL_NAME (lang)), "ja"))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
288 return @"han";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
289 /* NOTE: ja given for any hanzi that's also a kanji, but Chinese fonts
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
290 have more characters. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
291 else if (!strcmp (SDATA (SYMBOL_NAME (lang)), "zh"))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
292 return @"han";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
293 else if (!strcmp (SDATA (SYMBOL_NAME (lang)), "ko"))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
294 return @"hangul";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
295 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
296 return @"";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
297 }
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
298
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
299
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
300 /* Convert OTF 4-letter script code to emacs script name. (Why can't
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
301 everyone just use some standard unicode names for these?) */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
302 static NSString
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
303 *ns_otf_to_script (Lisp_Object otf)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
304 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
305 Lisp_Object script = assq_no_quit (XCAR (otf), Votf_script_alist);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
306 return CONSP (script)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
307 ? [NSString stringWithUTF8String: SDATA (SYMBOL_NAME XCDR ((script)))]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
308 : @"";
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
309 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
310
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
311
105156
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
312 /* Convert a font registry, such as */
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
313 static NSString
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
314 *ns_registry_to_script (char *reg)
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
315 {
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
316 Lisp_Object script, r, rts = Vns_reg_to_script;
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
317 while CONSP (rts)
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
318 {
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
319 r = XCAR (XCAR (rts));
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
320 if (!strncmp(SDATA(r), reg, strlen(SDATA(r))))
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
321 {
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
322 script = XCDR (XCAR (rts));
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
323 return [NSString stringWithUTF8String: SDATA (SYMBOL_NAME (script))];
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
324 }
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
325 rts = XCDR (rts);
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
326 }
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
327 return @"";
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
328 }
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
329
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
330
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
331 /* Searches the :script, :lang, and :otf extra-bundle properties of the spec,
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
332 plus registry regular property, for something that can be mapped to a
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
333 unicode script. Empty string returned if no script spec found. */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
334 static NSString
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
335 *ns_get_req_script (Lisp_Object font_spec)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
336 {
105156
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
337 Lisp_Object reg = AREF (font_spec, FONT_REGISTRY_INDEX);
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
338 Lisp_Object extra = AREF (font_spec, FONT_EXTRA_INDEX);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
339
105156
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
340 /* The extra-bundle properties have priority. */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
341 for ( ; CONSP (extra); extra = XCDR (extra))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
342 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
343 Lisp_Object tmp = XCAR (extra);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
344 if (CONSP (tmp))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
345 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
346 Lisp_Object key = XCAR (tmp), val = XCDR (tmp);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
347 if (EQ (key, QCscript) && SYMBOLP (val))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
348 return [NSString stringWithUTF8String:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
349 SDATA (SYMBOL_NAME (val))];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
350 if (EQ (key, QClang) && SYMBOLP (val))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
351 return ns_lang_to_script (val);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
352 if (EQ (key, QCotf) && CONSP (val) && SYMBOLP (XCAR (val)))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
353 return ns_otf_to_script (val);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
354 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
355 }
105156
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
356
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
357 /* If we get here, check the charset portion of the registry. */
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
358 if (! NILP (reg))
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
359 {
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
360 /* XXX: iso10646 is passed in for non-ascii latin-1 characters
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
361 (which causes box rendering if we don't treat it like iso8858-1)
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
362 but also for ascii (which causes unnecessary font substitution). */
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
363 #if 0
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
364 if (EQ (reg, Qiso10646_1))
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
365 reg = Qiso8859_1;
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
366 #endif
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
367 return ns_registry_to_script (SDATA (SYMBOL_NAME (reg)));
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
368 }
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
369
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
370 return @"";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
371 }
96676
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
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
374 /* This small function is static in fontset.c. If it can be made public for
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
375 all ports, remove this, but otherwise it doesn't seem worth the ifdefs. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
376 static void
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
377 accumulate_script_ranges (Lisp_Object arg, Lisp_Object range, Lisp_Object val)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
378 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
379 if (EQ (XCAR (arg), val))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
380 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
381 if (CONSP (range))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
382 XSETCDR (arg, Fcons (Fcons (XCAR (range), XCDR (range)), XCDR (arg)));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
383 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
384 XSETCDR (arg, Fcons (Fcons (range, range), XCDR (arg)));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
385 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
386 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
387
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
388
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
389 /* Use the unicode range information in Vchar_script_table to convert a script
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
390 name into an NSCharacterSet. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
391 static NSCharacterSet
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
392 *ns_script_to_charset (NSString *scriptName)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
393 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
394 NSMutableCharacterSet *charset = [NSMutableCharacterSet new];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
395 Lisp_Object script = intern ([scriptName UTF8String]);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
396 Lisp_Object script_list = XCHAR_TABLE (Vchar_script_table)->extras[0];
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
397
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
398 if (! NILP (Fmemq (script, script_list)))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
399 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
400 Lisp_Object ranges, range_list;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
401
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
402 ranges = Fcons (script, Qnil);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
403 map_char_table (accumulate_script_ranges, Qnil, Vchar_script_table,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
404 ranges);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
405 range_list = Fnreverse (XCDR (ranges));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
406 if (! NILP (range_list))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
407 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
408 for (; CONSP (range_list); range_list = XCDR (range_list))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
409 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
410 int start = XINT (XCAR (XCAR (range_list)));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
411 int end = XINT (XCDR (XCAR (range_list)));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
412 if (NSFONT_TRACE)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
413 debug_print (XCAR (range_list));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
414 if (end < 0x10000)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
415 [charset addCharactersInRange:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
416 NSMakeRange (start, end-start)];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
417 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
418 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
419 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
420 return charset;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
421 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
422
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
423
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
424 /* Return an array of font families containing characters for the given
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
425 script, for the given coverage criterion, including at least LastResort.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
426 Results are cached by script for faster access.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
427 If none are found, we reduce the percentage and try again, until 5%.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
428 This provides a font with at least some characters if such can be found.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
429 We don't use isSupersetOfSet: because (a) it doesn't work on Tiger, and
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
430 (b) need approximate match as fonts covering full unicode ranges are rare. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
431 static NSSet
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
432 *ns_get_covering_families (NSString *script, float pct)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
433 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
434 static NSMutableDictionary *scriptToFamilies = nil;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
435 NSMutableSet *families;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
436
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
437 if (NSFONT_TRACE)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
438 NSLog(@"Request covering families for script: '%@'", script);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
439
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
440 if (scriptToFamilies == nil)
103426
3c179a4d2b8a (ns_get_covering_families): Retain scriptToFamilies.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103422
diff changeset
441 scriptToFamilies = [[NSMutableDictionary alloc] init];
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
442
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
443 if ((families = [scriptToFamilies objectForKey: script]) == nil)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
444 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
445 NSFontManager *fontMgr = [NSFontManager sharedFontManager];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
446 NSArray *allFamilies = [fontMgr availableFontFamilies];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
447
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
448 if ([script length] == 0)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
449 families = [NSMutableSet setWithArray: allFamilies];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
450 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
451 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
452 NSCharacterSet *charset = ns_script_to_charset (script);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
453 NSString *family;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
454 families = [NSMutableSet setWithCapacity: 10];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
455 while (1)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
456 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
457 NSEnumerator *allFamiliesEnum = [allFamilies objectEnumerator];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
458 while (family = [allFamiliesEnum nextObject])
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
459 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
460 NSCharacterSet *fset = [[fontMgr fontWithFamily: family
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
461 traits: 0 weight: 5 size: 12.0] coveredCharacterSet];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
462 /* Some fonts on OS X, maybe many on GNUstep, return nil. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
463 if (fset == nil)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
464 fset = [NSCharacterSet characterSetWithRange:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
465 NSMakeRange (0, 127)];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
466 if (ns_charset_covers(fset, charset, pct))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
467 [families addObject: family];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
468 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
469 pct -= 0.2;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
470 if ([families count] > 0 || pct < 0.05)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
471 break;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
472 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
473 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
474 #ifdef NS_IMPL_COCOA
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
475 if ([families count] == 0)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
476 [families addObject: @"LastResort"];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
477 #endif
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
478 [scriptToFamilies setObject: families forKey: script];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
479 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
480
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
481 if (NSFONT_TRACE)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
482 NSLog(@" returning %d families", [families count]);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
483 return families;
96676
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
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
487 /* Implementation for list() and match(). List() can return nil, match()
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
488 must return something. Strategy is to drop family name from attribute
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
489 matching set for match. */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
490 static Lisp_Object
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
491 ns_findfonts (Lisp_Object font_spec, BOOL isMatch)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
492 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
493 Lisp_Object tem, list = Qnil;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
494 NSFontDescriptor *fdesc, *desc;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
495 NSMutableSet *fkeys;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
496 NSArray *matchingDescs;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
497 NSEnumerator *dEnum;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
498 NSString *family;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
499 NSSet *cFamilies;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
500 BOOL foundItal = NO;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
501
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
502 if (NSFONT_TRACE)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
503 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
504 fprintf (stderr, "nsfont: %s for fontspec:\n ",
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
505 (isMatch ? "match" : "list"));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
506 debug_print (font_spec);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
507 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
508
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
509 cFamilies = ns_get_covering_families (ns_get_req_script (font_spec), 0.90);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
510
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
511 fdesc = ns_spec_to_descriptor (font_spec);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
512 fkeys = [NSMutableSet setWithArray: [[fdesc fontAttributes] allKeys]];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
513 if (isMatch)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
514 [fkeys removeObject: NSFontFamilyAttribute];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
515
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
516 matchingDescs = [fdesc matchingFontDescriptorsWithMandatoryKeys: fkeys];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
517 if (NSFONT_TRACE)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
518 NSLog(@"Got desc %@ and found %d matching fonts from it: ", fdesc,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
519 [matchingDescs count]);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
520
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
521 for (dEnum = [matchingDescs objectEnumerator]; desc = [dEnum nextObject]; )
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
522 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
523 if (![cFamilies containsObject:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
524 [desc objectForKey: NSFontFamilyAttribute]])
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
525 continue;
104107
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
526 tem = ns_descriptor_to_entity (desc,
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
527 AREF (font_spec, FONT_EXTRA_INDEX),
104107
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
528 NULL);
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
529 if (isMatch)
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
530 return tem;
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
531 list = Fcons (tem, list);
103990
73ea181d96b6 * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103908
diff changeset
532 if (fabs (ns_attribute_fvalue (desc, NSFontSlantTrait)) > 0.05)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
533 foundItal = YES;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
534 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
535
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
536 /* Add synthItal member if needed. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
537 family = [fdesc objectForKey: NSFontFamilyAttribute];
103422
591af7ba061b * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103343
diff changeset
538 if (family != nil && !foundItal && XINT (Flength (list)) > 0)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
539 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
540 NSFontDescriptor *sDesc = [[[NSFontDescriptor new]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
541 fontDescriptorWithSymbolicTraits: NSFontItalicTrait]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
542 fontDescriptorWithFamily: family];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
543 list = Fcons (ns_descriptor_to_entity (sDesc,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
544 AREF (font_spec, FONT_EXTRA_INDEX),
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
545 "synthItal"), list);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
546 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
547
104058
85bf43e7dada * nsfont.m (ns_findfonts): Correctly return fallback in match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104048
diff changeset
548 /* Return something if was a match and nothing found. */
104107
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
549 if (isMatch)
6a6fc6d5dad8 * nsfont.m (ns_findfonts): Fix 2009-07-24 change to return only one element, not a list, for match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104069
diff changeset
550 return ns_fallback_entity ();
104058
85bf43e7dada * nsfont.m (ns_findfonts): Correctly return fallback in match case.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104048
diff changeset
551
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
552 if (NSFONT_TRACE)
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
553 fprintf (stderr, " Returning %ld entities.\n",
105579
f846b59ab251 Add space after casts in last change.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105561
diff changeset
554 (long) XINT (Flength (list)));
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
555
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
556 return list;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
557 }
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
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
560
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
561 /* ==========================================================================
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
562
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
563 Font driver implementation
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
564
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
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
567
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
568 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
569 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
570 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
571 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
572 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
573 int pixel_size);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
574 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
575 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
576 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
577 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
578 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
579 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
580 int with_background);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
581
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
582 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
583 {
96759
1e2f7aab70ba * Makefile.in: Undef LIB_STANDARD before defining it to silence warning
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 96692
diff changeset
584 0, /* Qns */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
585 1, /* case sensitive */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
586 nsfont_get_cache,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
587 nsfont_list,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
588 nsfont_match,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
589 nsfont_list_family,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
590 NULL, /*free_entity */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
591 nsfont_open,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
592 nsfont_close,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
593 NULL, /* prepare_face */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
594 NULL, /* done_face */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
595 nsfont_has_char,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
596 nsfont_encode_char,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
597 nsfont_text_extents,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
598 nsfont_draw,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
599 /* 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
600 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
601 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
602 };
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
603
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
604
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
605 /* 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
606 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
607 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
608 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
609 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
610 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
611 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
612 }
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
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
615 /* List fonts exactly matching with FONT_SPEC on FRAME. The value is a
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
616 **list** of font-entities. This and match () are sole APIs that allocate
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
617 font-entities. Properties to be considered (2009/05/19) are:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
618 regular: foundry, family, adstyle, registry
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
619 extended: script, lang, otf
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
620 "Extended" properties are not part of the vector but get stored as
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
621 lisp properties under FONT_EXTRA_INDEX.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
622
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
623 The returned entities should have type set (to 'ns), plus the following:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
624 foundry, family, adstyle, registry,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
625 weight, slant, width, size (0 if scalable),
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
626 dpi, spacing, avgwidth (0 if scalable) */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
627 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
628 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
629 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
630 return ns_findfonts (font_spec, NO);
96676
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
633
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
634 /* 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
635 FRAME. The closeness is determined by the font backend, thus
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
636 `face-font-selection-order' is ignored here.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
637 Properties to be considered are same as for list(). */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
638 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
639 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
640 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
641 return ns_findfonts(font_spec, YES);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
642 }
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
645 /* 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
646 (symbols). */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
647 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
648 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
649 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
650 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
651 NSEnumerator *families =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
652 [[[NSFontManager sharedFontManager] availableFontFamilies]
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
653 objectEnumerator];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
654 NSString *family;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
655 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
656 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
657 /* 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
658
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
659 if (NSFONT_TRACE)
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
660 fprintf (stderr, "nsfont: list families returning %ld entries\n",
105579
f846b59ab251 Add space after casts in last change.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105561
diff changeset
661 (long) XINT (Flength (list)));
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
662
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
663 return list;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
664 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
665
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 /* 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
668 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
669 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
670 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
671 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
672 BOOL synthItal;
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
673 unsigned int traits = 0;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
674 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
675 struct font *font;
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
676 NSFontDescriptor *fontDesc = ns_spec_to_descriptor (font_entity);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
677 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
678 NSString *family;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
679 NSFont *nsfont, *sfont;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
680 Lisp_Object tem;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
681 NSRect brect;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
682 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
683 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
684 int fixLeopardBug;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
685 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
686 NSNumber *cached;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
687
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
688 /* 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
689 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
690 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
691 avoid creating multiple struct font objects (with metrics cache, etc.)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
692 for the same NSFont object. */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
693 if (fontCache == nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
694 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
695
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
696 if (NSFONT_TRACE)
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 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
699 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
700 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
701
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
702 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
703 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
704 /* 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
705 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
706 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
707 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
708
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
709 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
710 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
711 9);
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
712 family = ns_get_family (font_entity);
104123
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
713 if (family == nil)
132eb17eec1d * nsfont.m (ns_descriptor_to_entity): Handle case when descriptor has no family set. (nsfont_open): Handle case when entity has no family.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 104107
diff changeset
714 family = [[NSFont userFixedPitchFontOfSize: 0] familyName];
103990
73ea181d96b6 * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103908
diff changeset
715 /* Should be > 0.23 as some font descriptors (e.g. Terminus) set to that
73ea181d96b6 * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103908
diff changeset
716 when setting family in ns_spec_to_descriptor(). */
73ea181d96b6 * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103908
diff changeset
717 if (ns_attribute_fvalue (fontDesc, NSFontWeightTrait) > 0.50)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
718 traits |= NSBoldFontMask;
103990
73ea181d96b6 * nsfont.m (ns_attribute_value): Remove.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103908
diff changeset
719 if (fabs (ns_attribute_fvalue (fontDesc, NSFontSlantTrait) > 0.05))
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
720 traits |= NSItalicFontMask;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
721
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
722 /* see http://cocoadev.com/forums/comments.php?DiscussionID=74 */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
723 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
724 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
725 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
726 size: pixel_size];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
727 /* if didn't find, try synthetic italic */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
728 if (nsfont == nil && synthItal)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
729 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
730 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
731 traits: traits & ~NSItalicFontMask
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
732 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
733 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
734 #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
735 /* 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
736 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
737 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
738 #endif
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 if (nsfont == nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
741 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
742 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
743 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
744 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
745 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
746
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
747 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
748 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
749
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
750 /* 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
751 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
752 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
753 {
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
754 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
755 fprintf(stderr, "*** nsfont_open CACHE HIT!\n");
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
756 /* FIXME: Cast from (unsigned long) to Lisp_Object. */
102954
b5a34573cf82 * nsselect.m (symbol_to_nsstring, clean_local_selection_data)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102560
diff changeset
757 XHASH (font_object) = [cached unsignedLongValue];
b5a34573cf82 * nsselect.m (symbol_to_nsstring, clean_local_selection_data)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102560
diff changeset
758 return font_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
759 }
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
760 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
761 {
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
762 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
763 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
764 if (!synthItal)
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
765 [fontCache setObject: [NSNumber numberWithUnsignedLong:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
766 (unsigned long) XHASH (font_object)]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
767 forKey: nsfont];
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
768 }
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
769
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
770 font_info = (struct nsfont_info *) XFONT_OBJECT (font_object);
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
771 font = (struct font *) font_info;
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
772 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
773 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
774
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
775 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
776 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
777 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
778 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
779 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
780 return Qnil;
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 108861
diff changeset
781 memset (font_info->glyphs, 0, 0x100 * sizeof (unsigned short *));
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 108861
diff changeset
782 memset (font_info->metrics, 0, 0x100 * sizeof (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
783
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
784 BLOCK_INPUT;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
785
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
786 /* for metrics */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
787 sfont = [nsfont screenFont];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
788 if (sfont == nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
789 sfont = nsfont;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
790
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
791 /* 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
792 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
793 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
794 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
795 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
796 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
797 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
798 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
799 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
800 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
801 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
802 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
803
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
804 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
805 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
806
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
807 {
103082
a9a213b44de2 nsfont.m (nsfont_open): remove unused variable shrink. Remove commented-out code.
David Reitter <david.reitter@gmail.com>
parents: 102954
diff changeset
808 double expand, hshrink;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
809 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
810 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
811 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
812
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
813 #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
814 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
815 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
816 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
817 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
818 [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
819
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
820 /* set up ns_font (defined in nsgui.h) */
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 108861
diff changeset
821 font_info->name = (char *)xmalloc (strlen (fontName)+1);
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 108861
diff changeset
822 strcpy (font_info->name, fontName);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
823 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
824 font_info->ital =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
825 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
826
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
827 /* 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
828 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
829 font_info->width = ([sfont numberOfGlyphs] > 2000) ?
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
830 [sfont maximumAdvancement].width : ns_char_width (sfont, '0');
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
831
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
832 brect = [sfont boundingRectForFont];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
833 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
834 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
835 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
836
102560
291f6c889881 Unify shutdown handling under NS, via ns-power-off key event (where appropriate) and save-buffers-kill-emacs.
David Reitter <david.reitter@gmail.com>
parents: 102400
diff changeset
837 /* standard height, similar to Carbon. Emacs.app: was 0.5 by default. */
103082
a9a213b44de2 nsfont.m (nsfont_open): remove unused variable shrink. Remove commented-out code.
David Reitter <david.reitter@gmail.com>
parents: 102954
diff changeset
838 expand = 0.0;
102560
291f6c889881 Unify shutdown handling under NS, via ns-power-off key event (where appropriate) and save-buffers-kill-emacs.
David Reitter <david.reitter@gmail.com>
parents: 102400
diff changeset
839 hshrink = 1.0;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
840
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
841 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
842 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
843 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
844 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
845
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
846 /* max bounds */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
847 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
848 lrint (hshrink * [sfont ascender] + expand * hd/2);
107114
e5188f4e7403 * nsfont.m (nsfont_open): The system's value for the font descent
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
849 /* [sfont descender] is usually negative. Use floor to avoid
e5188f4e7403 * nsfont.m (nsfont_open): The system's value for the font descent
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
850 clipping descenders. */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
851 font_info->max_bounds.descent =
107114
e5188f4e7403 * nsfont.m (nsfont_open): The system's value for the font descent
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
852 -lrint (floor(hshrink* [sfont descender] - expand*hd/2));
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
853 font_info->height =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
854 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
855 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
856 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
857 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
858 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
859
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
860 #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
861 /* 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
862 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
863 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
864 ATSFontRef atsFont = ATSFontFindFromPostScriptName
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
865 ((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
866
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
867 if (atsFont == kATSFontRefUnspecified)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
868 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
869 /* 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
870 atsFont = ATSFontFindFromPostScriptName ((CFStringRef)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
871 [[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
872 fontName], kATSOptionFlagsDefault);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
873 if (atsFont != kATSFontRefUnspecified)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
874 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
875 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
876 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
877 /* last resort fallback */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
878 atsFont = ATSFontFindFromPostScriptName
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
879 ((CFStringRef)@"Monaco", kATSOptionFlagsDefault);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
880 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
881 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
882 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
883 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
884 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
885
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
886 /* set up metrics portion of font struct */
107114
e5188f4e7403 * nsfont.m (nsfont_open): The system's value for the font descent
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
887 font->ascent = lrint([sfont ascender]);
e5188f4e7403 * nsfont.m (nsfont_open): The system's value for the font descent
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
888 font->descent = -lrint(floor([sfont descender]));
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
889 font->min_width = ns_char_width(sfont, '|');
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
890 font->space_width = lrint (ns_char_width (sfont, ' '));
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
891 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
892 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
893 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
894 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
895 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
896
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
897 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
898 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
899 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
900 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
901 UNBLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
902
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
903 return font_object;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
904 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
905
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 /* 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
908 static void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
909 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
910 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
911 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
912 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
913
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
914 /* FIXME: this occurs apparently due to same failure to detect same font
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
915 that causes need for cache in nsfont_open () */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
916 if (!font_info)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
917 return;
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 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
920 {
103624
3e06f0e66062 Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents: 103426
diff changeset
921 xfree (font_info->glyphs[i]);
3e06f0e66062 Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents: 103426
diff changeset
922 xfree (font_info->metrics[i]);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
923 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
924 [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
925 #ifdef NS_IMPL_COCOA
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
926 CGFontRelease (font_info->cgfont);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
927 #endif
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
928 xfree (font_info->name);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
929 xfree (font_info);
96676
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
933 /* 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
934 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
935 it, return -1. */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
936 static int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
937 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
938 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
939 return -1;
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
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 /* 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
944 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
945 static unsigned int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
946 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
947 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
948 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
949 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
950 unsigned short g;
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 if (c > 0xFFFF)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
953 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
954
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
955 /* 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
956 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
957 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
958
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
959 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
960 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
961 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
962
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
963
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
964 /* 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
965 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
966 CODE (length NGLYPHS). */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
967 static int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
968 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
969 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
970 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
971 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
972 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
973 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
974 int totalWidth = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
975 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
976
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 108861
diff changeset
977 memset (metrics, 0, sizeof (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
978
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
979 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
980 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
981 /* 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
982 /* 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
983 (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
984 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
985 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
986 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
987 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
988 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
989
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
990 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
991 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
992 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
993 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
994 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
995 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
996 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
997 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
998
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
999 totalWidth += pcm->width;
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1002 metrics->width = totalWidth;
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 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
1005 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1006
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1007
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1008 /* 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
1009 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
1010 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
1011 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
1012 static int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1013 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
1014 int with_background)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1015 /* 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
1016 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
1017 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1018 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
1019 char *c = cbuf;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1020 #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
1021 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
1022 float *adv = advances;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1023 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1024 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
1025 CGSize *adv = advances;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1026 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1027 struct face *face;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1028 NSRect r;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1029 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
1030 NSColor *col, *bgCol;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1031 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
1032 int i, len;
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1033 char isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1034 int end = isComposite ? s->cmp_to : s->nchars;
96676
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 /* 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
1037 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
1038 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1039 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
1040 face = s->face;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1041 break;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1042 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
1043 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
1044 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
1045 if (!face)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1046 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
1047 break;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1048 default:
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1049 face = s->face;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1050 }
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 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
1053 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
1054 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
1055
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1056 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
1057 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
1058
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1059 /* 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
1060 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
1061 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
1062 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1063 XCharStruct *cs;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1064 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
1065 int hi, lo;
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
1066 /* 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
1067 t += s->cmp_from; /* advance into composition */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1068 for (i = s->cmp_from; i < end; i++, t++)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1069 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1070 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
1071 lo = *t & 0x00FF;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1072 if (isComposite)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1073 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1074 if (!s->first_glyph->u.cmp.automatic)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1075 cwidth = s->cmp->offsets[i * 2] /* (H offset) */ - twidth;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1076 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1077 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1078 Lisp_Object gstring = composition_gstring_from_id (s->cmp_id);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1079 Lisp_Object glyph = LGSTRING_GLYPH (gstring, i);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1080 if (NILP (LGLYPH_ADJUSTMENT (glyph)))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1081 cwidth = LGLYPH_WIDTH (glyph);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1082 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1083 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1084 cwidth = LGLYPH_WADJUST (glyph);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1085 #ifdef NS_IMPL_GNUSTEP
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1086 *(adv-1) += LGLYPH_XOFF (glyph);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1087 #else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1088 (*(adv-1)).width += LGLYPH_XOFF (glyph);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1089 #endif
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1090 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1091 }
96676
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 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1094 {
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
1095 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
1096 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
1097 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
1098 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1099 twidth += cwidth;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1100 #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
1101 *adv++ = cwidth;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1102 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
1103 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1104 (*adv++).width = cwidth;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1105 #endif
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 len = adv - advances;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1108 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
1109 *c = 0;
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 /* fill background if requested */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1113 if (with_background && !isComposite)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1114 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1115 NSRect br = r;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1116 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
1117 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
1118
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1119 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
1120 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1121 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
1122 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1123 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
1124 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
1125 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1126 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
1127 <= fibw+1)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1128 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
1129 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1130 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
1131 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1132 /* 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
1133 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
1134 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1135 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
1136 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
1137 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1138 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1139 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1140 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1141 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
1142 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
1143 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
1144 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
1145 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
1146 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1147
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1148 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
1149 [(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
1150 ? 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
1151 : 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
1152 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1153 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1154 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
1155 [[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
1156 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1157 NSRectFill (br);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1158 }
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1161 /* 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
1162 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
1163
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
1164 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
1165 ? 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
1166 : 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
1167 /* 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
1168 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
1169 : (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
1170 ? 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
1171 : 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
1172
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1173 /* 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
1174 #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
1175 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1176 NSGraphicsContext *context = GSCurrentContext ();
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1177
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1178 DPSgsave (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1179 [font->nsfont set];
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 /* 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
1182 if (bgCol != nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1183 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1184 [bgCol set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1185 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
1186 /*[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
1187 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
1188 DPSstroke (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1189 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1190 /*[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
1191 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1192
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1193 /* do underline */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1194 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
1195 {
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
1196 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
1197 [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
1198 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1199 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1200 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
1201 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
1202 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
1203 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1204 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1205 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1206 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1207
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1208 /* draw with DPSxshow () */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1209 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
1210 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
1211 DPSstroke (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1212
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1213 DPSgrestore (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1214 return to-from;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1215 }
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 #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
1218 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1219 CGContextRef gcontext =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1220 [[NSGraphicsContext currentContext] graphicsPort];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1221 static CGAffineTransform fliptf;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1222 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
1223
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1224 if (firstTime)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1225 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1226 firstTime = NO;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1227 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
1228 }
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 CGContextSaveGState (gcontext);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1231
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1232 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
1233
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1234 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
1235 CGContextSetFontSize (gcontext, font->size);
107229
0255e27f26c9 * nsfont.m (nsfont_draw): ns_antialias_text should be a Lisp_Object (Bug#4736).
Chong Yidong <cyd@stupidchicken.com>
parents: 107114
diff changeset
1236 if (NILP (ns_antialias_text) || font->size <= ns_antialias_threshold)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1237 CGContextSetShouldAntialias (gcontext, 0);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1238 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1239 CGContextSetShouldAntialias (gcontext, 1);
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 CGContextSetTextMatrix (gcontext, fliptf);
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 if (bgCol != nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1244 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1245 /* 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
1246 [bgCol set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1247 CGContextSetTextDrawingMode (gcontext, kCGTextFillStroke);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1248 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
1249 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
1250 CGContextSetTextDrawingMode (gcontext, kCGTextFill);
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 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
1254 {
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
1255 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
1256 [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
1257 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1258 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1259 CGContextBeginPath (gcontext);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1260 CGContextMoveToPoint (gcontext,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1261 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
1262 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
1263 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
1264 CGContextStrokePath (gcontext);
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
1265 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
1266 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1267 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1268 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1269 [col set];
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 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
1272 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
1273 advances, len);
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 if (face->overstrike)
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 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
1278 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
1279 advances, len);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1280 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1281
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1282 CGContextRestoreGState (gcontext);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1283 return;
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 #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
1286
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1287 }
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1290
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1291 /* ==========================================================================
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1292
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1293 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
1294
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1295 ========================================================================== */
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 /* 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
1298 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
1299 static void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1300 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
1301 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1302 #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
1303 static EmacsGlyphStorage *glyphStorage;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1304 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
1305 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1306 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
1307 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
1308 unsigned short *glyphs;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1309
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1310 if (NSFONT_TRACE)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1311 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
1312 font_info, block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1313
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1314 BLOCK_INPUT;
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_COCOA
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1317 if (firstTime)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1318 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1319 firstTime = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1320 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
1321 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1322 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1323
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1324 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
1325 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
1326 abort ();
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1327
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1328 /* 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
1329 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
1330 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
1331 unichars[i] = idx;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1332 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1333 unichars[i] = 0xFEFF;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1334 unichars[0x100] = 0;
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 #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
1338 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
1339 initWithCharactersNoCopy: unichars
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1340 length: 0x100
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1341 freeWhenDone: NO];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1342 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
1343 /*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
1344 unsigned int numGlyphs = [font_info->nsfont numberOfGlyphs];
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1345 NSUInteger gInd =0, cInd =0;
96676
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 [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
1348 [glyphGenerator generateGlyphsForGlyphStorage: glyphStorage
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1349 desiredNumberOfCharacters: glyphStorage->maxChar
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1350 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
1351 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1352 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
1353 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
1354 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1355 #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
1356 g = unichars[i];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1357 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1358 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
1359 /* 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
1360 if (g > numGlyphs)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1361 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
1362 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1363 *glyphs = g;
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1366 #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
1367 [allChars release];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1368 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1369 }
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 UNBLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1372 xfree (unichars);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1373 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1374
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1375
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1376 /* 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
1377 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
1378 static void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1379 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
1380 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1381 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
1382 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
1383 NSFont *sfont;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1384 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
1385
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1386 if (NSFONT_TRACE)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1387 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
1388 font_info, block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1389
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1390 #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
1391 /* 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
1392 if (numGlyphs == 0)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1393 numGlyphs = 0x10000;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1394 #endif
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 BLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1397 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
1398
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1399 font_info->metrics[block] = xmalloc (0x100 * sizeof (struct font_metrics));
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 108861
diff changeset
1400 memset (font_info->metrics[block], 0, 0x100 * sizeof (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
1401 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
1402 abort ();
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 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
1405 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
1406 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1407 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
1408 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
1409
105160
8f8d95750940 * nsfont.m (ns_glyph_metrics): Remove GNUstep conditional for
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105156
diff changeset
1410 w = max ([sfont advancementForGlyph: g].width, 2.0);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1411 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
1412
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1413 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
1414 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
1415 if (lb < 0)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1416 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
1417 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
1418 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
1419 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
1420
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1421 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
1422 /*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
1423 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
1424 /*-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
1425 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1426 UNBLOCK_INPUT;
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
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 #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
1431 /* 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
1432 @implementation EmacsGlyphStorage
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1433
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1434 - init
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 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
1437 }
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 - 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
1440 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1441 self = [super init];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1442 maxChar = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1443 maxGlyph = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1444 dict = [NSMutableDictionary new];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1445 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
1446 return self;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1447 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1448
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1449 - (void) dealloc
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 if (attrStr != nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1452 [attrStr release];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1453 [dict release];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1454 xfree (cglyphs);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1455 [super dealloc];
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) 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
1459 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1460 [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
1461 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
1462 maxChar = [str length];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1463 maxGlyph = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1464 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1465
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1466 /* NSGlyphStorage protocol */
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1467 - (NSUInteger)layoutOptions
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1468 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1469 return 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1470 }
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 - (NSAttributedString *)attributedString
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 return attrStr;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1475 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1476
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1477 - (void)insertGlyphs: (const NSGlyph *)glyphs length: (NSUInteger)length
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1478 forStartingGlyphAtIndex: (NSUInteger)glyphIndex
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1479 characterIndex: (NSUInteger)charIndex
96676
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 len = glyphIndex+length;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1482 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
1483 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
1484 if (len > maxGlyph)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1485 maxGlyph = len;
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
105561
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1488 - (void)setIntAttribute: (NSInteger)attributeTag value: (NSInteger)val
69741c366370 * nsfont.m (ns_char_width): Replace deprecated call (suggested by
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105160
diff changeset
1489 forGlyphAtIndex: (NSUInteger)glyphIndex
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1490 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1491 return;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1492 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1493
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1494 @end
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1495 #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
1496
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1497
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1498 /* Debugging */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1499 void
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1500 ns_dump_glyphstring (struct glyph_string *s)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1501 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1502 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1503
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1504 fprintf (stderr, "Glyph string len = %d at (%d, %d) overhang (%d, %d),"
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1505 "overlap = %d, bg_filled = %d:",
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1506 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
1507 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
1508 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
1509 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
1510 fprintf (stderr, "\n");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1511 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1512
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1513
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1514 void
109653
9cfca8c9fb07 Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents: 109165
diff changeset
1515 syms_of_nsfont (void)
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1516 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1517 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
1518 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
1519 DEFSYM (Qapple, "apple");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1520 DEFSYM (Qroman, "roman");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1521 DEFSYM (Qmedium, "medium");
105156
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
1522 DEFVAR_LISP ("ns-reg-to-script", &Vns_reg_to_script,
25063db12150 * nsfont.m (Vns_reg_to_script): New lisp variable.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 105084
diff changeset
1523 doc: /* Internal use: maps font registry to unicode script. */);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1524 }
96685
e869d0172660 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 96676
diff changeset
1525
96689
f34c4d928d39 Use nicer comment syntax for arch taglines in Objective-C files
Miles Bader <miles@gnu.org>
parents: 96685
diff changeset
1526 // arch-tag: d6c3c6f0-62de-4978-8b1e-b7966fe02cae