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

Side by Side Diff: core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp

Issue 1252613002: FX_BOOL considered harmful. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Manual edits. Created 5 years, 5 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
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 "../../../include/fpdfapi/fpdf_module.h" 7 #include "../../../include/fpdfapi/fpdf_module.h"
8 #include "../../../include/fpdfapi/fpdf_pageobj.h" 8 #include "../../../include/fpdfapi/fpdf_pageobj.h"
9 #include "../../../include/fpdfapi/fpdf_render.h" 9 #include "../../../include/fpdfapi/fpdf_render.h"
10 #include "../../../include/fxcodec/fx_codec.h" 10 #include "../../../include/fxcodec/fx_codec.h"
11 #include "../../../include/fxcrt/fx_safe_types.h" 11 #include "../../../include/fxcrt/fx_safe_types.h"
12 #include "../../../include/fxge/fx_ge.h" 12 #include "../../../include/fxge/fx_ge.h"
13 #include "../fpdf_page/pageint.h" 13 #include "../fpdf_page/pageint.h"
14 #include "render_int.h" 14 #include "render_int.h"
15 15
16 FX_BOOL CPDF_RenderStatus::ProcessImage(CPDF_ImageObject* pImageObj, const CFX_A ffineMatrix* pObj2Device) 16 bool CPDF_RenderStatus::ProcessImage(CPDF_ImageObject* pImageObj, const CFX_Affi neMatrix* pObj2Device)
17 { 17 {
18 CPDF_ImageRenderer render; 18 CPDF_ImageRenderer render;
19 if (render.Start(this, pImageObj, pObj2Device, m_bStdCS, m_curBlend)) { 19 if (render.Start(this, pImageObj, pObj2Device, m_bStdCS, m_curBlend)) {
20 render.Continue(NULL); 20 render.Continue(NULL);
21 } 21 }
22 return render.m_Result; 22 return render.m_Result;
23 } 23 }
24 void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, int left, int top, FX_ARGB mask_argb, 24 void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, int left, int top, FX_ARGB mask_argb,
25 int bitmap_alpha, int blend_mode, int Transparency) 25 int bitmap_alpha, int blend_mode, int Transparency)
26 { 26 {
27 if (pDIBitmap == NULL) { 27 if (pDIBitmap == NULL) {
28 return; 28 return;
29 } 29 }
30 FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED; 30 bool bIsolated = Transparency & PDFTRANS_ISOLATED;
31 FX_BOOL bGroup = Transparency & PDFTRANS_GROUP; 31 bool bGroup = Transparency & PDFTRANS_GROUP;
32 if (blend_mode == FXDIB_BLEND_NORMAL) { 32 if (blend_mode == FXDIB_BLEND_NORMAL) {
33 if (!pDIBitmap->IsAlphaMask()) { 33 if (!pDIBitmap->IsAlphaMask()) {
34 if (bitmap_alpha < 255) { 34 if (bitmap_alpha < 255) {
35 pDIBitmap->MultiplyAlpha(bitmap_alpha); 35 pDIBitmap->MultiplyAlpha(bitmap_alpha);
36 } 36 }
37 if (m_pDevice->SetDIBits(pDIBitmap, left, top)) { 37 if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
38 return; 38 return;
39 } 39 }
40 } else { 40 } else {
41 FX_DWORD fill_argb = m_Options.TranslateColor(mask_argb); 41 FX_DWORD fill_argb = m_Options.TranslateColor(mask_argb);
42 if (bitmap_alpha < 255) { 42 if (bitmap_alpha < 255) {
43 ((uint8_t*)&fill_argb)[3] = ((uint8_t*)&fill_argb)[3] * bitmap_a lpha / 255; 43 ((uint8_t*)&fill_argb)[3] = ((uint8_t*)&fill_argb)[3] * bitmap_a lpha / 255;
44 } 44 }
45 if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) { 45 if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
46 return; 46 return;
47 } 47 }
48 } 48 }
49 } 49 }
50 FX_BOOL bBackAlphaRequired = blend_mode && bIsolated && !m_bDropObjects; 50 bool bBackAlphaRequired = blend_mode && bIsolated && !m_bDropObjects;
51 FX_BOOL bGetBackGround = ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) || 51 bool bGetBackGround = ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) ||
52 (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) && (m_pDevice->GetRenderCaps() 52 (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) && (m_pDevice->GetRenderCaps()
53 & FXRC_GET_BITS) && !bBackAlphaRequired); 53 & FXRC_GET_BITS) && !bBackAlphaRequired);
54 if (bGetBackGround) { 54 if (bGetBackGround) {
55 if (bIsolated || !bGroup) { 55 if (bIsolated || !bGroup) {
56 if (pDIBitmap->IsAlphaMask()) { 56 if (pDIBitmap->IsAlphaMask()) {
57 return; 57 return;
58 } 58 }
59 m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode); 59 m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode);
60 } else { 60 } else {
61 FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), top + pDIBitma p->GetHeight()); 61 FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), top + pDIBitma p->GetHeight());
62 rect.Intersect(m_pDevice->GetClipBox()); 62 rect.Intersect(m_pDevice->GetClipBox());
63 CFX_DIBitmap* pClone = NULL; 63 CFX_DIBitmap* pClone = NULL;
64 FX_BOOL bClone = FALSE; 64 bool bClone = false;
65 if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) { 65 if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) {
66 bClone = TRUE; 66 bClone = true;
67 pClone = m_pDevice->GetBackDrop()->Clone(&rect); 67 pClone = m_pDevice->GetBackDrop()->Clone(&rect);
68 CFX_DIBitmap *pForeBitmap = m_pDevice->GetBitmap(); 68 CFX_DIBitmap *pForeBitmap = m_pDevice->GetBitmap();
69 pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHei ght(), pForeBitmap, rect.left, rect.top); 69 pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHei ght(), pForeBitmap, rect.left, rect.top);
70 left = left >= 0 ? 0 : left; 70 left = left >= 0 ? 0 : left;
71 top = top >= 0 ? 0 : top; 71 top = top >= 0 ? 0 : top;
72 if (!pDIBitmap->IsAlphaMask()) 72 if (!pDIBitmap->IsAlphaMask())
73 pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->Ge tHeight(), pDIBitmap, 73 pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->Ge tHeight(), pDIBitmap,
74 left, top, blend_mode); 74 left, top, blend_mode);
75 else 75 else
76 pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetH eight(), pDIBitmap, 76 pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetH eight(), pDIBitmap,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 delete pBackdrop; 111 delete pBackdrop;
112 pBackdrop = pBackdrop1; 112 pBackdrop = pBackdrop1;
113 m_pDevice->SetDIBits(pBackdrop, back_left, back_top); 113 m_pDevice->SetDIBits(pBackdrop, back_left, back_top);
114 delete pBackdrop; 114 delete pBackdrop;
115 } 115 }
116 FX_COLORREF CPDF_TransferFunc::TranslateColor(FX_COLORREF rgb) 116 FX_COLORREF CPDF_TransferFunc::TranslateColor(FX_COLORREF rgb)
117 { 117 {
118 return FXSYS_RGB(m_Samples[FXSYS_GetRValue(rgb)], m_Samples[256 + FXSYS_GetG Value(rgb)], 118 return FXSYS_RGB(m_Samples[FXSYS_GetRValue(rgb)], m_Samples[256 + FXSYS_GetG Value(rgb)],
119 m_Samples[512 + FXSYS_GetBValue(rgb)]); 119 m_Samples[512 + FXSYS_GetBValue(rgb)]);
120 } 120 }
121 CFX_DIBSource* CPDF_TransferFunc::TranslateImage(const CFX_DIBSource* pSrc, FX_B OOL bAutoDropSrc) 121 CFX_DIBSource* CPDF_TransferFunc::TranslateImage(const CFX_DIBSource* pSrc, bool bAutoDropSrc)
122 { 122 {
123 CPDF_DIBTransferFunc* pDest = new CPDF_DIBTransferFunc(this); 123 CPDF_DIBTransferFunc* pDest = new CPDF_DIBTransferFunc(this);
124 pDest->LoadSrc(pSrc, bAutoDropSrc); 124 pDest->LoadSrc(pSrc, bAutoDropSrc);
125 return pDest; 125 return pDest;
126 } 126 }
127 FXDIB_Format CPDF_DIBTransferFunc::GetDestFormat() 127 FXDIB_Format CPDF_DIBTransferFunc::GetDestFormat()
128 { 128 {
129 if (m_pSrc->IsAlphaMask()) { 129 if (m_pSrc->IsAlphaMask()) {
130 return FXDIB_8bppMask; 130 return FXDIB_8bppMask;
131 } 131 }
132 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 132 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
133 return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb32; 133 return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb32;
134 #else 134 #else
135 return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb; 135 return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb;
136 #endif 136 #endif
137 } 137 }
138 CPDF_DIBTransferFunc::CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFun c) 138 CPDF_DIBTransferFunc::CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFun c)
139 { 139 {
140 m_RampR = pTransferFunc->m_Samples; 140 m_RampR = pTransferFunc->m_Samples;
141 m_RampG = &pTransferFunc->m_Samples[256]; 141 m_RampG = &pTransferFunc->m_Samples[256];
142 m_RampB = &pTransferFunc->m_Samples[512]; 142 m_RampB = &pTransferFunc->m_Samples[512];
143 } 143 }
144 void CPDF_DIBTransferFunc::TranslateScanline(uint8_t* dest_buf, const uint8_t* s rc_buf) const 144 void CPDF_DIBTransferFunc::TranslateScanline(uint8_t* dest_buf, const uint8_t* s rc_buf) const
145 { 145 {
146 int i; 146 int i;
147 FX_BOOL bSkip = FALSE; 147 bool bSkip = false;
148 switch (m_pSrc->GetFormat()) { 148 switch (m_pSrc->GetFormat()) {
149 case FXDIB_1bppRgb: { 149 case FXDIB_1bppRgb: {
150 int r0 = m_RampR[0], g0 = m_RampG[0], b0 = m_RampB[0]; 150 int r0 = m_RampR[0], g0 = m_RampG[0], b0 = m_RampB[0];
151 int r1 = m_RampR[255], g1 = m_RampG[255], b1 = m_RampB[255]; 151 int r1 = m_RampR[255], g1 = m_RampG[255], b1 = m_RampB[255];
152 for (i = 0; i < m_Width; i ++) { 152 for (i = 0; i < m_Width; i ++) {
153 if (src_buf[i / 8] & (1 << (7 - i % 8))) { 153 if (src_buf[i / 8] & (1 << (7 - i % 8))) {
154 *dest_buf++ = b1; 154 *dest_buf++ = b1;
155 *dest_buf++ = g1; 155 *dest_buf++ = g1;
156 *dest_buf++ = r1; 156 *dest_buf++ = r1;
157 } else { 157 } else {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 for (i = 0; i < m_Width; i ++) { 206 for (i = 0; i < m_Width; i ++) {
207 *dest_buf++ = m_RampB[*(src_buf++)]; 207 *dest_buf++ = m_RampB[*(src_buf++)];
208 *dest_buf++ = m_RampG[*(src_buf++)]; 208 *dest_buf++ = m_RampG[*(src_buf++)];
209 *dest_buf++ = m_RampR[*(src_buf++)]; 209 *dest_buf++ = m_RampR[*(src_buf++)];
210 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 210 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
211 dest_buf++; 211 dest_buf++;
212 #endif 212 #endif
213 } 213 }
214 break; 214 break;
215 case FXDIB_Rgb32: 215 case FXDIB_Rgb32:
216 bSkip = TRUE; 216 bSkip = true;
217 case FXDIB_Argb: 217 case FXDIB_Argb:
218 for (i = 0; i < m_Width; i ++) { 218 for (i = 0; i < m_Width; i ++) {
219 *dest_buf++ = m_RampB[*(src_buf++)]; 219 *dest_buf++ = m_RampB[*(src_buf++)];
220 *dest_buf++ = m_RampG[*(src_buf++)]; 220 *dest_buf++ = m_RampG[*(src_buf++)];
221 *dest_buf++ = m_RampR[*(src_buf++)]; 221 *dest_buf++ = m_RampR[*(src_buf++)];
222 if (!bSkip) { 222 if (!bSkip) {
223 *dest_buf++ = *src_buf; 223 *dest_buf++ = *src_buf;
224 } 224 }
225 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 225 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
226 else { 226 else {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 } else 259 } else
260 #endif 260 #endif
261 for (int i = 0; i < pixels; i ++) { 261 for (int i = 0; i < pixels; i ++) {
262 *dest_buf++ = m_RampB[*(src_buf++)]; 262 *dest_buf++ = m_RampB[*(src_buf++)];
263 *dest_buf++ = m_RampG[*(src_buf++)]; 263 *dest_buf++ = m_RampG[*(src_buf++)];
264 *dest_buf++ = m_RampR[*(src_buf++)]; 264 *dest_buf++ = m_RampR[*(src_buf++)];
265 *dest_buf++ = *(src_buf++); 265 *dest_buf++ = *(src_buf++);
266 } 266 }
267 } 267 }
268 } 268 }
269 static FX_BOOL _IsSupported(CPDF_ColorSpace* pCS) 269 static bool _IsSupported(CPDF_ColorSpace* pCS)
270 { 270 {
271 if (pCS->GetFamily() == PDFCS_DEVICERGB || pCS->GetFamily() == PDFCS_DEVICEG RAY || 271 if (pCS->GetFamily() == PDFCS_DEVICERGB || pCS->GetFamily() == PDFCS_DEVICEG RAY ||
272 pCS->GetFamily() == PDFCS_DEVICECMYK || pCS->GetFamily() == PDFCS_CA LGRAY || 272 pCS->GetFamily() == PDFCS_DEVICECMYK || pCS->GetFamily() == PDFCS_CA LGRAY ||
273 pCS->GetFamily() == PDFCS_CALRGB) { 273 pCS->GetFamily() == PDFCS_CALRGB) {
274 return TRUE; 274 return true;
275 } 275 }
276 if (pCS->GetFamily() == PDFCS_INDEXED && _IsSupported(pCS->GetBaseCS())) { 276 if (pCS->GetFamily() == PDFCS_INDEXED && _IsSupported(pCS->GetBaseCS())) {
277 return TRUE; 277 return true;
278 } 278 }
279 return FALSE; 279 return false;
280 } 280 }
281 CPDF_ImageRenderer::CPDF_ImageRenderer() 281 CPDF_ImageRenderer::CPDF_ImageRenderer()
282 { 282 {
283 m_pRenderStatus = NULL; 283 m_pRenderStatus = NULL;
284 m_pImageObject = NULL; 284 m_pImageObject = NULL;
285 m_Result = TRUE; 285 m_Result = true;
286 m_Status = 0; 286 m_Status = 0;
287 m_pQuickStretcher = NULL; 287 m_pQuickStretcher = NULL;
288 m_pTransformer = NULL; 288 m_pTransformer = NULL;
289 m_DeviceHandle = NULL; 289 m_DeviceHandle = NULL;
290 m_LoadHandle = NULL; 290 m_LoadHandle = NULL;
291 m_pClone = NULL; 291 m_pClone = NULL;
292 m_bStdCS = FALSE; 292 m_bStdCS = false;
293 m_bPatternColor = FALSE; 293 m_bPatternColor = false;
294 m_BlendType = FXDIB_BLEND_NORMAL; 294 m_BlendType = FXDIB_BLEND_NORMAL;
295 m_pPattern = NULL; 295 m_pPattern = NULL;
296 m_pObj2Device = NULL; 296 m_pObj2Device = NULL;
297 } 297 }
298 CPDF_ImageRenderer::~CPDF_ImageRenderer() 298 CPDF_ImageRenderer::~CPDF_ImageRenderer()
299 { 299 {
300 delete m_pQuickStretcher; 300 delete m_pQuickStretcher;
301 delete m_pTransformer; 301 delete m_pTransformer;
302 if (m_DeviceHandle) { 302 if (m_DeviceHandle) {
303 m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle); 303 m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle);
304 } 304 }
305 delete (CPDF_ProgressiveImageLoaderHandle*)m_LoadHandle; 305 delete (CPDF_ProgressiveImageLoaderHandle*)m_LoadHandle;
306 delete m_pClone; 306 delete m_pClone;
307 } 307 }
308 FX_BOOL CPDF_ImageRenderer::StartLoadDIBSource() 308 bool CPDF_ImageRenderer::StartLoadDIBSource()
309 { 309 {
310 CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); 310 CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
311 FX_RECT image_rect = image_rect_f.GetOutterRect(); 311 FX_RECT image_rect = image_rect_f.GetOutterRect();
312 int dest_width = image_rect.Width(); 312 int dest_width = image_rect.Width();
313 int dest_height = image_rect.Height(); 313 int dest_height = image_rect.Height();
314 if (m_ImageMatrix.a < 0) { 314 if (m_ImageMatrix.a < 0) {
315 dest_width = -dest_width; 315 dest_width = -dest_width;
316 } 316 }
317 if (m_ImageMatrix.d > 0) { 317 if (m_ImageMatrix.d > 0) {
318 dest_height = -dest_height; 318 dest_height = -dest_height;
319 } 319 }
320 if (m_Loader.StartLoadImage(m_pImageObject, m_pRenderStatus->m_pContext->m_p PageCache, m_LoadHandle, m_bStdCS, 320 if (m_Loader.StartLoadImage(m_pImageObject, m_pRenderStatus->m_pContext->m_p PageCache, m_LoadHandle, m_bStdCS,
321 m_pRenderStatus->m_GroupFamily, m_pRenderStatus- >m_bLoadMask, m_pRenderStatus, dest_width, dest_height)) { 321 m_pRenderStatus->m_GroupFamily, m_pRenderStatus- >m_bLoadMask, m_pRenderStatus, dest_width, dest_height)) {
322 if (m_LoadHandle != NULL) { 322 if (m_LoadHandle != NULL) {
323 m_Status = 4; 323 m_Status = 4;
324 return TRUE; 324 return true;
325 } 325 }
326 return FALSE; 326 return false;
327 } 327 }
328 return FALSE; 328 return false;
329 } 329 }
330 FX_BOOL CPDF_ImageRenderer::StartRenderDIBSource() 330 bool CPDF_ImageRenderer::StartRenderDIBSource()
331 { 331 {
332 if (m_Loader.m_pBitmap == NULL) { 332 if (m_Loader.m_pBitmap == NULL) {
333 return FALSE; 333 return false;
334 } 334 }
335 m_BitmapAlpha = 255; 335 m_BitmapAlpha = 255;
336 const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState; 336 const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState;
337 if (pGeneralState) { 337 if (pGeneralState) {
338 m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255); 338 m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255);
339 } 339 }
340 m_pDIBSource = m_Loader.m_pBitmap; 340 m_pDIBSource = m_Loader.m_pBitmap;
341 if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA && m_Loader .m_pMask == NULL) { 341 if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA && m_Loader .m_pMask == NULL) {
342 return StartBitmapAlpha(); 342 return StartBitmapAlpha();
343 } 343 }
344 if (pGeneralState && pGeneralState->m_pTR) { 344 if (pGeneralState && pGeneralState->m_pTR) {
345 if (!pGeneralState->m_pTransferFunc) { 345 if (!pGeneralState->m_pTransferFunc) {
346 ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc = m_pRender Status->GetTransferFunc(pGeneralState->m_pTR); 346 ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc = m_pRender Status->GetTransferFunc(pGeneralState->m_pTR);
347 } 347 }
348 if (pGeneralState->m_pTransferFunc && !pGeneralState->m_pTransferFunc->m _bIdentity) { 348 if (pGeneralState->m_pTransferFunc && !pGeneralState->m_pTransferFunc->m _bIdentity) {
349 m_pDIBSource = m_Loader.m_pBitmap = pGeneralState->m_pTransferFunc-> TranslateImage(m_Loader.m_pBitmap, !m_Loader.m_bCached); 349 m_pDIBSource = m_Loader.m_pBitmap = pGeneralState->m_pTransferFunc-> TranslateImage(m_Loader.m_pBitmap, !m_Loader.m_bCached);
350 if (m_Loader.m_bCached && m_Loader.m_pMask) { 350 if (m_Loader.m_bCached && m_Loader.m_pMask) {
351 m_Loader.m_pMask = m_Loader.m_pMask->Clone(); 351 m_Loader.m_pMask = m_Loader.m_pMask->Clone();
352 } 352 }
353 m_Loader.m_bCached = FALSE; 353 m_Loader.m_bCached = false;
354 } 354 }
355 } 355 }
356 m_FillArgb = 0; 356 m_FillArgb = 0;
357 m_bPatternColor = FALSE; 357 m_bPatternColor = false;
358 m_pPattern = NULL; 358 m_pPattern = NULL;
359 if (m_pDIBSource->IsAlphaMask()) { 359 if (m_pDIBSource->IsAlphaMask()) {
360 CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor(); 360 CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor();
361 if (pColor && pColor->IsPattern()) { 361 if (pColor && pColor->IsPattern()) {
362 m_pPattern = pColor->GetPattern(); 362 m_pPattern = pColor->GetPattern();
363 if (m_pPattern != NULL) { 363 if (m_pPattern != NULL) {
364 m_bPatternColor = TRUE; 364 m_bPatternColor = true;
365 } 365 }
366 } 366 }
367 m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject); 367 m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject);
368 } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) { 368 } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
369 m_pClone = m_pDIBSource->Clone(); 369 m_pClone = m_pDIBSource->Clone();
370 m_pClone->ConvertColorScale(m_pRenderStatus->m_Options.m_BackColor, m_pR enderStatus->m_Options.m_ForeColor); 370 m_pClone->ConvertColorScale(m_pRenderStatus->m_Options.m_BackColor, m_pR enderStatus->m_Options.m_ForeColor);
371 m_pDIBSource = m_pClone; 371 m_pDIBSource = m_pClone;
372 } 372 }
373 m_Flags = 0; 373 m_Flags = 0;
374 if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_DOWNSAMPLE) { 374 if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_DOWNSAMPLE) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 if (pColorSpace) { 423 if (pColorSpace) {
424 int format = pColorSpace->GetFamily(); 424 int format = pColorSpace->GetFamily();
425 if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION || form at == PDFCS_DEVICEN) { 425 if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION || form at == PDFCS_DEVICEN) {
426 m_BlendType = FXDIB_BLEND_DARKEN; 426 m_BlendType = FXDIB_BLEND_DARKEN;
427 } 427 }
428 pDocument->GetPageData()->ReleaseColorSpace(pCSObj); 428 pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
429 } 429 }
430 } 430 }
431 return StartDIBSource(); 431 return StartDIBSource();
432 } 432 }
433 FX_BOOL CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus, const CPDF_PageObj ect* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType) 433 bool CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus, const CPDF_PageObject * pObj, const CFX_AffineMatrix* pObj2Device, bool bStdCS, int blendType)
434 { 434 {
435 m_pRenderStatus = pStatus; 435 m_pRenderStatus = pStatus;
436 m_bStdCS = bStdCS; 436 m_bStdCS = bStdCS;
437 m_pImageObject = (CPDF_ImageObject*)pObj; 437 m_pImageObject = (CPDF_ImageObject*)pObj;
438 m_BlendType = blendType; 438 m_BlendType = blendType;
439 m_pObj2Device = pObj2Device; 439 m_pObj2Device = pObj2Device;
440 CPDF_Dictionary* pOC = m_pImageObject->m_pImage->GetOC(); 440 CPDF_Dictionary* pOC = m_pImageObject->m_pImage->GetOC();
441 if (pOC && m_pRenderStatus->m_Options.m_pOCContext && !m_pRenderStatus->m_Op tions.m_pOCContext->CheckOCGVisible(pOC)) { 441 if (pOC && m_pRenderStatus->m_Options.m_pOCContext && !m_pRenderStatus->m_Op tions.m_pOCContext->CheckOCGVisible(pOC)) {
442 return FALSE; 442 return false;
443 } 443 }
444 m_ImageMatrix = m_pImageObject->m_Matrix; 444 m_ImageMatrix = m_pImageObject->m_Matrix;
445 m_ImageMatrix.Concat(*pObj2Device); 445 m_ImageMatrix.Concat(*pObj2Device);
446 if (StartLoadDIBSource()) { 446 if (StartLoadDIBSource()) {
447 return TRUE; 447 return true;
448 } 448 }
449 return StartRenderDIBSource(); 449 return StartRenderDIBSource();
450 } 450 }
451 FX_BOOL CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus, const CFX_DIBSourc e* pDIBSource, FX_ARGB bitmap_argb, 451 bool CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus, const CFX_DIBSource* pDIBSource, FX_ARGB bitmap_argb,
452 int bitmap_alpha, const CFX_AffineMatrix* pIma ge2Device, FX_DWORD flags, FX_BOOL bStdCS, int blendType) 452 int bitmap_alpha, const CFX_AffineMatrix* pIma ge2Device, FX_DWORD flags, bool bStdCS, int blendType)
453 { 453 {
454 m_pRenderStatus = pStatus; 454 m_pRenderStatus = pStatus;
455 m_pDIBSource = pDIBSource; 455 m_pDIBSource = pDIBSource;
456 m_FillArgb = bitmap_argb; 456 m_FillArgb = bitmap_argb;
457 m_BitmapAlpha = bitmap_alpha; 457 m_BitmapAlpha = bitmap_alpha;
458 m_ImageMatrix = *pImage2Device; 458 m_ImageMatrix = *pImage2Device;
459 m_Flags = flags; 459 m_Flags = flags;
460 m_bStdCS = bStdCS; 460 m_bStdCS = bStdCS;
461 m_BlendType = blendType; 461 m_BlendType = blendType;
462 return StartDIBSource(); 462 return StartDIBSource();
463 } 463 }
464 FX_BOOL»CPDF_ImageRenderer::DrawPatternImage(const CFX_Matrix* pObj2Device) 464 bool» CPDF_ImageRenderer::DrawPatternImage(const CFX_Matrix* pObj2Device)
465 { 465 {
466 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps () & FXRC_BLEND_MODE)) { 466 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps () & FXRC_BLEND_MODE)) {
467 m_Result = FALSE; 467 m_Result = false;
468 return FALSE; 468 return false;
469 } 469 }
470 FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect(); 470 FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
471 rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox()); 471 rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
472 if (rect.IsEmpty()) { 472 if (rect.IsEmpty()) {
473 return FALSE; 473 return false;
474 } 474 }
475 CFX_AffineMatrix new_matrix = m_ImageMatrix; 475 CFX_AffineMatrix new_matrix = m_ImageMatrix;
476 new_matrix.TranslateI(-rect.left, -rect.top); 476 new_matrix.TranslateI(-rect.left, -rect.top);
477 int width = rect.Width(); 477 int width = rect.Width();
478 int height = rect.Height(); 478 int height = rect.Height();
479 CFX_FxgeDevice bitmap_device1; 479 CFX_FxgeDevice bitmap_device1;
480 if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32)) { 480 if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32)) {
481 return TRUE; 481 return true;
482 } 482 }
483 bitmap_device1.GetBitmap()->Clear(0xffffff); 483 bitmap_device1.GetBitmap()->Clear(0xffffff);
484 { 484 {
485 CPDF_RenderStatus bitmap_render; 485 CPDF_RenderStatus bitmap_render;
486 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, N ULL, NULL, 486 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, N ULL, NULL,
487 NULL, NULL, &m_pRenderStatus->m_Options, 0, m_p RenderStatus->m_bDropObjects, NULL, TRUE); 487 NULL, NULL, &m_pRenderStatus->m_Options, 0, m_p RenderStatus->m_bDropObjects, NULL, true);
488 CFX_Matrix patternDevice = *pObj2Device; 488 CFX_Matrix patternDevice = *pObj2Device;
489 patternDevice.Translate((FX_FLOAT) - rect.left, (FX_FLOAT) - rect.top); 489 patternDevice.Translate((FX_FLOAT) - rect.left, (FX_FLOAT) - rect.top);
490 if(m_pPattern->m_PatternType == PATTERN_TILING) { 490 if(m_pPattern->m_PatternType == PATTERN_TILING) {
491 bitmap_render.DrawTilingPattern((CPDF_TilingPattern*)m_pPattern, m_p ImageObject, &patternDevice, FALSE); 491 bitmap_render.DrawTilingPattern((CPDF_TilingPattern*)m_pPattern, m_p ImageObject, &patternDevice, false);
492 } else { 492 } else {
493 bitmap_render.DrawShadingPattern((CPDF_ShadingPattern*)m_pPattern, m _pImageObject, &patternDevice, FALSE); 493 bitmap_render.DrawShadingPattern((CPDF_ShadingPattern*)m_pPattern, m _pImageObject, &patternDevice, false);
494 } 494 }
495 } 495 }
496 { 496 {
497 CFX_FxgeDevice bitmap_device2; 497 CFX_FxgeDevice bitmap_device2;
498 if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb)) { 498 if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb)) {
499 return TRUE; 499 return true;
500 } 500 }
501 bitmap_device2.GetBitmap()->Clear(0); 501 bitmap_device2.GetBitmap()->Clear(0);
502 CPDF_RenderStatus bitmap_render; 502 CPDF_RenderStatus bitmap_render;
503 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, N ULL, NULL, 503 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, N ULL, NULL,
504 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE); 504 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, true);
505 CPDF_ImageRenderer image_render; 505 CPDF_ImageRenderer image_render;
506 if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255, &n ew_matrix, m_Flags, TRUE)) { 506 if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255, &n ew_matrix, m_Flags, true)) {
507 image_render.Continue(NULL); 507 image_render.Continue(NULL);
508 } 508 }
509 if (m_Loader.m_MatteColor != 0xffffffff) { 509 if (m_Loader.m_MatteColor != 0xffffffff) {
510 int matte_r = FXARGB_R(m_Loader.m_MatteColor); 510 int matte_r = FXARGB_R(m_Loader.m_MatteColor);
511 int matte_g = FXARGB_G(m_Loader.m_MatteColor); 511 int matte_g = FXARGB_G(m_Loader.m_MatteColor);
512 int matte_b = FXARGB_B(m_Loader.m_MatteColor); 512 int matte_b = FXARGB_B(m_Loader.m_MatteColor);
513 for (int row = 0; row < height; row ++) { 513 for (int row = 0; row < height; row ++) {
514 uint8_t* dest_scan = (uint8_t*)bitmap_device1.GetBitmap()->GetSc anline(row); 514 uint8_t* dest_scan = (uint8_t*)bitmap_device1.GetBitmap()->GetSc anline(row);
515 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanli ne(row); 515 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanli ne(row);
516 for (int col = 0; col < width; col ++) { 516 for (int col = 0; col < width; col ++) {
(...skipping 25 matching lines...) Expand all
542 dest_scan += 4; 542 dest_scan += 4;
543 } 543 }
544 } 544 }
545 } 545 }
546 } 546 }
547 bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask); 547 bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
548 bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap()); 548 bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
549 bitmap_device1.GetBitmap()->MultiplyAlpha(255); 549 bitmap_device1.GetBitmap()->MultiplyAlpha(255);
550 } 550 }
551 m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType); 551 m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
552 return FALSE; 552 return false;
553 } 553 }
554 FX_BOOL CPDF_ImageRenderer::DrawMaskedImage() 554 bool CPDF_ImageRenderer::DrawMaskedImage()
555 { 555 {
556 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps () & FXRC_BLEND_MODE)) { 556 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps () & FXRC_BLEND_MODE)) {
557 m_Result = FALSE; 557 m_Result = false;
558 return FALSE; 558 return false;
559 } 559 }
560 FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect(); 560 FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
561 rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox()); 561 rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
562 if (rect.IsEmpty()) { 562 if (rect.IsEmpty()) {
563 return FALSE; 563 return false;
564 } 564 }
565 CFX_AffineMatrix new_matrix = m_ImageMatrix; 565 CFX_AffineMatrix new_matrix = m_ImageMatrix;
566 new_matrix.TranslateI(-rect.left, -rect.top); 566 new_matrix.TranslateI(-rect.left, -rect.top);
567 int width = rect.Width(); 567 int width = rect.Width();
568 int height = rect.Height(); 568 int height = rect.Height();
569 CFX_FxgeDevice bitmap_device1; 569 CFX_FxgeDevice bitmap_device1;
570 if (!bitmap_device1.Create(width, height, FXDIB_Rgb32)) { 570 if (!bitmap_device1.Create(width, height, FXDIB_Rgb32)) {
571 return TRUE; 571 return true;
572 } 572 }
573 bitmap_device1.GetBitmap()->Clear(0xffffff); 573 bitmap_device1.GetBitmap()->Clear(0xffffff);
574 { 574 {
575 CPDF_RenderStatus bitmap_render; 575 CPDF_RenderStatus bitmap_render;
576 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, N ULL, NULL, 576 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, N ULL, NULL,
577 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE); 577 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, true);
578 CPDF_ImageRenderer image_render; 578 CPDF_ImageRenderer image_render;
579 if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix , m_Flags, TRUE)) { 579 if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix , m_Flags, true)) {
580 image_render.Continue(NULL); 580 image_render.Continue(NULL);
581 } 581 }
582 } 582 }
583 { 583 {
584 CFX_FxgeDevice bitmap_device2; 584 CFX_FxgeDevice bitmap_device2;
585 if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb)) { 585 if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb)) {
586 return TRUE; 586 return true;
587 } 587 }
588 bitmap_device2.GetBitmap()->Clear(0); 588 bitmap_device2.GetBitmap()->Clear(0);
589 CPDF_RenderStatus bitmap_render; 589 CPDF_RenderStatus bitmap_render;
590 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, N ULL, NULL, 590 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, N ULL, NULL,
591 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE); 591 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, true);
592 CPDF_ImageRenderer image_render; 592 CPDF_ImageRenderer image_render;
593 if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255 , &new_matrix, m_Flags, TRUE)) { 593 if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255 , &new_matrix, m_Flags, true)) {
594 image_render.Continue(NULL); 594 image_render.Continue(NULL);
595 } 595 }
596 if (m_Loader.m_MatteColor != 0xffffffff) { 596 if (m_Loader.m_MatteColor != 0xffffffff) {
597 int matte_r = FXARGB_R(m_Loader.m_MatteColor); 597 int matte_r = FXARGB_R(m_Loader.m_MatteColor);
598 int matte_g = FXARGB_G(m_Loader.m_MatteColor); 598 int matte_g = FXARGB_G(m_Loader.m_MatteColor);
599 int matte_b = FXARGB_B(m_Loader.m_MatteColor); 599 int matte_b = FXARGB_B(m_Loader.m_MatteColor);
600 for (int row = 0; row < height; row ++) { 600 for (int row = 0; row < height; row ++) {
601 uint8_t* dest_scan = (uint8_t*)bitmap_device1.GetBitmap()->GetSc anline(row); 601 uint8_t* dest_scan = (uint8_t*)bitmap_device1.GetBitmap()->GetSc anline(row);
602 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanli ne(row); 602 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanli ne(row);
603 for (int col = 0; col < width; col ++) { 603 for (int col = 0; col < width; col ++) {
(...skipping 27 matching lines...) Expand all
631 } 631 }
632 } 632 }
633 } 633 }
634 bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask); 634 bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
635 bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap()); 635 bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
636 if (m_BitmapAlpha < 255) { 636 if (m_BitmapAlpha < 255) {
637 bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha); 637 bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
638 } 638 }
639 } 639 }
640 m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType); 640 m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
641 return FALSE; 641 return false;
642 } 642 }
643 FX_BOOL CPDF_ImageRenderer::StartDIBSource() 643 bool CPDF_ImageRenderer::StartDIBSource()
644 { 644 {
645 if (!(m_Flags & RENDER_FORCE_DOWNSAMPLE) && m_pDIBSource->GetBPP() > 1) { 645 if (!(m_Flags & RENDER_FORCE_DOWNSAMPLE) && m_pDIBSource->GetBPP() > 1) {
646 int image_size = m_pDIBSource->GetBPP() / 8 * m_pDIBSource->GetWidth() * m_pDIBSource->GetHeight(); 646 int image_size = m_pDIBSource->GetBPP() / 8 * m_pDIBSource->GetWidth() * m_pDIBSource->GetHeight();
647 if (image_size > FPDF_HUGE_IMAGE_SIZE && !(m_Flags & RENDER_FORCE_HALFTO NE)) { 647 if (image_size > FPDF_HUGE_IMAGE_SIZE && !(m_Flags & RENDER_FORCE_HALFTO NE)) {
648 m_Flags |= RENDER_FORCE_DOWNSAMPLE; 648 m_Flags |= RENDER_FORCE_DOWNSAMPLE;
649 } 649 }
650 } 650 }
651 if (m_pRenderStatus->m_pDevice->StartDIBits(m_pDIBSource, m_BitmapAlpha, m_F illArgb, 651 if (m_pRenderStatus->m_pDevice->StartDIBits(m_pDIBSource, m_BitmapAlpha, m_F illArgb,
652 &m_ImageMatrix, m_Flags, m_DeviceHandle, 0, NULL, m_BlendType)) { 652 &m_ImageMatrix, m_Flags, m_DeviceHandle, 0, NULL, m_BlendType)) {
653 if (m_DeviceHandle != NULL) { 653 if (m_DeviceHandle != NULL) {
654 m_Status = 3; 654 m_Status = 3;
655 return TRUE; 655 return true;
656 } 656 }
657 return FALSE; 657 return false;
658 } 658 }
659 CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); 659 CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
660 FX_RECT image_rect = image_rect_f.GetOutterRect(); 660 FX_RECT image_rect = image_rect_f.GetOutterRect();
661 int dest_width = image_rect.Width(); 661 int dest_width = image_rect.Width();
662 int dest_height = image_rect.Height(); 662 int dest_height = image_rect.Height();
663 if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) || 663 if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
664 (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0) ) { 664 (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0) ) {
665 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRender Caps() & FXRC_BLEND_MODE)) { 665 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRender Caps() & FXRC_BLEND_MODE)) {
666 m_Result = FALSE; 666 m_Result = false;
667 return FALSE; 667 return false;
668 } 668 }
669 FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox(); 669 FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox();
670 clip_box.Intersect(image_rect); 670 clip_box.Intersect(image_rect);
671 m_Status = 2; 671 m_Status = 2;
672 m_pTransformer = new CFX_ImageTransformer; 672 m_pTransformer = new CFX_ImageTransformer;
673 m_pTransformer->Start(m_pDIBSource, &m_ImageMatrix, m_Flags, &clip_box); 673 m_pTransformer->Start(m_pDIBSource, &m_ImageMatrix, m_Flags, &clip_box);
674 return TRUE; 674 return true;
675 } 675 }
676 if (m_ImageMatrix.a < 0) { 676 if (m_ImageMatrix.a < 0) {
677 dest_width = -dest_width; 677 dest_width = -dest_width;
678 } 678 }
679 if (m_ImageMatrix.d > 0) { 679 if (m_ImageMatrix.d > 0) {
680 dest_height = -dest_height; 680 dest_height = -dest_height;
681 } 681 }
682 int dest_left, dest_top; 682 int dest_left, dest_top;
683 dest_left = dest_width > 0 ? image_rect.left : image_rect.right; 683 dest_left = dest_width > 0 ? image_rect.left : image_rect.right;
684 dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom; 684 dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;
685 if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) { 685 if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) {
686 if (m_pRenderStatus->m_pDevice->StretchDIBits(m_pDIBSource, dest_left, d est_top, 686 if (m_pRenderStatus->m_pDevice->StretchDIBits(m_pDIBSource, dest_left, d est_top,
687 dest_width, dest_height, m_Flags, NULL, m_BlendType)) { 687 dest_width, dest_height, m_Flags, NULL, m_BlendType)) {
688 return FALSE; 688 return false;
689 } 689 }
690 } 690 }
691 if (m_pDIBSource->IsAlphaMask()) { 691 if (m_pDIBSource->IsAlphaMask()) {
692 if (m_BitmapAlpha != 255) { 692 if (m_BitmapAlpha != 255) {
693 m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); 693 m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
694 } 694 }
695 if (m_pRenderStatus->m_pDevice->StretchBitMask(m_pDIBSource, dest_left, dest_top, dest_width, dest_height, m_FillArgb, m_Flags)) { 695 if (m_pRenderStatus->m_pDevice->StretchBitMask(m_pDIBSource, dest_left, dest_top, dest_width, dest_height, m_FillArgb, m_Flags)) {
696 return FALSE; 696 return false;
697 } 697 }
698 } 698 }
699 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps () & FXRC_BLEND_MODE)) { 699 if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps () & FXRC_BLEND_MODE)) {
700 m_Result = FALSE; 700 m_Result = false;
701 return TRUE; 701 return true;
702 } 702 }
703 FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox(); 703 FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox();
704 FX_RECT dest_rect = clip_box; 704 FX_RECT dest_rect = clip_box;
705 dest_rect.Intersect(image_rect); 705 dest_rect.Intersect(image_rect);
706 FX_RECT dest_clip(dest_rect.left - image_rect.left, dest_rect.top - image_re ct.top, 706 FX_RECT dest_clip(dest_rect.left - image_rect.left, dest_rect.top - image_re ct.top,
707 dest_rect.right - image_rect.left, dest_rect.bottom - imag e_rect.top); 707 dest_rect.right - image_rect.left, dest_rect.bottom - imag e_rect.top);
708 CFX_DIBitmap* pStretched = m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip); 708 CFX_DIBitmap* pStretched = m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip);
709 if (pStretched) { 709 if (pStretched) {
710 m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left, dest_rect .top, m_FillArgb, 710 m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left, dest_rect .top, m_FillArgb,
711 m_BitmapAlpha, m_BlendType, FALSE); 711 m_BitmapAlpha, m_BlendType, false);
712 delete pStretched; 712 delete pStretched;
713 pStretched = NULL; 713 pStretched = NULL;
714 } 714 }
715 return FALSE; 715 return false;
716 } 716 }
717 FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() 717 bool CPDF_ImageRenderer::StartBitmapAlpha()
718 { 718 {
719 if (m_pDIBSource->IsOpaqueImage()) { 719 if (m_pDIBSource->IsOpaqueImage()) {
720 CFX_PathData path; 720 CFX_PathData path;
721 path.AppendRect(0, 0, 1, 1); 721 path.AppendRect(0, 0, 1, 1);
722 path.Transform(&m_ImageMatrix); 722 path.Transform(&m_ImageMatrix);
723 FX_DWORD fill_color = ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_B itmapAlpha); 723 FX_DWORD fill_color = ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_B itmapAlpha);
724 m_pRenderStatus->m_pDevice->DrawPath(&path, NULL, NULL, fill_color, 0, F XFILL_WINDING); 724 m_pRenderStatus->m_pDevice->DrawPath(&path, NULL, NULL, fill_color, 0, F XFILL_WINDING);
725 } else { 725 } else {
726 const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask() ? m_pDIBSo urce : m_pDIBSource->GetAlphaMask(); 726 const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask() ? m_pDIBSo urce : m_pDIBSource->GetAlphaMask();
727 if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || FXSYS_fabs(m_ImageMatrix.c) > = 0.5f) { 727 if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || FXSYS_fabs(m_ImageMatrix.c) > = 0.5f) {
728 int left, top; 728 int left, top;
729 CFX_DIBitmap* pTransformed = pAlphaMask->TransformTo(&m_ImageMatrix, left, top); 729 CFX_DIBitmap* pTransformed = pAlphaMask->TransformTo(&m_ImageMatrix, left, top);
730 if (pTransformed == NULL) { 730 if (pTransformed == NULL) {
731 return TRUE; 731 return true;
732 } 732 }
733 m_pRenderStatus->m_pDevice->SetBitMask(pTransformed, left, top, Argb Encode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha)); 733 m_pRenderStatus->m_pDevice->SetBitMask(pTransformed, left, top, Argb Encode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
734 delete pTransformed; 734 delete pTransformed;
735 } else { 735 } else {
736 CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); 736 CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
737 FX_RECT image_rect = image_rect_f.GetOutterRect(); 737 FX_RECT image_rect = image_rect_f.GetOutterRect();
738 int dest_width = m_ImageMatrix.a > 0 ? image_rect.Width() : -image_r ect.Width(); 738 int dest_width = m_ImageMatrix.a > 0 ? image_rect.Width() : -image_r ect.Width();
739 int dest_height = m_ImageMatrix.d > 0 ? -image_rect.Height() : image _rect.Height(); 739 int dest_height = m_ImageMatrix.d > 0 ? -image_rect.Height() : image _rect.Height();
740 int left = dest_width > 0 ? image_rect.left : image_rect.right; 740 int left = dest_width > 0 ? image_rect.left : image_rect.right;
741 int top = dest_height > 0 ? image_rect.top : image_rect.bottom; 741 int top = dest_height > 0 ? image_rect.top : image_rect.bottom;
742 m_pRenderStatus->m_pDevice->StretchBitMask(pAlphaMask, left, top, de st_width, dest_height, 742 m_pRenderStatus->m_pDevice->StretchBitMask(pAlphaMask, left, top, de st_width, dest_height,
743 ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha )); 743 ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha ));
744 } 744 }
745 if (m_pDIBSource != pAlphaMask) { 745 if (m_pDIBSource != pAlphaMask) {
746 delete pAlphaMask; 746 delete pAlphaMask;
747 } 747 }
748 } 748 }
749 return FALSE; 749 return false;
750 } 750 }
751 FX_BOOL CPDF_ImageRenderer::Continue(IFX_Pause* pPause) 751 bool CPDF_ImageRenderer::Continue(IFX_Pause* pPause)
752 { 752 {
753 if (m_Status == 1) { 753 if (m_Status == 1) {
754 if (m_pQuickStretcher->Continue(pPause)) { 754 if (m_pQuickStretcher->Continue(pPause)) {
755 return TRUE; 755 return true;
756 } 756 }
757 if (m_pQuickStretcher->m_pBitmap->IsAlphaMask()) 757 if (m_pQuickStretcher->m_pBitmap->IsAlphaMask())
758 m_pRenderStatus->m_pDevice->SetBitMask(m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft, 758 m_pRenderStatus->m_pDevice->SetBitMask(m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft,
759 m_pQuickStretcher->m_ResultTo p, m_FillArgb); 759 m_pQuickStretcher->m_ResultTo p, m_FillArgb);
760 else 760 else
761 m_pRenderStatus->m_pDevice->SetDIBits(m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft, 761 m_pRenderStatus->m_pDevice->SetDIBits(m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft,
762 m_pQuickStretcher->m_ResultTop , m_BlendType); 762 m_pQuickStretcher->m_ResultTop , m_BlendType);
763 return FALSE; 763 return false;
764 } else if (m_Status == 2) { 764 } else if (m_Status == 2) {
765 if (m_pTransformer->Continue(pPause)) { 765 if (m_pTransformer->Continue(pPause)) {
766 return TRUE; 766 return true;
767 } 767 }
768 CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach(); 768 CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
769 if (pBitmap == NULL) { 769 if (pBitmap == NULL) {
770 return FALSE; 770 return false;
771 } 771 }
772 if (pBitmap->IsAlphaMask()) { 772 if (pBitmap->IsAlphaMask()) {
773 if (m_BitmapAlpha != 255) { 773 if (m_BitmapAlpha != 255) {
774 m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); 774 m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
775 } 775 }
776 m_Result = m_pRenderStatus->m_pDevice->SetBitMask(pBitmap, 776 m_Result = m_pRenderStatus->m_pDevice->SetBitMask(pBitmap,
777 m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop , m_FillArgb); 777 m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop , m_FillArgb);
778 } else { 778 } else {
779 if (m_BitmapAlpha != 255) { 779 if (m_BitmapAlpha != 255) {
780 pBitmap->MultiplyAlpha(m_BitmapAlpha); 780 pBitmap->MultiplyAlpha(m_BitmapAlpha);
781 } 781 }
782 m_Result = m_pRenderStatus->m_pDevice->SetDIBits(pBitmap, 782 m_Result = m_pRenderStatus->m_pDevice->SetDIBits(pBitmap,
783 m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop , m_BlendType); 783 m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop , m_BlendType);
784 } 784 }
785 delete pBitmap; 785 delete pBitmap;
786 return FALSE; 786 return false;
787 } else if (m_Status == 3) { 787 } else if (m_Status == 3) {
788 return m_pRenderStatus->m_pDevice->ContinueDIBits(m_DeviceHandle, pPause ); 788 return m_pRenderStatus->m_pDevice->ContinueDIBits(m_DeviceHandle, pPause );
789 } else if (m_Status == 4) { 789 } else if (m_Status == 4) {
790 if (m_Loader.Continue(m_LoadHandle, pPause)) { 790 if (m_Loader.Continue(m_LoadHandle, pPause)) {
791 return TRUE; 791 return true;
792 } 792 }
793 if (StartRenderDIBSource()) { 793 if (StartRenderDIBSource()) {
794 return Continue(pPause); 794 return Continue(pPause);
795 } 795 }
796 return FALSE; 796 return false;
797 } 797 }
798 return FALSE; 798 return false;
799 } 799 }
800 CPDF_QuickStretcher::CPDF_QuickStretcher() 800 CPDF_QuickStretcher::CPDF_QuickStretcher()
801 { 801 {
802 m_pBitmap = NULL; 802 m_pBitmap = NULL;
803 m_pDecoder = NULL; 803 m_pDecoder = NULL;
804 m_pCS = NULL; 804 m_pCS = NULL;
805 } 805 }
806 CPDF_QuickStretcher::~CPDF_QuickStretcher() 806 CPDF_QuickStretcher::~CPDF_QuickStretcher()
807 { 807 {
808 delete m_pBitmap; 808 delete m_pBitmap;
809 if (m_pCS) { 809 if (m_pCS) {
810 m_pCS->ReleaseCS(); 810 m_pCS->ReleaseCS();
811 } 811 }
812 delete m_pDecoder; 812 delete m_pDecoder;
813 } 813 }
814 ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(const uint8_t* src_buf, FX_DW ORD src_size, int width, int height, 814 ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(const uint8_t* src_buf, FX_DW ORD src_size, int width, int height,
815 int nComps, int bpc, const CPDF_Dictionary* pParams); 815 int nComps, int bpc, const CPDF_Dictionary* pParams);
816 FX_BOOL CPDF_QuickStretcher::Start(CPDF_ImageObject* pImageObj, CFX_AffineMatrix * pImage2Device, const FX_RECT* pClipBox) 816 bool CPDF_QuickStretcher::Start(CPDF_ImageObject* pImageObj, CFX_AffineMatrix* p Image2Device, const FX_RECT* pClipBox)
817 { 817 {
818 if (FXSYS_fabs(pImage2Device->a) < FXSYS_fabs(pImage2Device->b) * 10 && FXSY S_fabs(pImage2Device->d) < FXSYS_fabs(pImage2Device->c) * 10) { 818 if (FXSYS_fabs(pImage2Device->a) < FXSYS_fabs(pImage2Device->b) * 10 && FXSY S_fabs(pImage2Device->d) < FXSYS_fabs(pImage2Device->c) * 10) {
819 return FALSE; 819 return false;
820 } 820 }
821 CFX_FloatRect image_rect_f = pImage2Device->GetUnitRect(); 821 CFX_FloatRect image_rect_f = pImage2Device->GetUnitRect();
822 FX_RECT image_rect = image_rect_f.GetOutterRect(); 822 FX_RECT image_rect = image_rect_f.GetOutterRect();
823 m_DestWidth = image_rect.Width(); 823 m_DestWidth = image_rect.Width();
824 m_DestHeight = image_rect.Height(); 824 m_DestHeight = image_rect.Height();
825 m_bFlipX = pImage2Device->a < 0; 825 m_bFlipX = pImage2Device->a < 0;
826 m_bFlipY = pImage2Device->d > 0; 826 m_bFlipY = pImage2Device->d > 0;
827 FX_RECT result_rect = *pClipBox; 827 FX_RECT result_rect = *pClipBox;
828 result_rect.Intersect(image_rect); 828 result_rect.Intersect(image_rect);
829 if (result_rect.IsEmpty()) { 829 if (result_rect.IsEmpty()) {
830 return FALSE; 830 return false;
831 } 831 }
832 m_ResultWidth = result_rect.Width(); 832 m_ResultWidth = result_rect.Width();
833 m_ResultHeight = result_rect.Height(); 833 m_ResultHeight = result_rect.Height();
834 m_ResultLeft = result_rect.left; 834 m_ResultLeft = result_rect.left;
835 m_ResultTop = result_rect.top; 835 m_ResultTop = result_rect.top;
836 m_ClipLeft = result_rect.left - image_rect.left; 836 m_ClipLeft = result_rect.left - image_rect.left;
837 m_ClipTop = result_rect.top - image_rect.top; 837 m_ClipTop = result_rect.top - image_rect.top;
838 CPDF_Dictionary* pDict = pImageObj->m_pImage->GetDict(); 838 CPDF_Dictionary* pDict = pImageObj->m_pImage->GetDict();
839 if (pDict->GetInteger(FX_BSTRC("BitsPerComponent")) != 8) { 839 if (pDict->GetInteger(FX_BSTRC("BitsPerComponent")) != 8) {
840 return FALSE; 840 return false;
841 } 841 }
842 if (pDict->KeyExist(FX_BSTRC("SMask")) || pDict->KeyExist(FX_BSTRC("Mask"))) { 842 if (pDict->KeyExist(FX_BSTRC("SMask")) || pDict->KeyExist(FX_BSTRC("Mask"))) {
843 return FALSE; 843 return false;
844 } 844 }
845 m_SrcWidth = pDict->GetInteger(FX_BSTRC("Width")); 845 m_SrcWidth = pDict->GetInteger(FX_BSTRC("Width"));
846 m_SrcHeight = pDict->GetInteger(FX_BSTRC("Height")); 846 m_SrcHeight = pDict->GetInteger(FX_BSTRC("Height"));
847 m_pCS = NULL; 847 m_pCS = NULL;
848 m_Bpp = 3; 848 m_Bpp = 3;
849 CPDF_Object* pCSObj = pDict->GetElementValue(FX_BSTRC("ColorSpace")); 849 CPDF_Object* pCSObj = pDict->GetElementValue(FX_BSTRC("ColorSpace"));
850 if (pCSObj == NULL) { 850 if (pCSObj == NULL) {
851 return FALSE; 851 return false;
852 } 852 }
853 m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj); 853 m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj);
854 if (m_pCS == NULL) { 854 if (m_pCS == NULL) {
855 return FALSE; 855 return false;
856 } 856 }
857 if (!_IsSupported(m_pCS)) { 857 if (!_IsSupported(m_pCS)) {
858 return FALSE; 858 return false;
859 } 859 }
860 m_Bpp = m_pCS->CountComponents(); 860 m_Bpp = m_pCS->CountComponents();
861 if (m_pCS->sRGB()) { 861 if (m_pCS->sRGB()) {
862 m_pCS->ReleaseCS(); 862 m_pCS->ReleaseCS();
863 m_pCS = NULL; 863 m_pCS = NULL;
864 } 864 }
865 CPDF_Stream* pStream = pImageObj->m_pImage->GetStream(); 865 CPDF_Stream* pStream = pImageObj->m_pImage->GetStream();
866 m_StreamAcc.LoadAllData(pStream, FALSE, m_SrcWidth * m_SrcHeight * m_Bpp, TR UE); 866 m_StreamAcc.LoadAllData(pStream, false, m_SrcWidth * m_SrcHeight * m_Bpp, tr ue);
867 m_pDecoder = NULL; 867 m_pDecoder = NULL;
868 if (!m_StreamAcc.GetImageDecoder().IsEmpty()) { 868 if (!m_StreamAcc.GetImageDecoder().IsEmpty()) {
869 if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("DCTDecode")) { 869 if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("DCTDecode")) {
870 const CPDF_Dictionary* pParam = m_StreamAcc.GetImageParam(); 870 const CPDF_Dictionary* pParam = m_StreamAcc.GetImageParam();
871 m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder( 871 m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
872 m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_Src Width, m_SrcHeight, m_Bpp, 872 m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_Src Width, m_SrcHeight, m_Bpp,
873 pParam ? pParam->GetInteger(FX_BSTRC("ColorTransfor m"), 1) : 1); 873 pParam ? pParam->GetInteger(FX_BSTRC("ColorTransfor m"), 1) : 1);
874 } else if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("FlateDecode")) { 874 } else if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("FlateDecode")) {
875 m_pDecoder = FPDFAPI_CreateFlateDecoder( 875 m_pDecoder = FPDFAPI_CreateFlateDecoder(
876 m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_Src Width, m_SrcHeight, m_Bpp, 8, 876 m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_Src Width, m_SrcHeight, m_Bpp, 8,
877 m_StreamAcc.GetImageParam()); 877 m_StreamAcc.GetImageParam());
878 } else { 878 } else {
879 return FALSE; 879 return false;
880 } 880 }
881 m_pDecoder->DownScale(m_DestWidth, m_DestHeight); 881 m_pDecoder->DownScale(m_DestWidth, m_DestHeight);
882 } 882 }
883 m_pBitmap = new CFX_DIBitmap; 883 m_pBitmap = new CFX_DIBitmap;
884 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 884 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
885 m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb32); 885 m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb32);
886 #else 886 #else
887 m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb); 887 m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb);
888 #endif 888 #endif
889 m_LineIndex = 0; 889 m_LineIndex = 0;
890 return TRUE; 890 return true;
891 } 891 }
892 FX_BOOL CPDF_QuickStretcher::Continue(IFX_Pause* pPause) 892 bool CPDF_QuickStretcher::Continue(IFX_Pause* pPause)
893 { 893 {
894 uint8_t* result_buf = m_pBitmap->GetBuffer(); 894 uint8_t* result_buf = m_pBitmap->GetBuffer();
895 int src_width = m_pDecoder ? m_pDecoder->GetWidth() : m_SrcWidth; 895 int src_width = m_pDecoder ? m_pDecoder->GetWidth() : m_SrcWidth;
896 int src_height = m_pDecoder ? m_pDecoder->GetHeight() : m_SrcHeight; 896 int src_height = m_pDecoder ? m_pDecoder->GetHeight() : m_SrcHeight;
897 int src_pitch = src_width * m_Bpp; 897 int src_pitch = src_width * m_Bpp;
898 while (m_LineIndex < m_ResultHeight) { 898 while (m_LineIndex < m_ResultHeight) {
899 int dest_y, src_y; 899 int dest_y, src_y;
900 if (m_bFlipY) { 900 if (m_bFlipY) {
901 dest_y = m_ResultHeight - m_LineIndex - 1; 901 dest_y = m_ResultHeight - m_LineIndex - 1;
902 src_y = (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_D estHeight; 902 src_y = (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_D estHeight;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0); 936 m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0);
937 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 937 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
938 result_scan += 4; 938 result_scan += 4;
939 #else 939 #else
940 result_scan += 3; 940 result_scan += 3;
941 #endif 941 #endif
942 } 942 }
943 } 943 }
944 m_LineIndex ++; 944 m_LineIndex ++;
945 if (pPause && pPause->NeedToPauseNow()) { 945 if (pPause && pPause->NeedToPauseNow()) {
946 return TRUE; 946 return true;
947 } 947 }
948 } 948 }
949 return FALSE; 949 return false;
950 } 950 }
951 CFX_DIBitmap* CPDF_RenderStatus::LoadSMask(CPDF_Dictionary* pSMaskDict, 951 CFX_DIBitmap* CPDF_RenderStatus::LoadSMask(CPDF_Dictionary* pSMaskDict,
952 FX_RECT* pClipRect, const CFX_AffineMatrix* pMatrix) 952 FX_RECT* pClipRect, const CFX_AffineMatrix* pMatrix)
953 { 953 {
954 if (pSMaskDict == NULL) { 954 if (pSMaskDict == NULL) {
955 return NULL; 955 return NULL;
956 } 956 }
957 CFX_DIBitmap* pMask = NULL; 957 CFX_DIBitmap* pMask = NULL;
958 int width = pClipRect->right - pClipRect->left; 958 int width = pClipRect->right - pClipRect->left;
959 int height = pClipRect->bottom - pClipRect->top; 959 int height = pClipRect->bottom - pClipRect->top;
960 FX_BOOL bLuminosity = FALSE; 960 bool bLuminosity = false;
961 bLuminosity = pSMaskDict->GetConstString(FX_BSTRC("S")) != FX_BSTRC("Alpha") ; 961 bLuminosity = pSMaskDict->GetConstString(FX_BSTRC("S")) != FX_BSTRC("Alpha") ;
962 CPDF_Stream* pGroup = pSMaskDict->GetStream(FX_BSTRC("G")); 962 CPDF_Stream* pGroup = pSMaskDict->GetStream(FX_BSTRC("G"));
963 if (pGroup == NULL) { 963 if (pGroup == NULL) {
964 return NULL; 964 return NULL;
965 } 965 }
966 CPDF_Function* pFunc = NULL; 966 CPDF_Function* pFunc = NULL;
967 CPDF_Object* pFuncObj = pSMaskDict->GetElementValue(FX_BSTRC("TR")); 967 CPDF_Object* pFuncObj = pSMaskDict->GetElementValue(FX_BSTRC("TR"));
968 if (pFuncObj && (pFuncObj->GetType() == PDFOBJ_DICTIONARY || pFuncObj->GetTy pe() == PDFOBJ_STREAM)) { 968 if (pFuncObj && (pFuncObj->GetType() == PDFOBJ_DICTIONARY || pFuncObj->GetTy pe() == PDFOBJ_STREAM)) {
969 pFunc = CPDF_Function::Load(pFuncObj); 969 pFunc = CPDF_Function::Load(pFuncObj);
970 } 970 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 bitmap.Clear(0); 1023 bitmap.Clear(0);
1024 } 1024 }
1025 CPDF_Dictionary* pFormResource = NULL; 1025 CPDF_Dictionary* pFormResource = NULL;
1026 if (form.m_pFormDict) { 1026 if (form.m_pFormDict) {
1027 pFormResource = form.m_pFormDict->GetDict(FX_BSTRC("Resources")); 1027 pFormResource = form.m_pFormDict->GetDict(FX_BSTRC("Resources"));
1028 } 1028 }
1029 CPDF_RenderOptions options; 1029 CPDF_RenderOptions options;
1030 options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA ; 1030 options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA ;
1031 CPDF_RenderStatus status; 1031 CPDF_RenderStatus status;
1032 status.Initialize(m_pContext, &bitmap_device, NULL, NULL, NULL, NULL, 1032 status.Initialize(m_pContext, &bitmap_device, NULL, NULL, NULL, NULL,
1033 &options, 0, m_bDropObjects, pFormResource, TRUE, NULL, 0, pCS ? pCS->GetFamily() : 0, bLuminosity); 1033 &options, 0, m_bDropObjects, pFormResource, true, NULL, 0, pCS ? pCS->GetFamily() : 0, bLuminosity);
1034 status.RenderObjectList(&form, &matrix); 1034 status.RenderObjectList(&form, &matrix);
1035 pMask = new CFX_DIBitmap; 1035 pMask = new CFX_DIBitmap;
1036 if (!pMask->Create(width, height, FXDIB_8bppMask)) { 1036 if (!pMask->Create(width, height, FXDIB_8bppMask)) {
1037 delete pMask; 1037 delete pMask;
1038 return NULL; 1038 return NULL;
1039 } 1039 }
1040 uint8_t* dest_buf = pMask->GetBuffer(); 1040 uint8_t* dest_buf = pMask->GetBuffer();
1041 int dest_pitch = pMask->GetPitch(); 1041 int dest_pitch = pMask->GetPitch();
1042 uint8_t* src_buf = bitmap.GetBuffer(); 1042 uint8_t* src_buf = bitmap.GetBuffer();
1043 int src_pitch = bitmap.GetPitch(); 1043 int src_pitch = bitmap.GetPitch();
(...skipping 26 matching lines...) Expand all
1070 for (int i = 0; i < size; i ++) { 1070 for (int i = 0; i < size; i ++) {
1071 dest_buf[i] = pTransfer[src_buf[i]]; 1071 dest_buf[i] = pTransfer[src_buf[i]];
1072 } 1072 }
1073 } else { 1073 } else {
1074 FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height); 1074 FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height);
1075 } 1075 }
1076 delete pFunc; 1076 delete pFunc;
1077 FX_Free(pTransfer); 1077 FX_Free(pTransfer);
1078 return pMask; 1078 return pMask;
1079 } 1079 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp ('k') | core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698