freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] gsoc-anurag-2023 71f7fb720: Connect prelines to renderer


From: Werner Lemberg
Subject: [freetype2] gsoc-anurag-2023 71f7fb720: Connect prelines to renderer
Date: Sun, 3 Sep 2023 16:31:06 -0400 (EDT)

branch: gsoc-anurag-2023
commit 71f7fb7203860b8d63061a39229531cd5b8230eb
Author: Anurag Thakur <anurag105csec21@bpitindia.edu.in>
Commit: Anurag Thakur <anurag105csec21@bpitindia.edu.in>

    Connect prelines to renderer
---
 include/freetype/ftimage.h |  1 +
 src/base/ftobjs.c          | 55 ++++++++++++++++++++++++++++++++--------------
 src/dense/ftdense.c        | 25 +++++++++++++++++----
 src/dense/ftdenserend.c    |  3 ++-
 4 files changed, 62 insertions(+), 22 deletions(-)

diff --git a/include/freetype/ftimage.h b/include/freetype/ftimage.h
index 6baa81256..0c29c76fb 100644
--- a/include/freetype/ftimage.h
+++ b/include/freetype/ftimage.h
@@ -1059,6 +1059,7 @@ FT_BEGIN_HEADER
     FT_Raster_BitSet_Func   bit_set;      /* unused */
     void*                   user;
     FT_BBox                 clip_box;
+    void*             prelines;
 
   } FT_Raster_Params;
 
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 7acde344e..7426449ed 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -2570,9 +2570,12 @@
     if ( !outline )
       return FT_THROW( Invalid_Outline );
     
-     for ( n = 0; n < outline->n_contours; n++ )
+    last = -1;
+    FT_PreLine ptr = (*slot)->prelines;
+
+    for ( n = 0; n < outline->n_contours; n++ )
     {
-      FT_TRACE5(( "FT_Outline_Decompose: Contour %d\n", n ));
+      FT_TRACE5(( "ft_decompose_outline: Contour %d\n", n ));
 
       first = last + 1;
       last  = outline->contours[n];
@@ -2629,6 +2632,22 @@
       // if ( error )
       //   goto Exit;
 
+
+      FT_PreLine pl  = malloc(sizeof(FT_PreLineRec));
+            pl->x1 = v_start.x/64;
+            pl->y1 = v_start.y/64;
+            pl->x2 = v_start.x/64;
+            pl->y2 = v_start.y/64;
+            pl->next = NULL;
+
+            if((*slot)->prelines == NULL){
+                ptr = (*slot)->prelines = pl;
+            }else{
+            ptr->next = pl;
+
+            }
+      
+
       while ( point < limit )
       {
         point++;
@@ -2642,19 +2661,20 @@
             FT_Vector  vec;
 
 
-            vec.x = SCALED( point->x );
-            vec.y = SCALED( point->y );
+            vec.x = point->x;
+            vec.y = point->y;
 
             FT_TRACE5(( "  line to (%.2f, %.2f)\n",
                         (double)vec.x / 64, (double)vec.y / 64 ));
             //error = func_interface->line_to( &vec, user );
             FT_PreLine pl  = malloc(sizeof(FT_PreLineRec));
-            pl->x1 = v_last.x;
-            pl->y1 = v_last.y;
-            pl->x2 = vec.x;
-            pl->y2 = vec.y;
+            pl->x1 = v_last.x/64;
+            pl->y1 = v_last.y/64;
+            pl->x2 = vec.x/64;
+            pl->y2 = vec.y/64;
             pl->next = NULL;
-            (*slot)->prelines->next = pl;
+            ptr->next = pl;
+            ptr = ptr->next;
             continue;
           }
 
@@ -2947,14 +2967,15 @@
         FT_Load_Glyph(face, gindex, FT_LOAD_NO_HINTING);
 
         // *face->garray[gindex]->prelines = (FT_PreLineRec){1,2,3,4, NULL}; 
// need to revise structs and pointers.
-        FT_PreLine pl = face->garray[gindex]->prelines = 
malloc(sizeof(FT_PreLineRec));
-        pl->x1 = 0;
-        pl->x2 = 1;
-        pl->y1 = 2;
-        pl->y2 = 3;
-        pl->next = NULL;
-
-        ft_decompose_outline(face->garray[gindex]);
+        // FT_PreLine pl = face->garray[gindex]->prelines = 
malloc(sizeof(FT_PreLineRec));
+        // pl->x1 = 0;
+        // pl->x2 = 1;
+        // pl->y1 = 2;
+        // pl->y2 = 3;
+        // pl->next = NULL;
+
+
+        ft_decompose_outline(&face->garray[gindex]);
 
 
       }
diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c
index f0f3e59f9..4e91d439c 100644
--- a/src/dense/ftdense.c
+++ b/src/dense/ftdense.c
@@ -9,6 +9,8 @@
 #include <freetype/internal/ftobjs.h>
 #include <math.h>
 
+
+#include <stdio.h>
 #include "ftdense.h"
 #include "ftdenseerrs.h"
 
@@ -416,10 +418,23 @@ FT_DEFINE_OUTLINE_FUNCS( dense_decompose_funcs,
 )
 
 static int
-dense_render_glyph( dense_worker* worker, const FT_Bitmap* target )
+dense_render_glyph( dense_worker* worker, const FT_Bitmap* target, FT_PreLine 
pl )
 {
-  FT_Error error = FT_Outline_Decompose( &( worker->outline ),
-                                         &dense_decompose_funcs, worker );
+ // FT_Error error = FT_Outline_Decompose( &( worker->outline ),
+ //                                        &dense_decompose_funcs, worker );
+  FT_Vector point = {100, 100};
+  FT_Error error = dense_move_to(&point, worker);
+  while (pl!=NULL)
+  {
+    point.x = pl->x2/64;
+    point.y = pl->y2/64;
+    dense_line_to(&point, worker);
+    pl= pl->next;
+  }
+  point.x = 100;
+  point.y = 100;
+  dense_move_to(&point, worker);
+  
   // Render into bitmap
   const FT20D12* source = worker->m_a;
   unsigned char* dest     = target->buffer;
@@ -495,6 +510,8 @@ dense_raster_render( FT_Raster raster, const 
FT_Raster_Params* params )
 {
   const FT_Outline* outline    = (const FT_Outline*)params->source;
   FT_Bitmap*  target_map = params->target;
+  FT_PreLine pl = params->prelines;
+  printf("%d\n", pl->next->x1);
 
   dense_worker worker[1];
 
@@ -536,7 +553,7 @@ dense_raster_render( FT_Raster raster, const 
FT_Raster_Params* params )
   // Invert the pitch to account for different +ve y-axis direction in dense 
array
   // (maybe temporary solution)
   target_map->pitch *= -1;
-  return dense_render_glyph( worker, target_map );
+  return dense_render_glyph( worker, target_map, pl );
 }
 
 FT_DEFINE_RASTER_FUNCS(
diff --git a/src/dense/ftdenserend.c b/src/dense/ftdenserend.c
index 3aa98cde6..2b3cafd91 100644
--- a/src/dense/ftdenserend.c
+++ b/src/dense/ftdenserend.c
@@ -90,7 +90,7 @@
                    FT_Render_Mode   mode,
                    const FT_Vector* origin )
   {
-    printf("%d %d %d %d \n", slot->prelines->x1, slot->prelines->x2, 
slot->prelines->y1, slot->prelines->y2);
+   // printf("%d %d %d %d \n", slot->prelines->x1, slot->prelines->x2, 
slot->prelines->y1, slot->prelines->y2);
     FT_Error    error   = FT_Err_Ok;
     FT_Outline* outline = &slot->outline;
     FT_Bitmap*  bitmap  = &slot->bitmap;
@@ -168,6 +168,7 @@
     /* set up parameters */
     params.target = bitmap;
     params.source = outline;
+    params.prelines = slot->prelines;
 
     /* render the outline */
     error =



reply via email to

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