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/render/cpdf_rendercontext.h" | 7 #include "core/fpdfapi/render/cpdf_rendercontext.h" |
8 | 8 |
9 #include "core/fpdfapi/page/cpdf_page.h" | 9 #include "core/fpdfapi/page/cpdf_page.h" |
10 #include "core/fpdfapi/page/cpdf_pageobject.h" | 10 #include "core/fpdfapi/page/cpdf_pageobject.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 CFX_FxgeDevice device; | 37 CFX_FxgeDevice device; |
38 device.Attach(pBuffer, false, nullptr, false); | 38 device.Attach(pBuffer, false, nullptr, false); |
39 | 39 |
40 FX_RECT rect(0, 0, device.GetWidth(), device.GetHeight()); | 40 FX_RECT rect(0, 0, device.GetWidth(), device.GetHeight()); |
41 device.FillRect(&rect, 0xffffffff); | 41 device.FillRect(&rect, 0xffffffff); |
42 Render(&device, pObj, pOptions, pFinalMatrix); | 42 Render(&device, pObj, pOptions, pFinalMatrix); |
43 } | 43 } |
44 | 44 |
45 void CPDF_RenderContext::AppendLayer(CPDF_PageObjectHolder* pObjectHolder, | 45 void CPDF_RenderContext::AppendLayer(CPDF_PageObjectHolder* pObjectHolder, |
46 const CFX_Matrix* pObject2Device) { | 46 const CFX_Matrix* pObject2Device) { |
47 Layer* pLayer = m_Layers.AddSpace(); | 47 m_Layers.emplace_back(); |
48 pLayer->m_pObjectHolder = pObjectHolder; | 48 m_Layers.back().m_pObjectHolder = pObjectHolder; |
49 if (pObject2Device) | 49 if (pObject2Device) |
50 pLayer->m_Matrix = *pObject2Device; | 50 m_Layers.back().m_Matrix = *pObject2Device; |
51 else | 51 else |
52 pLayer->m_Matrix.SetIdentity(); | 52 m_Layers.back().m_Matrix.SetIdentity(); |
53 } | 53 } |
54 | 54 |
55 void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, | 55 void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, |
56 const CPDF_RenderOptions* pOptions, | 56 const CPDF_RenderOptions* pOptions, |
57 const CFX_Matrix* pLastMatrix) { | 57 const CFX_Matrix* pLastMatrix) { |
58 Render(pDevice, nullptr, pOptions, pLastMatrix); | 58 Render(pDevice, nullptr, pOptions, pLastMatrix); |
59 } | 59 } |
60 | 60 |
61 void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, | 61 void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, |
62 const CPDF_PageObject* pStopObj, | 62 const CPDF_PageObject* pStopObj, |
63 const CPDF_RenderOptions* pOptions, | 63 const CPDF_RenderOptions* pOptions, |
64 const CFX_Matrix* pLastMatrix) { | 64 const CFX_Matrix* pLastMatrix) { |
65 int count = m_Layers.GetSize(); | 65 for (auto& layer : m_Layers) { |
66 for (int j = 0; j < count; j++) { | |
67 pDevice->SaveState(); | 66 pDevice->SaveState(); |
68 Layer* pLayer = m_Layers.GetDataPtr(j); | |
69 if (pLastMatrix) { | 67 if (pLastMatrix) { |
70 CFX_Matrix FinalMatrix = pLayer->m_Matrix; | 68 CFX_Matrix FinalMatrix = layer.m_Matrix; |
71 FinalMatrix.Concat(*pLastMatrix); | 69 FinalMatrix.Concat(*pLastMatrix); |
72 CPDF_RenderStatus status; | 70 CPDF_RenderStatus status; |
73 status.Initialize(this, pDevice, pLastMatrix, pStopObj, nullptr, nullptr, | 71 status.Initialize(this, pDevice, pLastMatrix, pStopObj, nullptr, nullptr, |
74 pOptions, pLayer->m_pObjectHolder->m_Transparency, | 72 pOptions, layer.m_pObjectHolder->m_Transparency, false, |
75 false, nullptr); | 73 nullptr); |
76 status.RenderObjectList(pLayer->m_pObjectHolder, &FinalMatrix); | 74 status.RenderObjectList(layer.m_pObjectHolder, &FinalMatrix); |
77 if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) | 75 if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) |
78 m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); | 76 m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); |
79 if (status.m_bStopped) { | 77 if (status.m_bStopped) { |
80 pDevice->RestoreState(false); | 78 pDevice->RestoreState(false); |
81 break; | 79 break; |
82 } | 80 } |
83 } else { | 81 } else { |
84 CPDF_RenderStatus status; | 82 CPDF_RenderStatus status; |
85 status.Initialize(this, pDevice, nullptr, pStopObj, nullptr, nullptr, | 83 status.Initialize(this, pDevice, nullptr, pStopObj, nullptr, nullptr, |
86 pOptions, pLayer->m_pObjectHolder->m_Transparency, | 84 pOptions, layer.m_pObjectHolder->m_Transparency, false, |
87 false, nullptr); | 85 nullptr); |
88 status.RenderObjectList(pLayer->m_pObjectHolder, &pLayer->m_Matrix); | 86 status.RenderObjectList(layer.m_pObjectHolder, &layer.m_Matrix); |
89 if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) | 87 if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) |
90 m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); | 88 m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); |
91 if (status.m_bStopped) { | 89 if (status.m_bStopped) { |
92 pDevice->RestoreState(false); | 90 pDevice->RestoreState(false); |
93 break; | 91 break; |
94 } | 92 } |
95 } | 93 } |
96 pDevice->RestoreState(false); | 94 pDevice->RestoreState(false); |
97 } | 95 } |
98 } | 96 } |
OLD | NEW |