| // 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 <algorithm> | |
| #include "../../include/formfiller/FormFiller.h" | |
| #include "../../include/formfiller/FFL_Utils.h" | |
| CPDF_Rect CFFL_Utils::MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2) { | |
| CPDF_Rect rcRet; | |
| rcRet.left = std::min(rect1.left, rect2.left); | |
| rcRet.bottom = std::min(rect1.bottom, rect2.bottom); | |
| rcRet.right = std::max(rect1.right, rect2.right); | |
| rcRet.top = std::max(rect1.top, rect2.top); | |
| return rcRet; | |
| } | |
| CPDF_Rect CFFL_Utils::InflateRect(const CPDF_Rect& crRect, | |
| const FX_FLOAT& fSize) { | |
| CPDF_Rect crNew(crRect.left - fSize, crRect.bottom - fSize, | |
| crRect.right + fSize, crRect.top + fSize); | |
| crNew.Normalize(); | |
| return crNew; | |
| } | |
| CPDF_Rect CFFL_Utils::DeflateRect(const CPDF_Rect& crRect, | |
| const FX_FLOAT& fSize) { | |
| CPDF_Rect crNew(crRect.left + fSize, crRect.bottom + fSize, | |
| crRect.right - fSize, crRect.top - fSize); | |
| crNew.Normalize(); | |
| return crNew; | |
| } | |
| FX_BOOL CFFL_Utils::TraceObject(CPDF_Object* pObj) { | |
| if (!pObj) | |
| return FALSE; | |
| FX_DWORD dwObjNum = pObj->GetObjNum(); | |
| switch (pObj->GetType()) { | |
| case PDFOBJ_ARRAY: { | |
| CPDF_Array* pArray = (CPDF_Array*)pObj; | |
| for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { | |
| CPDF_Object* pElement = pArray->GetElementValue(i); | |
| TraceObject(pElement); | |
| } | |
| } break; | |
| case PDFOBJ_DICTIONARY: { | |
| CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; | |
| FX_POSITION fPos = pDict->GetStartPos(); | |
| CFX_ByteString csKey; | |
| do { | |
| CPDF_Object* pElement = pDict->GetNextElement(fPos, csKey); | |
| // TRACE(csKey + "\n"); | |
| if (!pElement) | |
| break; | |
| TraceObject(pElement); | |
| } while (TRUE); | |
| } break; | |
| case PDFOBJ_STREAM: { | |
| CPDF_Stream* pStream = (CPDF_Stream*)pObj; | |
| CPDF_Dictionary* pDict = pStream->GetDict(); | |
| TraceObject(pDict); | |
| } break; | |
| case PDFOBJ_REFERENCE: { | |
| CPDF_Object* pDirectObj = pObj->GetDirect(); | |
| TraceObject(pDirectObj); | |
| } break; | |
| case PDFOBJ_BOOLEAN: | |
| break; | |
| case PDFOBJ_NUMBER: | |
| // TRACE("%d\n",(int32_t)pObj); | |
| break; | |
| case PDFOBJ_STRING: | |
| // TRACE(((CPDF_String*)pObj)->GetString() + "\n"); | |
| break; | |
| case PDFOBJ_NAME: | |
| // TRACE(((CPDF_Name*)pObj)->GetString() + "\n"); | |
| break; | |
| case PDFOBJ_NULL: | |
| // case PDFOBJ_KEYWORD: | |
| // case PDFOBJ_EOF: | |
| default: | |
| break; | |
| } | |
| if (dwObjNum == 0) | |
| return FALSE; | |
| return TRUE; | |
| } |