Make conversions for CPDF_Link explicit.
[pdfium.git] / core / include / fpdfapi / fpdf_resource.h
index 49e7148..54e1c97 100644 (file)
@@ -38,6 +38,28 @@ class CFX_DIBitmap;
 typedef struct FT_FaceRec_* FXFT_Face;
 class CFX_CTTGSUBTable;
 class CPDF_Page;
+
+template <class ObjClass> class CPDF_CountedObject : public CFX_Object
+{
+public:
+    ObjClass   m_Obj;
+    FX_DWORD   m_nCount;
+};
+typedef CPDF_CountedObject<CPDF_Font*>          CPDF_CountedFont;
+typedef CPDF_CountedObject<CPDF_ColorSpace*>    CPDF_CountedColorSpace;
+typedef CPDF_CountedObject<CPDF_Pattern*>       CPDF_CountedPattern;
+typedef CPDF_CountedObject<CPDF_Image*>         CPDF_CountedImage;
+typedef CPDF_CountedObject<CPDF_IccProfile*>    CPDF_CountedICCProfile;
+typedef CPDF_CountedObject<CPDF_StreamAcc*>     CPDF_CountedStreamAcc;
+
+
+typedef CFX_MapPtrTemplate<CPDF_Dictionary*, CPDF_CountedFont*>     CPDF_FontMap;
+typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedColorSpace*>   CPDF_ColorSpaceMap;
+typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedPattern*>      CPDF_PatternMap;
+typedef CFX_MapPtrTemplate<FX_DWORD, CPDF_CountedImage*>            CPDF_ImageMap;
+typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedICCProfile*>   CPDF_IccProfileMap;
+typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedStreamAcc*>    CPDF_FontFileMap;
+
 #define PDFFONT_TYPE1                  1
 #define PDFFONT_TRUETYPE               2
 #define PDFFONT_TYPE3                  3
@@ -480,6 +502,8 @@ protected:
 #define CIDSET_JAPAN1          3
 #define CIDSET_KOREA1          4
 #define CIDSET_UNICODE         5
+#define NUMBER_OF_CIDSETS   6
+
 class CPDF_CIDFont : public CPDF_Font
 {
 public:
@@ -680,10 +704,8 @@ class CPDF_Color : public CFX_Object
 {
 public:
 
-    CPDF_Color()
+    CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL)
     {
-        m_pBuffer = NULL;
-        m_pCS = NULL;
     }
 
     CPDF_Color(int family);
@@ -720,37 +742,34 @@ public:
 
     CPDF_ColorSpace*           m_pCS;
 
-    FX_FLOAT*                  m_pBuffer;
 protected:
     void       ReleaseBuffer();
     void       ReleaseColorSpace();
+    FX_FLOAT*                      m_pBuffer;
 };
 #define PATTERN_TILING         1
 #define PATTERN_SHADING                2
 class CPDF_Pattern : public CFX_Object
 {
 public:
+   
+    virtual ~CPDF_Pattern();
+    void    SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
 
-    virtual ~CPDF_Pattern() {}
+    CPDF_Object*                m_pPatternObj;
 
-    CPDF_Object*                       m_pPatternObj;
+    int                         m_PatternType;
 
-    int                                                m_PatternType;
+    CFX_AffineMatrix            m_Pattern2Form;
+    CFX_AffineMatrix            m_ParentMatrix;
 
-    CFX_AffineMatrix           m_Pattern2Form;
-    CFX_AffineMatrix           m_ParentMatrix;
-
-    CPDF_Document*                     m_pDocument;
+    CPDF_Document*              m_pDocument;
 
 protected:
-
-    CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix)
-    {
-        if (pParentMatrix) {
-            m_ParentMatrix = *pParentMatrix;
-        }
-    }
+    CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
+    FX_BOOL     m_bForceClear;
 };
+
 class CPDF_TilingPattern : public CPDF_Pattern
 {
 public:
@@ -793,8 +812,9 @@ public:
 
     int                                        m_ShadingType;
 
-    CPDF_ColorSpace*   m_pCS;
+    CPDF_ColorSpace*   m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name object) are not managed as counted objects. Refer to CPDF_DocPageData::GetColorSpace.
 
+    CPDF_CountedColorSpace*    m_pCountedCS;
 
     CPDF_Function*             m_pFunctions[4];
 
@@ -882,7 +902,7 @@ public:
 
     CPDF_Dictionary*           GetDict() const
     {
-        return m_pStream->GetDict();
+        return m_pStream? m_pStream->GetDict(): NULL;
     }
 
     CPDF_Dictionary*           GetOC() const