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; |