annotate src/nsfont.m @ 103344:d04aeff22966

2009-06-08 Adrian Robert <Adrian.B.Robert@gmail.com> * nsterm.m (ns_use_system_highlight_color): Drop, unused. 2009-06-08 Adrian Robert <Adrian.B.Robert@gmail.com> Changes to support :script/:lang/:otf in NS font driver. * nsfont.m (nsfont_escape_name, nsfont_unescape_name) (nsfont_get_family, nsfont_char_width): Rename to ns_ prefix to indicate not part of font driver interface, and change callers. (ns_get_family): Remove pointless null check. (nsfont_spec_to_traits, nsfont_fmember_to_entity): Replace with ns_spec_to_descriptor, ns_descriptor_to_entity. (nsfont_trait_distance, nsfont_make_fontset_for_font): Remove. (ns_attribute_value, ns_attribute_fvalue, ns_has_attribute) (ns_spec_to_descriptor, ns_descriptor_to_entity) (ns_charset_covers, ns_lang_to_script, ns_otf_to_script) (ns_get_req_script, ns_accumulate_script_ranges) (ns_script_to_charset, ns_get_covering_families, ns_findfonts): New functions. (nsfont_list, nsfont_match): Use ns_findfonts. (nsfont_open): Use font descriptor instead of traits. (nsfont_draw): Handle "automatic" (lookup-table) compositions. (dump_glyphstring): Rename to ns_dump_glyphstring. * nsfns.m (Fns_popup_font_panel): Use shared font manager. * fontset.c (fontset_from_font): Remove NS-specific code. 2009-06-08 Peter Jones <pjones@pmade.com> (tiny change) * nsterm.m (ns_draw_window_cursor): Respect cursor_type for nonactive windows. 2009-06-08 Felix Mueller <felix@enqueue.eu> (tiny change) * nsterm.m (ns_init_paths): Append path separator to INFOPATH variable.
author Adrian Robert <Adrian.B.Robert@gmail.com>
date Mon, 08 Jun 2009 04:34:54 +0000
parents 83dbc377f674
children 591af7ba061b
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
100951
e038c1a8307c Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 99904
diff changeset
3 Copyright (C) 2006, 2007, 2008, 2009 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. */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
25 #include "config.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
26
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
27 #include "lisp.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
28 #include "dispextern.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
29 #include "composite.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
30 #include "blockinput.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
31 #include "charset.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
32 #include "frame.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
33 #include "window.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
34 #include "fontset.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
35 #include "nsterm.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
36 #include "frame.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
37 #include "character.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
38 #include "font.h"
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
39
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
40 #define NSFONT_TRACE 0
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
41
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
42 extern Lisp_Object Qns;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
43 extern Lisp_Object Qnormal, Qbold, Qitalic, Qcondensed, Qexpanded;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
44 static Lisp_Object Qapple, Qroman, Qmedium;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
45 extern Lisp_Object Qappend;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
46 extern int ns_antialias_text, ns_use_qd_smoothing;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
47 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
48 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
49 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
50
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
51 /* 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
52 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
53 unsigned char block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
54 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
55 unsigned char block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
56
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
57
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
58 /* ==========================================================================
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
59
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
60 Utilities
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
61
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
62 ========================================================================== */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
63
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
64
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
65 /* 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
66 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
67 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
68 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
69 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
70 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
71 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
72 if (name[i] == ' ')
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
73 name[i] = '_';
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
74 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
75
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
76
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
77 /* 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
78 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
79 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
80 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
81 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
82 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
83 if (name[i] == '_')
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
84 name[i] = ' ';
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
85 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
86
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
87
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
88 /* 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
89 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
90 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
91 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
92 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
93 if (NILP (tem))
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
94 return nil;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
95 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
96 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
97 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
98 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
99 ns_unescape_name (tmp);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
100 /* For names hard-coded into emacs, like 'helvetica' for splash. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
101 tmp[0] = toupper (tmp[0]);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
102 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
103 free (tmp);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
104 return family;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
105 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
106 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
107
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
108
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
109 /* Return NSNumber or nil if attr is not set. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
110 static NSNumber
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
111 *ns_attribute_value (NSFontDescriptor *fdesc, NSString *trait)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
112 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
113 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
114 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
115 return val;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
116 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
117
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
118
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
119 /* Return 0 if attr not set, else value (which might also be 0). */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
120 static float
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
121 ns_attribute_fvalue (NSFontDescriptor *fdesc, NSString *trait)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
122 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
123 NSNumber *val = ns_attribute_value (fdesc, trait);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
124 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
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
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
128 /* Return whether font has attribute set to non-standard value. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
129 static BOOL
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
130 ns_has_attribute (NSFontDescriptor *fdesc, NSString *trait)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
131 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
132 float v = ns_attribute_fvalue (fdesc, trait);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
133 return v < -0.25 || v > 0.25;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
134 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
135
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
136
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
137 /* 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
138 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
139 #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
140 static NSFontDescriptor
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
141 *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
142 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
143 NSFontDescriptor *fdesc;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
144 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
145 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
146 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
147 float n;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
148
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
149 /* 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
150 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
151 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
152 [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
153 forKey: NSFontWeightTrait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
154 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
155 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
156 [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
157 forKey: NSFontSlantTrait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
158 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
159 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
160 [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
161 forKey: NSFontWidthTrait];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
162 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
163 [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
164
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
165 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
166 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
167 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
168 return fdesc;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
169 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
170
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
171
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
172 /* 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
173 static Lisp_Object
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
174 ns_descriptor_to_entity (NSFontDescriptor *desc, Lisp_Object extra, char *style)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
175 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
176 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
177 /* 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
178 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
179 char *escapedFamily = strdup ([family UTF8String]);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
180 unsigned int traits = [desc symbolicTraits];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
181
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
182 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
183
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_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
185 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
186 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
187 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
188 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
189
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
190 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
191 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
192 /* 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
193 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
194 * 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
195 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
196 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
197 /* 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
198 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
199 * 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
200 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
201 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
202 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
203 /* 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
204 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
205 * 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
206
103343
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_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
208 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
209 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
210 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
211 ? 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
212
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_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
214 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
215
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
216 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
217 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
218 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
219 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
220 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
221
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
222 free (escapedFamily);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
223 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
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
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
227 /* 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
228 static Lisp_Object
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
229 ns_fallback_entity ()
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
230 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
231 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
232 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
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
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
236 /* 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
237 static float
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
238 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
239 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
240 float w;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
241 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
242 #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
243 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
244 if (glyph)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
245 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
246 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
247 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
248 return w;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
249 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
250 #endif
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
251 w = [sfont widthOfString: cstr];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
252 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
253 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
254
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
255
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
256 /* 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
257 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
258 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
259 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
260 static BOOL
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
261 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
262 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
263 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
264 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
265 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
266
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
267 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
268 if (*bytes2)
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 tot++;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
271 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
272 off++;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
273 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
274 //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
275 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
276 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
277
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
278
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
279 /* 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
280 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
281 static NSString
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
282 *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
283 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
284 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
285 return @"han";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
286 /* 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
287 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
288 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
289 return @"han";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
290 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
291 return @"hangul";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
292 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
293 return @"";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
294 }
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
295
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
296
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
297 /* 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
298 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
299 static NSString
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
300 *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
301 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
302 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
303 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
304 ? [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
305 : @"";
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
306 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
307
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
308
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
309 /* Searches the :script, :lang, and :otf extra-bundle properties of the spec
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
310 for something that can be mapped to a unicode script. Empty string returned
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
311 if no script spec found.
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
312 TODO: Eventually registry / encoding should be checked and mapped, but for
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
313 now the font backend will try script/lang/otf if registry fails, so it is
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
314 not needed. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
315 static NSString
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
316 *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
317 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
318 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
319
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
320 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
321 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
322 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
323 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
324 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
325 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
326 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
327 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
328 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
329 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
330 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
331 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
332 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
333 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
334 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
335 return @"";
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
336 }
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
337
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
338
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
339 /* 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
340 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
341 static void
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
342 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
343 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
344 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
345 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
346 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
347 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
348 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
349 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
350 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
351 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
352
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
353
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
354 /* 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
355 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
356 static NSCharacterSet
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
357 *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
358 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
359 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
360 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
361 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
362
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
363 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
364 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
365 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
366
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
367 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
368 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
369 ranges);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
370 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
371 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
372 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
373 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
374 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
375 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
376 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
377 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
378 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
379 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
380 [charset addCharactersInRange:
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
381 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
382 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
383 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
384 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
385 return charset;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
386 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
387
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
388
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
389 /* 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
390 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
391 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
392 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
393 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
394 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
395 (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
396 static NSSet
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
397 *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
398 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
399 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
400 NSMutableSet *families;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
401
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
402 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
403 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
404
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
405 if (scriptToFamilies == nil)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
406 scriptToFamilies = [NSMutableDictionary dictionaryWithCapacity: 30];
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 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
409 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
410 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
411 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
412
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
413 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
414 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
415 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
416 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
417 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
418 NSString *family;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
419 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
420 while (1)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
421 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
422 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
423 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
424 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
425 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
426 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
427 /* 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
428 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
429 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
430 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
431 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
432 [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
433 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
434 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
435 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
436 break;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
437 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
438 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
439 #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
440 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
441 [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
442 #endif
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
443 [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
444 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
445
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
446 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
447 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
448 return families;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
449 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
450
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
451
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
452 /* 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
453 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
454 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
455 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
456 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
457 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
458 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
459 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
460 NSMutableSet *fkeys;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
461 NSArray *matchingDescs;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
462 NSEnumerator *dEnum;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
463 NSString *family;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
464 NSSet *cFamilies;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
465 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
466
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
467 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
468 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
469 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
470 (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
471 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
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 /* If has non-unicode registry, give up. */
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
475 tem = AREF (font_spec, FONT_REGISTRY_INDEX);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
476 if (! NILP (tem) && !EQ (tem, Qiso10646_1) && !EQ (tem, Qunicode_bmp))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
477 return isMatch ? ns_fallback_entity () : Qnil;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
478
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
479 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
480
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
481 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
482 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
483 if (isMatch)
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
484 [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
485
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
486 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
487 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
488 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
489 [matchingDescs count]);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
490
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
491 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
492 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
493 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
494 [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
495 continue;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
496 list = Fcons (ns_descriptor_to_entity (desc,
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
497 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
498 NULL), list);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
499 if (ns_has_attribute (desc, NSFontSlantTrait))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
500 foundItal = YES;
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
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
503 /* 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
504 family = [fdesc objectForKey: NSFontFamilyAttribute];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
505 if (family != nil && !foundItal && XINT (Flength (list)) > 0
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
506 && (ns_attribute_value (fdesc, NSFontSlantTrait) == nil
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
507 || ns_has_attribute (fdesc, NSFontSlantTrait)))
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 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
510 fontDescriptorWithSymbolicTraits: NSFontItalicTrait]
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
511 fontDescriptorWithFamily: family];
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
512 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
513 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
514 "synthItal"), list);
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
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 fprintf (stderr, " Returning %d entities.\n", XINT (Flength (list)));
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
519
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
520 return list;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
521 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
522
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
523
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
524
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
525 /* ==========================================================================
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
526
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
527 Font driver implementation
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
528
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
529 ========================================================================== */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
530
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
531
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
532 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
533 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
534 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
535 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
536 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
537 int pixel_size);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
538 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
539 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
540 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
541 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
542 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
543 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
544 int with_background);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
545
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
546 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
547 {
96759
1e2f7aab70ba * Makefile.in: Undef LIB_STANDARD before defining it to silence warning
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 96692
diff changeset
548 0, /* Qns */
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
549 1, /* case sensitive */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
550 nsfont_get_cache,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
551 nsfont_list,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
552 nsfont_match,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
553 nsfont_list_family,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
554 NULL, /*free_entity */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
555 nsfont_open,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
556 nsfont_close,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
557 NULL, /* prepare_face */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
558 NULL, /* done_face */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
559 nsfont_has_char,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
560 nsfont_encode_char,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
561 nsfont_text_extents,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
562 nsfont_draw,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
563 /* 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
564 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
565 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
566 };
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
567
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
568
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
569 /* 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
570 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
571 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
572 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
573 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
574 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
575 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
576 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
577
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
578
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
579 /* 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
580 **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
581 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
582 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
583 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
584 "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
585 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
586
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
587 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
588 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
589 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
590 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
591 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
592 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
593 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
594 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
595 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
596
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
597
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
598 /* 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
599 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
600 `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
601 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
602 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
603 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
604 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
605 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
606 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
607
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
608
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
609 /* 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
610 (symbols). */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
611 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
612 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
613 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
614 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
615 NSEnumerator *families =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
616 [[[NSFontManager sharedFontManager] availableFontFamilies]
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
617 objectEnumerator];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
618 NSString *family;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
619 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
620 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
621 /* 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
622
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
623 if (NSFONT_TRACE)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
624 fprintf (stderr, "nsfont: list families returning %d entries\n",
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
625 XINT (Flength (list)));
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
626
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
627 return list;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
628 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
629
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
630
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
631 /* 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
632 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
633 static Lisp_Object
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
634 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
635 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
636 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
637 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
638 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
639 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
640 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
641 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
642 NSString *family;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
643 NSFont *nsfont, *sfont;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
644 Lisp_Object tem;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
645 NSRect brect;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
646 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
647 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
648 int fixLeopardBug;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
649 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
650 NSNumber *cached;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
651
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
652 /* 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
653 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
654 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
655 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
656 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
657 if (fontCache == nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
658 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
659
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
660 if (NSFONT_TRACE)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
661 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
662 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
663 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
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 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
667 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
668 /* 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
669 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
670 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
671 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
672
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
673 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
674 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
675 9);
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
676 family = ns_get_family (font_entity);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
677 if (ns_has_attribute (fontDesc, NSFontWeightTrait))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
678 traits |= NSBoldFontMask;
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
679 if (ns_has_attribute (fontDesc, NSFontSlantTrait))
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
680 traits |= NSItalicFontMask;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
681
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
682 /* 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
683 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
684 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
685 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
686 size: pixel_size];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
687 /* 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
688 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
689 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
690 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
691 traits: traits & ~NSItalicFontMask
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
692 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
693 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
694 #ifdef NS_IMPL_COCOA
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
695 /* 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
696 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
697 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
698 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
699
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
700 if (nsfont == nil)
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 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
703 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
704 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
705 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
706
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
707 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
708 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
709
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
710 /* 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
711 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
712 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
713 {
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
714 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
715 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
716 /* 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
717 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
718 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
719 }
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
720 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
721 {
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
722 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
723 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
724 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
725 [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
726 (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
727 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
728 }
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
729
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
730 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
731 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
732 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
733 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
734
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
735 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
736 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
737 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
738 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
739 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
740 return Qnil;
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
741 bzero (font_info->glyphs, 0x100 * sizeof (unsigned short *));
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
742 bzero (font_info->metrics, 0x100 * sizeof (struct font_metrics *));
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
743
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
744 BLOCK_INPUT;
96676
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 /* for metrics */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
747 sfont = [nsfont screenFont];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
748 if (sfont == nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
749 sfont = nsfont;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
750
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
751 /* 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
752 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
753 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
754 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
755 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
756 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
757 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
758 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
759 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
760 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
761 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
762 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
763
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
764 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
765 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
766
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
767 {
103082
a9a213b44de2 nsfont.m (nsfont_open): remove unused variable shrink. Remove commented-out code.
David Reitter <david.reitter@gmail.com>
parents: 102954
diff changeset
768 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
769 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
770 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
771 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
772
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
773 #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
774 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
775 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
776 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
777 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
778 [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
779
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
780 /* set up ns_font (defined in nsgui.h) */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
781 font_info->name = (char *)xmalloc (strlen (fontName) + 1);
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
782 bcopy (fontName, font_info->name, strlen (fontName) + 1);
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
783 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
784 font_info->ital =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
785 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
786
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
787 /* 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
788 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
789 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
790 [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
791
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
792 brect = [sfont boundingRectForFont];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
793 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
794 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
795 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
796
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
797 /* 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
798 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
799 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
800
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
801 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
802 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
803 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
804 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
805
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
806 /* max bounds */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
807 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
808 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
809 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
810 -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
811 font_info->height =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
812 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
813 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
814 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
815 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
816 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
817
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
818 #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
819 /* 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
820 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
821 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
822 ATSFontRef atsFont = ATSFontFindFromPostScriptName
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
823 ((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
824
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
825 if (atsFont == kATSFontRefUnspecified)
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 /* 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
828 atsFont = ATSFontFindFromPostScriptName ((CFStringRef)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
829 [[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
830 fontName], kATSOptionFlagsDefault);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
831 if (atsFont != kATSFontRefUnspecified)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
832 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
833 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
834 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
835 /* last resort fallback */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
836 atsFont = ATSFontFindFromPostScriptName
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
837 ((CFStringRef)@"Monaco", kATSOptionFlagsDefault);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
838 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
839 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
840 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
841 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
842 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
843
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
844 /* set up metrics portion of font struct */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
845 font->ascent = [sfont ascender];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
846 font->descent = -[sfont descender];
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
847 font->min_width = [sfont widthOfString: @"|"]; /* FIXME */
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
848 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
849 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
850 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
851 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
852 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
853 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
854
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
855 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
856 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
857 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
858 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
859 UNBLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
860
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
861 return font_object;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
862 }
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
865 /* 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
866 static void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
867 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
868 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
869 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
870 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
871
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
872 /* 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
873 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
874 if (!font_info)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
875 return;
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 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
878 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
879 if (font_info->glyphs[i])
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
880 xfree (font_info->glyphs[i]);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
881 if (font_info->metrics[i])
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
882 xfree (font_info->metrics[i]);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
883 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
884 [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
885 #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
886 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
887 #endif
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
888 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
889 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
890 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
891
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
892
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
893 /* 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
894 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
895 it, return -1. */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
896 static int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
897 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
898 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
899 return -1;
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
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 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
904 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
905 static unsigned int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
906 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
907 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
908 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
909 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
910 unsigned short g;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
911
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
912 if (c > 0xFFFF)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
913 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
914
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
915 /* 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
916 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
917 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
918
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
919 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
920 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
921 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
922
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 /* 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
925 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
926 CODE (length NGLYPHS). */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
927 static int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
928 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
929 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
930 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
931 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
932 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
933 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
934 int totalWidth = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
935 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
936
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
937 bzero (metrics, sizeof (struct font_metrics));
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
938
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
939 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
940 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
941 /* 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
942 /* 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
943 (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
944 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
945 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
946 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
947 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
948 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
949
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
950 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
951 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
952 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
953 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
954 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
955 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
956 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
957 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
958
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
959 totalWidth += pcm->width;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
960 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
961
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
962 metrics->width = totalWidth;
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 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
965 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
966
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
967
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
968 /* 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
969 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
970 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
971 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
972 static int
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
973 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
974 int with_background)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
975 /* 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
976 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
977 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
978 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
979 char *c = cbuf;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
980 #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
981 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
982 float *adv = advances;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
983 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
984 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
985 CGSize *adv = advances;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
986 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
987 struct face *face;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
988 NSRect r;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
989 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
990 NSColor *col, *bgCol;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
991 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
992 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
993 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
994 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
995
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
996 /* 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
997 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
998 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
999 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
1000 face = s->face;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1001 break;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1002 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
1003 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
1004 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
1005 if (!face)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1006 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
1007 break;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1008 default:
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1009 face = s->face;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1010 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1011
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1012 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
1013 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
1014 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
1015
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1016 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
1017 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
1018
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1019 /* 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
1020 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
1021 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
1022 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1023 XCharStruct *cs;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1024 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
1025 int hi, lo;
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
1026 /* 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
1027 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
1028 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
1029 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1030 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
1031 lo = *t & 0x00FF;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1032 if (isComposite)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1033 {
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1034 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
1035 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
1036 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1037 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1038 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
1039 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
1040 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
1041 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
1042 else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1043 {
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1044 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
1045 #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
1046 *(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
1047 #else
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1048 (*(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
1049 #endif
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1050 }
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1051 }
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1052 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1053 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1054 {
96892
4aec559b9f05 NS cleanup: change 'PENDING' to 'FIXME'/'TODO'/'XXX'
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96817
diff changeset
1055 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
1056 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
1057 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
1058 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1059 twidth += cwidth;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1060 #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
1061 *adv++ = cwidth;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1062 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
1063 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1064 (*adv++).width = cwidth;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1065 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1066 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1067 len = adv - advances;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1068 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
1069 *c = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1070 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1071
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1072 /* 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
1073 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
1074 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1075 NSRect br = r;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1076 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
1077 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
1078
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1079 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
1080 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1081 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
1082 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1083 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
1084 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
1085 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1086 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
1087 <= fibw+1)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1088 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
1089 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1090 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
1091 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1092 /* 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
1093 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
1094 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1095 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
1096 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
1097 }
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 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1100 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1101 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
1102 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
1103 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
1104 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
1105 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
1106 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1107
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1108 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
1109 [(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
1110 ? 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
1111 : 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
1112 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1113 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1114 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
1115 [[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
1116 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1117 NSRectFill (br);
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
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 /* 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
1122 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
1123
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
1124 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
1125 ? 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
1126 : 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
1127 /* 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
1128 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
1129 : (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
1130 ? 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
1131 : 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
1132
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1133 /* 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
1134 #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
1135 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1136 NSGraphicsContext *context = GSCurrentContext ();
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 DPSgsave (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1139 [font->nsfont set];
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 /* 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
1142 if (bgCol != nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1143 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1144 [bgCol set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1145 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
1146 /*[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
1147 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
1148 DPSstroke (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1149 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1150 /*[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
1151 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1152
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1153 /* do underline */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1154 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
1155 {
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
1156 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
1157 [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
1158 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1159 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1160 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
1161 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
1162 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
1163 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1164 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1165 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1166 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1167
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1168 /* draw with DPSxshow () */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1169 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
1170 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
1171 DPSstroke (context);
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 DPSgrestore (context);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1174 return to-from;
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1177 #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
1178 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1179 CGContextRef gcontext =
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1180 [[NSGraphicsContext currentContext] graphicsPort];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1181 static CGAffineTransform fliptf;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1182 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
1183
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1184 if (firstTime)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1185 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1186 firstTime = NO;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1187 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
1188 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1189
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1190 CGContextSaveGState (gcontext);
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 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
1193
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1194 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
1195 CGContextSetFontSize (gcontext, font->size);
102400
934376007cef * nsfont.m (nsfont_draw): Compare ns_antialias_text against lisp value.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 102004
diff changeset
1196 if (ns_antialias_text == Qnil || 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
1197 CGContextSetShouldAntialias (gcontext, 0);
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 CGContextSetShouldAntialias (gcontext, 1);
96817
6b7bbb1d9eb1 fix bug with quickdraw smoothing; also, in Makefile, clean out ns_appdir in 'clean' target
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96813
diff changeset
1200 if (EQ (ns_use_qd_smoothing, Qt))
96676
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1201 CGContextSetFontRenderingMode (gcontext, 2); /* 0 is Cocoa, 2 is QD */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1202
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1203 CGContextSetTextMatrix (gcontext, fliptf);
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 if (bgCol != nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1206 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1207 /* 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
1208 [bgCol set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1209 CGContextSetTextDrawingMode (gcontext, kCGTextFillStroke);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1210 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
1211 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
1212 CGContextSetTextDrawingMode (gcontext, kCGTextFill);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1213 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1214
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1215 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
1216 {
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
1217 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
1218 [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
1219 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1220 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1221 CGContextBeginPath (gcontext);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1222 CGContextMoveToPoint (gcontext,
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1223 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
1224 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
1225 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
1226 CGContextStrokePath (gcontext);
97198
cf43f4e3ecc8 clear warnings and clean up NS port
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 96892
diff changeset
1227 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
1228 [col set];
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 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1231 [col set];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1232
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1233 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
1234 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
1235 advances, len);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1236
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1237 if (face->overstrike)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1238 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1239 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
1240 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
1241 advances, len);
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1244 CGContextRestoreGState (gcontext);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1245 return;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1246 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1247 #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
1248
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1249 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1250
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1251
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1252
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1253 /* ==========================================================================
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1254
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1255 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
1256
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1257 ========================================================================== */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1258
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1259 /* 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
1260 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
1261 static void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1262 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
1263 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1264 #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
1265 static EmacsGlyphStorage *glyphStorage;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1266 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
1267 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1268 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
1269 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
1270 unsigned short *glyphs;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1271
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1272 if (NSFONT_TRACE)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1273 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
1274 font_info, block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1275
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1276 BLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1277
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1278 #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
1279 if (firstTime)
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 firstTime = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1282 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
1283 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1284 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1285
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1286 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
1287 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
1288 abort ();
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 /* 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
1291 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
1292 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
1293 unichars[i] = idx;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1294 else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1295 unichars[i] = 0xFEFF;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1296 unichars[0x100] = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1297
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1298 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1299 #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
1300 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
1301 initWithCharactersNoCopy: unichars
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1302 length: 0x100
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1303 freeWhenDone: NO];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1304 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
1305 /*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
1306 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
1307 unsigned int gInd =0, cInd =0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1308
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1309 [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
1310 [glyphGenerator generateGlyphsForGlyphStorage: glyphStorage
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1311 desiredNumberOfCharacters: glyphStorage->maxChar
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1312 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
1313 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1314 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
1315 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
1316 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1317 #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
1318 g = unichars[i];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1319 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1320 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
1321 /* 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
1322 if (g > numGlyphs)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1323 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
1324 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1325 *glyphs = g;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1326 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1327
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1328 #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
1329 [allChars release];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1330 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1331 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1332
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1333 UNBLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1334 xfree (unichars);
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1338 /* 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
1339 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
1340 static void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1341 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
1342 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1343 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
1344 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
1345 NSFont *sfont;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1346 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
1347
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1348 if (NSFONT_TRACE)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1349 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
1350 font_info, block);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1351
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1352 #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
1353 /* 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
1354 if (numGlyphs == 0)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1355 numGlyphs = 0x10000;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1356 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1357
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1358 BLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1359 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
1360
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1361 font_info->metrics[block] = xmalloc (0x100 * sizeof (struct font_metrics));
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1362 bzero (font_info->metrics[block], 0x100 * sizeof (struct font_metrics));
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1363 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
1364 abort ();
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 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
1367 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
1368 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1369 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
1370 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
1371
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1372 #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
1373 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1374 /* lord help us */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1375 NSString *s = [NSString stringWithFormat: @"%c", g];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1376 w = [sfont widthOfString: s];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1377 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1378 #else
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1379 w = [sfont advancementForGlyph: g].width;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1380 #endif
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1381 w = max (w, 2.0);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1382 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
1383
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1384 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
1385 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
1386 if (lb < 0)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1387 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
1388 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
1389 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
1390 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
1391
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1392 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
1393 /*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
1394 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
1395 /*-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
1396 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1397 UNBLOCK_INPUT;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1398 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1399
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1400
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1401 #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
1402 /* 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
1403 @implementation EmacsGlyphStorage
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1404
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1405 - init
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 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
1408 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1409
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1410 - 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
1411 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1412 self = [super init];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1413 maxChar = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1414 maxGlyph = 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1415 dict = [NSMutableDictionary new];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1416 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
1417 return self;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1418 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1419
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1420 - (void) dealloc
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1421 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1422 if (attrStr != nil)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1423 [attrStr release];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1424 [dict release];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1425 xfree (cglyphs);
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1426 [super dealloc];
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 - (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
1430 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1431 [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
1432 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
1433 maxChar = [str length];
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1434 maxGlyph = 0;
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1437 /* NSGlyphStorage protocol */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1438 - (unsigned int)layoutOptions
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1439 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1440 return 0;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1441 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1442
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1443 - (NSAttributedString *)attributedString
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1444 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1445 return attrStr;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1446 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1447
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1448 - (void)insertGlyphs: (const NSGlyph *)glyphs length: (unsigned int)length
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1449 forStartingGlyphAtIndex: (unsigned int)glyphIndex
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1450 characterIndex: (unsigned int)charIndex
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1451 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1452 len = glyphIndex+length;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1453 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
1454 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
1455 if (len > maxGlyph)
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1456 maxGlyph = len;
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
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1459 - (void)setIntAttribute: (int)attributeTag value: (int)val
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1460 forGlyphAtIndex: (unsigned)glyphIndex
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1461 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1462 return;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1463 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1464
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1465 @end
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1466 #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
1467
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 /* Debugging */
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1470 void
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1471 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
1472 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1473 int i;
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1474
103343
83dbc377f674 Changes to support :script/:lang/:otf in NS font driver.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 103245
diff changeset
1475 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
1476 "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
1477 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
1478 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
1479 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
1480 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
1481 fprintf (stderr, "\n");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1482 }
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1483
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1484
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1485 void
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1486 syms_of_nsfont ()
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1487 {
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1488 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
1489 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
1490 DEFSYM (Qapple, "apple");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1491 DEFSYM (Qroman, "roman");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1492 DEFSYM (Qmedium, "medium");
336d4f3f5eca adding forgotten file src/nsfont.m for emacs.app merge
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
diff changeset
1493 }
96685
e869d0172660 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 96676
diff changeset
1494
96689
f34c4d928d39 Use nicer comment syntax for arch taglines in Objective-C files
Miles Bader <miles@gnu.org>
parents: 96685
diff changeset
1495 // arch-tag: d6c3c6f0-62de-4978-8b1e-b7966fe02cae