<pre style='margin:0'>
Marcus Calhoun-Lopez (MarcusCalhoun-Lopez) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/7adbbcbdf2cc0bf5bea095f5b7f7f1b7034f75aa">https://github.com/macports/macports-ports/commit/7adbbcbdf2cc0bf5bea095f5b7f7f1b7034f75aa</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7adbbcbdf2cc0bf5bea095f5b7f7f1b7034f75aa
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Sun Jul 21 09:36:45 2019 -0700

<span style='display:block; white-space:pre;color:#404040;'>    libharu: apply upstream pull request
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The pull request has languished for more than two year.
</span><span style='display:block; white-space:pre;color:#404040;'>    Some ports (e.g. VTK) rely on the new functionality.
</span><span style='display:block; white-space:pre;color:#404040;'>    See https://github.com/libharu/libharu/pull/157
</span>---
 print/libharu/Portfile                 |   5 +-
 print/libharu/files/patch-shading.diff | 527 +++++++++++++++++++++++++++++++++
 2 files changed, 530 insertions(+), 2 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/libharu/Portfile b/print/libharu/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 214f03a..f0a95f9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/print/libharu/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/libharu/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,7 +5,7 @@ PortGroup           cmake 1.1
</span> 
 name                libharu
 version             2.3.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            2
</span> categories          print
 platforms           darwin
 maintainers         nomaintainer
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -35,7 +35,8 @@ checksums           rmd160  c90ec08c3cc04e4d93f6aa9565368dd3a31a74bc \
</span>                     sha256  8f9e68cc5d5f7d53d1bc61a1ed876add1faf4f91070dbc360d8b259f46d9a4d2 \
                     size    1396413
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles          patch-CMakeLists.txt.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          patch-shading.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-CMakeLists.txt.diff
</span> 
 # avoid self-conflict
 configure.cppflags-replace  -I${prefix}/include -isystem${prefix}/include
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/libharu/files/patch-shading.diff b/print/libharu/files/patch-shading.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..3a54b8d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/libharu/files/patch-shading.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,527 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 9e8ba2f5453552909e52fde5ec30856004a616d0 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "David C. Lonie" <david.lonie@kitware.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 10 May 2017 11:07:28 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Add support for free-form triangle Shading objects.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/hpdf.h           |  24 +++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/hpdf_error.h     |   3 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/hpdf_objects.h   |   2 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/hpdf_pages.h     |   5 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/hpdf_types.h     |  14 +++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/CMakeLists.txt       |   1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/hpdf_page_operator.c |  31 ++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/hpdf_pages.c         |  55 +++++++++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/hpdf_shading.c       | 231 +++++++++++++++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 9 files changed, 362 insertions(+), 4 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ create mode 100644 src/hpdf_shading.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/hpdf.h b/include/hpdf.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e369f67..40e3c41 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/hpdf.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/hpdf.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -77,6 +77,7 @@ typedef HPDF_HANDLE   HPDF_Dict;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef HPDF_HANDLE   HPDF_EmbeddedFile;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef HPDF_HANDLE   HPDF_OutputIntent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef HPDF_HANDLE   HPDF_Xref;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef HPDF_HANDLE   HPDF_Shading;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1171,6 +1172,11 @@ HPDF_EXPORT(HPDF_STATUS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HPDF_Page_SetExtGState  (HPDF_Page        page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          HPDF_ExtGState   ext_gstate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* sh */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_EXPORT(HPDF_STATUS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Page_SetShading  (HPDF_Page    page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       HPDF_Shading shading);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*--- Special graphic state operator --------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1450,7 +1456,23 @@ HPDF_Page_SetCMYKStroke  (HPDF_Page  page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*--- Shading patterns ---------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-/* sh --not implemented yet */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Notes for docs:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * - ShadingType must be HPDF_SHADING_FREE_FORM_TRIANGLE_MESH (the only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *   defined option...)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * - colorSpace must be HPDF_CS_DEVICE_RGB for now.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_EXPORT(HPDF_Shading)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Shading_New  (HPDF_Doc         pdf,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_ShadingType type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_ColorSpace  colorSpace,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_REAL xMin, HPDF_REAL xMax,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_REAL yMin, HPDF_REAL yMax);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_EXPORT(HPDF_STATUS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Shading_AddVertexRGB(HPDF_Shading shading,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          HPDF_Shading_FreeFormTriangleMeshEdgeFlag edgeFlag,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          HPDF_REAL x, HPDF_REAL y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          HPDF_UINT8 r, HPDF_UINT8 g, HPDF_UINT8 b);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*--- In-line images -----------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/hpdf_error.h b/include/hpdf_error.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b04e2cd..ef4fa61 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/hpdf_error.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/hpdf_error.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -145,6 +145,9 @@ extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define HPDF_INVALID_U3D_DATA                     0x1083
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define HPDF_NAME_CANNOT_GET_NAMES                0x1084
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define HPDF_INVALID_ICC_COMPONENT_NUM            0x1085
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*                                                0x1086 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*                                                0x1087 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define HPDF_INVALID_SHADING_TYPE                 0x1088
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/hpdf_objects.h b/include/hpdf_objects.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 525adda..b16de02 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/hpdf_objects.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/hpdf_objects.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -61,6 +61,7 @@ extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define  HPDF_OSUBCLASS_EXT_GSTATE_R  0x0B00  /* read only object */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define  HPDF_OSUBCLASS_NAMEDICT      0x0C00
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define  HPDF_OSUBCLASS_NAMETREE      0x0D00
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define  HPDF_OSUBCLASS_SHADING       0x0E00
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -595,6 +596,7 @@ typedef HPDF_Array HPDF_Destination;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef HPDF_Dict  HPDF_U3D;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef HPDF_Dict  HPDF_OutputIntent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef HPDF_Dict  HPDF_JavaScript;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef HPDF_Dict  HPDF_Shading;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/hpdf_pages.h b/include/hpdf_pages.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 44b816c..60b1d84 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/hpdf_pages.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/hpdf_pages.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -55,6 +55,7 @@ typedef struct _HPDF_PageAttr_Rec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_Dict          fonts;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_Dict          xobjects;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_Dict          ext_gstates;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HPDF_Dict          shadings;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_GState        gstate;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_Point         str_pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_Point         cur_pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -101,6 +102,10 @@ const char*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HPDF_Page_GetExtGStateName  (HPDF_Page       page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              HPDF_ExtGState  gstate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++const char*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Page_GetShadingName  (HPDF_Page    page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                           HPDF_Shading shading);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HPDF_Box
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HPDF_Page_GetMediaBox  (HPDF_Page    page);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/hpdf_types.h b/include/hpdf_types.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8b3e0a8..a2e2157 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/hpdf_types.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/hpdf_types.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -557,6 +557,20 @@ typedef enum _HPDF_NameDictKey {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HPDF_NAME_EOF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } HPDF_NameDictKey;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*----------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef enum _HPDF_ShadingType {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_SHADING_FREE_FORM_TRIANGLE_MESH = 4 /* TODO the rest */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} HPDF_ShadingType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef enum _HPDF_Shading_FreeFormTriangleMeshEdgeFlag {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_FREE_FORM_TRI_MESH_EDGEFLAG_NO_CONNECTION = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_FREE_FORM_TRI_MESH_EDGEFLAG_BC,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_FREE_FORM_TRI_MESH_EDGEFLAG_AC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} HPDF_Shading_FreeFormTriangleMeshEdgeFlag;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*----------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* __cplusplus */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9d2a604..71c7d10 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -56,6 +56,7 @@ set(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hpdf_page_operator.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hpdf_pages.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hpdf_real.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          hpdf_shading.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hpdf_streams.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hpdf_string.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hpdf_u3d.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/hpdf_page_operator.c b/src/hpdf_page_operator.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 23f5920..dda1078 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/hpdf_page_operator.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/hpdf_page_operator.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -312,6 +312,37 @@ HPDF_Page_SetExtGState  (HPDF_Page        page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* sh */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_EXPORT(HPDF_STATUS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Page_SetShading  (HPDF_Page    page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       HPDF_Shading shading)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HPDF_STATUS ret = HPDF_Page_CheckState (page, HPDF_GMODE_PAGE_DESCRIPTION);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HPDF_PageAttr attr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const char *local_name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HPDF_PTRACE ((" HPDF_Page_SetShading\n"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (ret != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (page->mmgr != shading->mmgr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HPDF_RaiseError (page->error, HPDF_INVALID_OBJECT, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    attr = (HPDF_PageAttr)page->attr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    local_name = HPDF_Page_GetShadingName (page, shading);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!local_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HPDF_CheckError (page->error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (HPDF_Stream_WriteEscapeName (attr->stream, local_name) != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HPDF_CheckError (page->error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (HPDF_Stream_WriteStr (attr->stream, " sh\012") != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HPDF_CheckError (page->error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*--- Special graphic state operator --------------------------------------*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/hpdf_pages.c b/src/hpdf_pages.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fcc9b5c..c0a7c4f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/hpdf_pages.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/hpdf_pages.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -514,7 +514,7 @@ HPDF_Page_GetLocalFontName  (HPDF_Page  page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* search font-object from font-resource */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     key = HPDF_Dict_GetKeyByObj (attr->fonts, font);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!key) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /* if the font is not resisterd in font-resource, register font to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        /* if the font is not registered in font-resource, register font to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          * font-resource.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         char fontName[HPDF_LIMIT_MAX_NAME_LEN + 1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -603,7 +603,7 @@ HPDF_Page_GetXObjectName  (HPDF_Page     page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* search xobject-object from xobject-resource */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     key = HPDF_Dict_GetKeyByObj (attr->xobjects, xobj);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!key) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /* if the xobject is not resisterd in xobject-resource, register
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        /* if the xobject is not registered in xobject-resource, register
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          * xobject to xobject-resource.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         char xobj_name[HPDF_LIMIT_MAX_NAME_LEN + 1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -654,7 +654,7 @@ HPDF_Page_GetExtGStateName  (HPDF_Page       page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* search ext_gstate-object from ext_gstate-resource */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     key = HPDF_Dict_GetKeyByObj (attr->ext_gstates, state);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!key) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /* if the ext-gstate is not resisterd in ext-gstate resource, register
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        /* if the ext-gstate is not registered in ext-gstate resource, register
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          *  to ext-gstate resource.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         char ext_gstate_name[HPDF_LIMIT_MAX_NAME_LEN + 1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -673,6 +673,55 @@ HPDF_Page_GetExtGStateName  (HPDF_Page       page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return key;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++const char*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Page_GetShadingName  (HPDF_Page    page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                           HPDF_Shading shading)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HPDF_PageAttr attr = (HPDF_PageAttr )page->attr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const char *key;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HPDF_PTRACE((" HPDF_Page_GetShadingName\n"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!attr->shadings) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HPDF_Dict resources;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HPDF_Dict shadings;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        resources = HPDF_Page_GetInheritableItem (page, "Resources",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  HPDF_OCLASS_DICT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!resources)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        shadings = HPDF_Dict_New (page->mmgr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!shadings)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (HPDF_Dict_Add (resources, "Shading", shadings) != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        attr->shadings = shadings;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* search shading-object from shading-resource */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    key = HPDF_Dict_GetKeyByObj (attr->shadings, shading);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!key) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        /* if the shading is not registered in shadings resource, register
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         *  to shadings resource.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        char shading_str[HPDF_LIMIT_MAX_NAME_LEN + 1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        char *ptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        char *end_ptr = shading_str + HPDF_LIMIT_MAX_NAME_LEN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ptr = (char *)HPDF_StrCpy (shading_str, "Sh", end_ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HPDF_IToA (ptr, attr->shadings->list->count, end_ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (HPDF_Dict_Add (attr->shadings, shading_str, shading) != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        key = HPDF_Dict_GetKeyByObj (attr->shadings, shading);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return key;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static HPDF_STATUS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AddAnnotation  (HPDF_Page        page,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/hpdf_shading.c b/src/hpdf_shading.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+new file mode 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0000000..53204c0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/hpdf_shading.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,231 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * << Haru Free PDF Library >> -- hpdf_shading.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * URL: http://libharu.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Copyright (c) 2017 Kitware <kitware@kitware.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Permission to use, copy, modify, distribute and sell this software
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * and its documentation for any purpose is hereby granted without fee,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * provided that the above copyright notice appear in all copies and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * that both that copyright notice and this permission notice appear
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * in supporting documentation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * It is provided "as is" without express or implied warranty.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "hpdf.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "hpdf_utils.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "assert.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef struct _RGBVertex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_UINT8 EdgeFlag;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_UINT32 X;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_UINT32 Y;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_UINT8 RGB[3];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} RGBVertex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const char *COL_CMYK = "DeviceCMYK";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const char *COL_RGB = "DeviceRGB";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const char *COL_GRAY = "DeviceGray";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* bbox is filled with xMin, xMax, yMin, yMax */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static HPDF_BOOL _GetDecodeArrayVertexValues(HPDF_Shading shading,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                             HPDF_REAL *bbox)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_Array decodeArray;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_Real r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!shading) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return HPDF_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  decodeArray = (HPDF_Array)(HPDF_Dict_GetItem(shading, "Decode",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                               HPDF_OCLASS_ARRAY));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!decodeArray) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return HPDF_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (i = 0; i < 4; ++i)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    r = HPDF_Array_GetItem(decodeArray, i, HPDF_OCLASS_REAL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!r) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return HPDF_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bbox[i] = r->value;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return HPDF_TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void UINT32Swap (HPDF_UINT32  *value)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_BYTE b[4];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_MemCpy (b, (HPDF_BYTE *)value, 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  *value = (HPDF_UINT32)((HPDF_UINT32)b[0] << 24 |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           (HPDF_UINT32)b[1] << 16 |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           (HPDF_UINT32)b[2] << 8 |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           (HPDF_UINT32)b[3]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Encode a position coordinate for writing */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static HPDF_UINT32 _EncodeValue(HPDF_REAL x, HPDF_REAL xMin, HPDF_REAL xMax)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_DOUBLE norm = (x - xMin) / (xMax - xMin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_DOUBLE max = (HPDF_DOUBLE)(0xFFFFFFFF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_UINT32 enc = (HPDF_UINT32)(norm * max);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  UINT32Swap(&enc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return enc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_EXPORT(HPDF_Shading)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Shading_New  (HPDF_Doc         pdf,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_ShadingType type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_ColorSpace  colorSpace,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_REAL xMin, HPDF_REAL xMax,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   HPDF_REAL yMin, HPDF_REAL yMax)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_Shading shading;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_Array decodeArray;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_STATUS ret = HPDF_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_PTRACE((" HPDF_Shading_New\n"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!HPDF_HasDoc(pdf)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* Validate shading type: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  switch (type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case HPDF_SHADING_FREE_FORM_TRIANGLE_MESH:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      HPDF_SetError (pdf->mmgr->error, HPDF_INVALID_SHADING_TYPE, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  decodeArray = HPDF_Array_New(pdf->mmgr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!decodeArray) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* X-range */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret += HPDF_Array_AddReal(decodeArray, xMin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret += HPDF_Array_AddReal(decodeArray, xMax);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* Y-range */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret += HPDF_Array_AddReal(decodeArray, yMin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret += HPDF_Array_AddReal(decodeArray, yMax);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *colName = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  switch (colorSpace) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case HPDF_CS_DEVICE_RGB:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      colName = COL_RGB;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      for (i = 0; i < 3; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ret += HPDF_Array_AddReal(decodeArray, 0.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ret += HPDF_Array_AddReal(decodeArray, 1.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      HPDF_SetError(pdf->mmgr->error, HPDF_INVALID_COLOR_SPACE, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret != HPDF_OK) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  shading = HPDF_DictStream_New(pdf->mmgr, pdf->xref);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!shading) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  shading->header.obj_class |= HPDF_OSUBCLASS_SHADING;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret += HPDF_Dict_AddNumber(shading, "ShadingType", type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret += HPDF_Dict_AddName(shading, "ColorSpace", colName);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  switch (type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case HPDF_SHADING_FREE_FORM_TRIANGLE_MESH:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ret += HPDF_Dict_AddNumber(shading, "BitsPerCoordinate", 32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ret += HPDF_Dict_AddNumber(shading, "BitsPerComponent", 8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ret += HPDF_Dict_AddNumber(shading, "BitsPerFlag", 8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ret += HPDF_Dict_Add(shading, "Decode", decodeArray);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      HPDF_SetError (pdf->mmgr->error, HPDF_INVALID_SHADING_TYPE, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret != HPDF_OK) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return shading;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_EXPORT(HPDF_STATUS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++HPDF_Shading_AddVertexRGB(HPDF_Shading shading,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          HPDF_Shading_FreeFormTriangleMeshEdgeFlag edgeFlag,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          HPDF_REAL x, HPDF_REAL y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          HPDF_UINT8 r, HPDF_UINT8 g, HPDF_UINT8 b)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_STATUS ret = HPDF_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  RGBVertex vert;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  float bbox[4];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  HPDF_PTRACE((" HPDF_Shading_AddVertexRGB\n"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!shading) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return HPDF_INVALID_OBJECT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (_GetDecodeArrayVertexValues(shading, bbox) != HPDF_TRUE) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return HPDF_SetError(shading->error, HPDF_INVALID_OBJECT, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  vert.EdgeFlag = (HPDF_UINT8)edgeFlag;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  vert.X = _EncodeValue(x, bbox[0], bbox[1]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  vert.Y = _EncodeValue(y, bbox[2], bbox[3]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  vert.RGB[0] = r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  vert.RGB[1] = g;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  vert.RGB[2] = b;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = HPDF_Stream_Write(shading->stream,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          (HPDF_BYTE*)(&vert.EdgeFlag), sizeof(vert.EdgeFlag));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = HPDF_Stream_Write(shading->stream,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          (HPDF_BYTE*)(&vert.X), sizeof(vert.X));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = HPDF_Stream_Write(shading->stream,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          (HPDF_BYTE*)(&vert.Y), sizeof(vert.Y));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (ret != HPDF_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = HPDF_Stream_Write(shading->stream,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          (HPDF_BYTE*)(&vert.RGB), sizeof(vert.RGB));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span></pre><pre style='margin:0'>

</pre>