diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index b58f8d82b..dd5706de8 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -1045,6 +1045,7 @@ FT_BEGIN_HEADER typedef struct FT_PreLineRec_ { int x1, x2, y1, y2; + int ismove; FT_PreLine next; } FT_PreLineRec; diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index ed491dd41..effb565eb 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -2639,6 +2639,7 @@ pl->x2 = v_start.x/64; pl->y2 = v_start.y/64; pl->next = NULL; + pl->ismove = 1; if((*slot)->prelines == NULL){ ptr = (*slot)->prelines = pl; @@ -2667,12 +2668,16 @@ FT_TRACE5(( " line to (%.2f, %.2f)\n", (double)vec.x / 64, (double)vec.y / 64 )); //error = func_interface->line_to( &vec, user ); + if((*slot)->glyph_index == 37) + printf( " line to (%.2f, %.2f)\n", + (double)vec.x / 64, (double)vec.y / 64 ); FT_PreLine pl = malloc(sizeof(FT_PreLineRec)); pl->x1 = ptr->x2; pl->y1 = ptr->y2; pl->x2 = vec.x/64; pl->y2 = vec.y/64; pl->next = NULL; + pl->ismove = 0; ptr->next = pl; ptr = ptr->next; continue; @@ -2685,6 +2690,18 @@ // FT_TRACE5(( " line to (%.2f, %.2f)\n", // (double)v_start.x / 64, (double)v_start.y / 64 )); // error = func_interface->line_to( &v_start, user ); + if((*slot)->glyph_index == 37) + printf( " line to (%.2f, %.2f)\n", + (double)v_start.x / 64, (double)v_start.y / 64 ); + FT_PreLine pl2 = malloc(sizeof(FT_PreLineRec)); + pl2->x1 = ptr->x2; + pl2->y1 = ptr->y2; + pl2->x2 = v_start.x/64; + pl2->y2 = v_start.y/64; + pl2->next = NULL; + pl->ismove = 0; + ptr->next = pl2; + ptr = ptr->next; } diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c index 90f0dc3c2..4d3bc386a 100644 --- a/src/dense/ftdense.c +++ b/src/dense/ftdense.c @@ -433,19 +433,22 @@ dense_render_glyph( dense_worker* worker, const FT_Bitmap* target, FT_PreLine pl { // FT_Error error = FT_Outline_Decompose( &( worker->outline ), // &dense_decompose_funcs, worker ); - FT_Vector point1 = {100, 100}; + FT_Vector point1 = {pl->x1, pl->y1}; FT_Vector point2 = {100, 100}; FT_Error error = dense_move_to(&point1, worker); while (pl!=NULL) { - point1.x = pl->x1; - point1.y = pl->y1; - point2.x = pl->x2; - point2.y = pl->y2; - + point1.x = pl->x1/4; + point1.y = pl->y1/4; + point2.x = pl->x2/4; + point2.y = pl->y2/4; + if(pl->ismove){ + dense_move_to(&point2, worker); + }else{ dense_line_to2(&point1, &point2, worker); + } pl= pl->next; } // point.x = 100;