summaryrefslogtreecommitdiff
path: root/fpdfsdk/cpdfsdk_helpers.h
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-05-03 17:19:53 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-05-03 17:19:53 +0000
commit525147a1f6d6cd736a407d1e189ac25d2f4726e8 (patch)
treebdc818c52d902a5a4e8ce8a4f0ba29bd11007b05 /fpdfsdk/cpdfsdk_helpers.h
parentccd9421589922b8f35ee5330d7fdac7edea081db (diff)
downloadpdfium-525147a1f6d6cd736a407d1e189ac25d2f4726e8.tar.xz
Use strict types in FPDF API, try #3
Rather than messing with actual inheritence, add type-checking wrappers and just blatantly cast to incomplete types. Along the way, this points out places where we would downcast without checking, which I fix. Change-Id: Ieb303eb46ad8522dfe082454f1f10f247ffd52d5 Reviewed-on: https://pdfium-review.googlesource.com/32030 Reviewed-by: dsinclair <dsinclair@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'fpdfsdk/cpdfsdk_helpers.h')
-rw-r--r--fpdfsdk/cpdfsdk_helpers.h167
1 files changed, 161 insertions, 6 deletions
diff --git a/fpdfsdk/cpdfsdk_helpers.h b/fpdfsdk/cpdfsdk_helpers.h
index 937ceed75e..0cd2617412 100644
--- a/fpdfsdk/cpdfsdk_helpers.h
+++ b/fpdfsdk/cpdfsdk_helpers.h
@@ -23,17 +23,28 @@
#endif
class CPDF_Annot;
+class CPDF_AnnotContext;
+class CPDF_ClipPath;
+class CPDF_ContentMarkItem;
+class CPDF_Object;
+class CPDF_Font;
+class CPDF_LinkExtract;
class CPDF_Page;
class CPDF_PageObject;
class CPDF_PageRenderContext;
class CPDF_PathObject;
class CPDF_Stream;
+class CPDF_StructElement;
+class CPDF_StructTree;
+class CPDF_TextPage;
+class CPDF_TextPageFind;
class IPDFSDK_PauseAdapter;
class FX_PATHPOINT;
#ifdef PDF_ENABLE_XFA
class CPDFXFA_Context;
class CPDFXFA_Page;
+class CXFA_FFWidget;
#endif // PDF_ENABLE_XFA
// Object types for public FPDF_ types; these correspond to next layer down
@@ -48,17 +59,161 @@ using UnderlyingPageType = CPDFXFA_Page;
// Conversions to/from underlying types.
UnderlyingPageType* UnderlyingFromFPDFPage(FPDF_PAGE page);
FPDF_PAGE FPDFPageFromUnderlying(UnderlyingPageType* page);
-
-// Conversions to/from FPDF_ types.
-CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc);
+CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page);
FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc);
+CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc);
+
+// Conversions to/from incomplete FPDF_ API types.
+inline FPDF_ACTION FPDFActionFromCPDFDictionary(CPDF_Dictionary* action) {
+ return reinterpret_cast<FPDF_ACTION>(action);
+}
+inline CPDF_Dictionary* CPDFDictionaryFromFPDFAction(FPDF_ACTION action) {
+ return reinterpret_cast<CPDF_Dictionary*>(action);
+}
+
+inline FPDF_ANNOTATION FPDFAnnotationFromCPDFAnnotContext(
+ CPDF_AnnotContext* annot) {
+ return reinterpret_cast<FPDF_ANNOTATION>(annot);
+}
+inline CPDF_AnnotContext* CPDFAnnotContextFromFPDFAnnotation(
+ FPDF_ANNOTATION annot) {
+ return reinterpret_cast<CPDF_AnnotContext*>(annot);
+}
+
+inline FPDF_ATTACHMENT FPDFAttachmentFromCPDFObject(CPDF_Object* attachment) {
+ return reinterpret_cast<FPDF_ATTACHMENT>(attachment);
+}
+inline CPDF_Object* CPDFObjectFromFPDFAttachment(FPDF_ATTACHMENT attachment) {
+ return reinterpret_cast<CPDF_Object*>(attachment);
+}
+
+inline FPDF_BITMAP FPDFBitmapFromCFXDIBitmap(CFX_DIBitmap* bitmap) {
+ return reinterpret_cast<FPDF_BITMAP>(bitmap);
+}
+inline CFX_DIBitmap* CFXDIBitmapFromFPDFBitmap(FPDF_BITMAP bitmap) {
+ return reinterpret_cast<CFX_DIBitmap*>(bitmap);
+}
+
+inline FPDF_BOOKMARK FPDFBookmarkFromCPDFDictionary(CPDF_Dictionary* bookmark) {
+ return reinterpret_cast<FPDF_BOOKMARK>(bookmark);
+}
+inline CPDF_Dictionary* CPDFDictionaryFromFPDFBookmark(FPDF_BOOKMARK bookmark) {
+ return reinterpret_cast<CPDF_Dictionary*>(bookmark);
+}
+
+inline FPDF_CLIPPATH FPDFClipPathFromCPDFClipPath(CPDF_ClipPath* path) {
+ return reinterpret_cast<FPDF_CLIPPATH>(path);
+}
+inline CPDF_ClipPath* CPDFClipPathFromFPDFClipPath(FPDF_CLIPPATH path) {
+ return reinterpret_cast<CPDF_ClipPath*>(path);
+}
+
+inline FPDF_DEST FPDFDestFromCPDFArray(CPDF_Array* dest) {
+ return reinterpret_cast<FPDF_DEST>(dest);
+}
+inline CPDF_Array* CPDFArrayFromFPDFDest(FPDF_DEST dest) {
+ return reinterpret_cast<CPDF_Array*>(dest);
+}
+
+inline FPDF_FONT FPDFFontFromCPDFFont(CPDF_Font* font) {
+ return reinterpret_cast<FPDF_FONT>(font);
+}
+inline CPDF_Font* CPDFFontFromFPDFFont(FPDF_FONT font) {
+ return reinterpret_cast<CPDF_Font*>(font);
+}
+
+inline FPDF_LINK FPDFLinkFromCPDFDictionary(CPDF_Dictionary* link) {
+ return reinterpret_cast<FPDF_LINK>(link);
+}
+inline CPDF_Dictionary* CPDFDictionaryFromFPDFLink(FPDF_LINK link) {
+ return reinterpret_cast<CPDF_Dictionary*>(link);
+}
+
+inline FPDF_PAGELINK FPDFPageLinkFromCPDFLinkExtract(CPDF_LinkExtract* link) {
+ return reinterpret_cast<FPDF_PAGELINK>(link);
+}
+inline CPDF_LinkExtract* CPDFLinkExtractFromFPDFPageLink(FPDF_PAGELINK link) {
+ return reinterpret_cast<CPDF_LinkExtract*>(link);
+}
+
+inline FPDF_PAGEOBJECT FPDFPageObjectFromCPDFPageObject(
+ CPDF_PageObject* page_object) {
+ return reinterpret_cast<FPDF_PAGEOBJECT>(page_object);
+}
+inline CPDF_PageObject* CPDFPageObjectFromFPDFPageObject(
+ FPDF_PAGEOBJECT page_object) {
+ return reinterpret_cast<CPDF_PageObject*>(page_object);
+}
+
+inline FPDF_PAGEOBJECTMARK FPDFPageObjectMarkFromCPDFContentMarkItem(
+ const CPDF_ContentMarkItem* mark) {
+ return reinterpret_cast<FPDF_PAGEOBJECTMARK>(mark);
+}
+inline const CPDF_ContentMarkItem* CPDFContentMarkItemFromFPDFPageObjectMark(
+ FPDF_PAGEOBJECTMARK mark) {
+ return reinterpret_cast<const CPDF_ContentMarkItem*>(mark);
+}
+
+inline FPDF_PAGERANGE FPDFPageRangeFromCPDFArray(CPDF_Array* range) {
+ return reinterpret_cast<FPDF_PAGERANGE>(range);
+}
+inline CPDF_Array* CPDFArrayFromFPDFPageRange(FPDF_PAGERANGE range) {
+ return reinterpret_cast<CPDF_Array*>(range);
+}
+
+inline FPDF_PATHSEGMENT FPDFPathSegmentFromFXPathPoint(
+ const FX_PATHPOINT* segment) {
+ return reinterpret_cast<FPDF_PATHSEGMENT>(segment);
+}
+inline const FX_PATHPOINT* FXPathPointFromFPDFPathSegment(
+ FPDF_PATHSEGMENT segment) {
+ return reinterpret_cast<const FX_PATHPOINT*>(segment);
+}
+
+inline FPDF_STRUCTTREE FPDFStructTreeFromCPDFStructTree(
+ CPDF_StructTree* struct_tree) {
+ return reinterpret_cast<FPDF_STRUCTTREE>(struct_tree);
+}
+inline CPDF_StructTree* CPDFStructTreeFromFPDFStructTree(
+ FPDF_STRUCTTREE struct_tree) {
+ return reinterpret_cast<CPDF_StructTree*>(struct_tree);
+}
+
+inline FPDF_STRUCTELEMENT FPDFStructElementFromCPDFStructElement(
+ CPDF_StructElement* struct_element) {
+ return reinterpret_cast<FPDF_STRUCTELEMENT>(struct_element);
+}
+inline CPDF_StructElement* CPDFStructElementFromFPDFStructElement(
+ FPDF_STRUCTELEMENT struct_element) {
+ return reinterpret_cast<CPDF_StructElement*>(struct_element);
+}
+
+inline FPDF_TEXTPAGE FPDFTextPageFromCPDFTextPage(CPDF_TextPage* page) {
+ return reinterpret_cast<FPDF_TEXTPAGE>(page);
+}
+inline CPDF_TextPage* CPDFTextPageFromFPDFTextPage(FPDF_TEXTPAGE page) {
+ return reinterpret_cast<CPDF_TextPage*>(page);
+}
+
+inline FPDF_SCHHANDLE FPDFSchHandleFromCPDFTextPageFind(
+ CPDF_TextPageFind* handle) {
+ return reinterpret_cast<FPDF_SCHHANDLE>(handle);
+}
+inline CPDF_TextPageFind* CPDFTextPageFindFromFPDFSchHandle(
+ FPDF_SCHHANDLE handle) {
+ return reinterpret_cast<CPDF_TextPageFind*>(handle);
+}
-CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page);
-CPDF_PageObject* CPDFPageObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object);
ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string);
-CFX_DIBitmap* CFXBitmapFromFPDFBitmap(FPDF_BITMAP bitmap);
#ifdef PDF_ENABLE_XFA
+inline FPDF_WIDGET FPDFWidgetFromCXFAFFWidget(CXFA_FFWidget* widget) {
+ return reinterpret_cast<FPDF_WIDGET>(widget);
+}
+inline CXFA_FFWidget* CXFAFFWidgetFromFPDFWidget(FPDF_WIDGET widget) {
+ return reinterpret_cast<CXFA_FFWidget*>(widget);
+}
+
// Layering prevents fxcrt from knowing about FPDF_FILEHANDLER, so this can't
// be a static method of IFX_SeekableStream.
RetainPtr<IFX_SeekableStream> MakeSeekableStream(