@ -67,8 +67,7 @@
FT_Memory memory ;
FT_Error error = FT_Err_Ok ;
FT_Int pitch ;
FT_Int source_pitch_sign , target_pitch_sign ;
FT_Int flip ;
if ( ! library )
@ -80,15 +79,15 @@
if ( source = = target )
return FT_Err_Ok ;
source_pitch_sign = source - > pitch < 0 ? - 1 : 1 ;
target_pitch_sign = target - > pitch < 0 ? - 1 : 1 ;
flip = ( source - > pitch < 0 & & target - > pitch > 0 ) | |
( source - > pitch > 0 & & target - > pitch < 0 ) ;
memory = library - > memory ;
FT_FREE ( target - > buffer ) ;
* target = * source ;
if ( source_pitch_sign ! = target_pitch_sign )
if ( flip )
target - > pitch = - target - > pitch ;
if ( ! source - > buffer )
@ -102,10 +101,7 @@
if ( ! error )
{
if ( source_pitch_sign = = target_pitch_sign )
FT_MEM_COPY ( target - > buffer , source - > buffer ,
( FT_Long ) source - > rows * pitch ) ;
else
if ( flip )
{
/* take care of bitmap flow */
FT_UInt i ;
@ -123,6 +119,9 @@
t - = pitch ;
}
}
else
FT_MEM_COPY ( target - > buffer , source - > buffer ,
( FT_Long ) source - > rows * pitch ) ;
}
return error ;
@ -519,8 +518,9 @@
case FT_PIXEL_MODE_LCD_V :
case FT_PIXEL_MODE_BGRA :
{
FT_Int pad , target_pitch ;
FT_Int old_target_pitch = target - > pitch ;
FT_Int width = ( FT_Int ) source - > width ;
FT_Int neg = ( target - > pitch = = 0 & & source - > pitch < 0 ) | |
target - > pitch < 0 ;
FT_Bitmap_Done ( library , target ) ;
@ -529,20 +529,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 ;
target_pitch = ( FT_Int ) source - > width + pad ;
if ( FT_QALLOC_MULT ( target - > buffer , target - > rows , target_pitch ) )
if ( rem )
width = alignment > 0 ? width - rem + alignment
: width - rem - alignment ;
}
if ( FT_QALLOC_MULT ( target - > buffer , target - > rows , width ) )
return error ;
target - > pitch = old_target_pitch < 0 ? - target_pitch : target_pitch ;
target - > pitch = neg ? - width : widt h;
}
break ;