summaryrefslogtreecommitdiff
path: root/src/smooth/ftsmooth.c
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2014-10-31 22:12:37 -0400
committerAlexei Podtelezhnikov <apodtele@gmail.com>2014-10-31 22:12:37 -0400
commit525d4876bea4a56adc0b3c9aab2082f84f050e32 (patch)
treed4dacc47bbc85ce60731adca35774d4adb321434 /src/smooth/ftsmooth.c
parente1efe0a2fc877c198d72cb0c877db3a17e956f63 (diff)
downloadfreetype2-525d4876bea4a56adc0b3c9aab2082f84f050e32.tar.gz
[smooth] Improve code readability.
* src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
Diffstat (limited to 'src/smooth/ftsmooth.c')
-rw-r--r--src/smooth/ftsmooth.c76
1 files changed, 37 insertions, 39 deletions
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
index d348f72f0..98e117cd8 100644
--- a/src/smooth/ftsmooth.c
+++ b/src/smooth/ftsmooth.c
@@ -103,19 +103,19 @@
FT_Render_Mode required_mode )
{
FT_Error error;
- FT_Outline* outline = NULL;
+ FT_Outline* outline = &slot->outline;
+ FT_Bitmap* bitmap = &slot->bitmap;
+ FT_Memory memory = render->root.memory;
FT_BBox cbox;
+ FT_Pos x_shift = 0;
+ FT_Pos y_shift = 0;
+ FT_Pos x_left, y_top;
FT_Pos width, height, pitch;
#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
FT_Pos height_org, width_org;
#endif
- FT_Bitmap* bitmap = &slot->bitmap;
- FT_Memory memory = render->root.memory;
FT_Int hmul = mode == FT_RENDER_MODE_LCD;
FT_Int vmul = mode == FT_RENDER_MODE_LCD_V;
- FT_Pos x_shift = 0;
- FT_Pos y_shift = 0;
- FT_Pos x_left, y_top;
FT_Raster_Params params;
@@ -137,9 +137,6 @@
goto Exit;
}
- outline = &slot->outline;
-
- /* account for the oigin shift */
if ( origin )
{
x_shift = origin->x;
@@ -147,6 +144,7 @@
}
/* compute the control box, and grid fit it */
+ /* taking into account the origin shift */
FT_Outline_Get_CBox( outline, &cbox );
cbox.xMin = FT_PIX_FLOOR( cbox.xMin + x_shift );
@@ -154,6 +152,12 @@
cbox.xMax = FT_PIX_CEIL( cbox.xMax + x_shift );
cbox.yMax = FT_PIX_CEIL( cbox.yMax + y_shift );
+ x_shift -= cbox.xMin;
+ y_shift -= cbox.yMin;
+
+ x_left = cbox.xMin >> 6;
+ y_top = cbox.yMax >> 6;
+
width = (FT_ULong)( cbox.xMax - cbox.xMin ) >> 6;
height = (FT_ULong)( cbox.yMax - cbox.yMin ) >> 6;
@@ -165,19 +169,13 @@
pitch = width;
if ( hmul )
{
- width = width * 3;
- pitch = FT_PAD_CEIL( width, 4 );
+ width *= 3;
+ pitch = FT_PAD_CEIL( width, 4 );
}
if ( vmul )
height *= 3;
- x_shift -= cbox.xMin;
- y_shift -= cbox.yMin;
-
- x_left = cbox.xMin >> 6;
- y_top = cbox.yMax >> 6;
-
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
if ( slot->library->lcd_filter_func )
@@ -188,21 +186,31 @@
if ( hmul )
{
x_shift += 64 * ( extra >> 1 );
+ x_left -= extra >> 1;
width += 3 * extra;
pitch = FT_PAD_CEIL( width, 4 );
- x_left -= extra >> 1;
}
if ( vmul )
{
y_shift += 64 * ( extra >> 1 );
- height += 3 * extra;
y_top += extra >> 1;
+ height += 3 * extra;
}
}
#endif
+ /*
+ * XXX: on 16bit system, we return an error for huge bitmap
+ * to prevent an overflow.
+ */
+ if ( x_left > FT_INT_MAX || y_top > FT_INT_MAX )
+ {
+ error = FT_THROW( Invalid_Pixel_Size );
+ goto Exit;
+ }
+
/* Required check is (pitch * height < FT_ULONG_MAX), */
/* but we care realistic cases only. Always pitch <= width. */
if ( width > 0x7FFF || height > 0x7FFF )
@@ -213,12 +221,6 @@
goto Exit;
}
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- bitmap->width = width;
- bitmap->rows = height;
- bitmap->pitch = pitch;
-
/* release old bitmap buffer */
if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
{
@@ -234,6 +236,16 @@
slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
+ slot->format = FT_GLYPH_FORMAT_BITMAP;
+ slot->bitmap_left = (FT_Int)x_left;
+ slot->bitmap_top = (FT_Int)y_top;
+
+ bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
+ bitmap->num_grays = 256;
+ bitmap->width = width;
+ bitmap->rows = height;
+ bitmap->pitch = pitch;
+
/* translate outline to render it into the bitmap */
if ( x_shift || y_shift )
{
@@ -346,20 +358,6 @@
#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
- /*
- * XXX: on 16bit system, we return an error for huge bitmap
- * to prevent an overflow.
- */
- if ( x_left > FT_INT_MAX || y_top > FT_INT_MAX )
- {
- error = FT_THROW( Invalid_Pixel_Size );
- goto Exit;
- }
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = (FT_Int)x_left;
- slot->bitmap_top = (FT_Int)y_top;
-
/* everything is fine; don't deallocate buffer */
have_buffer = FALSE;