From 11767d3ba1b453f666a084b9850a5f020c28993f Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Wed, 21 Mar 2018 18:59:44 +0000 Subject: Add functions to convert various FPDF_ types. Centralize the static_casts involved. Change-Id: I036ead3b30abd60804b31343de8fda9912e03b0b Reviewed-on: https://pdfium-review.googlesource.com/28892 Commit-Queue: Lei Zhang Reviewed-by: Henrique Nakashima --- fpdfsdk/fpdfdoc.cpp | 66 +++++++++++++++++++++++++++++---------------------- fpdfsdk/fsdk_define.h | 8 +++++++ 2 files changed, 46 insertions(+), 28 deletions(-) diff --git a/fpdfsdk/fpdfdoc.cpp b/fpdfsdk/fpdfdoc.cpp index 88ba2464bc..befdc4d7a3 100644 --- a/fpdfsdk/fpdfdoc.cpp +++ b/fpdfsdk/fpdfdoc.cpp @@ -62,14 +62,29 @@ CPDF_LinkList* GetLinkList(CPDF_Page* page) { } // namespace +CPDF_Array* CPDFArrayFromDest(FPDF_DEST dest) { + return static_cast(dest); +} + +CPDF_Dictionary* CPDFDictionaryFromFPDFAction(FPDF_ACTION action) { + return ToDictionary(static_cast(action)); +} + +CPDF_Dictionary* CPDFDictionaryFromFPDFBookmark(FPDF_BOOKMARK bookmark) { + return ToDictionary(static_cast(bookmark)); +} + +CPDF_Dictionary* CPDFDictionaryFromFPDFLink(FPDF_LINK link) { + return ToDictionary(static_cast(link)); +} + FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return nullptr; CPDF_BookmarkTree tree(pDoc); - CPDF_Bookmark bookmark = - CPDF_Bookmark(ToDictionary(static_cast(pDict))); + CPDF_Bookmark bookmark(CPDFDictionaryFromFPDFBookmark(pDict)); return tree.GetFirstChild(bookmark).GetDict(); } @@ -81,8 +96,7 @@ FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { if (!pDoc) return nullptr; CPDF_BookmarkTree tree(pDoc); - CPDF_Bookmark bookmark = - CPDF_Bookmark(ToDictionary(static_cast(pDict))); + CPDF_Bookmark bookmark(CPDFDictionaryFromFPDFBookmark(pDict)); return tree.GetNextSibling(bookmark).GetDict(); } @@ -90,7 +104,7 @@ FPDF_EXPORT unsigned long FPDF_CALLCONV FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict, void* buffer, unsigned long buflen) { if (!pDict) return 0; - CPDF_Bookmark bookmark(ToDictionary(static_cast(pDict))); + CPDF_Bookmark bookmark(CPDFDictionaryFromFPDFBookmark(pDict)); WideString title = bookmark.GetTitle(); return Utf16EncodeMaybeCopyAndReturnLength(title, buffer, buflen); } @@ -116,7 +130,7 @@ FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFBookmark_GetDest(FPDF_DOCUMENT document, CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return nullptr; - CPDF_Bookmark bookmark(ToDictionary(static_cast(pDict))); + CPDF_Bookmark bookmark(CPDFDictionaryFromFPDFBookmark(pDict)); CPDF_Dest dest = bookmark.GetDest(pDoc); if (dest.GetObject()) return dest.GetObject(); @@ -132,7 +146,7 @@ FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) { if (!pDict) return nullptr; - CPDF_Bookmark bookmark(ToDictionary(static_cast(pDict))); + CPDF_Bookmark bookmark(CPDFDictionaryFromFPDFBookmark(pDict)); return bookmark.GetAction().GetDict(); } @@ -140,7 +154,7 @@ FPDF_EXPORT unsigned long FPDF_CALLCONV FPDFAction_GetType(FPDF_ACTION pDict) { if (!pDict) return PDFACTION_UNSUPPORTED; - CPDF_Action action(ToDictionary(static_cast(pDict))); + CPDF_Action action(CPDFDictionaryFromFPDFAction(pDict)); CPDF_Action::ActionType type = action.GetType(); switch (type) { case CPDF_Action::GoTo: @@ -163,7 +177,7 @@ FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFAction_GetDest(FPDF_DOCUMENT document, CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return nullptr; - CPDF_Action action(ToDictionary(static_cast(pDict))); + CPDF_Action action(CPDFDictionaryFromFPDFAction(pDict)); return action.GetDest(pDoc).GetObject(); } @@ -173,7 +187,7 @@ FPDFAction_GetFilePath(FPDF_ACTION pDict, void* buffer, unsigned long buflen) { if (type != PDFACTION_REMOTEGOTO && type != PDFACTION_LAUNCH) return 0; - CPDF_Action action(ToDictionary(static_cast(pDict))); + CPDF_Action action(CPDFDictionaryFromFPDFAction(pDict)); ByteString path = action.GetFilePath().UTF8Encode(); unsigned long len = path.GetLength() + 1; if (buffer && len <= buflen) @@ -191,7 +205,7 @@ FPDFAction_GetURIPath(FPDF_DOCUMENT document, CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return 0; - CPDF_Action action(ToDictionary(static_cast(pDict))); + CPDF_Action action(CPDFDictionaryFromFPDFAction(pDict)); ByteString path = action.GetURI(pDoc); unsigned long len = path.GetLength() + 1; if (buffer && len <= buflen) @@ -208,7 +222,7 @@ FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest) { if (!pDoc) return 0; - CPDF_Dest destination(static_cast(dest)); + CPDF_Dest destination(CPDFArrayFromDest(dest)); return destination.GetPageIndexDeprecated(pDoc); } @@ -221,7 +235,7 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFDest_GetDestPageIndex(FPDF_DOCUMENT document, if (!pDoc) return -1; - CPDF_Dest destination(static_cast(dest)); + CPDF_Dest destination(CPDFArrayFromDest(dest)); return destination.GetDestPageIndex(pDoc); } @@ -234,13 +248,13 @@ FPDFDest_GetView(FPDF_DEST pDict, return 0; } - CPDF_Dest dest(static_cast(pDict)); - unsigned long nParams = dest.GetNumParams(); + CPDF_Dest destination(CPDFArrayFromDest(pDict)); + unsigned long nParams = destination.GetNumParams(); ASSERT(nParams <= 4); *pNumParams = nParams; for (unsigned long i = 0; i < nParams; ++i) - pParams[i] = dest.GetParam(i); - return dest.GetZoomMode(); + pParams[i] = destination.GetParam(i); + return destination.GetZoomMode(); } FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV @@ -254,7 +268,7 @@ FPDFDest_GetLocationInPage(FPDF_DEST pDict, if (!pDict) return false; - auto dest = pdfium::MakeUnique(static_cast(pDict)); + auto dest = pdfium::MakeUnique(CPDFArrayFromDest(pDict)); // FPDF_BOOL is an int, GetXYZ expects bools. bool bHasX; @@ -312,7 +326,7 @@ FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFLink_GetDest(FPDF_DOCUMENT document, CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return nullptr; - CPDF_Link link(ToDictionary(static_cast(pDict))); + CPDF_Link link(CPDFDictionaryFromFPDFLink(pDict)); FPDF_DEST dest = link.GetDest(pDoc).GetObject(); if (dest) return dest; @@ -327,7 +341,7 @@ FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDFLink_GetAction(FPDF_LINK pDict) { if (!pDict) return nullptr; - CPDF_Link link(ToDictionary(static_cast(pDict))); + CPDF_Link link(CPDFDictionaryFromFPDFLink(pDict)); return link.GetAction().GetDict(); } @@ -343,8 +357,7 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_Enumerate(FPDF_PAGE page, if (!pAnnots) return false; for (size_t i = *start_pos; i < pAnnots->GetCount(); i++) { - CPDF_Dictionary* pDict = - ToDictionary(static_cast(pAnnots->GetDirectObjectAt(i))); + CPDF_Dictionary* pDict = ToDictionary(pAnnots->GetDirectObjectAt(i)); if (!pDict) continue; if (pDict->GetStringFor("Subtype") == "Link") { @@ -360,8 +373,7 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetAnnotRect(FPDF_LINK link_annot, FS_RECTF* rect) { if (!link_annot || !rect) return false; - CPDF_Dictionary* pAnnotDict = - ToDictionary(static_cast(link_annot)); + CPDF_Dictionary* pAnnotDict = CPDFDictionaryFromFPDFLink(link_annot); FSRECTFFromCFXFloatRect(pAnnotDict->GetRectFor("Rect"), rect); return true; } @@ -369,8 +381,7 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetAnnotRect(FPDF_LINK link_annot, FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountQuadPoints(FPDF_LINK link_annot) { if (!link_annot) return 0; - CPDF_Dictionary* pAnnotDict = - ToDictionary(static_cast(link_annot)); + CPDF_Dictionary* pAnnotDict = CPDFDictionaryFromFPDFLink(link_annot); CPDF_Array* pArray = pAnnotDict->GetArrayFor("QuadPoints"); if (!pArray) return 0; @@ -383,8 +394,7 @@ FPDFLink_GetQuadPoints(FPDF_LINK link_annot, FS_QUADPOINTSF* quad_points) { if (!link_annot || !quad_points) return false; - CPDF_Dictionary* pAnnotDict = - ToDictionary(static_cast(link_annot)); + CPDF_Dictionary* pAnnotDict = CPDFDictionaryFromFPDFLink(link_annot); CPDF_Array* pArray = pAnnotDict->GetArrayFor("QuadPoints"); if (!pArray) return false; diff --git a/fpdfsdk/fsdk_define.h b/fpdfsdk/fsdk_define.h index 77c2315edd..d503ba5e1d 100644 --- a/fpdfsdk/fsdk_define.h +++ b/fpdfsdk/fsdk_define.h @@ -75,6 +75,14 @@ ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string); CFX_DIBitmap* CFXBitmapFromFPDFBitmap(FPDF_BITMAP bitmap); +CPDF_Array* CPDFArrayFromDest(FPDF_DEST dest); + +CPDF_Dictionary* CPDFDictionaryFromFPDFAction(FPDF_ACTION action); + +CPDF_Dictionary* CPDFDictionaryFromFPDFBookmark(FPDF_BOOKMARK bookmark); + +CPDF_Dictionary* CPDFDictionaryFromFPDFLink(FPDF_LINK link); + CFX_FloatRect CFXFloatRectFromFSRECTF(const FS_RECTF& rect); void FSRECTFFromCFXFloatRect(const CFX_FloatRect& rect, FS_RECTF* out_rect); -- cgit v1.2.3