Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: xfa/fde/fde_render.cpp

Issue 1960673003: Replace some calls to Release() with direct delete, part 1. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Another unique_ptr. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fde/fde_render.h ('k') | xfa/fde/tto/fde_textout.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "xfa/fde/fde_render.h" 7 #include "xfa/fde/fde_render.h"
8 8
9 #include "xfa/fde/fde_gedevice.h" 9 #include "xfa/fde/fde_gedevice.h"
10 #include "xfa/fde/fde_object.h" 10 #include "xfa/fde/fde_object.h"
11 #include "xfa/fgas/crt/fgas_memory.h" 11 #include "xfa/fgas/crt/fgas_memory.h"
12 12
13 #define FDE_PATHRENDER_Stroke 1 13 #define FDE_PATHRENDER_Stroke 1
14 #define FDE_PATHRENDER_Fill 2 14 #define FDE_PATHRENDER_Fill 2
15 15
16 CFDE_RenderContext::CFDE_RenderContext() 16 CFDE_RenderContext::CFDE_RenderContext()
17 : m_eStatus(FDE_RENDERSTATUS_Reset), 17 : m_eStatus(FDE_RENDERSTATUS_Reset),
18 m_pRenderDevice(nullptr), 18 m_pRenderDevice(nullptr),
19 m_pBrush(nullptr),
20 m_Transform(), 19 m_Transform(),
21 m_pCharPos(nullptr), 20 m_pCharPos(nullptr),
22 m_iCharPosCount(0), 21 m_iCharPosCount(0) {
23 m_pIterator(nullptr) {
24 m_Transform.SetIdentity(); 22 m_Transform.SetIdentity();
25 } 23 }
26 24
27 CFDE_RenderContext::~CFDE_RenderContext() { 25 CFDE_RenderContext::~CFDE_RenderContext() {
28 StopRender(); 26 StopRender();
29 } 27 }
30 28
31 FX_BOOL CFDE_RenderContext::StartRender(CFDE_RenderDevice* pRenderDevice, 29 FX_BOOL CFDE_RenderContext::StartRender(CFDE_RenderDevice* pRenderDevice,
32 IFDE_CanvasSet* pCanvasSet, 30 IFDE_CanvasSet* pCanvasSet,
33 const CFX_Matrix& tmDoc2Device) { 31 const CFX_Matrix& tmDoc2Device) {
34 if (m_pRenderDevice) 32 if (m_pRenderDevice)
35 return FALSE; 33 return FALSE;
36 if (!pRenderDevice) 34 if (!pRenderDevice)
37 return FALSE; 35 return FALSE;
38 if (!pCanvasSet) 36 if (!pCanvasSet)
39 return FALSE; 37 return FALSE;
40 38
41 m_eStatus = FDE_RENDERSTATUS_Paused; 39 m_eStatus = FDE_RENDERSTATUS_Paused;
42 m_pRenderDevice = pRenderDevice; 40 m_pRenderDevice = pRenderDevice;
43 m_Transform = tmDoc2Device; 41 m_Transform = tmDoc2Device;
44 if (!m_pIterator) 42 if (!m_pIterator)
45 m_pIterator = new CFDE_VisualSetIterator; 43 m_pIterator.reset(new CFDE_VisualSetIterator);
46 44
47 return m_pIterator->AttachCanvas(pCanvasSet) && m_pIterator->FilterObjects(); 45 return m_pIterator->AttachCanvas(pCanvasSet) && m_pIterator->FilterObjects();
48 } 46 }
49 47
50 FDE_RENDERSTATUS CFDE_RenderContext::DoRender(IFX_Pause* pPause) { 48 FDE_RENDERSTATUS CFDE_RenderContext::DoRender(IFX_Pause* pPause) {
51 if (!m_pRenderDevice) 49 if (!m_pRenderDevice)
52 return FDE_RENDERSTATUS_Failed; 50 return FDE_RENDERSTATUS_Failed;
53 if (!m_pIterator) 51 if (!m_pIterator)
54 return FDE_RENDERSTATUS_Failed; 52 return FDE_RENDERSTATUS_Failed;
55 53
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 break; 92 break;
95 } 93 }
96 } 94 }
97 return m_eStatus = eStatus; 95 return m_eStatus = eStatus;
98 } 96 }
99 97
100 void CFDE_RenderContext::StopRender() { 98 void CFDE_RenderContext::StopRender() {
101 m_eStatus = FDE_RENDERSTATUS_Reset; 99 m_eStatus = FDE_RENDERSTATUS_Reset;
102 m_pRenderDevice = nullptr; 100 m_pRenderDevice = nullptr;
103 m_Transform.SetIdentity(); 101 m_Transform.SetIdentity();
104 if (m_pIterator) { 102 m_pIterator.reset();
105 m_pIterator->Release(); 103 m_pBrush.reset();
106 m_pIterator = nullptr;
107 }
108 delete m_pBrush;
109 m_pBrush = nullptr;
110 FX_Free(m_pCharPos); 104 FX_Free(m_pCharPos);
111 m_pCharPos = nullptr; 105 m_pCharPos = nullptr;
112 m_iCharPosCount = 0; 106 m_iCharPosCount = 0;
113 } 107 }
114 108
115 void CFDE_RenderContext::RenderText(IFDE_TextSet* pTextSet, 109 void CFDE_RenderContext::RenderText(IFDE_TextSet* pTextSet,
116 FDE_HVISUALOBJ hText) { 110 FDE_HVISUALOBJ hText) {
117 ASSERT(m_pRenderDevice); 111 ASSERT(m_pRenderDevice);
118 ASSERT(pTextSet && hText); 112 ASSERT(pTextSet && hText);
119 113
120 IFX_Font* pFont = pTextSet->GetFont(hText); 114 IFX_Font* pFont = pTextSet->GetFont(hText);
121 if (!pFont) 115 if (!pFont)
122 return; 116 return;
123 117
124 int32_t iCount = pTextSet->GetDisplayPos(hText, nullptr, FALSE); 118 int32_t iCount = pTextSet->GetDisplayPos(hText, nullptr, FALSE);
125 if (iCount < 1) 119 if (iCount < 1)
126 return; 120 return;
127 121
128 if (!m_pBrush) 122 if (!m_pBrush)
129 m_pBrush = new CFDE_Brush; 123 m_pBrush.reset(new CFDE_Brush);
130 124
131 if (!m_pCharPos) 125 if (!m_pCharPos)
132 m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, iCount); 126 m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, iCount);
133 else if (m_iCharPosCount < iCount) 127 else if (m_iCharPosCount < iCount)
134 m_pCharPos = FX_Realloc(FXTEXT_CHARPOS, m_pCharPos, iCount); 128 m_pCharPos = FX_Realloc(FXTEXT_CHARPOS, m_pCharPos, iCount);
135 129
136 if (m_iCharPosCount < iCount) 130 if (m_iCharPosCount < iCount)
137 m_iCharPosCount = iCount; 131 m_iCharPosCount = iCount;
138 132
139 iCount = pTextSet->GetDisplayPos(hText, m_pCharPos, FALSE); 133 iCount = pTextSet->GetDisplayPos(hText, m_pCharPos, FALSE);
140 FX_FLOAT fFontSize = pTextSet->GetFontSize(hText); 134 FX_FLOAT fFontSize = pTextSet->GetFontSize(hText);
141 FX_ARGB dwColor = pTextSet->GetFontColor(hText); 135 FX_ARGB dwColor = pTextSet->GetFontColor(hText);
142 m_pBrush->SetColor(dwColor); 136 m_pBrush->SetColor(dwColor);
143 FDE_HDEVICESTATE hState; 137 FDE_HDEVICESTATE hState;
144 FX_BOOL bClip = ApplyClip(pTextSet, hText, hState); 138 FX_BOOL bClip = ApplyClip(pTextSet, hText, hState);
145 m_pRenderDevice->DrawString(m_pBrush, pFont, m_pCharPos, iCount, fFontSize, 139 m_pRenderDevice->DrawString(m_pBrush.get(), pFont, m_pCharPos, iCount,
146 &m_Transform); 140 fFontSize, &m_Transform);
147 if (bClip) 141 if (bClip)
148 RestoreClip(hState); 142 RestoreClip(hState);
149 } 143 }
150 144
151 FX_BOOL CFDE_RenderContext::ApplyClip(IFDE_VisualSet* pVisualSet, 145 FX_BOOL CFDE_RenderContext::ApplyClip(IFDE_VisualSet* pVisualSet,
152 FDE_HVISUALOBJ hObj, 146 FDE_HVISUALOBJ hObj,
153 FDE_HDEVICESTATE& hState) { 147 FDE_HDEVICESTATE& hState) {
154 CFX_RectF rtClip; 148 CFX_RectF rtClip;
155 if (!pVisualSet->GetClip(hObj, rtClip)) 149 if (!pVisualSet->GetClip(hObj, rtClip))
156 return FALSE; 150 return FALSE;
157 151
158 CFX_RectF rtObj; 152 CFX_RectF rtObj;
159 pVisualSet->GetRect(hObj, rtObj); 153 pVisualSet->GetRect(hObj, rtObj);
160 rtClip.Offset(rtObj.left, rtObj.top); 154 rtClip.Offset(rtObj.left, rtObj.top);
161 m_Transform.TransformRect(rtClip); 155 m_Transform.TransformRect(rtClip);
162 const CFX_RectF& rtDevClip = m_pRenderDevice->GetClipRect(); 156 const CFX_RectF& rtDevClip = m_pRenderDevice->GetClipRect();
163 rtClip.Intersect(rtDevClip); 157 rtClip.Intersect(rtDevClip);
164 hState = m_pRenderDevice->SaveState(); 158 hState = m_pRenderDevice->SaveState();
165 return m_pRenderDevice->SetClipRect(rtClip); 159 return m_pRenderDevice->SetClipRect(rtClip);
166 } 160 }
167 161
168 void CFDE_RenderContext::RestoreClip(FDE_HDEVICESTATE hState) { 162 void CFDE_RenderContext::RestoreClip(FDE_HDEVICESTATE hState) {
169 m_pRenderDevice->RestoreState(hState); 163 m_pRenderDevice->RestoreState(hState);
170 } 164 }
OLDNEW
« no previous file with comments | « xfa/fde/fde_render.h ('k') | xfa/fde/tto/fde_textout.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698