| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "public/fpdf_doc.h" | 7 #include "public/fpdf_doc.h" |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| 11 #include "core/fpdfapi/page/cpdf_page.h" | 11 #include "core/fpdfapi/page/cpdf_page.h" |
| 12 #include "core/fpdfapi/parser/cpdf_array.h" | 12 #include "core/fpdfapi/parser/cpdf_array.h" |
| 13 #include "core/fpdfapi/parser/cpdf_document.h" | 13 #include "core/fpdfapi/parser/cpdf_document.h" |
| 14 #include "core/fpdfdoc/cpdf_bookmark.h" | 14 #include "core/fpdfdoc/cpdf_bookmark.h" |
| 15 #include "core/fpdfdoc/cpdf_bookmarktree.h" | 15 #include "core/fpdfdoc/cpdf_bookmarktree.h" |
| 16 #include "core/fpdfdoc/cpdf_dest.h" |
| 16 #include "fpdfsdk/fsdk_define.h" | 17 #include "fpdfsdk/fsdk_define.h" |
| 17 #include "third_party/base/stl_util.h" | 18 #include "third_party/base/stl_util.h" |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 | 21 |
| 21 CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, | 22 CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, |
| 22 CPDF_Bookmark bookmark, | 23 CPDF_Bookmark bookmark, |
| 23 const CFX_WideString& title, | 24 const CFX_WideString& title, |
| 24 std::set<CPDF_Dictionary*>* visited) { | 25 std::set<CPDF_Dictionary*>* visited) { |
| 25 // Return if already checked to avoid circular calling. | 26 // Return if already checked to avoid circular calling. |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 FPDF_DEST pDict) { | 205 FPDF_DEST pDict) { |
| 205 if (!pDict) | 206 if (!pDict) |
| 206 return 0; | 207 return 0; |
| 207 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 208 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 208 if (!pDoc) | 209 if (!pDoc) |
| 209 return 0; | 210 return 0; |
| 210 CPDF_Dest dest(static_cast<CPDF_Array*>(pDict)); | 211 CPDF_Dest dest(static_cast<CPDF_Array*>(pDict)); |
| 211 return dest.GetPageIndex(pDoc); | 212 return dest.GetPageIndex(pDoc); |
| 212 } | 213 } |
| 213 | 214 |
| 215 DLLEXPORT FPDF_BOOL STDCALL FPDFDest_GetLocationInPage(FPDF_DEST pDict, |
| 216 FPDF_BOOL* hasXVal, |
| 217 FPDF_BOOL* hasYVal, |
| 218 FPDF_BOOL* hasZoomVal, |
| 219 FS_FLOAT* x, |
| 220 FS_FLOAT* y, |
| 221 FS_FLOAT* zoom) { |
| 222 if (!pDict) |
| 223 return false; |
| 224 |
| 225 std::unique_ptr<CPDF_Dest> dest( |
| 226 new CPDF_Dest(static_cast<CPDF_Object*>(pDict))); |
| 227 |
| 228 // FPDF_BOOL is an int, GetXYZ expects bools. |
| 229 bool bHasX; |
| 230 bool bHasY; |
| 231 bool bHasZoom; |
| 232 if (!dest->GetXYZ(&bHasX, &bHasY, &bHasZoom, x, y, zoom)) |
| 233 return false; |
| 234 |
| 235 *hasXVal = bHasX; |
| 236 *hasYVal = bHasY; |
| 237 *hasZoomVal = bHasZoom; |
| 238 return true; |
| 239 } |
| 240 |
| 214 DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, | 241 DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, |
| 215 double x, | 242 double x, |
| 216 double y) { | 243 double y) { |
| 217 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 244 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 218 if (!pPage) | 245 if (!pPage) |
| 219 return nullptr; | 246 return nullptr; |
| 220 | 247 |
| 221 CPDF_LinkList* pLinkList = GetLinkList(pPage); | 248 CPDF_LinkList* pLinkList = GetLinkList(pPage); |
| 222 if (!pLinkList) | 249 if (!pLinkList) |
| 223 return nullptr; | 250 return nullptr; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 return 0; | 385 return 0; |
| 359 CFX_WideString text = pInfo->GetUnicodeTextFor(tag); | 386 CFX_WideString text = pInfo->GetUnicodeTextFor(tag); |
| 360 // Use UTF-16LE encoding | 387 // Use UTF-16LE encoding |
| 361 CFX_ByteString encodedText = text.UTF16LE_Encode(); | 388 CFX_ByteString encodedText = text.UTF16LE_Encode(); |
| 362 unsigned long len = encodedText.GetLength(); | 389 unsigned long len = encodedText.GetLength(); |
| 363 if (buffer && buflen >= len) { | 390 if (buffer && buflen >= len) { |
| 364 FXSYS_memcpy(buffer, encodedText.c_str(), len); | 391 FXSYS_memcpy(buffer, encodedText.c_str(), len); |
| 365 } | 392 } |
| 366 return len; | 393 return len; |
| 367 } | 394 } |
| OLD | NEW |