blob: 2e908108b81b3ce33c29e14f46b44179a09f04cf [file] [log] [blame]
// 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/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 = FFL_MIN(rect1.left,rect2.left);
rcRet.bottom = FFL_MIN(rect1.bottom,rect2.bottom);
rcRet.right = FFL_MAX(rect1.right,rect2.right);
rcRet.top = FFL_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::RectContainsRect(const CPDF_Rect & father,const CPDF_Rect & son)
{
return (father.left <= son.left && father.right >= son.right &&
father.bottom <= son.bottom && father.top >= son.top);
}
FX_BOOL CFFL_Utils::RectContainsPoint(const CPDF_Rect & father,const CPDF_Point & son)
{
return (father.left <= son.x && father.right >= son.x &&
father.bottom <= son.y && father.top >= son.y);
}
FX_BOOL CFFL_Utils::RectContainsXY(const CPDF_Rect & father,FX_FLOAT x,FX_FLOAT y)
{
return (father.left <= x && father.right >= x &&
father.bottom <= y && father.top >= y);
}
*/
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",(FX_INT32)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;
}