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

Side by Side Diff: src/base/ftglyph.c

Issue 89753003: Update freetype to latest version of ASOP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src/third_party/freetype.git@master
Patch Set: Created 7 years 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
« no previous file with comments | « src/base/ftgloadr.c ('k') | src/base/ftinit.c » ('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 /* */ 2 /* */
3 /* ftglyph.c */ 3 /* ftglyph.c */
4 /* */ 4 /* */
5 /* FreeType convenience functions to handle glyphs (body). */ 5 /* FreeType convenience functions to handle glyphs (body). */
6 /* */ 6 /* */
7 /* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010 by */ 7 /* Copyright 1996-2005, 2007, 2008, 2010, 2012, 2013 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
9 /* */ 9 /* */
10 /* This file is part of the FreeType project, and may only be used, */ 10 /* This file is part of the FreeType project, and may only be used, */
11 /* modified, and distributed under the terms of the FreeType project */ 11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */ 13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */ 14 /* understand and accept it fully. */
15 /* */ 15 /* */
16 /***************************************************************************/ 16 /***************************************************************************/
17 17
18 /*************************************************************************/ 18 /*************************************************************************/
19 /* */ 19 /* */
20 /* This file contains the definition of several convenience functions */ 20 /* This file contains the definition of several convenience functions */
21 /* that can be used by client applications to easily retrieve glyph */ 21 /* that can be used by client applications to easily retrieve glyph */
22 /* bitmaps and outlines from a given face. */ 22 /* bitmaps and outlines from a given face. */
23 /* */ 23 /* */
24 /* These functions should be optional if you are writing a font server */ 24 /* These functions should be optional if you are writing a font server */
25 /* or text layout engine on top of FreeType. However, they are pretty */ 25 /* or text layout engine on top of FreeType. However, they are pretty */
26 /* handy for many other simple uses of the library. */ 26 /* handy for many other simple uses of the library. */
27 /* */ 27 /* */
28 /*************************************************************************/ 28 /*************************************************************************/
29 29
30 30
31 #include <ft2build.h> 31 #include <ft2build.h>
32 #include FT_INTERNAL_DEBUG_H
33
32 #include FT_GLYPH_H 34 #include FT_GLYPH_H
33 #include FT_OUTLINE_H 35 #include FT_OUTLINE_H
34 #include FT_BITMAP_H 36 #include FT_BITMAP_H
35 #include FT_INTERNAL_OBJECTS_H 37 #include FT_INTERNAL_OBJECTS_H
36 38
37 #include "basepic.h" 39 #include "basepic.h"
38 40
39 /*************************************************************************/ 41 /*************************************************************************/
40 /* */ 42 /* */
41 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 43 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
(...skipping 16 matching lines...) Expand all
58 ft_bitmap_glyph_init( FT_Glyph bitmap_glyph, 60 ft_bitmap_glyph_init( FT_Glyph bitmap_glyph,
59 FT_GlyphSlot slot ) 61 FT_GlyphSlot slot )
60 { 62 {
61 FT_BitmapGlyph glyph = (FT_BitmapGlyph)bitmap_glyph; 63 FT_BitmapGlyph glyph = (FT_BitmapGlyph)bitmap_glyph;
62 FT_Error error = FT_Err_Ok; 64 FT_Error error = FT_Err_Ok;
63 FT_Library library = FT_GLYPH( glyph )->library; 65 FT_Library library = FT_GLYPH( glyph )->library;
64 66
65 67
66 if ( slot->format != FT_GLYPH_FORMAT_BITMAP ) 68 if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
67 { 69 {
68 error = FT_Err_Invalid_Glyph_Format; 70 error = FT_THROW( Invalid_Glyph_Format );
69 goto Exit; 71 goto Exit;
70 } 72 }
71 73
72 glyph->left = slot->bitmap_left; 74 glyph->left = slot->bitmap_left;
73 glyph->top = slot->bitmap_top; 75 glyph->top = slot->bitmap_top;
74 76
75 /* do lazy copying whenever possible */ 77 /* do lazy copying whenever possible */
76 if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) 78 if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
77 { 79 {
78 glyph->bitmap = slot->bitmap; 80 glyph->bitmap = slot->bitmap;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph; 161 FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph;
160 FT_Error error = FT_Err_Ok; 162 FT_Error error = FT_Err_Ok;
161 FT_Library library = FT_GLYPH( glyph )->library; 163 FT_Library library = FT_GLYPH( glyph )->library;
162 FT_Outline* source = &slot->outline; 164 FT_Outline* source = &slot->outline;
163 FT_Outline* target = &glyph->outline; 165 FT_Outline* target = &glyph->outline;
164 166
165 167
166 /* check format in glyph slot */ 168 /* check format in glyph slot */
167 if ( slot->format != FT_GLYPH_FORMAT_OUTLINE ) 169 if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
168 { 170 {
169 error = FT_Err_Invalid_Glyph_Format; 171 error = FT_THROW( Invalid_Glyph_Format );
170 goto Exit; 172 goto Exit;
171 } 173 }
172 174
173 /* allocate new outline */ 175 /* allocate new outline */
174 error = FT_Outline_New( library, source->n_points, source->n_contours, 176 error = FT_Outline_New( library, source->n_points, source->n_contours,
175 &glyph->outline ); 177 &glyph->outline );
176 if ( error ) 178 if ( error )
177 goto Exit; 179 goto Exit;
178 180
179 FT_Outline_Copy( source, target ); 181 FT_Outline_Copy( source, target );
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 FT_Glyph *target ) 309 FT_Glyph *target )
308 { 310 {
309 FT_Glyph copy; 311 FT_Glyph copy;
310 FT_Error error; 312 FT_Error error;
311 const FT_Glyph_Class* clazz; 313 const FT_Glyph_Class* clazz;
312 314
313 315
314 /* check arguments */ 316 /* check arguments */
315 if ( !target ) 317 if ( !target )
316 { 318 {
317 error = FT_Err_Invalid_Argument; 319 error = FT_THROW( Invalid_Argument );
318 goto Exit; 320 goto Exit;
319 } 321 }
320 322
321 *target = 0; 323 *target = 0;
322 324
323 if ( !source || !source->clazz ) 325 if ( !source || !source->clazz )
324 { 326 {
325 error = FT_Err_Invalid_Argument; 327 error = FT_THROW( Invalid_Argument );
326 goto Exit; 328 goto Exit;
327 } 329 }
328 330
329 clazz = source->clazz; 331 clazz = source->clazz;
330 error = ft_new_glyph( source->library, clazz, &copy ); 332 error = ft_new_glyph( source->library, clazz, &copy );
331 if ( error ) 333 if ( error )
332 goto Exit; 334 goto Exit;
333 335
334 copy->advance = source->advance; 336 copy->advance = source->advance;
335 copy->format = source->format; 337 copy->format = source->format;
(...skipping 18 matching lines...) Expand all
354 FT_Glyph *aglyph ) 356 FT_Glyph *aglyph )
355 { 357 {
356 FT_Library library; 358 FT_Library library;
357 FT_Error error; 359 FT_Error error;
358 FT_Glyph glyph; 360 FT_Glyph glyph;
359 361
360 const FT_Glyph_Class* clazz = 0; 362 const FT_Glyph_Class* clazz = 0;
361 363
362 364
363 if ( !slot ) 365 if ( !slot )
364 return FT_Err_Invalid_Slot_Handle; 366 return FT_THROW( Invalid_Slot_Handle );
365 367
366 library = slot->library; 368 library = slot->library;
367 369
368 if ( !aglyph ) 370 if ( !aglyph )
369 return FT_Err_Invalid_Argument; 371 return FT_THROW( Invalid_Argument );
370 372
371 /* if it is a bitmap, that's easy :-) */ 373 /* if it is a bitmap, that's easy :-) */
372 if ( slot->format == FT_GLYPH_FORMAT_BITMAP ) 374 if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
373 clazz = FT_BITMAP_GLYPH_CLASS_GET; 375 clazz = FT_BITMAP_GLYPH_CLASS_GET;
374 376
375 /* if it is an outline */ 377 /* if it is an outline */
376 else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) 378 else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
377 clazz = FT_OUTLINE_GLYPH_CLASS_GET; 379 clazz = FT_OUTLINE_GLYPH_CLASS_GET;
378 380
379 else 381 else
380 { 382 {
381 /* try to find a renderer that supports the glyph image format */ 383 /* try to find a renderer that supports the glyph image format */
382 FT_Renderer render = FT_Lookup_Renderer( library, slot->format, 0 ); 384 FT_Renderer render = FT_Lookup_Renderer( library, slot->format, 0 );
383 385
384 386
385 if ( render ) 387 if ( render )
386 clazz = &render->glyph_class; 388 clazz = &render->glyph_class;
387 } 389 }
388 390
389 if ( !clazz ) 391 if ( !clazz )
390 { 392 {
391 error = FT_Err_Invalid_Glyph_Format; 393 error = FT_THROW( Invalid_Glyph_Format );
392 goto Exit; 394 goto Exit;
393 } 395 }
394 396
395 /* create FT_Glyph object */ 397 /* create FT_Glyph object */
396 error = ft_new_glyph( library, clazz, &glyph ); 398 error = ft_new_glyph( library, clazz, &glyph );
397 if ( error ) 399 if ( error )
398 goto Exit; 400 goto Exit;
399 401
400 /* copy advance while converting it to 16.16 format */ 402 /* copy advance while converting it to 16.16 format */
401 glyph->advance.x = slot->advance.x << 10; 403 glyph->advance.x = slot->advance.x << 10;
(...skipping 18 matching lines...) Expand all
420 FT_EXPORT_DEF( FT_Error ) 422 FT_EXPORT_DEF( FT_Error )
421 FT_Glyph_Transform( FT_Glyph glyph, 423 FT_Glyph_Transform( FT_Glyph glyph,
422 FT_Matrix* matrix, 424 FT_Matrix* matrix,
423 FT_Vector* delta ) 425 FT_Vector* delta )
424 { 426 {
425 const FT_Glyph_Class* clazz; 427 const FT_Glyph_Class* clazz;
426 FT_Error error = FT_Err_Ok; 428 FT_Error error = FT_Err_Ok;
427 429
428 430
429 if ( !glyph || !glyph->clazz ) 431 if ( !glyph || !glyph->clazz )
430 error = FT_Err_Invalid_Argument; 432 error = FT_THROW( Invalid_Argument );
431 else 433 else
432 { 434 {
433 clazz = glyph->clazz; 435 clazz = glyph->clazz;
434 if ( clazz->glyph_transform ) 436 if ( clazz->glyph_transform )
435 { 437 {
436 /* transform glyph image */ 438 /* transform glyph image */
437 clazz->glyph_transform( glyph, matrix, delta ); 439 clazz->glyph_transform( glyph, matrix, delta );
438 440
439 /* transform advance vector */ 441 /* transform advance vector */
440 if ( matrix ) 442 if ( matrix )
441 FT_Vector_Transform( &glyph->advance, matrix ); 443 FT_Vector_Transform( &glyph->advance, matrix );
442 } 444 }
443 else 445 else
444 error = FT_Err_Invalid_Glyph_Format; 446 error = FT_THROW( Invalid_Glyph_Format );
445 } 447 }
446 return error; 448 return error;
447 } 449 }
448 450
449 451
450 /* documentation is in ftglyph.h */ 452 /* documentation is in ftglyph.h */
451 453
452 FT_EXPORT_DEF( void ) 454 FT_EXPORT_DEF( void )
453 FT_Glyph_Get_CBox( FT_Glyph glyph, 455 FT_Glyph_Get_CBox( FT_Glyph glyph,
454 FT_UInt bbox_mode, 456 FT_UInt bbox_mode,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 505
504 FT_EXPORT_DEF( FT_Error ) 506 FT_EXPORT_DEF( FT_Error )
505 FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, 507 FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
506 FT_Render_Mode render_mode, 508 FT_Render_Mode render_mode,
507 FT_Vector* origin, 509 FT_Vector* origin,
508 FT_Bool destroy ) 510 FT_Bool destroy )
509 { 511 {
510 FT_GlyphSlotRec dummy; 512 FT_GlyphSlotRec dummy;
511 FT_GlyphSlot_InternalRec dummy_internal; 513 FT_GlyphSlot_InternalRec dummy_internal;
512 FT_Error error = FT_Err_Ok; 514 FT_Error error = FT_Err_Ok;
513 FT_Glyph glyph; 515 FT_Glyph b, glyph;
514 FT_BitmapGlyph bitmap = NULL; 516 FT_BitmapGlyph bitmap = NULL;
515 const FT_Glyph_Class* clazz; 517 const FT_Glyph_Class* clazz;
516 518
517 /* FT_BITMAP_GLYPH_CLASS_GET derefers `library' in PIC mode */ 519 /* FT_BITMAP_GLYPH_CLASS_GET derefers `library' in PIC mode */
518 FT_Library library; 520 FT_Library library;
519 521
520 522
521 /* check argument */ 523 /* check argument */
522 if ( !the_glyph ) 524 if ( !the_glyph )
523 goto Bad; 525 goto Bad;
(...skipping 16 matching lines...) Expand all
540 /* we render the glyph into a glyph bitmap using a `dummy' glyph slot */ 542 /* we render the glyph into a glyph bitmap using a `dummy' glyph slot */
541 /* then calling FT_Render_Glyph_Internal() */ 543 /* then calling FT_Render_Glyph_Internal() */
542 544
543 FT_MEM_ZERO( &dummy, sizeof ( dummy ) ); 545 FT_MEM_ZERO( &dummy, sizeof ( dummy ) );
544 FT_MEM_ZERO( &dummy_internal, sizeof ( dummy_internal ) ); 546 FT_MEM_ZERO( &dummy_internal, sizeof ( dummy_internal ) );
545 dummy.internal = &dummy_internal; 547 dummy.internal = &dummy_internal;
546 dummy.library = library; 548 dummy.library = library;
547 dummy.format = clazz->glyph_format; 549 dummy.format = clazz->glyph_format;
548 550
549 /* create result bitmap glyph */ 551 /* create result bitmap glyph */
550 error = ft_new_glyph( library, FT_BITMAP_GLYPH_CLASS_GET, 552 error = ft_new_glyph( library, FT_BITMAP_GLYPH_CLASS_GET, &b );
551 (FT_Glyph*)(void*)&bitmap );
552 if ( error ) 553 if ( error )
553 goto Exit; 554 goto Exit;
555 bitmap = (FT_BitmapGlyph)b;
554 556
555 #if 1 557 #if 1
556 /* if `origin' is set, translate the glyph image */ 558 /* if `origin' is set, translate the glyph image */
557 if ( origin ) 559 if ( origin )
558 FT_Glyph_Transform( glyph, 0, origin ); 560 FT_Glyph_Transform( glyph, 0, origin );
559 #else 561 #else
560 FT_UNUSED( origin ); 562 FT_UNUSED( origin );
561 #endif 563 #endif
562 564
563 /* prepare dummy slot for rendering */ 565 /* prepare dummy slot for rendering */
(...skipping 29 matching lines...) Expand all
593 595
594 *the_glyph = FT_GLYPH( bitmap ); 596 *the_glyph = FT_GLYPH( bitmap );
595 597
596 Exit: 598 Exit:
597 if ( error && bitmap ) 599 if ( error && bitmap )
598 FT_Done_Glyph( FT_GLYPH( bitmap ) ); 600 FT_Done_Glyph( FT_GLYPH( bitmap ) );
599 601
600 return error; 602 return error;
601 603
602 Bad: 604 Bad:
603 error = FT_Err_Invalid_Argument; 605 error = FT_THROW( Invalid_Argument );
604 goto Exit; 606 goto Exit;
605 } 607 }
606 608
607 609
608 /* documentation is in ftglyph.h */ 610 /* documentation is in ftglyph.h */
609 611
610 FT_EXPORT_DEF( void ) 612 FT_EXPORT_DEF( void )
611 FT_Done_Glyph( FT_Glyph glyph ) 613 FT_Done_Glyph( FT_Glyph glyph )
612 { 614 {
613 if ( glyph ) 615 if ( glyph )
614 { 616 {
615 FT_Memory memory = glyph->library->memory; 617 FT_Memory memory = glyph->library->memory;
616 const FT_Glyph_Class* clazz = glyph->clazz; 618 const FT_Glyph_Class* clazz = glyph->clazz;
617 619
618 620
619 if ( clazz->glyph_done ) 621 if ( clazz->glyph_done )
620 clazz->glyph_done( glyph ); 622 clazz->glyph_done( glyph );
621 623
622 FT_FREE( glyph ); 624 FT_FREE( glyph );
623 } 625 }
624 } 626 }
625 627
626 628
627 /* END */ 629 /* END */
OLDNEW
« no previous file with comments | « src/base/ftgloadr.c ('k') | src/base/ftinit.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698