Add preload support in smooth
This commit is contained in:
parent
012a28c055
commit
78df2b651f
|
@ -2298,6 +2298,7 @@ FT_BEGIN_HEADER
|
|||
|
||||
void* other;
|
||||
FT_PreLine prelines;
|
||||
int prel_shifted;
|
||||
|
||||
FT_Slot_Internal internal;
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ HINTING_MODULES += pshinter
|
|||
####
|
||||
|
||||
# Dense Rasterizer
|
||||
RASTER_MODULES += dense
|
||||
#RASTER_MODULES += dense
|
||||
|
||||
# Anti-aliasing rasterizer.
|
||||
RASTER_MODULES += smooth
|
||||
|
|
|
@ -579,6 +579,7 @@
|
|||
{
|
||||
/* free bitmap if needed */
|
||||
ft_glyphslot_free_bitmap( slot );
|
||||
|
||||
|
||||
/* clear all public fields in the glyph slot */
|
||||
slot->glyph_index = 0;
|
||||
|
@ -1180,6 +1181,8 @@
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef FT_DEBUG_LEVEL_TRACE
|
||||
FT_TRACE5(( "FT_Load_Glyph: index %d, flags 0x%x\n",
|
||||
glyph_index, load_flags ));
|
||||
|
@ -2645,7 +2648,7 @@ int conic_to2(FT_GlyphSlot* slot, FT_Vector *control, FT_Vector *from, FT_Vector
|
|||
}
|
||||
|
||||
|
||||
static FT_Error ft_decompose_outline(FT_GlyphSlot* slot){
|
||||
FT_Error ft_decompose_outline(FT_GlyphSlot* slot){
|
||||
FT_Vector v_last;
|
||||
FT_Vector v_control;
|
||||
FT_Vector v_start;
|
||||
|
@ -3138,7 +3141,7 @@ int conic_to2(FT_GlyphSlot* slot, FT_Vector *control, FT_Vector *from, FT_Vector
|
|||
face->garray = (FT_GlyphSlot*)malloc(
|
||||
face->driver->clazz->slot_object_size * face->num_glyphs );
|
||||
//error = FT_Set_Char_Size( face, 0, 160 * 64, 300, 300 );
|
||||
error = FT_Set_Pixel_Sizes( face, 0, 500);
|
||||
error = FT_Set_Pixel_Sizes( face, 0, 100);
|
||||
// int glyph_index = FT_Get_Char_Index( face, 'A' );
|
||||
// error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_HINTING );
|
||||
|
||||
|
@ -3150,6 +3153,7 @@ int conic_to2(FT_GlyphSlot* slot, FT_Vector *control, FT_Vector *from, FT_Vector
|
|||
|
||||
FT_ALLOC(face->garray[gindex], clazz->slot_object_size);
|
||||
face->garray[gindex]->face = face;
|
||||
face->garray[gindex]->prel_shifted = 0;
|
||||
face->garray[gindex]->glyph_index = gindex;
|
||||
ft_glyphslot_init(face->garray[gindex]);
|
||||
face->garray[gindex]->next = NULL;
|
||||
|
|
|
@ -1921,7 +1921,7 @@ typedef ptrdiff_t FT_PtrDist;
|
|||
|
||||
static int
|
||||
gray_convert_glyph_inner( RAS_ARG_
|
||||
int continued )
|
||||
int continued , FT_PreLine pl)
|
||||
{
|
||||
volatile int error;
|
||||
|
||||
|
@ -1930,7 +1930,28 @@ typedef ptrdiff_t FT_PtrDist;
|
|||
{
|
||||
if ( continued )
|
||||
FT_Trace_Disable();
|
||||
error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
|
||||
//error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
|
||||
FT_Vector point1 = {pl->x1, pl->y1};
|
||||
|
||||
FT_Vector point2 = {100, 100};
|
||||
|
||||
error = gray_move_to(&point1, worker);
|
||||
while (pl!=NULL)
|
||||
{
|
||||
point1.x = pl->x1;
|
||||
point1.y = pl->y1;
|
||||
point2.x = pl->x2;
|
||||
point2.y = pl->y2;
|
||||
|
||||
if(pl->ismove){
|
||||
gray_move_to(&point2, worker);
|
||||
}else{
|
||||
gray_line_to(&point2, worker);
|
||||
}
|
||||
pl= pl->next;
|
||||
}
|
||||
|
||||
|
||||
if ( continued )
|
||||
FT_Trace_Enable();
|
||||
|
||||
|
@ -1953,7 +1974,7 @@ typedef ptrdiff_t FT_PtrDist;
|
|||
|
||||
|
||||
static int
|
||||
gray_convert_glyph( RAS_ARG )
|
||||
gray_convert_glyph( RAS_ARG , FT_PreLine pl)
|
||||
{
|
||||
const TCoord yMin = ras.min_ey;
|
||||
const TCoord yMax = ras.max_ey;
|
||||
|
@ -2015,7 +2036,7 @@ typedef ptrdiff_t FT_PtrDist;
|
|||
ras.max_ey = band[0];
|
||||
ras.count_ey = width;
|
||||
|
||||
error = gray_convert_glyph_inner( RAS_VAR_ continued );
|
||||
error = gray_convert_glyph_inner( RAS_VAR_ continued, pl );
|
||||
continued = 1;
|
||||
|
||||
if ( !error )
|
||||
|
@ -2132,7 +2153,7 @@ typedef ptrdiff_t FT_PtrDist;
|
|||
if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey )
|
||||
return Smooth_Err_Ok;
|
||||
|
||||
return gray_convert_glyph( RAS_VAR );
|
||||
return gray_convert_glyph( RAS_VAR, params->prelines );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -501,8 +501,20 @@
|
|||
}
|
||||
|
||||
/* translate outline to render it into the bitmap */
|
||||
if ( x_shift || y_shift )
|
||||
FT_Outline_Translate( outline, x_shift, y_shift );
|
||||
if ( (x_shift || y_shift) && !slot->prel_shifted){
|
||||
//FT_Outline_Translate( outline, x_shift, y_shift );
|
||||
FT_PreLine pl = slot->prelines;
|
||||
while (pl!=NULL)
|
||||
{
|
||||
pl->x1 += x_shift;
|
||||
pl->y1 += y_shift;
|
||||
pl->x2 += x_shift;
|
||||
pl->y2 += y_shift;
|
||||
|
||||
pl = pl->next;
|
||||
}
|
||||
slot->prel_shifted = 1;
|
||||
}
|
||||
|
||||
if ( mode == FT_RENDER_MODE_NORMAL ||
|
||||
mode == FT_RENDER_MODE_LIGHT )
|
||||
|
@ -517,6 +529,8 @@
|
|||
params.target = bitmap;
|
||||
params.source = outline;
|
||||
params.flags = FT_RASTER_FLAG_AA;
|
||||
params.prelines = slot->prelines;
|
||||
|
||||
|
||||
error = render->raster_render( render->raster, ¶ms );
|
||||
}
|
||||
|
@ -568,8 +582,9 @@
|
|||
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
|
||||
}
|
||||
|
||||
if ( x_shift || y_shift )
|
||||
FT_Outline_Translate( outline, -x_shift, -y_shift );
|
||||
// if ( x_shift || y_shift ){
|
||||
// FT_Outline_Translate( outline, -x_shift, -y_shift );
|
||||
// }
|
||||
|
||||
return error;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue