OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/fpdfapi/page/cpdf_colorspace.h" | 7 #include "core/fpdfapi/page/cpdf_colorspace.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 return nullptr; | 325 return nullptr; |
326 } | 326 } |
327 | 327 |
328 CPDF_ColorSpace* CPDF_ColorSpace::GetStockCS(int family) { | 328 CPDF_ColorSpace* CPDF_ColorSpace::GetStockCS(int family) { |
329 return CPDF_ModuleMgr::Get()->GetPageModule()->GetStockCS(family); | 329 return CPDF_ModuleMgr::Get()->GetPageModule()->GetStockCS(family); |
330 } | 330 } |
331 | 331 |
332 std::unique_ptr<CPDF_ColorSpace> CPDF_ColorSpace::Load(CPDF_Document* pDoc, | 332 std::unique_ptr<CPDF_ColorSpace> CPDF_ColorSpace::Load(CPDF_Document* pDoc, |
333 CPDF_Object* pObj) { | 333 CPDF_Object* pObj) { |
334 if (!pObj) | 334 if (!pObj) |
335 return std::unique_ptr<CPDF_ColorSpace>(); | 335 return nullptr; |
336 | 336 |
337 if (pObj->IsName()) { | 337 if (pObj->IsName()) { |
338 return std::unique_ptr<CPDF_ColorSpace>( | 338 return std::unique_ptr<CPDF_ColorSpace>( |
339 ColorspaceFromName(pObj->GetString())); | 339 ColorspaceFromName(pObj->GetString())); |
340 } | 340 } |
341 if (CPDF_Stream* pStream = pObj->AsStream()) { | 341 if (CPDF_Stream* pStream = pObj->AsStream()) { |
342 CPDF_Dictionary* pDict = pStream->GetDict(); | 342 CPDF_Dictionary* pDict = pStream->GetDict(); |
343 if (!pDict) | 343 if (!pDict) |
344 return std::unique_ptr<CPDF_ColorSpace>(); | 344 return nullptr; |
345 | 345 |
346 for (const auto& it : *pDict) { | 346 for (const auto& it : *pDict) { |
347 std::unique_ptr<CPDF_ColorSpace> pRet; | 347 std::unique_ptr<CPDF_ColorSpace> pRet; |
348 CPDF_Object* pValue = it.second; | 348 CPDF_Object* pValue = it.second; |
349 if (ToName(pValue)) | 349 if (ToName(pValue)) |
350 pRet.reset(ColorspaceFromName(pValue->GetString())); | 350 pRet.reset(ColorspaceFromName(pValue->GetString())); |
351 if (pRet) | 351 if (pRet) |
352 return pRet; | 352 return pRet; |
353 } | 353 } |
354 return std::unique_ptr<CPDF_ColorSpace>(); | 354 return nullptr; |
355 } | 355 } |
356 | 356 |
357 CPDF_Array* pArray = pObj->AsArray(); | 357 CPDF_Array* pArray = pObj->AsArray(); |
358 if (!pArray || pArray->IsEmpty()) | 358 if (!pArray || pArray->IsEmpty()) |
359 return std::unique_ptr<CPDF_ColorSpace>(); | 359 return nullptr; |
360 | 360 |
361 CPDF_Object* pFamilyObj = pArray->GetDirectObjectAt(0); | 361 CPDF_Object* pFamilyObj = pArray->GetDirectObjectAt(0); |
362 if (!pFamilyObj) | 362 if (!pFamilyObj) |
363 return std::unique_ptr<CPDF_ColorSpace>(); | 363 return nullptr; |
364 | 364 |
365 CFX_ByteString familyname = pFamilyObj->GetString(); | 365 CFX_ByteString familyname = pFamilyObj->GetString(); |
366 if (pArray->GetCount() == 1) | 366 if (pArray->GetCount() == 1) |
367 return std::unique_ptr<CPDF_ColorSpace>(ColorspaceFromName(familyname)); | 367 return std::unique_ptr<CPDF_ColorSpace>(ColorspaceFromName(familyname)); |
368 | 368 |
369 std::unique_ptr<CPDF_ColorSpace> pCS; | 369 std::unique_ptr<CPDF_ColorSpace> pCS; |
370 uint32_t id = familyname.GetID(); | 370 uint32_t id = familyname.GetID(); |
371 if (id == FXBSTR_ID('C', 'a', 'l', 'G')) { | 371 if (id == FXBSTR_ID('C', 'a', 'l', 'G')) { |
372 pCS.reset(new CPDF_CalGray(pDoc)); | 372 pCS.reset(new CPDF_CalGray(pDoc)); |
373 } else if (id == FXBSTR_ID('C', 'a', 'l', 'R')) { | 373 } else if (id == FXBSTR_ID('C', 'a', 'l', 'R')) { |
374 pCS.reset(new CPDF_CalRGB(pDoc)); | 374 pCS.reset(new CPDF_CalRGB(pDoc)); |
375 } else if (id == FXBSTR_ID('L', 'a', 'b', 0)) { | 375 } else if (id == FXBSTR_ID('L', 'a', 'b', 0)) { |
376 pCS.reset(new CPDF_LabCS(pDoc)); | 376 pCS.reset(new CPDF_LabCS(pDoc)); |
377 } else if (id == FXBSTR_ID('I', 'C', 'C', 'B')) { | 377 } else if (id == FXBSTR_ID('I', 'C', 'C', 'B')) { |
378 pCS.reset(new CPDF_ICCBasedCS(pDoc)); | 378 pCS.reset(new CPDF_ICCBasedCS(pDoc)); |
379 } else if (id == FXBSTR_ID('I', 'n', 'd', 'e') || | 379 } else if (id == FXBSTR_ID('I', 'n', 'd', 'e') || |
380 id == FXBSTR_ID('I', 0, 0, 0)) { | 380 id == FXBSTR_ID('I', 0, 0, 0)) { |
381 pCS.reset(new CPDF_IndexedCS(pDoc)); | 381 pCS.reset(new CPDF_IndexedCS(pDoc)); |
382 } else if (id == FXBSTR_ID('S', 'e', 'p', 'a')) { | 382 } else if (id == FXBSTR_ID('S', 'e', 'p', 'a')) { |
383 pCS.reset(new CPDF_SeparationCS(pDoc)); | 383 pCS.reset(new CPDF_SeparationCS(pDoc)); |
384 } else if (id == FXBSTR_ID('D', 'e', 'v', 'i')) { | 384 } else if (id == FXBSTR_ID('D', 'e', 'v', 'i')) { |
385 pCS.reset(new CPDF_DeviceNCS(pDoc)); | 385 pCS.reset(new CPDF_DeviceNCS(pDoc)); |
386 } else if (id == FXBSTR_ID('P', 'a', 't', 't')) { | 386 } else if (id == FXBSTR_ID('P', 'a', 't', 't')) { |
387 pCS.reset(new CPDF_PatternCS(pDoc)); | 387 pCS.reset(new CPDF_PatternCS(pDoc)); |
388 } else { | 388 } else { |
389 return std::unique_ptr<CPDF_ColorSpace>(); | 389 return nullptr; |
390 } | 390 } |
391 pCS->m_pArray = pArray; | 391 pCS->m_pArray = pArray; |
392 if (!pCS->v_Load(pDoc, pArray)) | 392 if (!pCS->v_Load(pDoc, pArray)) |
393 return std::unique_ptr<CPDF_ColorSpace>(); | 393 return nullptr; |
394 | 394 |
395 return pCS; | 395 return pCS; |
396 } | 396 } |
397 | 397 |
398 void CPDF_ColorSpace::Release() { | 398 void CPDF_ColorSpace::Release() { |
399 if (this == GetStockCS(PDFCS_DEVICERGB) || | 399 if (this == GetStockCS(PDFCS_DEVICERGB) || |
400 this == GetStockCS(PDFCS_DEVICEGRAY) || | 400 this == GetStockCS(PDFCS_DEVICEGRAY) || |
401 this == GetStockCS(PDFCS_DEVICECMYK) || | 401 this == GetStockCS(PDFCS_DEVICECMYK) || |
402 this == GetStockCS(PDFCS_PATTERN)) { | 402 this == GetStockCS(PDFCS_PATTERN)) { |
403 return; | 403 return; |
(...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1269 | 1269 |
1270 return m_pAltCS->GetRGB(results, R, G, B); | 1270 return m_pAltCS->GetRGB(results, R, G, B); |
1271 } | 1271 } |
1272 | 1272 |
1273 void CPDF_DeviceNCS::EnableStdConversion(FX_BOOL bEnabled) { | 1273 void CPDF_DeviceNCS::EnableStdConversion(FX_BOOL bEnabled) { |
1274 CPDF_ColorSpace::EnableStdConversion(bEnabled); | 1274 CPDF_ColorSpace::EnableStdConversion(bEnabled); |
1275 if (m_pAltCS) { | 1275 if (m_pAltCS) { |
1276 m_pAltCS->EnableStdConversion(bEnabled); | 1276 m_pAltCS->EnableStdConversion(bEnabled); |
1277 } | 1277 } |
1278 } | 1278 } |
OLD | NEW |