Chromium Code Reviews| Index: core/fpdfdoc/cpdf_dest.cpp |
| diff --git a/core/fpdfdoc/cpdf_dest.cpp b/core/fpdfdoc/cpdf_dest.cpp |
| index 312ef8734634167cf53f55b978549b692f27c1fc..44fe2b18f601ac951437dfdc543e4856b7e46ebf 100644 |
| --- a/core/fpdfdoc/cpdf_dest.cpp |
| +++ b/core/fpdfdoc/cpdf_dest.cpp |
| @@ -8,6 +8,8 @@ |
| #include "core/fpdfapi/parser/cpdf_array.h" |
| #include "core/fpdfapi/parser/cpdf_document.h" |
| +#include "core/fpdfapi/parser/cpdf_name.h" |
| +#include "core/fpdfapi/parser/cpdf_number.h" |
| namespace { |
| @@ -64,6 +66,59 @@ int CPDF_Dest::GetZoomMode() { |
| return 0; |
| } |
| +bool CPDF_Dest::HasXYZ() const { |
| + CPDF_Array* pArray = ToArray(m_pObj); |
| + if (!pArray) |
| + return false; |
| + |
| + if (pArray->GetCount() < 5) |
| + return false; |
| + |
| + const CPDF_Name* xyz = ToName(pArray->GetDirectObjectAt(1)); |
| + if (!xyz || xyz->GetString() != "XYZ") |
| + return false; |
| + return true; |
| +} |
| + |
| +void CPDF_Dest::GetXYZ(bool* hasX, |
| + bool* hasY, |
| + bool* hasZoom, |
| + float* x, |
| + float* y, |
| + float* zoom) const { |
| + ASSERT(HasXYZ()); |
| + |
| + CPDF_Array* pArray = ToArray(m_pObj); |
| + if (!pArray) { |
| + *hasX = false; |
| + *hasY = false; |
| + *hasZoom = false; |
| + return; |
| + } |
| + |
| + const CPDF_Number* numX = ToNumber(pArray->GetDirectObjectAt(2)); |
| + const CPDF_Number* numY = ToNumber(pArray->GetDirectObjectAt(3)); |
| + const CPDF_Number* numZoom = ToNumber(pArray->GetDirectObjectAt(4)); |
| + |
| + // If the value is a CPDF_Null then ToNumber will return nullptr. |
| + *hasX = !!numX; |
| + *hasY = !!numY; |
| + *hasZoom = !!numZoom; |
| + |
| + if (numX) |
| + *x = numX->GetNumber(); |
| + if (numY) |
| + *y = numY->GetNumber(); |
| + |
| + // A zoom value of 0 is equivalent to a null value, so treat it as a null. |
| + if (numZoom) { |
| + if (numZoom->GetNumber() == 0.0) |
|
Lei Zhang
2016/11/07 20:27:16
Call GetNumber() just once?
dsinclair
2016/11/07 21:49:18
Done.
|
| + *hasZoom = false; |
| + else |
| + *zoom = numZoom->GetNumber(); |
| + } |
| +} |
| + |
| FX_FLOAT CPDF_Dest::GetParam(int index) { |
| CPDF_Array* pArray = ToArray(m_pObj); |
| return pArray ? pArray->GetNumberAt(2 + index) : 0; |