freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master 4b58cf4 08/68: [base] Fill 'COLR' v1 API templates to


From: Werner Lemberg
Subject: [freetype2] master 4b58cf4 08/68: [base] Fill 'COLR' v1 API templates to make them work (#59703).
Date: Fri, 5 Mar 2021 09:29:33 -0500 (EST)

branch: master
commit 4b58cf47cc5cd3ffc203f5fbe26865f4634ffc70
Author: Dominik Röttsches <drott@chromium.org>
Commit: Werner Lemberg <wl@gnu.org>

    [base] Fill 'COLR' v1 API templates to make them work (#59703).
    
    * src/base/ftobjs.c (FT_Get_Color_Glyph_Paint, FT_Get_Paint_Layers,
    FT_Get_Paint, FT_Get_Colorline_Stops): Add basic sanity checks,
    check for existence of `FT_Face`, check arguments and delegate calls
    for the respective 'COLR' v1 API to the SFNT driver.
---
 ChangeLog         |  9 +++++++
 src/base/ftobjs.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 85 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1e8622a..33fa5a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2020-12-16  Dominik Röttsches  <drott@chromium.org>
 
+       [base] Fill 'COLR' v1 API templates to make them work (#59703).
+
+       * src/base/ftobjs.c (FT_Get_Color_Glyph_Paint, FT_Get_Paint_Layers,
+       FT_Get_Paint, FT_Get_Colorline_Stops): Add basic sanity checks,
+       check for existence of `FT_Face`, check arguments and delegate calls
+       for the respective 'COLR' v1 API to the SFNT driver.
+
+2020-12-16  Dominik Röttsches  <drott@chromium.org>
+
        [sfnt] Register 'COLR' v1 API in driver (#59703).
 
        * include/freetype/internal/sfnt.h (TT_Get_Color_Glyph_Paint_Func,
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 061d119..a7010f9 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -5568,39 +5568,111 @@
   }
 
 
+  /* documentation is in freetype.h */
+
   FT_EXPORT_DEF ( FT_Bool )
   FT_Get_Color_Glyph_Paint( FT_Face          face,
                             FT_UInt          base_glyph,
                             FT_OpaquePaint*  paint )
   {
-    return 0;
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !paint )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_colr_layer )
+      return sfnt->get_colr_glyph_paint( ttface, base_glyph, paint );
+    else
+      return 0;
   }
 
 
+  /* documentation is in freetype.h */
+
   FT_EXPORT_DEF ( FT_Bool )
   FT_Get_Paint_Layers( FT_Face            face,
                        FT_LayerIterator*  layer_iterator,
                        FT_OpaquePaint*    paint )
   {
-    return 0;
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !paint || !layer_iterator )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_paint_layers )
+      return sfnt->get_paint_layers( ttface, layer_iterator, paint );
+    else
+      return 0;
   }
 
 
+  /* documentation is in freetype.h */
+
   FT_EXPORT_DEF( FT_Bool )
   FT_Get_Paint( FT_Face face,
                 FT_OpaquePaint  opaque_paint,
                 FT_COLR_Paint*  paint )
   {
-    return 0;
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !paint || !paint )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_paint )
+      return sfnt->get_paint( ttface, opaque_paint, paint );
+    else
+      return 0;
   }
 
 
+  /* documentation is in freetype.h */
+
   FT_EXPORT_DEF ( FT_Bool )
   FT_Get_Colorline_Stops ( FT_Face                face,
                            FT_ColorStop *         color_stop,
                            FT_ColorStopIterator  *iterator )
   {
-    return 0;
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !color_stop || !iterator )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_colorline_stops )
+      return sfnt->get_colorline_stops ( ttface, color_stop, iterator );
+    else
+      return 0;
   }
 
 



reply via email to

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