[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2] adjust fa64df531: Rework autofitter to center tildes if they
From: |
Werner Lemberg |
Subject: |
[freetype2] adjust fa64df531: Rework autofitter to center tildes if they are small. |
Date: |
Sun, 20 Oct 2024 05:38:56 -0400 (EDT) |
branch: adjust
commit fa64df531fc333f2d36b219536bb0f359ca91f1a
Author: Craig White <gerzytet@gmail.com>
Commit: Craig White <gerzytet@gmail.com>
Rework autofitter to center tildes if they are small.
---
src/autofit/aflatin.c | 62 +++++++++++++++++++++++++++++++++++++++------------
1 file changed, 48 insertions(+), 14 deletions(-)
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index 4c9d15009..2d742fcea 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -2984,18 +2984,20 @@
min_measurement = measurement;
}
} while ( p != first_point );
+ height = max_y - min_y;
- /* touch all points */
- p = first_point;
- do
- {
- p = p->next;
- if ( !( p->flags & AF_FLAG_CONTROL ) )
- p->flags |= AF_FLAG_TOUCH_Y;
+ if ( height < 256 ) {
+ /* touch all points */
+ p = first_point;
+ do
+ {
+ p = p->next;
+ if ( !( p->flags & AF_FLAG_CONTROL ) )
+ p->flags |= AF_FLAG_TOUCH_Y;
- } while ( p != first_point );
+ } while ( p != first_point );
+ }
- height = max_y - min_y;
target_height = min_measurement + 64;
if ( height >= target_height )
@@ -3043,7 +3045,6 @@
AF_Point first_point = p;
FT_Pos min_y, max_y;
- FT_Pos min_y_rounded;
FT_Pos delta;
@@ -3057,10 +3058,17 @@
} while ( p != first_point );
- // mid_y = ( min_y + max_y ) / 2;
- min_y_rounded = FT_PIX_ROUND( min_y );
- delta = min_y_rounded - min_y;
+ // If the tilde is less than 2 pixels tall, snap the center of it to
+ // the grid instead of the bottom to improve readability
+ //
+ FT_Pos min_y_rounded = FT_PIX_ROUND( min_y );
+ delta = min_y_rounded - min_y;
+ FT_Pos height = max_y - min_y;
+ if ( height < 64*3 ) {
+ delta += ( FT_PIX_ROUND( height ) - height ) / 2;
+ }
+ p = first_point;
do
{
p = p->next;
@@ -3193,6 +3201,17 @@
return;
}
+ AF_Point point = hints->contours[highest_contour];
+ AF_Point first_point = point;
+ FT_Pos highest_max_y = point->y;
+ do
+ {
+ if ( point->y > highest_max_y )
+ {
+ highest_max_y = point->y;
+ }
+ } while ( point != first_point );
+
/* If there are any contours that have a maximum y coordinate */
/* greater than or equal to the minimum y coordinate of the */
/* previously found highest contour, bump the high contour up until */
@@ -3225,7 +3244,20 @@
} while ( point != first_point );
if ( max_y >= highest_min_y - 64 )
+ {
adjustment_amount = 64 - ( highest_min_y - max_y );
+ }
+ }
+
+ FT_TRACE4(( " Calculated adjustment amount 1: %d\n",
+ adjustment_amount ));
+
+
+ if ( adjustment_amount > 0 && ( highest_max_y - highest_min_y ) < 128 )
+ {
+ adjustment_amount += ( 128 - ( highest_max_y - highest_min_y ) ) / 2;
+ FT_TRACE4(( " Additional push: %d\n",
+ ( 128 - ( highest_max_y - highest_min_y ) ) / 2 ));
}
FT_TRACE4(( " Calculated adjustment amount: %d\n",
@@ -4186,6 +4218,7 @@
} while ( p != first_point );
FT_TRACE4(( "height %d: %ld\n", num, max_y - min_y ));
+ FT_TRACE4(( "min y %d: %ld\n", num, min_y ));
}
#else
static void
@@ -4240,6 +4273,7 @@
{
af_latin_trace_height(0, hints );
af_latin_stretch_tildes( hints );
+ af_latin_trace_height(33, hints );
af_latin_align_tildes( hints );
af_latin_trace_height(1, hints );
}
@@ -4279,7 +4313,7 @@
(AF_Dimension)dim,
glyph_index,
metrics->root.reverse_charmap );
- af_latin_trace_height(6, hints );
+ af_latin_trace_height(99, hints );
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] adjust fa64df531: Rework autofitter to center tildes if they are small.,
Werner Lemberg <=