// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#include "../../include/fpdfdoc/fpdf_doc.h" | |
CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(CPDF_Bookmark Parent) | |
{ | |
if (Parent.m_pDict == NULL) { | |
CPDF_Dictionary* pRoot = m_pDocument->GetRoot()->GetDict("Outlines"); | |
if (pRoot == NULL) { | |
return NULL; | |
} | |
return pRoot->GetDict("First"); | |
} | |
return Parent.m_pDict->GetDict("First"); | |
} | |
CPDF_Bookmark CPDF_BookmarkTree::GetNextSibling(CPDF_Bookmark This) | |
{ | |
if (This.m_pDict == NULL) { | |
return NULL; | |
} | |
CPDF_Dictionary *pNext = This.m_pDict->GetDict("Next"); | |
return pNext == This.m_pDict ? NULL : pNext; | |
} | |
FX_DWORD CPDF_Bookmark::GetColorRef() | |
{ | |
if (!m_pDict) { | |
return 0; | |
} | |
CPDF_Array* pColor = m_pDict->GetArray("C"); | |
if (pColor == NULL) { | |
return FXSYS_RGB(0, 0, 0); | |
} | |
int r = FXSYS_round(pColor->GetNumber(0) * 255); | |
int g = FXSYS_round(pColor->GetNumber(1) * 255); | |
int b = FXSYS_round(pColor->GetNumber(2) * 255); | |
return FXSYS_RGB(r, g, b); | |
} | |
FX_DWORD CPDF_Bookmark::GetFontStyle() | |
{ | |
if (!m_pDict) { | |
return 0; | |
} | |
return m_pDict->GetInteger("F"); | |
} | |
CFX_WideString CPDF_Bookmark::GetTitle() | |
{ | |
if (!m_pDict) { | |
return CFX_WideString(); | |
} | |
CPDF_String* pString = (CPDF_String*)m_pDict->GetElementValue("Title"); | |
if (pString == NULL || pString->GetType() != PDFOBJ_STRING) { | |
return CFX_WideString(); | |
} | |
CFX_WideString title = pString->GetUnicodeText(); | |
FX_LPWSTR buf = title.LockBuffer(); | |
int len = title.GetLength(), i; | |
for (i = 0; i < len; i ++) | |
if (buf[i] < 0x20) { | |
buf[i] = 0x20; | |
} | |
title.ReleaseBuffer(len); | |
return title; | |
} | |
CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) | |
{ | |
if (!m_pDict) { | |
return NULL; | |
} | |
CPDF_Object* pDest = m_pDict->GetElementValue("Dest"); | |
if (pDest == NULL) { | |
return NULL; | |
} | |
if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) { | |
CPDF_NameTree name_tree(pDocument, FX_BSTRC("Dests")); | |
CFX_ByteStringC name = pDest->GetString(); | |
return name_tree.LookupNamedDest(pDocument, name); | |
} else if (pDest->GetType() == PDFOBJ_ARRAY) { | |
return (CPDF_Array*)pDest; | |
} | |
return NULL; | |
} | |
CPDF_Action CPDF_Bookmark::GetAction() | |
{ | |
if (!m_pDict) { | |
return NULL; | |
} | |
return m_pDict->GetDict("A"); | |
} |