[base] Accept negative bitmap alignment for bottom-up flow.
* src/base/ftbitmap.c (FT_Bitmap_Convert): Use negative alignment to produce negative pitch. * include/freetype/ftbitmap.c (FT_Bitmap_Convert): Document it.
This commit is contained in:
parent
4dba6795b6
commit
baae1a2775
2 changed files with 18 additions and 18 deletions
|
@ -178,8 +178,8 @@ FT_BEGIN_HEADER
|
|||
* The source bitmap.
|
||||
*
|
||||
* alignment ::
|
||||
* The pitch of the bitmap is a multiple of this argument. Common
|
||||
* values are 1, 2, or 4.
|
||||
* The pitch of the target bitmap is a multiple of this argument.
|
||||
* Common values are 1, 2, or 4.
|
||||
*
|
||||
* @output:
|
||||
* target ::
|
||||
|
@ -189,16 +189,16 @@ FT_BEGIN_HEADER
|
|||
* FreeType error code. 0~means success.
|
||||
*
|
||||
* @note:
|
||||
* It is possible to call @FT_Bitmap_Convert multiple times without
|
||||
* calling @FT_Bitmap_Done (the memory is simply reallocated).
|
||||
* This function reallocates the memory in the target bitmap, which has
|
||||
* to be valid, either initialized by @FT_Bitmap_Init or reused multiple
|
||||
* times. `source->buffer` and `target->buffer` must neither be equal
|
||||
* nor overlap. Use @FT_Bitmap_Done to finally remove the bitmap object.
|
||||
*
|
||||
* Use @FT_Bitmap_Done to finally remove the bitmap object.
|
||||
* Negative alignment values produce bottom-up bitmaps with negative
|
||||
* pitch. Zero alignment is treated as one, i.e., no padding is used.
|
||||
*
|
||||
* The `library` argument is taken to have access to FreeType's memory
|
||||
* handling functions.
|
||||
*
|
||||
* `source->buffer` and `target->buffer` must neither be equal nor
|
||||
* overlap.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Bitmap_Convert( FT_Library library,
|
||||
|
|
|
@ -542,7 +542,7 @@
|
|||
case FT_PIXEL_MODE_LCD_V:
|
||||
case FT_PIXEL_MODE_BGRA:
|
||||
{
|
||||
FT_Int pad, target_pitch;
|
||||
FT_Int width = (FT_Int)source->width;
|
||||
|
||||
|
||||
FT_Bitmap_Done( library, target );
|
||||
|
@ -551,20 +551,20 @@
|
|||
target->rows = source->rows;
|
||||
target->width = source->width;
|
||||
|
||||
pad = 0;
|
||||
if ( alignment > 0 )
|
||||
if ( alignment )
|
||||
{
|
||||
pad = (FT_Int)source->width % alignment;
|
||||
if ( pad != 0 )
|
||||
pad = alignment - pad;
|
||||
FT_Int rem = width % alignment;
|
||||
|
||||
|
||||
if ( rem )
|
||||
width = alignment < 0 ? width - rem - alignment
|
||||
: width - rem + alignment;
|
||||
}
|
||||
|
||||
target_pitch = (FT_Int)source->width + pad;
|
||||
|
||||
if ( FT_QALLOC_MULT( target->buffer, target->rows, target_pitch ) )
|
||||
if ( FT_QALLOC_MULT( target->buffer, target->rows, width ) )
|
||||
return error;
|
||||
|
||||
target->pitch = target->pitch < 0 ? -target_pitch : target_pitch;
|
||||
target->pitch = alignment < 0 ? -width : width;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue