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 "core/include/fxge/fx_ge.h" | 7 #include "core/include/fxge/fx_ge.h" |
8 | 8 |
9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ | 9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... |
27 int CGdiPrinterDriver::GetDeviceCaps(int caps_id) { | 27 int CGdiPrinterDriver::GetDeviceCaps(int caps_id) { |
28 if (caps_id == FXDC_HORZ_SIZE) { | 28 if (caps_id == FXDC_HORZ_SIZE) { |
29 return m_HorzSize; | 29 return m_HorzSize; |
30 } | 30 } |
31 if (caps_id == FXDC_VERT_SIZE) { | 31 if (caps_id == FXDC_VERT_SIZE) { |
32 return m_VertSize; | 32 return m_VertSize; |
33 } | 33 } |
34 return CGdiDeviceDriver::GetDeviceCaps(caps_id); | 34 return CGdiDeviceDriver::GetDeviceCaps(caps_id); |
35 } | 35 } |
36 FX_BOOL CGdiPrinterDriver::SetDIBits(const CFX_DIBSource* pSource, | 36 FX_BOOL CGdiPrinterDriver::SetDIBits(const CFX_DIBSource* pSource, |
37 FX_DWORD color, | 37 uint32_t color, |
38 const FX_RECT* pSrcRect, | 38 const FX_RECT* pSrcRect, |
39 int left, | 39 int left, |
40 int top, | 40 int top, |
41 int blend_type, | 41 int blend_type, |
42 int alpha_flag, | 42 int alpha_flag, |
43 void* pIccTransform) { | 43 void* pIccTransform) { |
44 if (pSource->IsAlphaMask()) { | 44 if (pSource->IsAlphaMask()) { |
45 FX_RECT clip_rect(left, top, left + pSrcRect->Width(), | 45 FX_RECT clip_rect(left, top, left + pSrcRect->Width(), |
46 top + pSrcRect->Height()); | 46 top + pSrcRect->Height()); |
47 return StretchDIBits(pSource, color, left - pSrcRect->left, | 47 return StretchDIBits(pSource, color, left - pSrcRect->left, |
48 top - pSrcRect->top, pSource->GetWidth(), | 48 top - pSrcRect->top, pSource->GetWidth(), |
49 pSource->GetHeight(), &clip_rect, 0, alpha_flag, | 49 pSource->GetHeight(), &clip_rect, 0, alpha_flag, |
50 pIccTransform, FXDIB_BLEND_NORMAL); | 50 pIccTransform, FXDIB_BLEND_NORMAL); |
51 } | 51 } |
52 ASSERT(pSource && !pSource->IsAlphaMask() && pSrcRect); | 52 ASSERT(pSource && !pSource->IsAlphaMask() && pSrcRect); |
53 ASSERT(blend_type == FXDIB_BLEND_NORMAL); | 53 ASSERT(blend_type == FXDIB_BLEND_NORMAL); |
54 if (pSource->HasAlpha()) { | 54 if (pSource->HasAlpha()) { |
55 return FALSE; | 55 return FALSE; |
56 } | 56 } |
57 CFX_DIBExtractor temp(pSource); | 57 CFX_DIBExtractor temp(pSource); |
58 CFX_DIBitmap* pBitmap = temp; | 58 CFX_DIBitmap* pBitmap = temp; |
59 if (!pBitmap) { | 59 if (!pBitmap) { |
60 return FALSE; | 60 return FALSE; |
61 } | 61 } |
62 return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform); | 62 return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform); |
63 } | 63 } |
64 FX_BOOL CGdiPrinterDriver::StretchDIBits(const CFX_DIBSource* pSource, | 64 FX_BOOL CGdiPrinterDriver::StretchDIBits(const CFX_DIBSource* pSource, |
65 FX_DWORD color, | 65 uint32_t color, |
66 int dest_left, | 66 int dest_left, |
67 int dest_top, | 67 int dest_top, |
68 int dest_width, | 68 int dest_width, |
69 int dest_height, | 69 int dest_height, |
70 const FX_RECT* pClipRect, | 70 const FX_RECT* pClipRect, |
71 FX_DWORD flags, | 71 uint32_t flags, |
72 int alpha_flag, | 72 int alpha_flag, |
73 void* pIccTransform, | 73 void* pIccTransform, |
74 int blend_type) { | 74 int blend_type) { |
75 if (pSource->IsAlphaMask()) { | 75 if (pSource->IsAlphaMask()) { |
76 int alpha = FXGETFLAG_COLORTYPE(alpha_flag) | 76 int alpha = FXGETFLAG_COLORTYPE(alpha_flag) |
77 ? FXGETFLAG_ALPHA_FILL(alpha_flag) | 77 ? FXGETFLAG_ALPHA_FILL(alpha_flag) |
78 : FXARGB_A(color); | 78 : FXARGB_A(color); |
79 if (pSource->GetBPP() != 1 || alpha != 255 || !m_bSupportROP) { | 79 if (pSource->GetBPP() != 1 || alpha != 255 || !m_bSupportROP) { |
80 return FALSE; | 80 return FALSE; |
81 } | 81 } |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 ASSERT(pSrc->GetFormat() == FXDIB_1bppRgb || | 140 ASSERT(pSrc->GetFormat() == FXDIB_1bppRgb || |
141 pSrc->GetFormat() == FXDIB_1bppMask || | 141 pSrc->GetFormat() == FXDIB_1bppMask || |
142 pSrc->GetFormat() == FXDIB_1bppCmyk); | 142 pSrc->GetFormat() == FXDIB_1bppCmyk); |
143 CFX_DIBExtractor src_bitmap(pSrc); | 143 CFX_DIBExtractor src_bitmap(pSrc); |
144 CFX_DIBitmap* pSrcBitmap = src_bitmap; | 144 CFX_DIBitmap* pSrcBitmap = src_bitmap; |
145 if (!pSrcBitmap) { | 145 if (!pSrcBitmap) { |
146 return NULL; | 146 return NULL; |
147 } | 147 } |
148 int src_width = pSrcBitmap->GetWidth(), src_height = pSrcBitmap->GetHeight(); | 148 int src_width = pSrcBitmap->GetWidth(), src_height = pSrcBitmap->GetHeight(); |
149 uint8_t* src_buf = pSrcBitmap->GetBuffer(); | 149 uint8_t* src_buf = pSrcBitmap->GetBuffer(); |
150 FX_DWORD src_pitch = pSrcBitmap->GetPitch(); | 150 uint32_t src_pitch = pSrcBitmap->GetPitch(); |
151 FX_FLOAT dest_area = pDestMatrix->GetUnitArea(); | 151 FX_FLOAT dest_area = pDestMatrix->GetUnitArea(); |
152 FX_FLOAT area_scale = ((FX_FLOAT)(src_width * src_height)) / dest_area; | 152 FX_FLOAT area_scale = ((FX_FLOAT)(src_width * src_height)) / dest_area; |
153 FX_FLOAT size_scale = FXSYS_sqrt(area_scale); | 153 FX_FLOAT size_scale = FXSYS_sqrt(area_scale); |
154 CFX_Matrix adjusted_matrix(*pDestMatrix); | 154 CFX_Matrix adjusted_matrix(*pDestMatrix); |
155 adjusted_matrix.Scale(size_scale, size_scale); | 155 adjusted_matrix.Scale(size_scale, size_scale); |
156 CFX_FloatRect result_rect_f = adjusted_matrix.GetUnitRect(); | 156 CFX_FloatRect result_rect_f = adjusted_matrix.GetUnitRect(); |
157 FX_RECT result_rect = result_rect_f.GetOutterRect(); | 157 FX_RECT result_rect = result_rect_f.GetOutterRect(); |
158 CFX_Matrix src2result; | 158 CFX_Matrix src2result; |
159 src2result.e = adjusted_matrix.c + adjusted_matrix.e; | 159 src2result.e = adjusted_matrix.c + adjusted_matrix.e; |
160 src2result.f = adjusted_matrix.d + adjusted_matrix.f; | 160 src2result.f = adjusted_matrix.d + adjusted_matrix.f; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 } | 215 } |
216 } | 216 } |
217 } | 217 } |
218 if (pSrcBitmap != src_bitmap) { | 218 if (pSrcBitmap != src_bitmap) { |
219 delete pSrcBitmap; | 219 delete pSrcBitmap; |
220 } | 220 } |
221 return pTempBitmap; | 221 return pTempBitmap; |
222 } | 222 } |
223 FX_BOOL CGdiPrinterDriver::StartDIBits(const CFX_DIBSource* pSource, | 223 FX_BOOL CGdiPrinterDriver::StartDIBits(const CFX_DIBSource* pSource, |
224 int bitmap_alpha, | 224 int bitmap_alpha, |
225 FX_DWORD color, | 225 uint32_t color, |
226 const CFX_Matrix* pMatrix, | 226 const CFX_Matrix* pMatrix, |
227 FX_DWORD render_flags, | 227 uint32_t render_flags, |
228 void*& handle, | 228 void*& handle, |
229 int alpha_flag, | 229 int alpha_flag, |
230 void* pIccTransform, | 230 void* pIccTransform, |
231 int blend_type) { | 231 int blend_type) { |
232 if (bitmap_alpha < 255 || pSource->HasAlpha() || | 232 if (bitmap_alpha < 255 || pSource->HasAlpha() || |
233 (pSource->IsAlphaMask() && (pSource->GetBPP() != 1 || !m_bSupportROP))) { | 233 (pSource->IsAlphaMask() && (pSource->GetBPP() != 1 || !m_bSupportROP))) { |
234 return FALSE; | 234 return FALSE; |
235 } | 235 } |
236 CFX_FloatRect unit_rect = pMatrix->GetUnitRect(); | 236 CFX_FloatRect unit_rect = pMatrix->GetUnitRect(); |
237 FX_RECT full_rect = unit_rect.GetOutterRect(); | 237 FX_RECT full_rect = unit_rect.GetOutterRect(); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 HRGN hRgn = ::CreateRectRgn(0, 0, 1, 1); | 323 HRGN hRgn = ::CreateRectRgn(0, 0, 1, 1); |
324 int ret = ::GetClipRgn(hDC, hRgn); | 324 int ret = ::GetClipRgn(hDC, hRgn); |
325 if (ret == 1) { | 325 if (ret == 1) { |
326 ret = ::GetRegionData(hRgn, 0, NULL); | 326 ret = ::GetRegionData(hRgn, 0, NULL); |
327 if (ret) { | 327 if (ret) { |
328 RGNDATA* pData = (RGNDATA*)FX_Alloc(uint8_t, ret); | 328 RGNDATA* pData = (RGNDATA*)FX_Alloc(uint8_t, ret); |
329 ret = ::GetRegionData(hRgn, ret, pData); | 329 ret = ::GetRegionData(hRgn, ret, pData); |
330 if (ret) { | 330 if (ret) { |
331 CFX_PathData path; | 331 CFX_PathData path; |
332 path.AllocPointCount(pData->rdh.nCount * 5); | 332 path.AllocPointCount(pData->rdh.nCount * 5); |
333 for (FX_DWORD i = 0; i < pData->rdh.nCount; i++) { | 333 for (uint32_t i = 0; i < pData->rdh.nCount; i++) { |
334 RECT* pRect = (RECT*)(pData->Buffer + pData->rdh.nRgnSize * i); | 334 RECT* pRect = (RECT*)(pData->Buffer + pData->rdh.nRgnSize * i); |
335 path.AppendRect((FX_FLOAT)pRect->left, (FX_FLOAT)pRect->bottom, | 335 path.AppendRect((FX_FLOAT)pRect->left, (FX_FLOAT)pRect->bottom, |
336 (FX_FLOAT)pRect->right, (FX_FLOAT)pRect->top); | 336 (FX_FLOAT)pRect->right, (FX_FLOAT)pRect->top); |
337 } | 337 } |
338 m_PSRenderer.SetClip_PathFill(&path, NULL, FXFILL_WINDING); | 338 m_PSRenderer.SetClip_PathFill(&path, NULL, FXFILL_WINDING); |
339 } | 339 } |
340 FX_Free(pData); | 340 FX_Free(pData); |
341 } | 341 } |
342 } | 342 } |
343 ::DeleteObject(hRgn); | 343 ::DeleteObject(hRgn); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 } | 401 } |
402 return m_PSRenderer.DrawPath(pPathData, pObject2Device, pGraphState, | 402 return m_PSRenderer.DrawPath(pPathData, pObject2Device, pGraphState, |
403 fill_color, stroke_color, fill_mode & 3, | 403 fill_color, stroke_color, fill_mode & 3, |
404 alpha_flag, pIccTransform); | 404 alpha_flag, pIccTransform); |
405 } | 405 } |
406 FX_BOOL CPSPrinterDriver::GetClipBox(FX_RECT* pRect) { | 406 FX_BOOL CPSPrinterDriver::GetClipBox(FX_RECT* pRect) { |
407 *pRect = m_PSRenderer.GetClipBox(); | 407 *pRect = m_PSRenderer.GetClipBox(); |
408 return TRUE; | 408 return TRUE; |
409 } | 409 } |
410 FX_BOOL CPSPrinterDriver::SetDIBits(const CFX_DIBSource* pBitmap, | 410 FX_BOOL CPSPrinterDriver::SetDIBits(const CFX_DIBSource* pBitmap, |
411 FX_DWORD color, | 411 uint32_t color, |
412 const FX_RECT* pSrcRect, | 412 const FX_RECT* pSrcRect, |
413 int left, | 413 int left, |
414 int top, | 414 int top, |
415 int blend_type, | 415 int blend_type, |
416 int alpha_flag, | 416 int alpha_flag, |
417 void* pIccTransform) { | 417 void* pIccTransform) { |
418 if (blend_type != FXDIB_BLEND_NORMAL) { | 418 if (blend_type != FXDIB_BLEND_NORMAL) { |
419 return FALSE; | 419 return FALSE; |
420 } | 420 } |
421 return m_PSRenderer.SetDIBits(pBitmap, color, left, top, alpha_flag, | 421 return m_PSRenderer.SetDIBits(pBitmap, color, left, top, alpha_flag, |
422 pIccTransform); | 422 pIccTransform); |
423 } | 423 } |
424 FX_BOOL CPSPrinterDriver::StretchDIBits(const CFX_DIBSource* pBitmap, | 424 FX_BOOL CPSPrinterDriver::StretchDIBits(const CFX_DIBSource* pBitmap, |
425 FX_DWORD color, | 425 uint32_t color, |
426 int dest_left, | 426 int dest_left, |
427 int dest_top, | 427 int dest_top, |
428 int dest_width, | 428 int dest_width, |
429 int dest_height, | 429 int dest_height, |
430 const FX_RECT* pClipRect, | 430 const FX_RECT* pClipRect, |
431 FX_DWORD flags, | 431 uint32_t flags, |
432 int alpha_flag, | 432 int alpha_flag, |
433 void* pIccTransform, | 433 void* pIccTransform, |
434 int blend_type) { | 434 int blend_type) { |
435 if (blend_type != FXDIB_BLEND_NORMAL) { | 435 if (blend_type != FXDIB_BLEND_NORMAL) { |
436 return FALSE; | 436 return FALSE; |
437 } | 437 } |
438 return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top, | 438 return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top, |
439 dest_width, dest_height, flags, alpha_flag, | 439 dest_width, dest_height, flags, alpha_flag, |
440 pIccTransform); | 440 pIccTransform); |
441 } | 441 } |
442 FX_BOOL CPSPrinterDriver::StartDIBits(const CFX_DIBSource* pBitmap, | 442 FX_BOOL CPSPrinterDriver::StartDIBits(const CFX_DIBSource* pBitmap, |
443 int bitmap_alpha, | 443 int bitmap_alpha, |
444 FX_DWORD color, | 444 uint32_t color, |
445 const CFX_Matrix* pMatrix, | 445 const CFX_Matrix* pMatrix, |
446 FX_DWORD render_flags, | 446 uint32_t render_flags, |
447 void*& handle, | 447 void*& handle, |
448 int alpha_flag, | 448 int alpha_flag, |
449 void* pIccTransform, | 449 void* pIccTransform, |
450 int blend_type) { | 450 int blend_type) { |
451 if (blend_type != FXDIB_BLEND_NORMAL) { | 451 if (blend_type != FXDIB_BLEND_NORMAL) { |
452 return FALSE; | 452 return FALSE; |
453 } | 453 } |
454 if (bitmap_alpha < 255) { | 454 if (bitmap_alpha < 255) { |
455 return FALSE; | 455 return FALSE; |
456 } | 456 } |
457 handle = NULL; | 457 handle = NULL; |
458 return m_PSRenderer.DrawDIBits(pBitmap, color, pMatrix, render_flags, | 458 return m_PSRenderer.DrawDIBits(pBitmap, color, pMatrix, render_flags, |
459 alpha_flag, pIccTransform); | 459 alpha_flag, pIccTransform); |
460 } | 460 } |
461 FX_BOOL CPSPrinterDriver::DrawDeviceText(int nChars, | 461 FX_BOOL CPSPrinterDriver::DrawDeviceText(int nChars, |
462 const FXTEXT_CHARPOS* pCharPos, | 462 const FXTEXT_CHARPOS* pCharPos, |
463 CFX_Font* pFont, | 463 CFX_Font* pFont, |
464 CFX_FontCache* pCache, | 464 CFX_FontCache* pCache, |
465 const CFX_Matrix* pObject2Device, | 465 const CFX_Matrix* pObject2Device, |
466 FX_FLOAT font_size, | 466 FX_FLOAT font_size, |
467 FX_DWORD color, | 467 uint32_t color, |
468 int alpha_flag, | 468 int alpha_flag, |
469 void* pIccTransform) { | 469 void* pIccTransform) { |
470 return m_PSRenderer.DrawText(nChars, pCharPos, pFont, pCache, pObject2Device, | 470 return m_PSRenderer.DrawText(nChars, pCharPos, pFont, pCache, pObject2Device, |
471 font_size, color, alpha_flag, pIccTransform); | 471 font_size, color, alpha_flag, pIccTransform); |
472 } | 472 } |
473 #endif | 473 #endif |
OLD | NEW |