[smooth] Bithacks and cosmetics.

* src/smooth/ftgrays.c (gray_record_cell, gray_set_cell, gray_hline,
gray_render_conic, gray_convert_glyph_inner): Updated.
This commit is contained in:
Alexei Podtelezhnikov 2019-04-26 21:53:00 -04:00
parent 7a81b63abc
commit 80475edead
2 changed files with 18 additions and 16 deletions

View File

@ -1,3 +1,10 @@
2019-04-26 Alexei Podtelezhnikov <apodtele@gmail.com>
[smooth] Bithacks and cosmetics.
* src/smooth/ftgrays.c (gray_record_cell, gray_set_cell, gray_hline,
gray_render_conic, gray_convert_glyph_inner): Updated.
2019-04-25 Alexei Podtelezhnikov <apodtele@gmail.com>
Optimize Bézier bisections.

View File

@ -516,7 +516,7 @@ typedef ptrdiff_t FT_PtrDist;
/**************************************************************************
*
* Record the current cell in the table.
* Record the current cell in the linked list.
*/
static void
gray_record_cell( RAS_ARG )
@ -526,10 +526,9 @@ typedef ptrdiff_t FT_PtrDist;
pcell = &ras.ycells[ras.ey - ras.min_ey];
for (;;)
while ( ( cell = *pcell ) )
{
cell = *pcell;
if ( !cell || cell->x > x )
if ( cell->x > x )
break;
if ( cell->x == x )
@ -577,16 +576,13 @@ typedef ptrdiff_t FT_PtrDist;
/* Note that if a cell is to the left of the clipping region, it is */
/* actually set to the (min_ex-1) horizontal position. */
if ( ex < ras.min_ex )
ex = ras.min_ex - 1;
/* record the current one if it is valid and substantial */
if ( !ras.invalid && ( ras.area || ras.cover ) )
gray_record_cell( RAS_VAR );
ras.area = 0;
ras.cover = 0;
ras.ex = ex;
ras.ex = FT_MAX( ex, ras.min_ex - 1 );
ras.ey = ey;
ras.invalid = ( ey >= ras.max_ey || ey < ras.min_ey ||
@ -1044,12 +1040,11 @@ typedef ptrdiff_t FT_PtrDist;
/* many times as there are trailing zeros in the counter. */
do
{
split = 1;
while ( ( draw & split ) == 0 )
split = draw & ( -draw ); /* isolate the rightmost 1-bit */
while ( ( split >>= 1 ) )
{
gray_split_conic( arc );
arc += 2;
split <<= 1;
}
gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
@ -1242,8 +1237,6 @@ typedef ptrdiff_t FT_PtrDist;
{
/* scale the coverage from 0..(ONE_PIXEL*ONE_PIXEL*2) to 0..256 */
coverage >>= PIXEL_BITS * 2 + 1 - 8;
if ( coverage < 0 )
coverage = -coverage - 1;
/* compute the line's coverage depending on the outline fill rule */
if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
@ -1253,9 +1246,11 @@ typedef ptrdiff_t FT_PtrDist;
if ( coverage >= 256 )
coverage = 511 - coverage;
}
else
else /* default non-zero winding rule */
{
/* normal non-zero winding rule */
if ( coverage < 0 )
coverage = ~coverage; /* the same as -coverage - 1 */
if ( coverage >= 256 )
coverage = 255;
}
@ -1637,7 +1632,7 @@ typedef ptrdiff_t FT_PtrDist;
gray_convert_glyph_inner( RAS_ARG,
int continued )
{
volatile int error = 0;
int error;
if ( ft_setjmp( ras.jump_buffer ) == 0 )