summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fpdfdoc/cpdf_dest.cpp22
-rw-r--r--core/fpdfdoc/cpdf_dest.h12
-rw-r--r--fpdfsdk/fpdfdoc.cpp24
-rw-r--r--fpdfsdk/fpdfdoc_embeddertest.cpp10
-rw-r--r--public/fpdf_doc.h10
5 files changed, 36 insertions, 42 deletions
diff --git a/core/fpdfdoc/cpdf_dest.cpp b/core/fpdfdoc/cpdf_dest.cpp
index cb15bf1c33..0098f73f66 100644
--- a/core/fpdfdoc/cpdf_dest.cpp
+++ b/core/fpdfdoc/cpdf_dest.cpp
@@ -22,7 +22,11 @@ const char* const g_sZoomModes[] = {"Unknown", "XYZ", "Fit", "FitH",
"FitV", "FitR", "FitB", "FitBH",
"FitBV", nullptr};
-const int g_sZoomModeMaxParamCount[] = {0, 3, 0, 1, 1, 4, 0, 1, 1, 0};
+const uint8_t g_sZoomModeMaxParamCount[] = {0, 3, 0, 1, 1, 4, 0, 1, 1, 0};
+
+static_assert(FX_ArraySize(g_sZoomModes) ==
+ FX_ArraySize(g_sZoomModeMaxParamCount),
+ "Zoom mode count Mismatch");
} // namespace
@@ -34,7 +38,7 @@ CPDF_Dest::CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) {}
CPDF_Dest::~CPDF_Dest() {}
-int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) {
+int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) const {
CPDF_Array* pArray = ToArray(m_pObj.Get());
if (!pArray)
return 0;
@@ -49,7 +53,7 @@ int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) {
return pDoc->GetPageIndex(pPage->GetObjNum());
}
-uint32_t CPDF_Dest::GetPageObjNum() {
+uint32_t CPDF_Dest::GetPageObjNum() const {
CPDF_Array* pArray = ToArray(m_pObj.Get());
if (!pArray)
return 0;
@@ -64,7 +68,7 @@ uint32_t CPDF_Dest::GetPageObjNum() {
return 0;
}
-int CPDF_Dest::GetZoomMode() {
+int CPDF_Dest::GetZoomMode() const {
CPDF_Array* pArray = ToArray(m_pObj.Get());
if (!pArray)
return 0;
@@ -129,21 +133,21 @@ bool CPDF_Dest::GetXYZ(bool* pHasX,
return true;
}
-unsigned int CPDF_Dest::GetNumParams() {
+unsigned long CPDF_Dest::GetNumParams() const {
CPDF_Array* pArray = ToArray(m_pObj.Get());
if (!pArray || pArray->GetCount() < 2)
return 0;
- size_t maxParamsForFitType = g_sZoomModeMaxParamCount[GetZoomMode()];
- size_t numParamsInArray = pArray->GetCount() - 2;
+ unsigned long maxParamsForFitType = g_sZoomModeMaxParamCount[GetZoomMode()];
+ unsigned long numParamsInArray = pArray->GetCount() - 2;
return std::min(maxParamsForFitType, numParamsInArray);
}
-float CPDF_Dest::GetParam(int index) {
+float CPDF_Dest::GetParam(int index) const {
CPDF_Array* pArray = ToArray(m_pObj.Get());
return pArray ? pArray->GetNumberAt(2 + index) : 0;
}
-ByteString CPDF_Dest::GetRemoteName() {
+ByteString CPDF_Dest::GetRemoteName() const {
return m_pObj ? m_pObj->GetString() : ByteString();
}
diff --git a/core/fpdfdoc/cpdf_dest.h b/core/fpdfdoc/cpdf_dest.h
index 4959901972..584669a82d 100644
--- a/core/fpdfdoc/cpdf_dest.h
+++ b/core/fpdfdoc/cpdf_dest.h
@@ -22,15 +22,15 @@ class CPDF_Dest {
~CPDF_Dest();
CPDF_Object* GetObject() const { return m_pObj.Get(); }
- ByteString GetRemoteName();
- int GetPageIndex(CPDF_Document* pDoc);
- uint32_t GetPageObjNum();
+ ByteString GetRemoteName() const;
+ int GetPageIndex(CPDF_Document* pDoc) const;
+ uint32_t GetPageObjNum() const;
// Returns the zoom mode, as one of the PDFDEST_VIEW_* values in fpdf_doc.h.
- int GetZoomMode();
+ int GetZoomMode() const;
- unsigned int GetNumParams();
- float GetParam(int index);
+ unsigned long GetNumParams() const;
+ float GetParam(int index) const;
bool GetXYZ(bool* pHasX,
bool* pHasY,
diff --git a/fpdfsdk/fpdfdoc.cpp b/fpdfsdk/fpdfdoc.cpp
index 14e4361483..47ecf4223b 100644
--- a/fpdfsdk/fpdfdoc.cpp
+++ b/fpdfsdk/fpdfdoc.cpp
@@ -211,26 +211,20 @@ FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDict) {
}
FPDF_EXPORT unsigned long FPDF_CALLCONV
-FPDFDest_GetView(FPDF_DOCUMENT document,
- FPDF_DEST pDict,
- unsigned long* outNumParams,
- FS_FLOAT* outParams) {
+FPDFDest_GetView(FPDF_DEST pDict,
+ unsigned long* pNumParams,
+ FS_FLOAT* pParams) {
if (!pDict) {
- *outNumParams = 0;
- return 0;
- }
-
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc) {
- *outNumParams = 0;
+ *pNumParams = 0;
return 0;
}
CPDF_Dest dest(static_cast<CPDF_Array*>(pDict));
-
- *outNumParams = dest.GetNumParams();
- for (unsigned long i = 0; i < *outNumParams; ++i)
- outParams[i] = dest.GetParam(i);
+ unsigned long nParams = dest.GetNumParams();
+ ASSERT(nParams <= 4);
+ *pNumParams = nParams;
+ for (unsigned long i = 0; i < nParams; ++i)
+ pParams[i] = dest.GetParam(i);
return dest.GetZoomMode();
}
diff --git a/fpdfsdk/fpdfdoc_embeddertest.cpp b/fpdfsdk/fpdfdoc_embeddertest.cpp
index 24414a1c33..d346330486 100644
--- a/fpdfsdk/fpdfdoc_embeddertest.cpp
+++ b/fpdfsdk/fpdfdoc_embeddertest.cpp
@@ -51,7 +51,7 @@ TEST_F(FPDFDocEmbeddertest, DestGetView) {
numParams = 42;
std::fill_n(params, 4, 42.4242f);
EXPECT_EQ(static_cast<unsigned long>(PDFDEST_VIEW_UNKNOWN_MODE),
- FPDFDest_GetView(document(), nullptr, &numParams, params));
+ FPDFDest_GetView(nullptr, &numParams, params));
EXPECT_EQ(0U, numParams);
EXPECT_FLOAT_EQ(42.4242f, params[0]);
@@ -60,7 +60,7 @@ TEST_F(FPDFDocEmbeddertest, DestGetView) {
FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First");
EXPECT_TRUE(dest);
EXPECT_EQ(static_cast<unsigned long>(PDFDEST_VIEW_XYZ),
- FPDFDest_GetView(document(), dest, &numParams, params));
+ FPDFDest_GetView(dest, &numParams, params));
EXPECT_EQ(3U, numParams);
EXPECT_FLOAT_EQ(0, params[0]);
EXPECT_FLOAT_EQ(0, params[1]);
@@ -72,7 +72,7 @@ TEST_F(FPDFDocEmbeddertest, DestGetView) {
dest = FPDF_GetNamedDestByName(document(), "Next");
EXPECT_TRUE(dest);
EXPECT_EQ(static_cast<unsigned long>(PDFDEST_VIEW_FIT),
- FPDFDest_GetView(document(), dest, &numParams, params));
+ FPDFDest_GetView(dest, &numParams, params));
EXPECT_EQ(0U, numParams);
EXPECT_FLOAT_EQ(42.4242f, params[0]);
@@ -81,7 +81,7 @@ TEST_F(FPDFDocEmbeddertest, DestGetView) {
dest = FPDF_GetNamedDestByName(document(), "FirstAlternate");
EXPECT_TRUE(dest);
EXPECT_EQ(static_cast<unsigned long>(PDFDEST_VIEW_XYZ),
- FPDFDest_GetView(document(), dest, &numParams, params));
+ FPDFDest_GetView(dest, &numParams, params));
EXPECT_EQ(3U, numParams);
EXPECT_FLOAT_EQ(200, params[0]);
EXPECT_FLOAT_EQ(400, params[1]);
@@ -93,7 +93,7 @@ TEST_F(FPDFDocEmbeddertest, DestGetView) {
dest = FPDF_GetNamedDestByName(document(), "LastAlternate");
EXPECT_TRUE(dest);
EXPECT_EQ(static_cast<unsigned long>(PDFDEST_VIEW_XYZ),
- FPDFDest_GetView(document(), dest, &numParams, params));
+ FPDFDest_GetView(dest, &numParams, params));
EXPECT_EQ(3U, numParams);
EXPECT_FLOAT_EQ(0, params[0]);
EXPECT_FLOAT_EQ(0, params[1]);
diff --git a/public/fpdf_doc.h b/public/fpdf_doc.h
index 93efa7ae98..b523575967 100644
--- a/public/fpdf_doc.h
+++ b/public/fpdf_doc.h
@@ -189,18 +189,14 @@ FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest);
// Get the view (fit type) specified by |dest|.
// Experimental API. Subject to change.
//
-// document - handle to the document.
// dest - handle to the destination.
-// outNumParams - buffer to write the number of view parameters.
-// outParams - buffer to write the view parameters. Must be at least 4
+// pNumParams - receives the number of view parameters, which is at most 4.
+// pParams - buffer to write the view parameters. Must be at least 4
// FS_FLOATs long.
// Returns one of the PDFDEST_VIEW_* constants, PDFDEST_VIEW_UNKNOWN_MODE if
// |dest| does not specify a view.
FPDF_EXPORT unsigned long FPDF_CALLCONV
-FPDFDest_GetView(FPDF_DOCUMENT document,
- FPDF_DEST dest,
- unsigned long* outNumParams,
- FS_FLOAT* outParams);
+FPDFDest_GetView(FPDF_DEST dest, unsigned long* pNumParams, FS_FLOAT* pParams);
// Get the (x, y, zoom) location of |dest| in the destination page, if the
// destination is in [page /XYZ x y zoom] syntax.