freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] gsoc-anurag-2022 63ed4b6a7 06/18: Trying to get it to work a


From: Werner Lemberg
Subject: [freetype2] gsoc-anurag-2022 63ed4b6a7 06/18: Trying to get it to work attempt #1
Date: Thu, 11 Aug 2022 04:28:55 -0400 (EDT)

branch: gsoc-anurag-2022
commit 63ed4b6a70a54fdbf66022846eaf5d3169df3e96
Author: Anurag Thakur <anurag105csec21@bpitindia.edu.in>
Commit: Anurag Thakur <anurag105csec21@bpitindia.edu.in>

    Trying to get it to work attempt #1
---
 src/dense/ftdense.c     | 38 ++++++++++++++++++++++++++++++--------
 src/dense/ftdense.h     |  7 +------
 src/dense/ftdenserend.c | 41 ++++++++++++++++++++---------------------
 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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]