Rename Init methods to more accurately describe purpose
[pdfium.git] / fpdfsdk / src / formfiller / FFL_Utils.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include <algorithm>
8
9 #include "../../include/formfiller/FormFiller.h"
10 #include "../../include/formfiller/FFL_Utils.h"
11
12 CPDF_Rect CFFL_Utils::MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2) {
13   CPDF_Rect rcRet;
14
15   rcRet.left = std::min(rect1.left, rect2.left);
16   rcRet.bottom = std::min(rect1.bottom, rect2.bottom);
17   rcRet.right = std::max(rect1.right, rect2.right);
18   rcRet.top = std::max(rect1.top, rect2.top);
19
20   return rcRet;
21 }
22
23 CPDF_Rect CFFL_Utils::InflateRect(const CPDF_Rect& crRect,
24                                   const FX_FLOAT& fSize) {
25   CPDF_Rect crNew(crRect.left - fSize, crRect.bottom - fSize,
26                   crRect.right + fSize, crRect.top + fSize);
27   crNew.Normalize();
28   return crNew;
29 }
30
31 CPDF_Rect CFFL_Utils::DeflateRect(const CPDF_Rect& crRect,
32                                   const FX_FLOAT& fSize) {
33   CPDF_Rect crNew(crRect.left + fSize, crRect.bottom + fSize,
34                   crRect.right - fSize, crRect.top - fSize);
35   crNew.Normalize();
36   return crNew;
37 }
38
39 FX_BOOL CFFL_Utils::TraceObject(CPDF_Object* pObj) {
40   if (!pObj)
41     return FALSE;
42
43   FX_DWORD dwObjNum = pObj->GetObjNum();
44   switch (pObj->GetType()) {
45     case PDFOBJ_ARRAY: {
46       CPDF_Array* pArray = (CPDF_Array*)pObj;
47       for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
48         CPDF_Object* pElement = pArray->GetElementValue(i);
49         TraceObject(pElement);
50       }
51     } break;
52
53     case PDFOBJ_DICTIONARY: {
54       CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
55
56       FX_POSITION fPos = pDict->GetStartPos();
57       CFX_ByteString csKey;
58       do {
59         CPDF_Object* pElement = pDict->GetNextElement(fPos, csKey);
60         // TRACE(csKey + "\n");
61         if (!pElement)
62           break;
63         TraceObject(pElement);
64       } while (TRUE);
65     } break;
66
67     case PDFOBJ_STREAM: {
68       CPDF_Stream* pStream = (CPDF_Stream*)pObj;
69       CPDF_Dictionary* pDict = pStream->GetDict();
70       TraceObject(pDict);
71     } break;
72
73     case PDFOBJ_REFERENCE: {
74       CPDF_Object* pDirectObj = pObj->GetDirect();
75       TraceObject(pDirectObj);
76     } break;
77
78     case PDFOBJ_BOOLEAN:
79       break;
80     case PDFOBJ_NUMBER:
81       // TRACE("%d\n",(int32_t)pObj);
82       break;
83     case PDFOBJ_STRING:
84       // TRACE(((CPDF_String*)pObj)->GetString() + "\n");
85       break;
86     case PDFOBJ_NAME:
87       // TRACE(((CPDF_Name*)pObj)->GetString() + "\n");
88       break;
89     case PDFOBJ_NULL:
90     //  case PDFOBJ_KEYWORD:
91     //  case PDFOBJ_EOF:
92     default:
93       break;
94   }
95   if (dwObjNum == 0)
96     return FALSE;
97
98   return TRUE;
99 }