7#include "core/fpdfdoc/cpdf_dest.h"
13#include "core/fpdfapi/parser/cpdf_array.h"
14#include "core/fpdfapi/parser/cpdf_document.h"
15#include "core/fpdfapi/parser/cpdf_name.h"
16#include "core/fpdfapi/parser/cpdf_number.h"
17#include "core/fpdfdoc/cpdf_nametree.h"
18#include "core/fxcrt/stl_util.h"
24constexpr auto kZoomModes =
25 fxcrt::ToArray<
const char*>({
"Unknown",
"XYZ",
"Fit",
"FitH",
"FitV",
26 "FitR",
"FitB",
"FitBH",
"FitBV"});
28constexpr auto kZoomModeMaxParamCount =
29 fxcrt::ToArray<
const uint8_t>({0, 3, 0, 1, 1, 4, 0, 1, 1});
44 return CPDF_Dest(
nullptr);
46 if (pDest->IsString() || pDest->IsName())
60 if (pPage->IsNumber())
61 return pPage->GetInteger();
63 if (!pPage->IsDictionary())
70 std::vector<
float> result;
74 for (size_t i = 2; i < m_pArray->size(); i++)
75 result.push_back(m_pArray->GetFloatAt(i));
89 for (size_t i = 1; i <
std::size(kZoomModes); ++i) {
90 if (mode == kZoomModes[i]) {
91 return static_cast<
int>(i);
102 float* pZoom)
const {
110 if (m_pArray->size() < 5)
113 RetainPtr<
const CPDF_Name> xyz = ToName(m_pArray->GetDirectObjectAt(1));
114 if (!xyz || xyz->GetString() !=
"XYZ")
117 RetainPtr<
const CPDF_Number> numX = ToNumber(m_pArray->GetDirectObjectAt(2));
118 RetainPtr<
const CPDF_Number> numY = ToNumber(m_pArray->GetDirectObjectAt(3));
120 ToNumber(m_pArray->GetDirectObjectAt(4));
125 *pHasZoom = !!numZoom;
128 *pX = numX->GetNumber();
130 *pY = numY->GetNumber();
134 float num = numZoom->GetNumber();
145 if (!m_pArray || m_pArray->size() < 2)
148 size_t maxParamsForFitType = kZoomModeMaxParamCount[
GetZoomMode()];
149 size_t numParamsInArray = m_pArray->size() - 2;
150 return std::min(maxParamsForFitType, numParamsInArray);
154 return m_pArray ? m_pArray->GetFloatAt(2 + index) : 0;
fxcrt::ByteString ByteString
std::vector< RetainPtr< CPDF_Object > >::const_iterator const_iterator
bool GetXYZ(bool *pHasX, bool *pHasY, bool *pHasZoom, float *pX, float *pY, float *pZoom) const
size_t GetNumParams() const
static CPDF_Dest Create(CPDF_Document *pDoc, RetainPtr< const CPDF_Object > pDest)
CPDF_Dest(const CPDF_Dest &that)
int GetDestPageIndex(CPDF_Document *pDoc) const
float GetParam(size_t index) const
std::vector< float > GetScrollPositionArray() const
CPDF_Dest(RetainPtr< const CPDF_Array > pArray)
int GetPageIndex(uint32_t objnum)
static RetainPtr< const CPDF_Array > LookupNamedDest(CPDF_Document *doc, const ByteString &name)