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

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

Issue 70193010: Update harfbuzz-ng to 0.9.24 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-font.h ('k') | third_party/harfbuzz-ng/src/hb-font-private.hh » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright © 2009 Red Hat, Inc. 2 * Copyright © 2009 Red Hat, Inc.
3 * Copyright © 2012 Google, Inc. 3 * Copyright © 2012 Google, Inc.
4 * 4 *
5 * This is part of HarfBuzz, a text shaping library. 5 * This is part of HarfBuzz, a text shaping library.
6 * 6 *
7 * Permission is hereby granted, without written agreement and without 7 * Permission is hereby granted, without written agreement and without
8 * license or royalty fees, to use, copy, modify, and distribute this 8 * license or royalty fees, to use, copy, modify, and distribute this
9 * software and its documentation for any purpose, provided that the 9 * software and its documentation for any purpose, provided that the
10 * above copyright notice and the following two paragraphs appear in 10 * above copyright notice and the following two paragraphs appear in
(...skipping 23 matching lines...) Expand all
34 #include "hb-blob.h" 34 #include "hb-blob.h"
35 #include "hb-open-file-private.hh" 35 #include "hb-open-file-private.hh"
36 #include "hb-ot-head-table.hh" 36 #include "hb-ot-head-table.hh"
37 #include "hb-ot-maxp-table.hh" 37 #include "hb-ot-maxp-table.hh"
38 38
39 #include "hb-cache-private.hh" 39 #include "hb-cache-private.hh"
40 40
41 #include <string.h> 41 #include <string.h>
42 42
43 43
44
45 /* 44 /*
46 * hb_font_funcs_t 45 * hb_font_funcs_t
47 */ 46 */
48 47
49 static hb_bool_t 48 static hb_bool_t
50 hb_font_get_glyph_nil (hb_font_t *font, 49 hb_font_get_glyph_nil (hb_font_t *font,
51 void *font_data HB_UNUSED, 50 void *font_data HB_UNUSED,
52 hb_codepoint_t unicode, 51 hb_codepoint_t unicode,
53 hb_codepoint_t variation_selector, 52 hb_codepoint_t variation_selector,
54 hb_codepoint_t *glyph, 53 hb_codepoint_t *glyph,
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 true, /* immutable */ 223 true, /* immutable */
225 224
226 { 225 {
227 #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_nil, 226 #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_nil,
228 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS 227 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
229 #undef HB_FONT_FUNC_IMPLEMENT 228 #undef HB_FONT_FUNC_IMPLEMENT
230 } 229 }
231 }; 230 };
232 231
233 232
233 /**
234 * hb_font_funcs_create: (Xconstructor)
235 *
236 *
237 *
238 * Return value: (transfer full):
239 *
240 * Since: 1.0
241 **/
234 hb_font_funcs_t * 242 hb_font_funcs_t *
235 hb_font_funcs_create (void) 243 hb_font_funcs_create (void)
236 { 244 {
237 hb_font_funcs_t *ffuncs; 245 hb_font_funcs_t *ffuncs;
238 246
239 if (!(ffuncs = hb_object_create<hb_font_funcs_t> ())) 247 if (!(ffuncs = hb_object_create<hb_font_funcs_t> ()))
240 return hb_font_funcs_get_empty (); 248 return hb_font_funcs_get_empty ();
241 249
242 ffuncs->get = _hb_font_funcs_nil.get; 250 ffuncs->get = _hb_font_funcs_nil.get;
243 251
244 return ffuncs; 252 return ffuncs;
245 } 253 }
246 254
255 /**
256 * hb_font_funcs_get_empty:
257 *
258 *
259 *
260 * Return value: (transfer full):
261 *
262 * Since: 1.0
263 **/
247 hb_font_funcs_t * 264 hb_font_funcs_t *
248 hb_font_funcs_get_empty (void) 265 hb_font_funcs_get_empty (void)
249 { 266 {
250 return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil); 267 return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil);
251 } 268 }
252 269
270 /**
271 * hb_font_funcs_reference: (skip)
272 * @ffuncs: font functions.
273 *
274 *
275 *
276 * Return value:
277 *
278 * Since: 1.0
279 **/
253 hb_font_funcs_t * 280 hb_font_funcs_t *
254 hb_font_funcs_reference (hb_font_funcs_t *ffuncs) 281 hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
255 { 282 {
256 return hb_object_reference (ffuncs); 283 return hb_object_reference (ffuncs);
257 } 284 }
258 285
286 /**
287 * hb_font_funcs_destroy: (skip)
288 * @ffuncs: font functions.
289 *
290 *
291 *
292 * Since: 1.0
293 **/
259 void 294 void
260 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs) 295 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
261 { 296 {
262 if (!hb_object_destroy (ffuncs)) return; 297 if (!hb_object_destroy (ffuncs)) return;
263 298
264 #define HB_FONT_FUNC_IMPLEMENT(name) if (ffuncs->destroy.name) \ 299 #define HB_FONT_FUNC_IMPLEMENT(name) if (ffuncs->destroy.name) \
265 ffuncs->destroy.name (ffuncs->user_data.name); 300 ffuncs->destroy.name (ffuncs->user_data.name);
266 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS 301 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
267 #undef HB_FONT_FUNC_IMPLEMENT 302 #undef HB_FONT_FUNC_IMPLEMENT
268 303
269 free (ffuncs); 304 free (ffuncs);
270 } 305 }
271 306
307 /**
308 * hb_font_funcs_set_user_data: (skip)
309 * @ffuncs: font functions.
310 * @key:
311 * @data:
312 * @destroy:
313 * @replace:
314 *
315 *
316 *
317 * Return value:
318 *
319 * Since: 1.0
320 **/
272 hb_bool_t 321 hb_bool_t
273 hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs, 322 hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
274 hb_user_data_key_t *key, 323 hb_user_data_key_t *key,
275 void * data, 324 void * data,
276 hb_destroy_func_t destroy, 325 hb_destroy_func_t destroy,
277 hb_bool_t replace) 326 hb_bool_t replace)
278 { 327 {
279 return hb_object_set_user_data (ffuncs, key, data, destroy, replace); 328 return hb_object_set_user_data (ffuncs, key, data, destroy, replace);
280 } 329 }
281 330
331 /**
332 * hb_font_funcs_get_user_data: (skip)
333 * @ffuncs: font functions.
334 * @key:
335 *
336 *
337 *
338 * Return value: (transfer none):
339 *
340 * Since: 1.0
341 **/
282 void * 342 void *
283 hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs, 343 hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
284 hb_user_data_key_t *key) 344 hb_user_data_key_t *key)
285 { 345 {
286 return hb_object_get_user_data (ffuncs, key); 346 return hb_object_get_user_data (ffuncs, key);
287 } 347 }
288 348
289 349
350 /**
351 * hb_font_funcs_make_immutable:
352 * @ffuncs: font functions.
353 *
354 *
355 *
356 * Since: 1.0
357 **/
290 void 358 void
291 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs) 359 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
292 { 360 {
293 if (hb_object_is_inert (ffuncs)) 361 if (hb_object_is_inert (ffuncs))
294 return; 362 return;
295 363
296 ffuncs->immutable = true; 364 ffuncs->immutable = true;
297 } 365 }
298 366
367 /**
368 * hb_font_funcs_is_immutable:
369 * @ffuncs: font functions.
370 *
371 *
372 *
373 * Return value:
374 *
375 * Since: 1.0
376 **/
299 hb_bool_t 377 hb_bool_t
300 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs) 378 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs)
301 { 379 {
302 return ffuncs->immutable; 380 return ffuncs->immutable;
303 } 381 }
304 382
305 383
306 #define HB_FONT_FUNC_IMPLEMENT(name) \ 384 #define HB_FONT_FUNC_IMPLEMENT(name) \
307 \ 385 \
308 void \ 386 void \
(...skipping 21 matching lines...) Expand all
330 ffuncs->destroy.name = NULL; \ 408 ffuncs->destroy.name = NULL; \
331 } \ 409 } \
332 } 410 }
333 411
334 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS 412 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
335 #undef HB_FONT_FUNC_IMPLEMENT 413 #undef HB_FONT_FUNC_IMPLEMENT
336 414
337 415
338 /* Public getters */ 416 /* Public getters */
339 417
418 /**
419 * hb_font_get_glyph:
420 * @font: a font.
421 * @unicode:
422 * @variation_selector:
423 * @glyph: (out):
424 *
425 *
426 *
427 * Return value:
428 *
429 * Since: 1.0
430 **/
340 hb_bool_t 431 hb_bool_t
341 hb_font_get_glyph (hb_font_t *font, 432 hb_font_get_glyph (hb_font_t *font,
342 hb_codepoint_t unicode, hb_codepoint_t variation_selector, 433 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
343 hb_codepoint_t *glyph) 434 hb_codepoint_t *glyph)
344 { 435 {
345 return font->get_glyph (unicode, variation_selector, glyph); 436 return font->get_glyph (unicode, variation_selector, glyph);
346 } 437 }
347 438
439 /**
440 * hb_font_get_glyph_h_advance:
441 * @font: a font.
442 * @glyph:
443 *
444 *
445 *
446 * Return value:
447 *
448 * Since: 1.0
449 **/
348 hb_position_t 450 hb_position_t
349 hb_font_get_glyph_h_advance (hb_font_t *font, 451 hb_font_get_glyph_h_advance (hb_font_t *font,
350 hb_codepoint_t glyph) 452 hb_codepoint_t glyph)
351 { 453 {
352 return font->get_glyph_h_advance (glyph); 454 return font->get_glyph_h_advance (glyph);
353 } 455 }
354 456
457 /**
458 * hb_font_get_glyph_v_advance:
459 * @font: a font.
460 * @glyph:
461 *
462 *
463 *
464 * Return value:
465 *
466 * Since: 1.0
467 **/
355 hb_position_t 468 hb_position_t
356 hb_font_get_glyph_v_advance (hb_font_t *font, 469 hb_font_get_glyph_v_advance (hb_font_t *font,
357 hb_codepoint_t glyph) 470 hb_codepoint_t glyph)
358 { 471 {
359 return font->get_glyph_v_advance (glyph); 472 return font->get_glyph_v_advance (glyph);
360 } 473 }
361 474
475 /**
476 * hb_font_get_glyph_h_origin:
477 * @font: a font.
478 * @glyph:
479 * @x: (out):
480 * @y: (out):
481 *
482 *
483 *
484 * Return value:
485 *
486 * Since: 1.0
487 **/
362 hb_bool_t 488 hb_bool_t
363 hb_font_get_glyph_h_origin (hb_font_t *font, 489 hb_font_get_glyph_h_origin (hb_font_t *font,
364 hb_codepoint_t glyph, 490 hb_codepoint_t glyph,
365 hb_position_t *x, hb_position_t *y) 491 hb_position_t *x, hb_position_t *y)
366 { 492 {
367 return font->get_glyph_h_origin (glyph, x, y); 493 return font->get_glyph_h_origin (glyph, x, y);
368 } 494 }
369 495
496 /**
497 * hb_font_get_glyph_v_origin:
498 * @font: a font.
499 * @glyph:
500 * @x: (out):
501 * @y: (out):
502 *
503 *
504 *
505 * Return value:
506 *
507 * Since: 1.0
508 **/
370 hb_bool_t 509 hb_bool_t
371 hb_font_get_glyph_v_origin (hb_font_t *font, 510 hb_font_get_glyph_v_origin (hb_font_t *font,
372 hb_codepoint_t glyph, 511 hb_codepoint_t glyph,
373 hb_position_t *x, hb_position_t *y) 512 hb_position_t *x, hb_position_t *y)
374 { 513 {
375 return font->get_glyph_v_origin (glyph, x, y); 514 return font->get_glyph_v_origin (glyph, x, y);
376 } 515 }
377 516
517 /**
518 * hb_font_get_glyph_h_kerning:
519 * @font: a font.
520 * @left_glyph:
521 * @right_glyph:
522 *
523 *
524 *
525 * Return value:
526 *
527 * Since: 1.0
528 **/
378 hb_position_t 529 hb_position_t
379 hb_font_get_glyph_h_kerning (hb_font_t *font, 530 hb_font_get_glyph_h_kerning (hb_font_t *font,
380 hb_codepoint_t left_glyph, hb_codepoint_t right_gly ph) 531 hb_codepoint_t left_glyph, hb_codepoint_t right_gly ph)
381 { 532 {
382 return font->get_glyph_h_kerning (left_glyph, right_glyph); 533 return font->get_glyph_h_kerning (left_glyph, right_glyph);
383 } 534 }
384 535
536 /**
537 * hb_font_get_glyph_v_kerning:
538 * @font: a font.
539 * @top_glyph:
540 * @bottom_glyph:
541 *
542 *
543 *
544 * Return value:
545 *
546 * Since: 1.0
547 **/
385 hb_position_t 548 hb_position_t
386 hb_font_get_glyph_v_kerning (hb_font_t *font, 549 hb_font_get_glyph_v_kerning (hb_font_t *font,
387 » » » hb_codepoint_t left_glyph, hb_codepoint_t right_gly ph) 550 » » » hb_codepoint_t top_glyph, hb_codepoint_t bottom_gly ph)
388 { 551 {
389 return font->get_glyph_v_kerning (left_glyph, right_glyph); 552 return font->get_glyph_v_kerning (top_glyph, bottom_glyph);
390 } 553 }
391 554
555 /**
556 * hb_font_get_glyph_extents:
557 * @font: a font.
558 * @glyph:
559 * @extents: (out):
560 *
561 *
562 *
563 * Return value:
564 *
565 * Since: 1.0
566 **/
392 hb_bool_t 567 hb_bool_t
393 hb_font_get_glyph_extents (hb_font_t *font, 568 hb_font_get_glyph_extents (hb_font_t *font,
394 hb_codepoint_t glyph, 569 hb_codepoint_t glyph,
395 hb_glyph_extents_t *extents) 570 hb_glyph_extents_t *extents)
396 { 571 {
397 return font->get_glyph_extents (glyph, extents); 572 return font->get_glyph_extents (glyph, extents);
398 } 573 }
399 574
575 /**
576 * hb_font_get_glyph_contour_point:
577 * @font: a font.
578 * @glyph:
579 * @point_index:
580 * @x: (out):
581 * @y: (out):
582 *
583 *
584 *
585 * Return value:
586 *
587 * Since: 1.0
588 **/
400 hb_bool_t 589 hb_bool_t
401 hb_font_get_glyph_contour_point (hb_font_t *font, 590 hb_font_get_glyph_contour_point (hb_font_t *font,
402 hb_codepoint_t glyph, unsigned int point_index, 591 hb_codepoint_t glyph, unsigned int point_index,
403 hb_position_t *x, hb_position_t *y) 592 hb_position_t *x, hb_position_t *y)
404 { 593 {
405 return font->get_glyph_contour_point (glyph, point_index, x, y); 594 return font->get_glyph_contour_point (glyph, point_index, x, y);
406 } 595 }
407 596
597 /**
598 * hb_font_get_glyph_name:
599 * @font: a font.
600 * @glyph:
601 * @name: (array length=size):
602 * @size:
603 *
604 *
605 *
606 * Return value:
607 *
608 * Since: 1.0
609 **/
408 hb_bool_t 610 hb_bool_t
409 hb_font_get_glyph_name (hb_font_t *font, 611 hb_font_get_glyph_name (hb_font_t *font,
410 hb_codepoint_t glyph, 612 hb_codepoint_t glyph,
411 char *name, unsigned int size) 613 char *name, unsigned int size)
412 { 614 {
413 return font->get_glyph_name (glyph, name, size); 615 return font->get_glyph_name (glyph, name, size);
414 } 616 }
415 617
618 /**
619 * hb_font_get_glyph_from_name:
620 * @font: a font.
621 * @name: (array length=len):
622 * @len:
623 * @glyph: (out):
624 *
625 *
626 *
627 * Return value:
628 *
629 * Since: 1.0
630 **/
416 hb_bool_t 631 hb_bool_t
417 hb_font_get_glyph_from_name (hb_font_t *font, 632 hb_font_get_glyph_from_name (hb_font_t *font,
418 const char *name, int len, /* -1 means nul-terminat ed */ 633 const char *name, int len, /* -1 means nul-terminat ed */
419 hb_codepoint_t *glyph) 634 hb_codepoint_t *glyph)
420 { 635 {
421 return font->get_glyph_from_name (name, len, glyph); 636 return font->get_glyph_from_name (name, len, glyph);
422 } 637 }
423 638
424 639
425 /* A bit higher-level, and with fallback */ 640 /* A bit higher-level, and with fallback */
426 641
642 /**
643 * hb_font_get_glyph_advance_for_direction:
644 * @font: a font.
645 * @glyph:
646 * @direction:
647 * @x: (out):
648 * @y: (out):
649 *
650 *
651 *
652 * Since: 1.0
653 **/
427 void 654 void
428 hb_font_get_glyph_advance_for_direction (hb_font_t *font, 655 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
429 hb_codepoint_t glyph, 656 hb_codepoint_t glyph,
430 hb_direction_t direction, 657 hb_direction_t direction,
431 hb_position_t *x, hb_position_t *y) 658 hb_position_t *x, hb_position_t *y)
432 { 659 {
433 return font->get_glyph_advance_for_direction (glyph, direction, x, y); 660 return font->get_glyph_advance_for_direction (glyph, direction, x, y);
434 } 661 }
435 662
663 /**
664 * hb_font_get_glyph_origin_for_direction:
665 * @font: a font.
666 * @glyph:
667 * @direction:
668 * @x: (out):
669 * @y: (out):
670 *
671 *
672 *
673 * Since: 1.0
674 **/
436 void 675 void
437 hb_font_get_glyph_origin_for_direction (hb_font_t *font, 676 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
438 hb_codepoint_t glyph, 677 hb_codepoint_t glyph,
439 hb_direction_t direction, 678 hb_direction_t direction,
440 hb_position_t *x, hb_position_t *y) 679 hb_position_t *x, hb_position_t *y)
441 { 680 {
442 return font->get_glyph_origin_for_direction (glyph, direction, x, y); 681 return font->get_glyph_origin_for_direction (glyph, direction, x, y);
443 } 682 }
444 683
684 /**
685 * hb_font_add_glyph_origin_for_direction:
686 * @font: a font.
687 * @glyph:
688 * @direction:
689 * @x: (out):
690 * @y: (out):
691 *
692 *
693 *
694 * Since: 1.0
695 **/
445 void 696 void
446 hb_font_add_glyph_origin_for_direction (hb_font_t *font, 697 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
447 hb_codepoint_t glyph, 698 hb_codepoint_t glyph,
448 hb_direction_t direction, 699 hb_direction_t direction,
449 hb_position_t *x, hb_position_t *y) 700 hb_position_t *x, hb_position_t *y)
450 { 701 {
451 return font->add_glyph_origin_for_direction (glyph, direction, x, y); 702 return font->add_glyph_origin_for_direction (glyph, direction, x, y);
452 } 703 }
453 704
705 /**
706 * hb_font_subtract_glyph_origin_for_direction:
707 * @font: a font.
708 * @glyph:
709 * @direction:
710 * @x: (out):
711 * @y: (out):
712 *
713 *
714 *
715 * Since: 1.0
716 **/
454 void 717 void
455 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font, 718 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
456 hb_codepoint_t glyph, 719 hb_codepoint_t glyph,
457 hb_direction_t direction, 720 hb_direction_t direction,
458 hb_position_t *x, hb_position_t *y) 721 hb_position_t *x, hb_position_t *y)
459 { 722 {
460 return font->subtract_glyph_origin_for_direction (glyph, direction, x, y); 723 return font->subtract_glyph_origin_for_direction (glyph, direction, x, y);
461 } 724 }
462 725
726 /**
727 * hb_font_get_glyph_kerning_for_direction:
728 * @font: a font.
729 * @first_glyph:
730 * @second_glyph:
731 * @direction:
732 * @x: (out):
733 * @y: (out):
734 *
735 *
736 *
737 * Since: 1.0
738 **/
463 void 739 void
464 hb_font_get_glyph_kerning_for_direction (hb_font_t *font, 740 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
465 hb_codepoint_t first_glyph, hb_codepoin t_t second_glyph, 741 hb_codepoint_t first_glyph, hb_codepoin t_t second_glyph,
466 hb_direction_t direction, 742 hb_direction_t direction,
467 hb_position_t *x, hb_position_t *y) 743 hb_position_t *x, hb_position_t *y)
468 { 744 {
469 return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direc tion, x, y); 745 return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direc tion, x, y);
470 } 746 }
471 747
748 /**
749 * hb_font_get_glyph_extents_for_origin:
750 * @font: a font.
751 * @glyph:
752 * @direction:
753 * @extents: (out):
754 *
755 *
756 *
757 * Return value:
758 *
759 * Since: 1.0
760 **/
472 hb_bool_t 761 hb_bool_t
473 hb_font_get_glyph_extents_for_origin (hb_font_t *font, 762 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
474 hb_codepoint_t glyph, 763 hb_codepoint_t glyph,
475 hb_direction_t direction, 764 hb_direction_t direction,
476 hb_glyph_extents_t *extents) 765 hb_glyph_extents_t *extents)
477 { 766 {
478 return font->get_glyph_extents_for_origin (glyph, direction, extents); 767 return font->get_glyph_extents_for_origin (glyph, direction, extents);
479 } 768 }
480 769
770 /**
771 * hb_font_get_glyph_contour_point_for_origin:
772 * @font: a font.
773 * @glyph:
774 * @point_index:
775 * @direction:
776 * @x: (out):
777 * @y: (out):
778 *
779 *
780 *
781 * Return value:
782 *
783 * Since: 1.0
784 **/
481 hb_bool_t 785 hb_bool_t
482 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font, 786 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
483 hb_codepoint_t glyph, unsigned int p oint_index, 787 hb_codepoint_t glyph, unsigned int p oint_index,
484 hb_direction_t direction, 788 hb_direction_t direction,
485 hb_position_t *x, hb_position_t *y) 789 hb_position_t *x, hb_position_t *y)
486 { 790 {
487 return font->get_glyph_contour_point_for_origin (glyph, point_index, direction , x, y); 791 return font->get_glyph_contour_point_for_origin (glyph, point_index, direction , x, y);
488 } 792 }
489 793
490 /* Generates gidDDD if glyph has no name. */ 794 /* Generates gidDDD if glyph has no name. */
795 /**
796 * hb_font_glyph_to_string:
797 * @font: a font.
798 * @glyph:
799 * @s: (array length=size):
800 * @size:
801 *
802 *
803 *
804 * Since: 1.0
805 **/
491 void 806 void
492 hb_font_glyph_to_string (hb_font_t *font, 807 hb_font_glyph_to_string (hb_font_t *font,
493 hb_codepoint_t glyph, 808 hb_codepoint_t glyph,
494 char *s, unsigned int size) 809 char *s, unsigned int size)
495 { 810 {
496 font->glyph_to_string (glyph, s, size); 811 font->glyph_to_string (glyph, s, size);
497 } 812 }
498 813
499 /* Parses gidDDD and uniUUUU strings automatically. */ 814 /* Parses gidDDD and uniUUUU strings automatically. */
815 /**
816 * hb_font_glyph_from_string:
817 * @font: a font.
818 * @s: (array length=len):
819 * @len:
820 * @glyph: (out):
821 *
822 *
823 *
824 * Return value:
825 *
826 * Since: 1.0
827 **/
500 hb_bool_t 828 hb_bool_t
501 hb_font_glyph_from_string (hb_font_t *font, 829 hb_font_glyph_from_string (hb_font_t *font,
502 const char *s, int len, /* -1 means nul-terminated */ 830 const char *s, int len, /* -1 means nul-terminated */
503 hb_codepoint_t *glyph) 831 hb_codepoint_t *glyph)
504 { 832 {
505 return font->glyph_from_string (s, len, glyph); 833 return font->glyph_from_string (s, len, glyph);
506 } 834 }
507 835
508 836
509 /* 837 /*
510 * hb_face_t
511 */
512
513 static const hb_face_t _hb_face_nil = {
514 HB_OBJECT_HEADER_STATIC,
515
516 true, /* immutable */
517
518 NULL, /* reference_table_func */
519 NULL, /* user_data */
520 NULL, /* destroy */
521
522 0, /* index */
523 1000, /* upem */
524 0, /* num_glyphs */
525
526 {
527 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
528 #include "hb-shaper-list.hh"
529 #undef HB_SHAPER_IMPLEMENT
530 },
531
532 NULL, /* shape_plans */
533 };
534
535
536 hb_face_t *
537 hb_face_create_for_tables (hb_reference_table_func_t reference_table_func,
538 void *user_data,
539 hb_destroy_func_t destroy)
540 {
541 hb_face_t *face;
542
543 if (!reference_table_func || !(face = hb_object_create<hb_face_t> ())) {
544 if (destroy)
545 destroy (user_data);
546 return hb_face_get_empty ();
547 }
548
549 face->reference_table_func = reference_table_func;
550 face->user_data = user_data;
551 face->destroy = destroy;
552
553 face->upem = 0;
554 face->num_glyphs = (unsigned int) -1;
555
556 return face;
557 }
558
559
560 typedef struct hb_face_for_data_closure_t {
561 hb_blob_t *blob;
562 unsigned int index;
563 } hb_face_for_data_closure_t;
564
565 static hb_face_for_data_closure_t *
566 _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
567 {
568 hb_face_for_data_closure_t *closure;
569
570 closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_clos ure_t));
571 if (unlikely (!closure))
572 return NULL;
573
574 closure->blob = blob;
575 closure->index = index;
576
577 return closure;
578 }
579
580 static void
581 _hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
582 {
583 hb_blob_destroy (closure->blob);
584 free (closure);
585 }
586
587 static hb_blob_t *
588 _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
589 {
590 hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data;
591
592 if (tag == HB_TAG_NONE)
593 return hb_blob_reference (data->blob);
594
595 const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lo ck_instance (data->blob);
596 const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
597
598 const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
599
600 hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.len gth);
601
602 return blob;
603 }
604
605 hb_face_t *
606 hb_face_create (hb_blob_t *blob,
607 unsigned int index)
608 {
609 hb_face_t *face;
610
611 if (unlikely (!blob || !hb_blob_get_length (blob)))
612 return hb_face_get_empty ();
613
614 hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sa nitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
615
616 if (unlikely (!closure))
617 return hb_face_get_empty ();
618
619 face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
620 closure,
621 (hb_destroy_func_t) _hb_face_for_data_closur e_destroy);
622
623 hb_face_set_index (face, index);
624
625 return face;
626 }
627
628 hb_face_t *
629 hb_face_get_empty (void)
630 {
631 return const_cast<hb_face_t *> (&_hb_face_nil);
632 }
633
634
635 hb_face_t *
636 hb_face_reference (hb_face_t *face)
637 {
638 return hb_object_reference (face);
639 }
640
641 void
642 hb_face_destroy (hb_face_t *face)
643 {
644 if (!hb_object_destroy (face)) return;
645
646 for (hb_face_t::plan_node_t *node = face->shape_plans; node; )
647 {
648 hb_face_t::plan_node_t *next = node->next;
649 hb_shape_plan_destroy (node->shape_plan);
650 free (node);
651 node = next;
652 }
653
654 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, face);
655 #include "hb-shaper-list.hh"
656 #undef HB_SHAPER_IMPLEMENT
657
658 if (face->destroy)
659 face->destroy (face->user_data);
660
661 free (face);
662 }
663
664 hb_bool_t
665 hb_face_set_user_data (hb_face_t *face,
666 hb_user_data_key_t *key,
667 void * data,
668 hb_destroy_func_t destroy,
669 hb_bool_t replace)
670 {
671 return hb_object_set_user_data (face, key, data, destroy, replace);
672 }
673
674 void *
675 hb_face_get_user_data (hb_face_t *face,
676 hb_user_data_key_t *key)
677 {
678 return hb_object_get_user_data (face, key);
679 }
680
681 void
682 hb_face_make_immutable (hb_face_t *face)
683 {
684 if (hb_object_is_inert (face))
685 return;
686
687 face->immutable = true;
688 }
689
690 hb_bool_t
691 hb_face_is_immutable (hb_face_t *face)
692 {
693 return face->immutable;
694 }
695
696
697 hb_blob_t *
698 hb_face_reference_table (hb_face_t *face,
699 hb_tag_t tag)
700 {
701 return face->reference_table (tag);
702 }
703
704 hb_blob_t *
705 hb_face_reference_blob (hb_face_t *face)
706 {
707 return face->reference_table (HB_TAG_NONE);
708 }
709
710 void
711 hb_face_set_index (hb_face_t *face,
712 unsigned int index)
713 {
714 if (hb_object_is_inert (face))
715 return;
716
717 face->index = index;
718 }
719
720 unsigned int
721 hb_face_get_index (hb_face_t *face)
722 {
723 return face->index;
724 }
725
726 void
727 hb_face_set_upem (hb_face_t *face,
728 unsigned int upem)
729 {
730 if (hb_object_is_inert (face))
731 return;
732
733 face->upem = upem;
734 }
735
736 unsigned int
737 hb_face_get_upem (hb_face_t *face)
738 {
739 return face->get_upem ();
740 }
741
742 void
743 hb_face_t::load_upem (void) const
744 {
745 hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_ OT_TAG_head));
746 const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob );
747 upem = head_table->get_upem ();
748 hb_blob_destroy (head_blob);
749 }
750
751 void
752 hb_face_set_glyph_count (hb_face_t *face,
753 unsigned int glyph_count)
754 {
755 if (hb_object_is_inert (face))
756 return;
757
758 face->num_glyphs = glyph_count;
759 }
760
761 unsigned int
762 hb_face_get_glyph_count (hb_face_t *face)
763 {
764 return face->get_num_glyphs ();
765 }
766
767 void
768 hb_face_t::load_num_glyphs (void) const
769 {
770 hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>::sanitize (reference_table (HB_ OT_TAG_maxp));
771 const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob );
772 num_glyphs = maxp_table->get_num_glyphs ();
773 hb_blob_destroy (maxp_blob);
774 }
775
776
777 /*
778 * hb_font_t 838 * hb_font_t
779 */ 839 */
780 840
841 /**
842 * hb_font_create: (Xconstructor)
843 * @face: a face.
844 *
845 *
846 *
847 * Return value: (transfer full):
848 *
849 * Since: 1.0
850 **/
781 hb_font_t * 851 hb_font_t *
782 hb_font_create (hb_face_t *face) 852 hb_font_create (hb_face_t *face)
783 { 853 {
784 hb_font_t *font; 854 hb_font_t *font;
785 855
786 if (unlikely (!face)) 856 if (unlikely (!face))
787 face = hb_face_get_empty (); 857 face = hb_face_get_empty ();
788 if (unlikely (hb_object_is_inert (face))) 858 if (unlikely (hb_object_is_inert (face)))
789 return hb_font_get_empty (); 859 return hb_font_get_empty ();
790 if (!(font = hb_object_create<hb_font_t> ())) 860 if (!(font = hb_object_create<hb_font_t> ()))
791 return hb_font_get_empty (); 861 return hb_font_get_empty ();
792 862
793 hb_face_make_immutable (face); 863 hb_face_make_immutable (face);
794 font->face = hb_face_reference (face); 864 font->face = hb_face_reference (face);
795 font->klass = hb_font_funcs_get_empty (); 865 font->klass = hb_font_funcs_get_empty ();
796 866
797 return font; 867 return font;
798 } 868 }
799 869
870 /**
871 * hb_font_create_sub_font:
872 * @parent: parent font.
873 *
874 *
875 *
876 * Return value: (transfer full):
877 *
878 * Since: 1.0
879 **/
800 hb_font_t * 880 hb_font_t *
801 hb_font_create_sub_font (hb_font_t *parent) 881 hb_font_create_sub_font (hb_font_t *parent)
802 { 882 {
803 if (unlikely (!parent)) 883 if (unlikely (!parent))
804 return hb_font_get_empty (); 884 return hb_font_get_empty ();
805 885
806 hb_font_t *font = hb_font_create (parent->face); 886 hb_font_t *font = hb_font_create (parent->face);
807 887
808 if (unlikely (hb_object_is_inert (font))) 888 if (unlikely (hb_object_is_inert (font)))
809 return font; 889 return font;
810 890
811 hb_font_make_immutable (parent); 891 hb_font_make_immutable (parent);
812 font->parent = hb_font_reference (parent); 892 font->parent = hb_font_reference (parent);
813 893
814 font->x_scale = parent->x_scale; 894 font->x_scale = parent->x_scale;
815 font->y_scale = parent->y_scale; 895 font->y_scale = parent->y_scale;
816 font->x_ppem = parent->x_ppem; 896 font->x_ppem = parent->x_ppem;
817 font->y_ppem = parent->y_ppem; 897 font->y_ppem = parent->y_ppem;
818 898
819 return font; 899 return font;
820 } 900 }
821 901
902 /**
903 * hb_font_get_empty:
904 *
905 *
906 *
907 * Return value: (transfer full)
908 *
909 * Since: 1.0
910 **/
822 hb_font_t * 911 hb_font_t *
823 hb_font_get_empty (void) 912 hb_font_get_empty (void)
824 { 913 {
825 static const hb_font_t _hb_font_nil = { 914 static const hb_font_t _hb_font_nil = {
826 HB_OBJECT_HEADER_STATIC, 915 HB_OBJECT_HEADER_STATIC,
827 916
828 true, /* immutable */ 917 true, /* immutable */
829 918
830 NULL, /* parent */ 919 NULL, /* parent */
831 const_cast<hb_face_t *> (&_hb_face_nil), 920 const_cast<hb_face_t *> (&_hb_face_nil),
(...skipping 11 matching lines...) Expand all
843 { 932 {
844 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, 933 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
845 #include "hb-shaper-list.hh" 934 #include "hb-shaper-list.hh"
846 #undef HB_SHAPER_IMPLEMENT 935 #undef HB_SHAPER_IMPLEMENT
847 } 936 }
848 }; 937 };
849 938
850 return const_cast<hb_font_t *> (&_hb_font_nil); 939 return const_cast<hb_font_t *> (&_hb_font_nil);
851 } 940 }
852 941
942 /**
943 * hb_font_reference: (skip)
944 * @font: a font.
945 *
946 *
947 *
948 * Return value: (transfer full):
949 *
950 * Since: 1.0
951 **/
853 hb_font_t * 952 hb_font_t *
854 hb_font_reference (hb_font_t *font) 953 hb_font_reference (hb_font_t *font)
855 { 954 {
856 return hb_object_reference (font); 955 return hb_object_reference (font);
857 } 956 }
858 957
958 /**
959 * hb_font_destroy: (skip)
960 * @font: a font.
961 *
962 *
963 *
964 * Since: 1.0
965 **/
859 void 966 void
860 hb_font_destroy (hb_font_t *font) 967 hb_font_destroy (hb_font_t *font)
861 { 968 {
862 if (!hb_object_destroy (font)) return; 969 if (!hb_object_destroy (font)) return;
863 970
864 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, font); 971 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, font);
865 #include "hb-shaper-list.hh" 972 #include "hb-shaper-list.hh"
866 #undef HB_SHAPER_IMPLEMENT 973 #undef HB_SHAPER_IMPLEMENT
867 974
868 if (font->destroy) 975 if (font->destroy)
869 font->destroy (font->user_data); 976 font->destroy (font->user_data);
870 977
871 hb_font_destroy (font->parent); 978 hb_font_destroy (font->parent);
872 hb_face_destroy (font->face); 979 hb_face_destroy (font->face);
873 hb_font_funcs_destroy (font->klass); 980 hb_font_funcs_destroy (font->klass);
874 981
875 free (font); 982 free (font);
876 } 983 }
877 984
985 /**
986 * hb_font_set_user_data: (skip)
987 * @font: a font.
988 * @key:
989 * @data:
990 * @destroy:
991 * @replace:
992 *
993 *
994 *
995 * Return value:
996 *
997 * Since: 1.0
998 **/
878 hb_bool_t 999 hb_bool_t
879 hb_font_set_user_data (hb_font_t *font, 1000 hb_font_set_user_data (hb_font_t *font,
880 hb_user_data_key_t *key, 1001 hb_user_data_key_t *key,
881 void * data, 1002 void * data,
882 hb_destroy_func_t destroy, 1003 hb_destroy_func_t destroy,
883 hb_bool_t replace) 1004 hb_bool_t replace)
884 { 1005 {
885 return hb_object_set_user_data (font, key, data, destroy, replace); 1006 return hb_object_set_user_data (font, key, data, destroy, replace);
886 } 1007 }
887 1008
1009 /**
1010 * hb_font_get_user_data: (skip)
1011 * @font: a font.
1012 * @key:
1013 *
1014 *
1015 *
1016 * Return value: (transfer none):
1017 *
1018 * Since: 1.0
1019 **/
888 void * 1020 void *
889 hb_font_get_user_data (hb_font_t *font, 1021 hb_font_get_user_data (hb_font_t *font,
890 hb_user_data_key_t *key) 1022 hb_user_data_key_t *key)
891 { 1023 {
892 return hb_object_get_user_data (font, key); 1024 return hb_object_get_user_data (font, key);
893 } 1025 }
894 1026
1027 /**
1028 * hb_font_make_immutable:
1029 * @font: a font.
1030 *
1031 *
1032 *
1033 * Since: 1.0
1034 **/
895 void 1035 void
896 hb_font_make_immutable (hb_font_t *font) 1036 hb_font_make_immutable (hb_font_t *font)
897 { 1037 {
898 if (hb_object_is_inert (font)) 1038 if (hb_object_is_inert (font))
899 return; 1039 return;
900 1040
901 font->immutable = true; 1041 font->immutable = true;
902 } 1042 }
903 1043
1044 /**
1045 * hb_font_is_immutable:
1046 * @font: a font.
1047 *
1048 *
1049 *
1050 * Return value:
1051 *
1052 * Since: 1.0
1053 **/
904 hb_bool_t 1054 hb_bool_t
905 hb_font_is_immutable (hb_font_t *font) 1055 hb_font_is_immutable (hb_font_t *font)
906 { 1056 {
907 return font->immutable; 1057 return font->immutable;
908 } 1058 }
909 1059
1060 /**
1061 * hb_font_get_parent:
1062 * @font: a font.
1063 *
1064 *
1065 *
1066 * Return value: (transfer none):
1067 *
1068 * Since: 1.0
1069 **/
910 hb_font_t * 1070 hb_font_t *
911 hb_font_get_parent (hb_font_t *font) 1071 hb_font_get_parent (hb_font_t *font)
912 { 1072 {
913 return font->parent; 1073 return font->parent;
914 } 1074 }
915 1075
1076 /**
1077 * hb_font_get_face:
1078 * @font: a font.
1079 *
1080 *
1081 *
1082 * Return value: (transfer none):
1083 *
1084 * Since: 1.0
1085 **/
916 hb_face_t * 1086 hb_face_t *
917 hb_font_get_face (hb_font_t *font) 1087 hb_font_get_face (hb_font_t *font)
918 { 1088 {
919 return font->face; 1089 return font->face;
920 } 1090 }
921 1091
922 1092
1093 /**
1094 * hb_font_set_funcs:
1095 * @font: a font.
1096 * @klass: (closure font_data) (destroy destroy) (scope notified):
1097 * @font_data:
1098 * @destroy:
1099 *
1100 *
1101 *
1102 * Since: 1.0
1103 **/
923 void 1104 void
924 hb_font_set_funcs (hb_font_t *font, 1105 hb_font_set_funcs (hb_font_t *font,
925 hb_font_funcs_t *klass, 1106 hb_font_funcs_t *klass,
926 » » void *user_data, 1107 » » void *font_data,
927 hb_destroy_func_t destroy) 1108 hb_destroy_func_t destroy)
928 { 1109 {
929 if (font->immutable) { 1110 if (font->immutable) {
930 if (destroy) 1111 if (destroy)
931 destroy (user_data); 1112 destroy (font_data);
932 return; 1113 return;
933 } 1114 }
934 1115
935 if (font->destroy) 1116 if (font->destroy)
936 font->destroy (font->user_data); 1117 font->destroy (font->user_data);
937 1118
938 if (!klass) 1119 if (!klass)
939 klass = hb_font_funcs_get_empty (); 1120 klass = hb_font_funcs_get_empty ();
940 1121
941 hb_font_funcs_reference (klass); 1122 hb_font_funcs_reference (klass);
942 hb_font_funcs_destroy (font->klass); 1123 hb_font_funcs_destroy (font->klass);
943 font->klass = klass; 1124 font->klass = klass;
944 font->user_data = user_data; 1125 font->user_data = font_data;
945 font->destroy = destroy; 1126 font->destroy = destroy;
946 } 1127 }
947 1128
1129 /**
1130 * hb_font_set_funcs_data:
1131 * @font: a font.
1132 * @font_data: (destroy destroy) (scope notified):
1133 * @destroy:
1134 *
1135 *
1136 *
1137 * Since: 1.0
1138 **/
948 void 1139 void
949 hb_font_set_funcs_data (hb_font_t *font, 1140 hb_font_set_funcs_data (hb_font_t *font,
950 » » void *user_data, 1141 » » void *font_data,
951 hb_destroy_func_t destroy) 1142 hb_destroy_func_t destroy)
952 { 1143 {
953 /* Destroy user_data? */ 1144 /* Destroy user_data? */
954 if (font->immutable) { 1145 if (font->immutable) {
955 if (destroy) 1146 if (destroy)
956 destroy (user_data); 1147 destroy (font_data);
957 return; 1148 return;
958 } 1149 }
959 1150
960 if (font->destroy) 1151 if (font->destroy)
961 font->destroy (font->user_data); 1152 font->destroy (font->user_data);
962 1153
963 font->user_data = user_data; 1154 font->user_data = font_data;
964 font->destroy = destroy; 1155 font->destroy = destroy;
965 } 1156 }
966 1157
967 1158
1159 /**
1160 * hb_font_set_scale:
1161 * @font: a font.
1162 * @x_scale:
1163 * @y_scale:
1164 *
1165 *
1166 *
1167 * Since: 1.0
1168 **/
968 void 1169 void
969 hb_font_set_scale (hb_font_t *font, 1170 hb_font_set_scale (hb_font_t *font,
970 int x_scale, 1171 int x_scale,
971 int y_scale) 1172 int y_scale)
972 { 1173 {
973 if (font->immutable) 1174 if (font->immutable)
974 return; 1175 return;
975 1176
976 font->x_scale = x_scale; 1177 font->x_scale = x_scale;
977 font->y_scale = y_scale; 1178 font->y_scale = y_scale;
978 } 1179 }
979 1180
1181 /**
1182 * hb_font_get_scale:
1183 * @font: a font.
1184 * @x_scale: (out):
1185 * @y_scale: (out):
1186 *
1187 *
1188 *
1189 * Since: 1.0
1190 **/
980 void 1191 void
981 hb_font_get_scale (hb_font_t *font, 1192 hb_font_get_scale (hb_font_t *font,
982 int *x_scale, 1193 int *x_scale,
983 int *y_scale) 1194 int *y_scale)
984 { 1195 {
985 if (x_scale) *x_scale = font->x_scale; 1196 if (x_scale) *x_scale = font->x_scale;
986 if (y_scale) *y_scale = font->y_scale; 1197 if (y_scale) *y_scale = font->y_scale;
987 } 1198 }
988 1199
1200 /**
1201 * hb_font_set_ppem:
1202 * @font: a font.
1203 * @x_ppem:
1204 * @y_ppem:
1205 *
1206 *
1207 *
1208 * Since: 1.0
1209 **/
989 void 1210 void
990 hb_font_set_ppem (hb_font_t *font, 1211 hb_font_set_ppem (hb_font_t *font,
991 unsigned int x_ppem, 1212 unsigned int x_ppem,
992 unsigned int y_ppem) 1213 unsigned int y_ppem)
993 { 1214 {
994 if (font->immutable) 1215 if (font->immutable)
995 return; 1216 return;
996 1217
997 font->x_ppem = x_ppem; 1218 font->x_ppem = x_ppem;
998 font->y_ppem = y_ppem; 1219 font->y_ppem = y_ppem;
999 } 1220 }
1000 1221
1222 /**
1223 * hb_font_get_ppem:
1224 * @font: a font.
1225 * @x_ppem: (out):
1226 * @y_ppem: (out):
1227 *
1228 *
1229 *
1230 * Since: 1.0
1231 **/
1001 void 1232 void
1002 hb_font_get_ppem (hb_font_t *font, 1233 hb_font_get_ppem (hb_font_t *font,
1003 unsigned int *x_ppem, 1234 unsigned int *x_ppem,
1004 unsigned int *y_ppem) 1235 unsigned int *y_ppem)
1005 { 1236 {
1006 if (x_ppem) *x_ppem = font->x_ppem; 1237 if (x_ppem) *x_ppem = font->x_ppem;
1007 if (y_ppem) *y_ppem = font->y_ppem; 1238 if (y_ppem) *y_ppem = font->y_ppem;
1008 } 1239 }
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-font.h ('k') | third_party/harfbuzz-ng/src/hb-font-private.hh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698