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

Side by Side Diff: src/raster/ftraster.c

Issue 23555005: Update freetype to the latest version of Android external/freetype (Closed) Base URL: https://chromium.googlesource.com/chromium/src/third_party/freetype.git@master
Patch Set: Created 7 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
« no previous file with comments | « src/psnames/pstables.h ('k') | src/raster/ftrend1.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 /* ftraster.c */ 3 /* ftraster.c */
4 /* */ 4 /* */
5 /* The FreeType glyph rasterizer (body). */ 5 /* The FreeType glyph rasterizer (body). */
6 /* */ 6 /* */
7 /* Copyright 1996-2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011 by */ 7 /* Copyright 1996-2003, 2005, 2007-2012 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
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 PProfile next; /* next profile in same contour, used */ 362 PProfile next; /* next profile in same contour, used */
363 /* during drop-out control */ 363 /* during drop-out control */
364 }; 364 };
365 365
366 typedef PProfile TProfileList; 366 typedef PProfile TProfileList;
367 typedef PProfile* PProfileList; 367 typedef PProfile* PProfileList;
368 368
369 369
370 /* Simple record used to implement a stack of bands, required */ 370 /* Simple record used to implement a stack of bands, required */
371 /* by the sub-banding mechanism */ 371 /* by the sub-banding mechanism */
372 typedef struct TBand_ 372 typedef struct black_TBand_
373 { 373 {
374 Short y_min; /* band's minimum */ 374 Short y_min; /* band's minimum */
375 Short y_max; /* band's maximum */ 375 Short y_max; /* band's maximum */
376 376
377 } TBand; 377 } black_TBand;
378 378
379 379
380 #define AlignProfileSize \ 380 #define AlignProfileSize \
381 ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( long ) ) 381 ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( long ) )
382 382
383 383
384 #undef RAS_ARG
385 #undef RAS_ARGS
386 #undef RAS_VAR
387 #undef RAS_VARS
388
384 #ifdef FT_STATIC_RASTER 389 #ifdef FT_STATIC_RASTER
385 390
386 391
387 #define RAS_ARGS /* void */ 392 #define RAS_ARGS /* void */
388 #define RAS_ARG /* void */ 393 #define RAS_ARG /* void */
389 394
390 #define RAS_VARS /* void */ 395 #define RAS_VARS /* void */
391 #define RAS_VAR /* void */ 396 #define RAS_VAR /* void */
392 397
393 #define FT_UNUSED_RASTER do { } while ( 0 ) 398 #define FT_UNUSED_RASTER do { } while ( 0 )
394 399
395 400
396 #else /* !FT_STATIC_RASTER */ 401 #else /* !FT_STATIC_RASTER */
397 402
398 403
399 #define RAS_ARGS PWorker worker, 404 #define RAS_ARGS black_PWorker worker,
400 #define RAS_ARG PWorker worker 405 #define RAS_ARG black_PWorker worker
401 406
402 #define RAS_VARS worker, 407 #define RAS_VARS worker,
403 #define RAS_VAR worker 408 #define RAS_VAR worker
404 409
405 #define FT_UNUSED_RASTER FT_UNUSED( worker ) 410 #define FT_UNUSED_RASTER FT_UNUSED( worker )
406 411
407 412
408 #endif /* !FT_STATIC_RASTER */ 413 #endif /* !FT_STATIC_RASTER */
409 414
410 415
411 typedef struct TWorker_ TWorker, *PWorker; 416 typedef struct black_TWorker_ black_TWorker, *black_PWorker;
412 417
413 418
414 /* prototypes used for sweep function dispatch */ 419 /* prototypes used for sweep function dispatch */
415 typedef void 420 typedef void
416 Function_Sweep_Init( RAS_ARGS Short* min, 421 Function_Sweep_Init( RAS_ARGS Short* min,
417 Short* max ); 422 Short* max );
418 423
419 typedef void 424 typedef void
420 Function_Sweep_Span( RAS_ARGS Short y, 425 Function_Sweep_Span( RAS_ARGS Short y,
421 FT_F26Dot6 x1, 426 FT_F26Dot6 x1,
422 FT_F26Dot6 x2, 427 FT_F26Dot6 x2,
423 PProfile left, 428 PProfile left,
424 PProfile right ); 429 PProfile right );
425 430
426 typedef void 431 typedef void
427 Function_Sweep_Step( RAS_ARG ); 432 Function_Sweep_Step( RAS_ARG );
428 433
429 434
430 /* NOTE: These operations are only valid on 2's complement processors */ 435 /* NOTE: These operations are only valid on 2's complement processors */
436 #undef FLOOR
437 #undef CEILING
438 #undef TRUNC
439 #undef SCALED
431 440
432 #define FLOOR( x ) ( (x) & -ras.precision ) 441 #define FLOOR( x ) ( (x) & -ras.precision )
433 #define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision ) 442 #define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
434 #define TRUNC( x ) ( (signed long)(x) >> ras.precision_bits ) 443 #define TRUNC( x ) ( (signed long)(x) >> ras.precision_bits )
435 #define FRAC( x ) ( (x) & ( ras.precision - 1 ) ) 444 #define FRAC( x ) ( (x) & ( ras.precision - 1 ) )
436 #define SCALED( x ) ( ( (x) << ras.scale_shift ) - ras.precision_half ) 445 #define SCALED( x ) ( ( (x) << ras.scale_shift ) - ras.precision_half )
437 446
438 #define IS_BOTTOM_OVERSHOOT( x ) ( CEILING( x ) - x >= ras.precision_half ) 447 #define IS_BOTTOM_OVERSHOOT( x ) ( CEILING( x ) - x >= ras.precision_half )
439 #define IS_TOP_OVERSHOOT( x ) ( x - FLOOR( x ) >= ras.precision_half ) 448 #define IS_TOP_OVERSHOOT( x ) ( x - FLOOR( x ) >= ras.precision_half )
440 449
441 /* The most used variables are positioned at the top of the structure. */ 450 /* The most used variables are positioned at the top of the structure. */
442 /* Thus, their offset can be coded with less opcodes, resulting in a */ 451 /* Thus, their offset can be coded with less opcodes, resulting in a */
443 /* smaller executable. */ 452 /* smaller executable. */
444 453
445 struct TWorker_ 454 struct black_TWorker_
446 { 455 {
447 Int precision_bits; /* precision related variables */ 456 Int precision_bits; /* precision related variables */
448 Int precision; 457 Int precision;
449 Int precision_half; 458 Int precision_half;
450 Int precision_shift; 459 Int precision_shift;
451 Int precision_step; 460 Int precision_step;
452 Int precision_jitter; 461 Int precision_jitter;
453 462
454 Int scale_shift; /* == precision_shift for bitmaps */ 463 Int scale_shift; /* == precision_shift for bitmaps */
455 /* == precision_shift+1 for pixmaps */ 464 /* == precision_shift+1 for pixmaps */
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 517
509 Bool second_pass; /* indicates whether a horizontal pass */ 518 Bool second_pass; /* indicates whether a horizontal pass */
510 /* should be performed to control */ 519 /* should be performed to control */
511 /* drop-out accurately when calling */ 520 /* drop-out accurately when calling */
512 /* Render_Glyph. Note that there is */ 521 /* Render_Glyph. Note that there is */
513 /* no horizontal pass during gray */ 522 /* no horizontal pass during gray */
514 /* rendering. */ 523 /* rendering. */
515 524
516 TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */ 525 TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */
517 526
518 TBand band_stack[16]; /* band stack used for sub-banding */ 527 black_TBand band_stack[16]; /* band stack used for sub-banding */
519 Int band_top; /* band stack top */ 528 Int band_top; /* band stack top */
520 529
521 #ifdef FT_RASTER_OPTION_ANTI_ALIASING 530 #ifdef FT_RASTER_OPTION_ANTI_ALIASING
522 531
523 Byte* grays; 532 Byte* grays;
524 533
525 Byte gray_lines[RASTER_GRAY_LINES]; 534 Byte gray_lines[RASTER_GRAY_LINES];
526 /* Intermediate table used to render the */ 535 /* Intermediate table used to render the */
527 /* graylevels pixmaps. */ 536 /* graylevels pixmaps. */
528 /* gray_lines is a buffer holding two */ 537 /* gray_lines is a buffer holding two */
529 /* monochrome scanlines */ 538 /* monochrome scanlines */
530 539
531 Short gray_width; /* width in bytes of one monochrome */ 540 Short gray_width; /* width in bytes of one monochrome */
532 /* intermediate scanline of gray_lines. */ 541 /* intermediate scanline of gray_lines. */
533 /* Each gray pixel takes 2 bits long there */ 542 /* Each gray pixel takes 2 bits long there */
534 543
535 /* The gray_lines must hold 2 lines, thus with size */ 544 /* The gray_lines must hold 2 lines, thus with size */
536 /* in bytes of at least `gray_width*2'. */ 545 /* in bytes of at least `gray_width*2'. */
537 546
538 #endif /* FT_RASTER_ANTI_ALIASING */ 547 #endif /* FT_RASTER_ANTI_ALIASING */
539 548
540 }; 549 };
541 550
542 551
543 typedef struct TRaster_ 552 typedef struct black_TRaster_
544 { 553 {
545 char* buffer; 554 char* buffer;
546 long buffer_size; 555 long buffer_size;
547 void* memory; 556 void* memory;
548 PWorker worker; 557 black_PWorker worker;
549 Byte grays[5]; 558 Byte grays[5];
550 Short gray_width; 559 Short gray_width;
551 560
552 } TRaster, *PRaster; 561 } black_TRaster, *black_PRaster;
553 562
554 #ifdef FT_STATIC_RASTER 563 #ifdef FT_STATIC_RASTER
555 564
556 static TWorker cur_ras; 565 static black_TWorker cur_ras;
557 #define ras cur_ras 566 #define ras cur_ras
558 567
559 #else /* !FT_STATIC_RASTER */ 568 #else /* !FT_STATIC_RASTER */
560 569
561 #define ras (*worker) 570 #define ras (*worker)
562 571
563 #endif /* !FT_STATIC_RASTER */ 572 #endif /* !FT_STATIC_RASTER */
564 573
565 574
566 #ifdef FT_RASTER_OPTION_ANTI_ALIASING 575 #ifdef FT_RASTER_OPTION_ANTI_ALIASING
(...skipping 2817 matching lines...) Expand 10 before | Expand all | Expand 10 after
3384 { 3393 {
3385 FT_UNUSED_RASTER; 3394 FT_UNUSED_RASTER;
3386 3395
3387 return Raster_Err_Unsupported; 3396 return Raster_Err_Unsupported;
3388 } 3397 }
3389 3398
3390 #endif /* !FT_RASTER_OPTION_ANTI_ALIASING */ 3399 #endif /* !FT_RASTER_OPTION_ANTI_ALIASING */
3391 3400
3392 3401
3393 static void 3402 static void
3394 ft_black_init( PRaster raster ) 3403 ft_black_init( black_PRaster raster )
3395 { 3404 {
3396 #ifdef FT_RASTER_OPTION_ANTI_ALIASING 3405 #ifdef FT_RASTER_OPTION_ANTI_ALIASING
3397 FT_UInt n; 3406 FT_UInt n;
3398 3407
3399 3408
3400 /* set default 5-levels gray palette */ 3409 /* set default 5-levels gray palette */
3401 for ( n = 0; n < 5; n++ ) 3410 for ( n = 0; n < 5; n++ )
3402 raster->grays[n] = n * 255 / 4; 3411 raster->grays[n] = n * 255 / 4;
3403 3412
3404 raster->gray_width = RASTER_GRAY_LINES / 2; 3413 raster->gray_width = RASTER_GRAY_LINES / 2;
3405 #else 3414 #else
3406 FT_UNUSED( raster ); 3415 FT_UNUSED( raster );
3407 #endif 3416 #endif
3408 } 3417 }
3409 3418
3410 3419
3411 /**** RASTER OBJECT CREATION: In standalone mode, we simply use *****/ 3420 /**** RASTER OBJECT CREATION: In standalone mode, we simply use *****/
3412 /**** a static object. *****/ 3421 /**** a static object. *****/
3413 3422
3414 3423
3415 #ifdef _STANDALONE_ 3424 #ifdef _STANDALONE_
3416 3425
3417 3426
3418 static int 3427 static int
3419 ft_black_new( void* memory, 3428 ft_black_new( void* memory,
3420 FT_Raster *araster ) 3429 FT_Raster *araster )
3421 { 3430 {
3422 static TRaster the_raster; 3431 static black_TRaster the_raster;
3423 FT_UNUSED( memory ); 3432 FT_UNUSED( memory );
3424 3433
3425 3434
3426 *araster = (FT_Raster)&the_raster; 3435 *araster = (FT_Raster)&the_raster;
3427 FT_MEM_ZERO( &the_raster, sizeof ( the_raster ) ); 3436 FT_MEM_ZERO( &the_raster, sizeof ( the_raster ) );
3428 ft_black_init( &the_raster ); 3437 ft_black_init( &the_raster );
3429 3438
3430 return 0; 3439 return 0;
3431 } 3440 }
3432 3441
3433 3442
3434 static void 3443 static void
3435 ft_black_done( FT_Raster raster ) 3444 ft_black_done( FT_Raster raster )
3436 { 3445 {
3437 /* nothing */ 3446 /* nothing */
3438 FT_UNUSED( raster ); 3447 FT_UNUSED( raster );
3439 } 3448 }
3440 3449
3441 3450
3442 #else /* !_STANDALONE_ */ 3451 #else /* !_STANDALONE_ */
3443 3452
3444 3453
3445 static int 3454 static int
3446 ft_black_new( FT_Memory memory, 3455 ft_black_new( FT_Memory memory,
3447 PRaster *araster ) 3456 black_PRaster *araster )
3448 { 3457 {
3449 FT_Error error; 3458 FT_Error error;
3450 PRaster raster = NULL; 3459 black_PRaster raster = NULL;
3451 3460
3452 3461
3453 *araster = 0; 3462 *araster = 0;
3454 if ( !FT_NEW( raster ) ) 3463 if ( !FT_NEW( raster ) )
3455 { 3464 {
3456 raster->memory = memory; 3465 raster->memory = memory;
3457 ft_black_init( raster ); 3466 ft_black_init( raster );
3458 3467
3459 *araster = raster; 3468 *araster = raster;
3460 } 3469 }
3461 3470
3462 return error; 3471 return error;
3463 } 3472 }
3464 3473
3465 3474
3466 static void 3475 static void
3467 ft_black_done( PRaster raster ) 3476 ft_black_done( black_PRaster raster )
3468 { 3477 {
3469 FT_Memory memory = (FT_Memory)raster->memory; 3478 FT_Memory memory = (FT_Memory)raster->memory;
3479
3480
3470 FT_FREE( raster ); 3481 FT_FREE( raster );
3471 } 3482 }
3472 3483
3473 3484
3474 #endif /* !_STANDALONE_ */ 3485 #endif /* !_STANDALONE_ */
3475 3486
3476 3487
3477 static void 3488 static void
3478 ft_black_reset( PRaster raster, 3489 ft_black_reset( black_PRaster raster,
3479 char* pool_base, 3490 char* pool_base,
3480 long pool_size ) 3491 long pool_size )
3481 { 3492 {
3482 if ( raster ) 3493 if ( raster )
3483 { 3494 {
3484 if ( pool_base && pool_size >= (long)sizeof(TWorker) + 2048 ) 3495 if ( pool_base && pool_size >= (long)sizeof ( black_TWorker ) + 2048 )
3485 { 3496 {
3486 PWorker worker = (PWorker)pool_base; 3497 black_PWorker worker = (black_PWorker)pool_base;
3487 3498
3488 3499
3489 raster->buffer = pool_base + ( ( sizeof ( *worker ) + 7 ) & ~7 ); 3500 raster->buffer = pool_base + ( ( sizeof ( *worker ) + 7 ) & ~7 );
3490 raster->buffer_size = pool_base + pool_size - (char*)raster->buffer; 3501 raster->buffer_size = pool_base + pool_size - (char*)raster->buffer;
3491 raster->worker = worker; 3502 raster->worker = worker;
3492 } 3503 }
3493 else 3504 else
3494 { 3505 {
3495 raster->buffer = NULL; 3506 raster->buffer = NULL;
3496 raster->buffer_size = 0; 3507 raster->buffer_size = 0;
3497 raster->worker = NULL; 3508 raster->worker = NULL;
3498 } 3509 }
3499 } 3510 }
3500 } 3511 }
3501 3512
3502 3513
3503 static void 3514 static void
3504 ft_black_set_mode( PRaster raster, 3515 ft_black_set_mode( black_PRaster raster,
3505 unsigned long mode, 3516 unsigned long mode,
3506 const char* palette ) 3517 const char* palette )
3507 { 3518 {
3508 #ifdef FT_RASTER_OPTION_ANTI_ALIASING 3519 #ifdef FT_RASTER_OPTION_ANTI_ALIASING
3509 3520
3510 if ( mode == FT_MAKE_TAG( 'p', 'a', 'l', '5' ) ) 3521 if ( mode == FT_MAKE_TAG( 'p', 'a', 'l', '5' ) )
3511 { 3522 {
3512 /* set 5-levels gray palette */ 3523 /* set 5-levels gray palette */
3513 raster->grays[0] = palette[0]; 3524 raster->grays[0] = palette[0];
3514 raster->grays[1] = palette[1]; 3525 raster->grays[1] = palette[1];
3515 raster->grays[2] = palette[2]; 3526 raster->grays[2] = palette[2];
3516 raster->grays[3] = palette[3]; 3527 raster->grays[3] = palette[3];
3517 raster->grays[4] = palette[4]; 3528 raster->grays[4] = palette[4];
3518 } 3529 }
3519 3530
3520 #else 3531 #else
3521 3532
3522 FT_UNUSED( raster ); 3533 FT_UNUSED( raster );
3523 FT_UNUSED( mode ); 3534 FT_UNUSED( mode );
3524 FT_UNUSED( palette ); 3535 FT_UNUSED( palette );
3525 3536
3526 #endif 3537 #endif
3527 } 3538 }
3528 3539
3529 3540
3530 static int 3541 static int
3531 ft_black_render( PRaster raster, 3542 ft_black_render( black_PRaster raster,
3532 const FT_Raster_Params* params ) 3543 const FT_Raster_Params* params )
3533 { 3544 {
3534 const FT_Outline* outline = (const FT_Outline*)params->source; 3545 const FT_Outline* outline = (const FT_Outline*)params->source;
3535 const FT_Bitmap* target_map = params->target; 3546 const FT_Bitmap* target_map = params->target;
3536 PWorker worker; 3547 black_PWorker worker;
3537 3548
3538 3549
3539 if ( !raster || !raster->buffer || !raster->buffer_size ) 3550 if ( !raster || !raster->buffer || !raster->buffer_size )
3540 return Raster_Err_Not_Ini; 3551 return Raster_Err_Not_Ini;
3541 3552
3542 if ( !outline ) 3553 if ( !outline )
3543 return Raster_Err_Invalid; 3554 return Raster_Err_Invalid;
3544 3555
3545 /* return immediately if the outline is empty */ 3556 /* return immediately if the outline is empty */
3546 if ( outline->n_points == 0 || outline->n_contours <= 0 ) 3557 if ( outline->n_points == 0 || outline->n_contours <= 0 )
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3592 FT_GLYPH_FORMAT_OUTLINE, 3603 FT_GLYPH_FORMAT_OUTLINE,
3593 (FT_Raster_New_Func) ft_black_new, 3604 (FT_Raster_New_Func) ft_black_new,
3594 (FT_Raster_Reset_Func) ft_black_reset, 3605 (FT_Raster_Reset_Func) ft_black_reset,
3595 (FT_Raster_Set_Mode_Func)ft_black_set_mode, 3606 (FT_Raster_Set_Mode_Func)ft_black_set_mode,
3596 (FT_Raster_Render_Func) ft_black_render, 3607 (FT_Raster_Render_Func) ft_black_render,
3597 (FT_Raster_Done_Func) ft_black_done 3608 (FT_Raster_Done_Func) ft_black_done
3598 ) 3609 )
3599 3610
3600 3611
3601 /* END */ 3612 /* END */
OLDNEW
« no previous file with comments | « src/psnames/pstables.h ('k') | src/raster/ftrend1.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698