Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: third_party/harfbuzz-ng/src/hb-tt-font.cc

Issue 10915172: harfbuzz-ng roll (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright © 2011 Google, Inc. 2 * Copyright © 2011 Google, Inc.
3 * 3 *
4 * This is part of HarfBuzz, a text shaping library. 4 * This is part of HarfBuzz, a text shaping library.
5 * 5 *
6 * Permission is hereby granted, without written agreement and without 6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this 7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the 8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in 9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software. 10 * all copies of this software.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 hb_blob_t *hhea_blob; 44 hb_blob_t *hhea_blob;
45 }; 45 };
46 46
47 47
48 static hb_tt_font_t * 48 static hb_tt_font_t *
49 _hb_tt_font_create (hb_font_t *font) 49 _hb_tt_font_create (hb_font_t *font)
50 { 50 {
51 /* TODO Remove this object altogether */ 51 /* TODO Remove this object altogether */
52 hb_tt_font_t *tt = (hb_tt_font_t *) calloc (1, sizeof (hb_tt_font_t)); 52 hb_tt_font_t *tt = (hb_tt_font_t *) calloc (1, sizeof (hb_tt_font_t));
53 53
54 tt->hhea_blob = Sanitizer<hhea>::sanitize (hb_face_reference_table (font->face , HB_OT_TAG_hhea)); 54 tt->hhea_blob = Sanitizer<hhea>::sanitize (font->face->reference_table (HB_OT_ TAG_hhea));
55 tt->hhea = Sanitizer<hhea>::lock_instance (tt->hhea_blob); 55 tt->hhea = Sanitizer<hhea>::lock_instance (tt->hhea_blob);
56 56
57 return tt; 57 return tt;
58 } 58 }
59 59
60 static void 60 static void
61 _hb_tt_font_destroy (hb_tt_font_t *tt) 61 _hb_tt_font_destroy (hb_tt_font_t *tt)
62 { 62 {
63 hb_blob_destroy (tt->hhea_blob); 63 hb_blob_destroy (tt->hhea_blob);
64 64
65 free (tt); 65 free (tt);
66 } 66 }
67 67
68 static inline const hhea& 68 static inline const hhea&
69 _get_hhea (hb_face_t *face) 69 _get_hhea (hb_face_t *face)
70 { 70 {
71 // return likely (face->tt && face->tt->hhea) ? *face->tt->hhea : Null(hhea); 71 // return likely (face->tt && face->tt->hhea) ? *face->tt->hhea : Null(hhea);
72 } 72 }
73 73
74 74
75 /* 75 /*
76 * hb_tt_font_funcs_t 76 * hb_tt_font_funcs_t
77 */ 77 */
78 78
79 static hb_bool_t
80 hb_font_get_glyph_nil (hb_font_t *font HB_UNUSED,
81 void *font_data HB_UNUSED,
82 hb_codepoint_t unicode,
83 hb_codepoint_t variation_selector,
84 hb_codepoint_t *glyph,
85 void *user_data HB_UNUSED)
86 {
87 if (font->parent)
88 return hb_font_get_glyph (font->parent, unicode, variation_selector, glyph);
89
90 *glyph = 0;
91 return false;
92 }
93
94 static hb_position_t
95 hb_font_get_glyph_h_advance_nil (hb_font_t *font HB_UNUSED,
96 void *font_data HB_UNUSED,
97 hb_codepoint_t glyph,
98 void *user_data HB_UNUSED)
99 {
100 if (font->parent)
101 return font->parent_scale_x_distance (hb_font_get_glyph_h_advance (font->par ent, glyph));
102
103 return font->x_scale;
104 }
105
106 static hb_position_t
107 hb_font_get_glyph_v_advance_nil (hb_font_t *font HB_UNUSED,
108 void *font_data HB_UNUSED,
109 hb_codepoint_t glyph,
110 void *user_data HB_UNUSED)
111 {
112 if (font->parent)
113 return font->parent_scale_y_distance (hb_font_get_glyph_v_advance (font->par ent, glyph));
114
115 return font->y_scale;
116 }
117
118 static hb_bool_t
119 hb_font_get_glyph_h_origin_nil (hb_font_t *font HB_UNUSED,
120 void *font_data HB_UNUSED,
121 hb_codepoint_t glyph,
122 hb_position_t *x,
123 hb_position_t *y,
124 void *user_data HB_UNUSED)
125 {
126 if (font->parent) {
127 hb_bool_t ret = hb_font_get_glyph_h_origin (font->parent,
128 glyph,
129 x, y);
130 if (ret)
131 font->parent_scale_position (x, y);
132 return ret;
133 }
134
135 *x = *y = 0;
136 return false;
137 }
138
139 static hb_bool_t
140 hb_font_get_glyph_v_origin_nil (hb_font_t *font HB_UNUSED,
141 void *font_data HB_UNUSED,
142 hb_codepoint_t glyph,
143 hb_position_t *x,
144 hb_position_t *y,
145 void *user_data HB_UNUSED)
146 {
147 if (font->parent) {
148 hb_bool_t ret = hb_font_get_glyph_v_origin (font->parent,
149 glyph,
150 x, y);
151 if (ret)
152 font->parent_scale_position (x, y);
153 return ret;
154 }
155
156 *x = *y = 0;
157 return false;
158 }
159
160 static hb_position_t
161 hb_font_get_glyph_h_kerning_nil (hb_font_t *font HB_UNUSED,
162 void *font_data HB_UNUSED,
163 hb_codepoint_t left_glyph,
164 hb_codepoint_t right_glyph,
165 void *user_data HB_UNUSED)
166 {
167 if (font->parent)
168 return font->parent_scale_x_distance (hb_font_get_glyph_h_kerning (font->par ent, left_glyph, right_glyph));
169
170 return 0;
171 }
172
173 static hb_position_t
174 hb_font_get_glyph_v_kerning_nil (hb_font_t *font HB_UNUSED,
175 void *font_data HB_UNUSED,
176 hb_codepoint_t top_glyph,
177 hb_codepoint_t bottom_glyph,
178 void *user_data HB_UNUSED)
179 {
180 if (font->parent)
181 return font->parent_scale_y_distance (hb_font_get_glyph_v_kerning (font->par ent, top_glyph, bottom_glyph));
182
183 return 0;
184 }
185
186 static hb_bool_t
187 hb_font_get_glyph_extents_nil (hb_font_t *font HB_UNUSED,
188 void *font_data HB_UNUSED,
189 hb_codepoint_t glyph,
190 hb_glyph_extents_t *extents,
191 void *user_data HB_UNUSED)
192 {
193 if (font->parent) {
194 hb_bool_t ret = hb_font_get_glyph_extents (font->parent,
195 glyph,
196 extents);
197 if (ret) {
198 font->parent_scale_position (&extents->x_bearing, &extents->y_bearing);
199 font->parent_scale_distance (&extents->width, &extents->height);
200 }
201 return ret;
202 }
203
204 memset (extents, 0, sizeof (*extents));
205 return false;
206 }
207
208 static hb_bool_t
209 hb_font_get_glyph_contour_point_nil (hb_font_t *font HB_UNUSED,
210 void *font_data HB_UNUSED,
211 hb_codepoint_t glyph,
212 unsigned int point_index,
213 hb_position_t *x,
214 hb_position_t *y,
215 void *user_data HB_UNUSED)
216 {
217 if (font->parent) {
218 hb_bool_t ret = hb_font_get_glyph_contour_point (font->parent,
219 glyph, point_index,
220 x, y);
221 if (ret)
222 font->parent_scale_position (x, y);
223 return ret;
224 }
225
226 *x = *y = 0;
227 return false;
228 }
229
230
231 static hb_font_funcs_t _hb_font_funcs_nil = {
232 HB_OBJECT_HEADER_STATIC,
233
234 true, /* immutable */
235
236 {
237 #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_nil,
238 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
239 #undef HB_FONT_FUNC_IMPLEMENT
240 }
241 };
242 #endif 79 #endif
243
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-shaper-private.hh ('k') | third_party/harfbuzz-ng/src/hb-unicode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698