summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnurag Thakur <anurag105csec21@bpitindia.edu.in>2021-10-30 00:57:51 +0530
committerAnurag Thakur <anurag105csec21@bpitindia.edu.in>2022-10-04 03:16:11 +0530
commit05c87900082ec82adae5a93ebfd1042f05fbfd03 (patch)
treeddeadd36cf59b4bb076f826711cdf0050539bcb3
parentdee8855a9cec4f90ef8686738f2ebf39b22b1542 (diff)
downloadfreetype2-05c87900082ec82adae5a93ebfd1042f05fbfd03.tar.gz
Trying to get it to work attempt #1
-rw-r--r--src/dense/ftdense.c38
-rw-r--r--src/dense/ftdense.h7
-rw-r--r--src/dense/ftdenserend.c41
3 files changed, 51 insertions, 35 deletions
diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c
index 5ff511a77..e7f1b473f 100644
--- a/src/dense/ftdense.c
+++ b/src/dense/ftdense.c
@@ -9,6 +9,7 @@
#include <freetype/internal/ftdebug.h>
#include <freetype/internal/ftobjs.h>
+#include <math.h>
#include "ftdenseerrs.h"
typedef struct dense_TRaster_
@@ -30,7 +31,6 @@ static int
dense_move_to( const FT_Vector* to, RasterFP* aRasterFP )
{
RasterFP_Point lp = { to->x, to->y };
-
aRasterFP->last_point = lp;
return 0;
}
@@ -49,6 +49,8 @@ dense_line_to( const FT_Vector* to, RasterFP* aRasterFP )
void
RasterFP_DrawLine( RasterFP* aRasterFP, RasterFP_Point aP0, RasterFP_Point aP1 )
{
+ // printf( "\n%f\n", aRasterFP->m_w );
+ // printf( "\n%f\n", aRasterFP->m_h );
// assert( aRasterFP );
if ( aP0.m_y == aP1.m_y )
return;
@@ -139,6 +141,13 @@ RasterFP_DrawLine( RasterFP* aRasterFP, RasterFP_Point aP0, RasterFP_Point aP1 )
int y0 = (int)aP0.m_y;
int y_limit = (int)ceil( aP1.m_y );
float* m_a = aRasterFP->m_a;
+
+ // printf( "%f\n", x );
+ // printf( "%d\n", y0 );
+ // printf( "%d\n", y_limit );
+ // printf( "%p\n", m_a );
+
+
for ( int y = y0; y < y_limit; y++ )
{
int linestart = y * aRasterFP->m_w;
@@ -197,6 +206,7 @@ RasterFP_DrawLine( RasterFP* aRasterFP, RasterFP_Point aP0, RasterFP_Point aP1 )
}
x = xnext;
}
+
}
@@ -341,7 +351,6 @@ dense_raster_new( FT_Memory memory, dense_PRaster* araster )
raster->memory = memory;
*araster = raster;
-
return error;
}
@@ -385,9 +394,9 @@ FT_DEFINE_OUTLINE_FUNCS( dense_decompose_funcs,
)
static int
-dense_render_glyph( RasterFP* aRasterFP, FT_Bitmap* target )
+dense_render_glyph( RasterFP* aRasterFP, const FT_Bitmap* target )
{
- FT_Error error = FT_Outline_Decompose( aRasterFP->outline,
+ FT_Error error = FT_Outline_Decompose( &(aRasterFP->outline),
&dense_decompose_funcs, aRasterFP );
// Render into bitmap
@@ -418,6 +427,8 @@ dense_raster_render( FT_Raster raster, const FT_Raster_Params* params )
const FT_Outline* outline = (const FT_Outline*)params->source;
const FT_Bitmap* target_map = params->target;
+ printf( "Rasterizing glyph" );
+
RasterFP* aRasterFP = malloc( sizeof( RasterFP ) );
if ( !raster )
@@ -426,7 +437,7 @@ dense_raster_render( FT_Raster raster, const FT_Raster_Params* params )
if ( !outline )
return FT_THROW( Invalid_Outline );
- aRasterFP->outline = outline;
+ aRasterFP->outline = *outline;
if ( !target_map )
return FT_THROW( Invalid_Argument );
@@ -438,16 +449,27 @@ dense_raster_render( FT_Raster raster, const FT_Raster_Params* params )
if ( !target_map->buffer )
return FT_THROW( Invalid_Argument );
+
aRasterFP->m_origin_x = 0;
aRasterFP->m_origin_y = 0;
- aRasterFP->m_w = (float)target_map->width;
- aRasterFP->m_h = (float)target_map->rows;
+ aRasterFP->m_w = target_map->pitch;
+ aRasterFP->m_h = target_map->rows;
+
+ int size = aRasterFP->m_w * aRasterFP->m_h + 4;
+
+ aRasterFP->m_a = realloc(aRasterFP, sizeof(float) * size);
+ if ( aRasterFP->m_a == NULL )
+ {
+ memset( aRasterFP, 0, sizeof( RasterFP ) );
+ }
+ aRasterFP->m_a_size = size;
+
+ memset( aRasterFP->m_a, 0, sizeof( float ) * size );
/* exit if nothing to do */
if ( aRasterFP->m_w <= aRasterFP->m_origin_x ||
aRasterFP->m_h <= aRasterFP->m_origin_y )
return 0;
-
return dense_render_glyph( aRasterFP, target_map );
}
diff --git a/src/dense/ftdense.h b/src/dense/ftdense.h
index e7c4c826c..f62f32db3 100644
--- a/src/dense/ftdense.h
+++ b/src/dense/ftdense.h
@@ -108,15 +108,10 @@ extern "C"
RasterFP_Point last_point;
- FT_Outline *outline;
+ FT_Outline outline;
} RasterFP;
void RasterFP_Create( RasterFP* aRasterFP );
- void RasterFP_StartRasterizing( RasterFP* aRasterFP,
- int aOriginX,
- int aOriginY,
- int aWidth,
- int aHeight );
void RasterFP_Destroy( RasterFP* aRasterFP );
void RasterFP_DrawLine( RasterFP* aRasterFP,
RasterFP_Point aP0,
diff --git a/src/dense/ftdenserend.c b/src/dense/ftdenserend.c
index 983f52a71..b4996c25d 100644
--- a/src/dense/ftdenserend.c
+++ b/src/dense/ftdenserend.c
@@ -30,13 +30,11 @@
static FT_Error
ft_dense_init( FT_Renderer render )
{
- FT_Renderer dense_render = render;
// dense_render->spread = 0;
// dense_render->flip_sign = 0;
// dense_render->flip_y = 0;
// dense_render->overlaps = 0;
-
return FT_Err_Ok;
}
@@ -88,33 +86,34 @@ ft_dense_render( FT_Renderer render,
if ( !bitmap->rows || !bitmap->pitch )
goto Exit;
- /* ignore the pitch, pixel mode and set custom */
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->pitch = bitmap->width;
- bitmap->num_grays = 255;
-
/* allocate new one */
- if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
- goto Exit;
- /* the padding will simply be equal to the `spread' */
- x_shift = 64 * -slot->bitmap_left;
- y_shift = 64 * -slot->bitmap_top;
+
+ // if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
+ // goto Exit;
+
+ // For whatever reason, it segfaults if the above is used for allocation
+ bitmap->buffer = realloc(bitmap->buffer, sizeof(int) * bitmap->rows * bitmap->pitch);
+ /* the padding will simply be equal to the `spread' */
+ // x_shift = 64 * -slot->bitmap_left;
+ // y_shift = 64 * -slot->bitmap_top;
+
+
slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
- y_shift += 64 * (FT_Int)bitmap->rows;
+ // y_shift += 64 * (FT_Int)bitmap->rows;
- if ( origin )
- {
- x_shift += origin->x;
- y_shift += origin->y;
- }
+ // if ( origin )
+ // {
+ // x_shift += origin->x;
+ // y_shift += origin->y;
+ // }
- /* translate outline to render it into the bitmap */
- if ( x_shift || y_shift )
- FT_Outline_Translate( outline, x_shift, y_shift );
+ // /* translate outline to render it into the bitmap */
+ // if ( x_shift || y_shift )
+ // FT_Outline_Translate( outline, x_shift, y_shift );
/* set up parameters */
params.target = bitmap;