freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] GSoC-2019-moazin 4025f12 06/47: Add a `hooks_set' flag.


From: Moazin Khatti
Subject: [freetype2] GSoC-2019-moazin 4025f12 06/47: Add a `hooks_set' flag.
Date: Sun, 25 Aug 2019 16:18:09 -0400 (EDT)

branch: GSoC-2019-moazin
commit 4025f1213eee11b55aef18713901ed62acf131c0
Author: Moazin Khatti <address@hidden>
Commit: Moazin Khatti <address@hidden>

    Add a `hooks_set' flag.
    
    A flag is to be used to indicate whether hooks
    have been set or not. In case the hooks haven't
    been set, a `Missing_SVG_Hooks' error will be
    thrown.
---
 include/freetype/fterrdef.h |  2 ++
 src/svg/ftsvg.c             | 15 ++++++++++++---
 src/svg/svgtypes.c          |  1 +
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/include/freetype/fterrdef.h b/include/freetype/fterrdef.h
index 9bc7dc6..bbd8c9b 100644
--- a/include/freetype/fterrdef.h
+++ b/include/freetype/fterrdef.h
@@ -234,6 +234,8 @@
                 "found FDEF or IDEF opcode in glyf bytecode" )
   FT_ERRORDEF_( Missing_Bitmap,                              0x9D,
                 "missing bitmap in strike" )
+  FT_ERRORDEF_( Missing_SVG_Hooks,                           0x9E,
+                "hooks have not been set" )
 
   /* CFF, CID, and Type 1 errors */
 
diff --git a/src/svg/ftsvg.c b/src/svg/ftsvg.c
index 5c9d081..df0a702 100644
--- a/src/svg/ftsvg.c
+++ b/src/svg/ftsvg.c
@@ -39,6 +39,9 @@
     svg_module->hooks.free_svg = (SVG_Lib_Free_Func)rsvg_port_free;
     svg_module->hooks.render_svg = (SVG_Lib_Render_Func)rsvg_port_render;
     svg_module->hooks.get_buffer_size = 
(SVG_Lib_Get_Buffer_Size_Func)rsvg_port_get_buffer_size;
+    svg_module->hooks_set = TRUE;
+#else
+    svg_module->hooks_set = FALSE;
 #endif
     return error;
   }
@@ -47,7 +50,8 @@
   ft_svg_done( SVG_Renderer svg_module )
   {
     FT_Library  library = svg_module->root.root.library;
-    if ( svg_module->loaded == TRUE )
+    if ( svg_module->loaded    == TRUE &&
+         svg_module->hooks_set == TRUE )
       svg_module->hooks.free_svg( library );
     svg_module->loaded = FALSE;
   }
@@ -63,10 +67,14 @@
     FT_Memory     memory       = library->memory;
     FT_BBox       outline_bbox;
     FT_Error      error;
-    FT_ULong       size_image_buffer;
+    FT_ULong      size_image_buffer;
 
     SVG_RendererHooks hooks = svg_renderer->hooks;
 
+    if ( svg_renderer->hooks_set == FALSE )
+    {
+      return FT_THROW( Missing_SVG_Hooks );
+    }
 
     if ( svg_renderer->loaded == FALSE )
     {
@@ -100,7 +108,8 @@
     if ( !ft_strcmp( property_name, "svg_hooks" ) )
     {
       SVG_RendererHooks*  hooks = (SVG_RendererHooks*)value;
-      renderer->hooks = *hooks;
+      renderer->hooks     = *hooks;
+      renderer->hooks_set = TRUE;
     }
     else
     {
diff --git a/src/svg/svgtypes.c b/src/svg/svgtypes.c
index b82d51e..f7008f3 100644
--- a/src/svg/svgtypes.c
+++ b/src/svg/svgtypes.c
@@ -25,6 +25,7 @@
   {
     FT_RendererRec     root;   /* This inherits FT_RendererRec */
     FT_Bool            loaded;
+    FT_Bool            hooks_set;
     SVG_RendererHooks  hooks;  /* Holds out hooks to the outside library */
   } SVG_RendererRec;
 



reply via email to

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