diff options
author | Alexei Podtelezhnikov <apodtele@gmail.com> | 2018-09-22 14:38:00 -0400 |
---|---|---|
committer | Alexei Podtelezhnikov <apodtele@gmail.com> | 2018-09-22 14:38:00 -0400 |
commit | 793a9ff9f5de353e4e3f7cf0a99b3b1f9b617039 (patch) | |
tree | 15cd5661aee281367e53d73d4884b5ee71e50998 | |
parent | f26d57753fe1a6ab61796fbd816fefd6c103720b (diff) | |
download | freetype2-793a9ff9f5de353e4e3f7cf0a99b3b1f9b617039.tar.gz |
* src/base/ftobjs.c (ft_glyphslot_reset_bimap): Another tweak.
This one should be clearer. When the rounded monochrome bbox collapses
we add a pixel that covers most if not all original cbox.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/base/ftobjs.c | 52 |
2 files changed, 29 insertions, 30 deletions
@@ -1,5 +1,12 @@ 2018-09-20 Alexei Podtelezhnikov <apodtele@gmail.com> + * src/base/ftobjs.c (ft_glyphslot_reset_bimap): Another tweak. + + This one should be clearer. When the rounded monochrome bbox collapses + we add a pixel that covers most if not all original cbox. + +2018-09-20 Alexei Podtelezhnikov <apodtele@gmail.com> + * src/base/ftobjs.c (ft_glyphslot_reset_bimap): Further tweak. 2018-09-21 Ben Wagner <bungeman@google.com> diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 874a3a18c..ee865a8fb 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -393,47 +393,39 @@ #if 1 /* x */ - /* undocumented but confirmed: bbox values get rounded; */ - /* for narrow glyphs bbox is extended to one pixel first */ - switch ( pbox.xMax - pbox.xMin ) - { - case 1: - pbox.xMax -= 1; - cbox.xMax += 64; - /* fall through */ - case 0: - if ( cbox.xMax - cbox.xMin < 63 ) - { - cbox.xMin = ( cbox.xMin + cbox.xMax ) / 2 - 31; - cbox.xMax = cbox.xMin + 63; - } - } - - /* we do asymmetric rounding so that the center */ - /* of a pixel gets always included */ + /* undocumented but confirmed: bbox values get rounded; */ + /* we do asymmetric rounding so that the center of a pixel */ + /* gets always included */ pbox.xMin += ( cbox.xMin + 31 ) >> 6; pbox.xMax += ( cbox.xMax + 32 ) >> 6; - /* y */ + /* if the bbox collapsed, we add a pixel based on the total */ + /* rounding remainder to cover most of the original cbox */ - switch ( pbox.yMax - pbox.yMin ) + if ( pbox.xMin == pbox.xMax ) { - case 1: - pbox.yMax -= 1; - cbox.yMax += 64; - /* fall through */ - case 0: - if ( cbox.yMax - cbox.yMin < 63 ) - { - cbox.yMin = ( cbox.yMin + cbox.yMax ) / 2 - 31; - cbox.yMax = cbox.yMin + 63; - } + if ( ( ( cbox.xMin + 31 ) & 63 ) - 31 + + ( ( cbox.xMax + 32 ) & 63 ) - 32 < 0 ) + pbox.xMin -= 1; + else + pbox.xMax += 1; } + /* y */ + pbox.yMin += ( cbox.yMin + 31 ) >> 6; pbox.yMax += ( cbox.yMax + 32 ) >> 6; + if ( pbox.yMin == pbox.yMax ) + { + if ( ( ( cbox.yMin + 31 ) & 63 ) - 31 + + ( ( cbox.yMax + 32 ) & 63 ) - 32 < 0 ) + pbox.yMin -= 1; + else + pbox.yMax += 1; + } + break; #else goto Adjust; |