summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2018-09-22 14:38:00 -0400
committerAlexei Podtelezhnikov <apodtele@gmail.com>2018-09-22 14:38:00 -0400
commit793a9ff9f5de353e4e3f7cf0a99b3b1f9b617039 (patch)
tree15cd5661aee281367e53d73d4884b5ee71e50998
parentf26d57753fe1a6ab61796fbd816fefd6c103720b (diff)
downloadfreetype2-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--ChangeLog7
-rw-r--r--src/base/ftobjs.c52
2 files changed, 29 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog
index c39f08fd2..044c3c27b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;