| 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 "Document.h" | 7 #include "Document.h" |
| 8 | 8 |
| 9 #include "Field.h" | 9 #include "Field.h" |
| 10 #include "Icon.h" | 10 #include "Icon.h" |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 pDoc->AttachDoc(pRuntime->GetReaderDocument()); | 142 pDoc->AttachDoc(pRuntime->GetReaderDocument()); |
| 143 pDoc->SetIsolate(pRuntime->GetIsolate()); | 143 pDoc->SetIsolate(pRuntime->GetIsolate()); |
| 144 } | 144 } |
| 145 | 145 |
| 146 /* --------------------------------- Document --------------------------------- | 146 /* --------------------------------- Document --------------------------------- |
| 147 */ | 147 */ |
| 148 | 148 |
| 149 Document::Document(CJS_Object* pJSObject) | 149 Document::Document(CJS_Object* pJSObject) |
| 150 : CJS_EmbedObj(pJSObject), | 150 : CJS_EmbedObj(pJSObject), |
| 151 m_isolate(NULL), | 151 m_isolate(NULL), |
| 152 m_pIconTree(NULL), | |
| 153 m_pDocument(NULL), | 152 m_pDocument(NULL), |
| 154 m_cwBaseURL(L""), | 153 m_cwBaseURL(L""), |
| 155 m_bDelay(FALSE) {} | 154 m_bDelay(FALSE) {} |
| 156 | 155 |
| 157 Document::~Document() { | 156 Document::~Document() { |
| 158 if (m_pIconTree) { | |
| 159 m_pIconTree->DeleteIconTree(); | |
| 160 delete m_pIconTree; | |
| 161 m_pIconTree = NULL; | |
| 162 } | |
| 163 for (int i = 0; i < m_DelayData.GetSize(); i++) { | 157 for (int i = 0; i < m_DelayData.GetSize(); i++) { |
| 164 if (CJS_DelayData* pData = m_DelayData.GetAt(i)) { | 158 delete m_DelayData.GetAt(i); |
| 165 delete pData; | |
| 166 pData = NULL; | |
| 167 m_DelayData.SetAt(i, NULL); | |
| 168 } | |
| 169 } | 159 } |
| 170 | 160 |
| 171 m_DelayData.RemoveAll(); | 161 m_DelayData.RemoveAll(); |
| 172 m_DelayAnnotData.RemoveAll(); | 162 m_DelayAnnotData.RemoveAll(); |
| 173 } | 163 } |
| 174 | 164 |
| 175 // the total number of fileds in document. | 165 // the total number of fileds in document. |
| 176 FX_BOOL Document::numFields(IJS_Context* cc, | 166 FX_BOOL Document::numFields(IJS_Context* cc, |
| 177 CJS_PropValue& vp, | 167 CJS_PropValue& vp, |
| 178 CFX_WideString& sError) { | 168 CFX_WideString& sError) { |
| (...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 CJS_Value& vRet, | 1238 CJS_Value& vRet, |
| 1249 CFX_WideString& sError) { | 1239 CFX_WideString& sError) { |
| 1250 return TRUE; | 1240 return TRUE; |
| 1251 } | 1241 } |
| 1252 | 1242 |
| 1253 bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) { | 1243 bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) { |
| 1254 return (rect.left <= LinkRect.left && rect.top <= LinkRect.top && | 1244 return (rect.left <= LinkRect.left && rect.top <= LinkRect.top && |
| 1255 rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom); | 1245 rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom); |
| 1256 } | 1246 } |
| 1257 | 1247 |
| 1258 void IconTree::InsertIconElement(IconElement* pNewIcon) { | |
| 1259 if (!pNewIcon) | |
| 1260 return; | |
| 1261 | |
| 1262 if (m_pHead || m_pEnd) { | |
| 1263 m_pEnd->NextIcon = pNewIcon; | |
| 1264 m_pEnd = pNewIcon; | |
| 1265 } else { | |
| 1266 m_pHead = pNewIcon; | |
| 1267 m_pEnd = pNewIcon; | |
| 1268 } | |
| 1269 m_iLength++; | |
| 1270 } | |
| 1271 | |
| 1272 void IconTree::DeleteIconTree() { | |
| 1273 if (!m_pHead || !m_pEnd) | |
| 1274 return; | |
| 1275 | |
| 1276 IconElement* pTemp = NULL; | |
| 1277 while (m_pEnd != m_pHead) { | |
| 1278 pTemp = m_pHead; | |
| 1279 m_pHead = m_pHead->NextIcon; | |
| 1280 delete pTemp; | |
| 1281 } | |
| 1282 | |
| 1283 delete m_pEnd; | |
| 1284 m_pHead = NULL; | |
| 1285 m_pEnd = NULL; | |
| 1286 } | |
| 1287 | |
| 1288 int IconTree::GetLength() { | |
| 1289 return m_iLength; | |
| 1290 } | |
| 1291 | |
| 1292 IconElement* IconTree::operator[](int iIndex) { | |
| 1293 if (iIndex >= 0 && iIndex <= m_iLength) { | |
| 1294 IconElement* pTemp = m_pHead; | |
| 1295 for (int i = 0; i < iIndex; i++) { | |
| 1296 pTemp = pTemp->NextIcon; | |
| 1297 } | |
| 1298 return pTemp; | |
| 1299 } | |
| 1300 return NULL; | |
| 1301 } | |
| 1302 | |
| 1303 FX_BOOL Document::addIcon(IJS_Context* cc, | 1248 FX_BOOL Document::addIcon(IJS_Context* cc, |
| 1304 const std::vector<CJS_Value>& params, | 1249 const std::vector<CJS_Value>& params, |
| 1305 CJS_Value& vRet, | 1250 CJS_Value& vRet, |
| 1306 CFX_WideString& sError) { | 1251 CFX_WideString& sError) { |
| 1307 CJS_Context* pContext = (CJS_Context*)cc; | 1252 CJS_Context* pContext = (CJS_Context*)cc; |
| 1308 if (params.size() != 2) { | 1253 if (params.size() != 2) { |
| 1309 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); | 1254 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); |
| 1310 return FALSE; | 1255 return FALSE; |
| 1311 } | 1256 } |
| 1312 CFX_WideString swIconName = params[0].ToCFXWideString(); | 1257 CFX_WideString swIconName = params[0].ToCFXWideString(); |
| 1313 | 1258 |
| 1314 if (params[1].GetType() != CJS_Value::VT_object) { | 1259 if (params[1].GetType() != CJS_Value::VT_object) { |
| 1315 sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); | 1260 sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); |
| 1316 return FALSE; | 1261 return FALSE; |
| 1317 } | 1262 } |
| 1318 | 1263 |
| 1319 v8::Local<v8::Object> pJSIcon = params[1].ToV8Object(); | 1264 v8::Local<v8::Object> pJSIcon = params[1].ToV8Object(); |
| 1320 if (FXJS_GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) { | 1265 if (FXJS_GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) { |
| 1321 sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); | 1266 sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); |
| 1322 return FALSE; | 1267 return FALSE; |
| 1323 } | 1268 } |
| 1324 | 1269 |
| 1325 CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject(); | 1270 CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject(); |
| 1326 if (!pEmbedObj) { | 1271 if (!pEmbedObj) { |
| 1327 sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); | 1272 sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); |
| 1328 return FALSE; | 1273 return FALSE; |
| 1329 } | 1274 } |
| 1330 | 1275 |
| 1331 Icon* pIcon = (Icon*)pEmbedObj; | 1276 m_IconList.push_back(std::unique_ptr<IconElement>( |
| 1332 if (!m_pIconTree) | 1277 new IconElement(swIconName, (Icon*)pEmbedObj))); |
| 1333 m_pIconTree = new IconTree(); | |
| 1334 | |
| 1335 IconElement* pNewIcon = new IconElement(); | |
| 1336 pNewIcon->IconName = swIconName; | |
| 1337 pNewIcon->NextIcon = NULL; | |
| 1338 pNewIcon->IconStream = pIcon; | |
| 1339 m_pIconTree->InsertIconElement(pNewIcon); | |
| 1340 return TRUE; | 1278 return TRUE; |
| 1341 } | 1279 } |
| 1342 | 1280 |
| 1343 FX_BOOL Document::icons(IJS_Context* cc, | 1281 FX_BOOL Document::icons(IJS_Context* cc, |
| 1344 CJS_PropValue& vp, | 1282 CJS_PropValue& vp, |
| 1345 CFX_WideString& sError) { | 1283 CFX_WideString& sError) { |
| 1346 if (vp.IsSetting()) { | 1284 if (vp.IsSetting()) { |
| 1347 CJS_Context* pContext = static_cast<CJS_Context*>(cc); | 1285 CJS_Context* pContext = static_cast<CJS_Context*>(cc); |
| 1348 sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); | 1286 sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); |
| 1349 return FALSE; | 1287 return FALSE; |
| 1350 } | 1288 } |
| 1351 | 1289 |
| 1352 if (!m_pIconTree) { | 1290 if (m_IconList.empty()) { |
| 1353 vp.SetNull(); | 1291 vp.SetNull(); |
| 1354 return TRUE; | 1292 return TRUE; |
| 1355 } | 1293 } |
| 1356 | 1294 |
| 1357 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); | 1295 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); |
| 1358 CJS_Array Icons(pRuntime); | 1296 CJS_Array Icons(pRuntime); |
| 1359 IconElement* pIconElement = NULL; | |
| 1360 int iIconTreeLength = m_pIconTree->GetLength(); | |
| 1361 for (int i = 0; i < iIconTreeLength; i++) { | |
| 1362 pIconElement = (*m_pIconTree)[i]; | |
| 1363 | 1297 |
| 1298 int i = 0; |
| 1299 for (const auto& pIconElement : m_IconList) { |
| 1364 v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj( | 1300 v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj( |
| 1365 pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID); | 1301 pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID); |
| 1366 if (pObj.IsEmpty()) | 1302 if (pObj.IsEmpty()) |
| 1367 return FALSE; | 1303 return FALSE; |
| 1368 | 1304 |
| 1369 CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(m_isolate, pObj); | 1305 CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(m_isolate, pObj); |
| 1370 if (!pJS_Icon) | 1306 if (!pJS_Icon) |
| 1371 return FALSE; | 1307 return FALSE; |
| 1372 | 1308 |
| 1373 Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); | 1309 Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); |
| 1374 if (!pIcon) | 1310 if (!pIcon) |
| 1375 return FALSE; | 1311 return FALSE; |
| 1376 | 1312 |
| 1377 pIcon->SetStream(pIconElement->IconStream->GetStream()); | 1313 pIcon->SetStream(pIconElement->IconStream->GetStream()); |
| 1378 pIcon->SetIconName(pIconElement->IconName); | 1314 pIcon->SetIconName(pIconElement->IconName); |
| 1379 Icons.SetElement(i, CJS_Value(pRuntime, pJS_Icon)); | 1315 Icons.SetElement(i++, CJS_Value(pRuntime, pJS_Icon)); |
| 1380 } | 1316 } |
| 1381 | 1317 |
| 1382 vp << Icons; | 1318 vp << Icons; |
| 1383 return TRUE; | 1319 return TRUE; |
| 1384 } | 1320 } |
| 1385 | 1321 |
| 1386 FX_BOOL Document::getIcon(IJS_Context* cc, | 1322 FX_BOOL Document::getIcon(IJS_Context* cc, |
| 1387 const std::vector<CJS_Value>& params, | 1323 const std::vector<CJS_Value>& params, |
| 1388 CJS_Value& vRet, | 1324 CJS_Value& vRet, |
| 1389 CFX_WideString& sError) { | 1325 CFX_WideString& sError) { |
| 1390 CJS_Context* pContext = (CJS_Context*)cc; | 1326 CJS_Context* pContext = (CJS_Context*)cc; |
| 1391 if (params.size() != 1) { | 1327 if (params.size() != 1) { |
| 1392 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); | 1328 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); |
| 1393 return FALSE; | 1329 return FALSE; |
| 1394 } | 1330 } |
| 1395 | 1331 |
| 1396 if (!m_pIconTree) | 1332 if (m_IconList.empty()) |
| 1397 return FALSE; | 1333 return FALSE; |
| 1334 |
| 1398 CFX_WideString swIconName = params[0].ToCFXWideString(); | 1335 CFX_WideString swIconName = params[0].ToCFXWideString(); |
| 1399 int iIconCounts = m_pIconTree->GetLength(); | |
| 1400 | |
| 1401 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); | 1336 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); |
| 1402 | 1337 |
| 1403 for (int i = 0; i < iIconCounts; i++) { | 1338 for (const auto& pIconElement : m_IconList) { |
| 1404 if ((*m_pIconTree)[i]->IconName == swIconName) { | 1339 if (pIconElement->IconName == swIconName) { |
| 1405 Icon* pRetIcon = (*m_pIconTree)[i]->IconStream; | 1340 Icon* pRetIcon = pIconElement->IconStream; |
| 1406 | 1341 |
| 1407 v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj( | 1342 v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj( |
| 1408 pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID); | 1343 pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID); |
| 1409 if (pObj.IsEmpty()) | 1344 if (pObj.IsEmpty()) |
| 1410 return FALSE; | 1345 return FALSE; |
| 1411 | 1346 |
| 1412 CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(m_isolate, pObj); | 1347 CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(m_isolate, pObj); |
| 1413 if (!pJS_Icon) | 1348 if (!pJS_Icon) |
| 1414 return FALSE; | 1349 return FALSE; |
| 1415 | 1350 |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1773 CFX_DWordArray DelArray; | 1708 CFX_DWordArray DelArray; |
| 1774 | 1709 |
| 1775 for (int j = DelArray.GetSize() - 1; j >= 0; j--) { | 1710 for (int j = DelArray.GetSize() - 1; j >= 0; j--) { |
| 1776 m_DelayData.RemoveAt(DelArray[j]); | 1711 m_DelayData.RemoveAt(DelArray[j]); |
| 1777 } | 1712 } |
| 1778 } | 1713 } |
| 1779 | 1714 |
| 1780 CJS_Document* Document::GetCJSDoc() const { | 1715 CJS_Document* Document::GetCJSDoc() const { |
| 1781 return static_cast<CJS_Document*>(m_pJSObject); | 1716 return static_cast<CJS_Document*>(m_pJSObject); |
| 1782 } | 1717 } |
| OLD | NEW |