Cleanup: Make CPDF_Annot::m_pAnnotDict private.
[pdfium.git] / fpdfsdk / src / fsdk_baseannot.cpp
index ff054c8..6febe6e 100644 (file)
@@ -357,13 +357,16 @@ CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString()
 {
        CFX_ByteString dtStr;
        char tempStr[32];
-       sprintf(tempStr, "D:%04d%02d%02d%02d%02d%02d", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
+       memset(tempStr, 0, sizeof(tempStr));
+       FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
+                   dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
        dtStr = CFX_ByteString(tempStr);
        if (dt.tzHour < 0)
                dtStr += CFX_ByteString("-");
        else
                dtStr += CFX_ByteString("+");
-       sprintf(tempStr, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute);
+       memset(tempStr, 0, sizeof(tempStr));
+       FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute);
        dtStr += CFX_ByteString(tempStr);
        return dtStr;
 }
@@ -561,17 +564,15 @@ CPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const
 {
        ASSERT(m_pAnnot != NULL);
        
-       return m_pAnnot->m_pAnnotDict;
+       return m_pAnnot->GetAnnotDict();
 }
 
 void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
        ASSERT(rect.right - rect.left >= GetMinWidth());
        ASSERT(rect.top - rect.bottom >= GetMinHeight());
        
-       m_pAnnot->m_pAnnotDict->SetAtRect("Rect", rect);
+       m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect);
 }
 
 CPDF_Rect CPDFSDK_Annot::GetRect() const
@@ -607,18 +608,12 @@ void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix*
 
 FX_BOOL        CPDFSDK_Annot::IsAppearanceValid()
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetDict("AP") != NULL;
+       return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL;
 }
 
 FX_BOOL        CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       CPDF_Dictionary* pAP = m_pAnnot->m_pAnnotDict->GetDict("AP");
+       CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
        if (pAP == NULL) return FALSE;
        
        // Choose the right sub-ap
@@ -652,63 +647,45 @@ void CPDFSDK_Annot::ClearCachedAP()
 
 void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
        if (sContents.IsEmpty())
-               m_pAnnot->m_pAnnotDict->RemoveAt("Contents");
+               m_pAnnot->GetAnnotDict()->RemoveAt("Contents");
        else
-               m_pAnnot->m_pAnnotDict->SetAtString("Contents", PDF_EncodeText(sContents));
+               m_pAnnot->GetAnnotDict()->SetAtString("Contents", PDF_EncodeText(sContents));
 }
 
 CFX_WideString CPDFSDK_Annot::GetContents() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetUnicodeText("Contents");
+       return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents");
 }
 
 void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
        if (sName.IsEmpty())
-               m_pAnnot->m_pAnnotDict->RemoveAt("NM");
+               m_pAnnot->GetAnnotDict()->RemoveAt("NM");
        else
-               m_pAnnot->m_pAnnotDict->SetAtString("NM", PDF_EncodeText(sName));
+               m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName));
 }
 
 CFX_WideString CPDFSDK_Annot::GetAnnotName() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetUnicodeText("NM");
+       return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM");
 }
 
 void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
        CPDFSDK_DateTime dt(st);
        CFX_ByteString str = dt.ToPDFDateTimeString();
        
        if (str.IsEmpty())
-               m_pAnnot->m_pAnnotDict->RemoveAt("M");
+               m_pAnnot->GetAnnotDict()->RemoveAt("M");
        else
-               m_pAnnot->m_pAnnotDict->SetAtString("M", str);
+               m_pAnnot->GetAnnotDict()->SetAtString("M", str);
 }
 
 FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
        FX_SYSTEMTIME systime;  
-       CFX_ByteString str = m_pAnnot->m_pAnnotDict->GetString("M");
+       CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M");
        
        CPDFSDK_DateTime dt(str);
        dt.ToSystemTime(systime);
@@ -718,75 +695,54 @@ FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const
 
 void CPDFSDK_Annot::SetFlags(int nFlags)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       m_pAnnot->m_pAnnotDict->SetAtInteger("F", nFlags);
+       m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags);
 }
 
 int CPDFSDK_Annot::GetFlags() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetInteger("F");
+       return m_pAnnot->GetAnnotDict()->GetInteger("F");
 }
 
 void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
        if (str.IsEmpty())
-               m_pAnnot->m_pAnnotDict->RemoveAt("AS");
+               m_pAnnot->GetAnnotDict()->RemoveAt("AS");
        else
-               m_pAnnot->m_pAnnotDict->SetAtString("AS", str);
+               m_pAnnot->GetAnnotDict()->SetAtString("AS", str);
 }
 
 CFX_ByteString CPDFSDK_Annot::GetAppState() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       return m_pAnnot->m_pAnnotDict->GetString("AS");
+       return m_pAnnot->GetAnnotDict()->GetString("AS");
 }
 
 void CPDFSDK_Annot::SetStructParent(int key)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       m_pAnnot->m_pAnnotDict->SetAtInteger("StructParent", key);
+       m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key);
 }
 
 int    CPDFSDK_Annot::GetStructParent() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetInteger("StructParent");
+       return m_pAnnot->GetAnnotDict()->GetInteger("StructParent");
 }
 
 //border
 void CPDFSDK_Annot::SetBorderWidth(int nWidth)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
+       CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
 
        if (pBorder)
        {
-               pBorder->SetAt(2, FX_NEW CPDF_Number(nWidth));
+               pBorder->SetAt(2, new CPDF_Number(nWidth));
        }
        else
        {
-               CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
+               CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
 
                if (!pBSDict)
                {
-                       pBSDict = FX_NEW CPDF_Dictionary;
-                       m_pAnnot->m_pAnnotDict->SetAt("BS", pBSDict);
+                       pBSDict = new CPDF_Dictionary;
+                       m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
                }
 
                pBSDict->SetAtInteger("W", nWidth);
@@ -795,10 +751,7 @@ void CPDFSDK_Annot::SetBorderWidth(int nWidth)
 
 int    CPDFSDK_Annot::GetBorderWidth() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
+       CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
 
        if (pBorder)
        {
@@ -806,7 +759,7 @@ int CPDFSDK_Annot::GetBorderWidth() const
        }
        else
        {
-               CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
+               CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
 
                if (pBSDict)
                {
@@ -818,14 +771,11 @@ int       CPDFSDK_Annot::GetBorderWidth() const
 
 void CPDFSDK_Annot::SetBorderStyle(int nStyle)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
+       CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
        if (!pBSDict)
        {
-               pBSDict = FX_NEW CPDF_Dictionary;
-               m_pAnnot->m_pAnnotDict->SetAt("BS", pBSDict);
+               pBSDict = new CPDF_Dictionary;
+               m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
        }
 
        switch (nStyle)
@@ -850,10 +800,7 @@ void CPDFSDK_Annot::SetBorderStyle(int nStyle)
 
 int    CPDFSDK_Annot::GetBorderStyle() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
+       CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
        if (pBSDict)
        {
                CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S");
@@ -864,7 +811,7 @@ int CPDFSDK_Annot::GetBorderStyle() const
                if (sBorderStyle == "U") return BBS_UNDERLINE;
        }
 
-       CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
+       CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
        if (pBorder)
        {
                if (pBorder->GetCount() >= 4) 
@@ -880,17 +827,14 @@ int       CPDFSDK_Annot::GetBorderStyle() const
 
 void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
+       CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
        if (!pBSDict)
        {
-               pBSDict = FX_NEW CPDF_Dictionary;
-               m_pAnnot->m_pAnnotDict->SetAt("BS", pBSDict);
+               pBSDict = new CPDF_Dictionary;
+               m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
        }
 
-       CPDF_Array* pArray = FX_NEW CPDF_Array;
+       CPDF_Array* pArray = new CPDF_Array;
        for (int i=0,sz=array.GetSize(); i<sz; i++)
        {
                pArray->AddInteger(array[i]);
@@ -901,19 +845,16 @@ void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array)
 
 void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
        CPDF_Array* pDash = NULL;
 
-       CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
+       CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
        if (pBorder)
        {
                pDash = pBorder->GetArray(3);
        }
        else
        {
-               CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
+               CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
                if (pBSDict)
                {
                        pDash = pBSDict->GetArray("D");
@@ -931,30 +872,21 @@ void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const
 
 void CPDFSDK_Annot::SetColor(FX_COLORREF color)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       CPDF_Array* pArray = FX_NEW CPDF_Array;
+       CPDF_Array* pArray = new CPDF_Array;
        pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f);
        pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f);
        pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f);
-       m_pAnnot->m_pAnnotDict->SetAt("C", pArray);
+       m_pAnnot->GetAnnotDict()->SetAt("C", pArray);
 }
 
 void CPDFSDK_Annot::RemoveColor()
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       m_pAnnot->m_pAnnotDict->RemoveAt("C") ; 
+       m_pAnnot->GetAnnotDict()->RemoveAt("C");
 }
 
 FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-
-       if (CPDF_Array* pEntry = m_pAnnot->m_pAnnotDict->GetArray("C"))         
+       if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C"))
        {
                int nCount = pEntry->GetCount();
                if (nCount == 1)
@@ -1000,15 +932,12 @@ void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Re
                                                                const CPDF_Matrix& matrix, const CFX_ByteString& sContents,
                                                                const CFX_ByteString& sAPState)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       CPDF_Dictionary* pAPDict = m_pAnnot->m_pAnnotDict->GetDict("AP");
+       CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
        
        if (!pAPDict) 
        {
-               pAPDict = FX_NEW CPDF_Dictionary;
-               m_pAnnot->m_pAnnotDict->SetAt("AP", pAPDict);
+               pAPDict = new CPDF_Dictionary;
+               m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict);
        }
        
        CPDF_Stream* pStream = NULL;
@@ -1024,7 +953,7 @@ void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Re
                CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType);
                if (!pAPTypeDict)
                {
-                       pAPTypeDict = FX_NEW CPDF_Dictionary;
+                       pAPTypeDict = new CPDF_Dictionary;
                        pAPDict->SetAt(sAPType, pAPTypeDict);
                }
                
@@ -1032,24 +961,18 @@ void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Re
                pStream = pAPTypeDict->GetStream(sAPState);
        }
        
-       if (!pStream) 
+       if (!pStream)
        {
-               ASSERT(m_pPageView != NULL);
                CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
-               ASSERT(pDoc != NULL);
-               
-               pStream = FX_NEW CPDF_Stream(NULL, 0, NULL);
+               pStream = new CPDF_Stream(NULL, 0, NULL);
                FX_INT32 objnum = pDoc->AddIndirectObject(pStream);
-               //pAPDict->SetAtReference(sAPType, pDoc, objnum);
-               ASSERT(pParentDict != NULL);
                pParentDict->SetAtReference(sAPType, pDoc, objnum);
        }
-       
-       CPDF_Dictionary * pStreamDict = pStream->GetDict();
-       
+
+       CPDF_Dictionary *pStreamDict = pStream->GetDict();
        if (!pStreamDict)
        {
-               pStreamDict = FX_NEW CPDF_Dictionary;
+               pStreamDict = new CPDF_Dictionary;
                pStreamDict->SetAtName("Type", "XObject");
                pStreamDict->SetAtName("Subtype", "Form");
                pStreamDict->SetAtInteger("FormType", 1);
@@ -1062,7 +985,7 @@ void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Re
                pStreamDict->SetAtRect("BBox", rcBBox);         
        }
        
-       pStream->SetData((FX_BYTE*)(FX_LPCSTR)sContents, sContents.GetLength(), FALSE, FALSE);
+       pStream->SetData((FX_BYTE*)sContents.c_str(), sContents.GetLength(), FALSE, FALSE);
 }
 
 #define BA_ANNOT_MINWIDTH                      1
@@ -1090,78 +1013,57 @@ FX_BOOL CPDFSDK_Annot::IsVisible() const
 
 CPDF_Action CPDFSDK_Annot::GetAction() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetDict("A");
+       return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"));
 }
 
 void CPDFSDK_Annot::SetAction(const CPDF_Action& action)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       ASSERT(action != NULL);
-       
-       if ((CPDF_Action&)action != m_pAnnot->m_pAnnotDict->GetDict("A"))
+       ASSERT(action);
+       if ((CPDF_Action&)action != CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A")))
        {
                CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
-               ASSERT(pDoc != NULL);
-               
-               if (action.m_pDict && (action.m_pDict->GetObjNum() == 0))
-                       pDoc->AddIndirectObject(action.m_pDict); 
-               m_pAnnot->m_pAnnotDict->SetAtReference("A", pDoc, action.m_pDict->GetObjNum());
+               CPDF_Dictionary* pDict = action.GetDict();
+               if (pDict && pDict->GetObjNum() == 0) {
+                       pDoc->AddIndirectObject(pDict);
+               }
+               m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum());
        }
 }
 
 void CPDFSDK_Annot::RemoveAction()
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       m_pAnnot->m_pAnnotDict->RemoveAt("A");
+       m_pAnnot->GetAnnotDict()->RemoveAt("A");
 }
 
 CPDF_AAction CPDFSDK_Annot::GetAAction() const
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       return m_pAnnot->m_pAnnotDict->GetDict("AA");
+       return m_pAnnot->GetAnnotDict()->GetDict("AA");
 }
 
 void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa)
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
        ASSERT(aa != NULL);
        
-       if ((CPDF_AAction&)aa != m_pAnnot->m_pAnnotDict->GetDict("AA"))
-               m_pAnnot->m_pAnnotDict->SetAt("AA", (CPDF_AAction&)aa);
+       if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA"))
+               m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa);
 }
 
 void CPDFSDK_Annot::RemoveAAction()
 {
-       ASSERT(m_pAnnot != NULL);
-       ASSERT(m_pAnnot->m_pAnnotDict != NULL);
-       
-       m_pAnnot->m_pAnnotDict->RemoveAt("AA");
+       m_pAnnot->GetAnnotDict()->RemoveAt("AA");
 }
 
 CPDF_Action    CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT)
 {
        CPDF_AAction AAction = GetAAction();
-       
+
        if (AAction.ActionExist(eAAT))
-       {
                return AAction.GetAction(eAAT);
-       }
-       else if (eAAT == CPDF_AAction::ButtonUp)
-       {
+
+       if (eAAT == CPDF_AAction::ButtonUp)
                return GetAction();
-       }
-       
-       return NULL;
+
+       return CPDF_Action();
 }
 
 void  CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, CPDF_RenderOptions* pOptions)