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 "../../../include/fxge/fx_ge.h" | 7 #include "../../../include/fxge/fx_ge.h" |
8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ | 8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ |
9 #include <windows.h> | 9 #include <windows.h> |
10 #include "../../../include/fxge/fx_ge_win32.h" | 10 #include "../../../include/fxge/fx_ge_win32.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect(); | 114 CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect(); |
115 FX_RECT full_rect = unit_rect.GetOutterRect(); | 115 FX_RECT full_rect = unit_rect.GetOutterRect(); |
116 int full_left = full_rect.left; | 116 int full_left = full_rect.left; |
117 int full_top = full_rect.top; | 117 int full_top = full_rect.top; |
118 CFX_DIBExtractor src_bitmap(pSrc); | 118 CFX_DIBExtractor src_bitmap(pSrc); |
119 CFX_DIBitmap* pSrcBitmap = src_bitmap; | 119 CFX_DIBitmap* pSrcBitmap = src_bitmap; |
120 if (pSrcBitmap == NULL) { | 120 if (pSrcBitmap == NULL) { |
121 return NULL; | 121 return NULL; |
122 } | 122 } |
123 int src_width = pSrcBitmap->GetWidth(), src_height = pSrcBitmap->GetHeight()
; | 123 int src_width = pSrcBitmap->GetWidth(), src_height = pSrcBitmap->GetHeight()
; |
124 FX_LPBYTE src_buf = pSrcBitmap->GetBuffer(); | 124 uint8_t* src_buf = pSrcBitmap->GetBuffer(); |
125 FX_DWORD src_pitch = pSrcBitmap->GetPitch(); | 125 FX_DWORD src_pitch = pSrcBitmap->GetPitch(); |
126 FX_FLOAT dest_area = pDestMatrix->GetUnitArea(); | 126 FX_FLOAT dest_area = pDestMatrix->GetUnitArea(); |
127 FX_FLOAT area_scale = FXSYS_Div((FX_FLOAT)(src_width * src_height), dest_are
a); | 127 FX_FLOAT area_scale = FXSYS_Div((FX_FLOAT)(src_width * src_height), dest_are
a); |
128 FX_FLOAT size_scale = FXSYS_sqrt(area_scale); | 128 FX_FLOAT size_scale = FXSYS_sqrt(area_scale); |
129 CFX_AffineMatrix adjusted_matrix(*pDestMatrix); | 129 CFX_AffineMatrix adjusted_matrix(*pDestMatrix); |
130 adjusted_matrix.Scale(size_scale, size_scale); | 130 adjusted_matrix.Scale(size_scale, size_scale); |
131 CFX_FloatRect result_rect_f = adjusted_matrix.GetUnitRect(); | 131 CFX_FloatRect result_rect_f = adjusted_matrix.GetUnitRect(); |
132 FX_RECT result_rect = result_rect_f.GetOutterRect(); | 132 FX_RECT result_rect = result_rect_f.GetOutterRect(); |
133 CFX_AffineMatrix src2result; | 133 CFX_AffineMatrix src2result; |
134 src2result.e = adjusted_matrix.c + adjusted_matrix.e; | 134 src2result.e = adjusted_matrix.c + adjusted_matrix.e; |
(...skipping 10 matching lines...) Expand all Loading... |
145 int result_height = result_rect.Height(); | 145 int result_height = result_rect.Height(); |
146 CFX_DIBitmap* pTempBitmap = new CFX_DIBitmap; | 146 CFX_DIBitmap* pTempBitmap = new CFX_DIBitmap; |
147 if (!pTempBitmap->Create(result_width, result_height, pSrc->GetFormat())) { | 147 if (!pTempBitmap->Create(result_width, result_height, pSrc->GetFormat())) { |
148 delete pTempBitmap; | 148 delete pTempBitmap; |
149 if (pSrcBitmap != src_bitmap) { | 149 if (pSrcBitmap != src_bitmap) { |
150 delete pSrcBitmap; | 150 delete pSrcBitmap; |
151 } | 151 } |
152 return NULL; | 152 return NULL; |
153 } | 153 } |
154 pTempBitmap->CopyPalette(pSrc->GetPalette()); | 154 pTempBitmap->CopyPalette(pSrc->GetPalette()); |
155 FX_LPBYTE dest_buf = pTempBitmap->GetBuffer(); | 155 uint8_t* dest_buf = pTempBitmap->GetBuffer(); |
156 int dest_pitch = pTempBitmap->GetPitch(); | 156 int dest_pitch = pTempBitmap->GetPitch(); |
157 FXSYS_memset8(dest_buf, pSrc->IsAlphaMask() ? 0 : 0xff, dest_pitch * result_
height); | 157 FXSYS_memset8(dest_buf, pSrc->IsAlphaMask() ? 0 : 0xff, dest_pitch * result_
height); |
158 if (pSrcBitmap->IsAlphaMask()) { | 158 if (pSrcBitmap->IsAlphaMask()) { |
159 for (int dest_y = 0; dest_y < result_height; dest_y ++) { | 159 for (int dest_y = 0; dest_y < result_height; dest_y ++) { |
160 FX_LPBYTE dest_scan = dest_buf + dest_y * dest_pitch; | 160 uint8_t* dest_scan = dest_buf + dest_y * dest_pitch; |
161 for (int dest_x = 0; dest_x < result_width; dest_x ++) { | 161 for (int dest_x = 0; dest_x < result_width; dest_x ++) { |
162 int src_x, src_y; | 162 int src_x, src_y; |
163 result2src_fix.Transform(dest_x, dest_y, src_x, src_y); | 163 result2src_fix.Transform(dest_x, dest_y, src_x, src_y); |
164 if (src_x < 0 || src_x >= src_width || src_y < 0 || src_y >= src
_height) { | 164 if (src_x < 0 || src_x >= src_width || src_y < 0 || src_y >= src
_height) { |
165 continue; | 165 continue; |
166 } | 166 } |
167 if (!((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_
x % 8)))) { | 167 if (!((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_
x % 8)))) { |
168 continue; | 168 continue; |
169 } | 169 } |
170 dest_scan[dest_x / 8] |= 1 << (7 - dest_x % 8); | 170 dest_scan[dest_x / 8] |= 1 << (7 - dest_x % 8); |
171 } | 171 } |
172 } | 172 } |
173 } else { | 173 } else { |
174 for (int dest_y = 0; dest_y < result_height; dest_y ++) { | 174 for (int dest_y = 0; dest_y < result_height; dest_y ++) { |
175 FX_LPBYTE dest_scan = dest_buf + dest_y * dest_pitch; | 175 uint8_t* dest_scan = dest_buf + dest_y * dest_pitch; |
176 for (int dest_x = 0; dest_x < result_width; dest_x ++) { | 176 for (int dest_x = 0; dest_x < result_width; dest_x ++) { |
177 int src_x, src_y; | 177 int src_x, src_y; |
178 result2src_fix.Transform(dest_x, dest_y, src_x, src_y); | 178 result2src_fix.Transform(dest_x, dest_y, src_x, src_y); |
179 if (src_x < 0 || src_x >= src_width || src_y < 0 || src_y >= src
_height) { | 179 if (src_x < 0 || src_x >= src_width || src_y < 0 || src_y >= src
_height) { |
180 continue; | 180 continue; |
181 } | 181 } |
182 if ((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_x
% 8))) { | 182 if ((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_x
% 8))) { |
183 continue; | 183 continue; |
184 } | 184 } |
185 dest_scan[dest_x / 8] &= ~(1 << (7 - dest_x % 8)); | 185 dest_scan[dest_x / 8] &= ~(1 << (7 - dest_x % 8)); |
186 } | 186 } |
187 } | 187 } |
188 } | 188 } |
189 if (pSrcBitmap != src_bitmap) { | 189 if (pSrcBitmap != src_bitmap) { |
190 delete pSrcBitmap; | 190 delete pSrcBitmap; |
191 } | 191 } |
192 return pTempBitmap; | 192 return pTempBitmap; |
193 } | 193 } |
194 FX_BOOL CGdiPrinterDriver::StartDIBits(const CFX_DIBSource* pSource, int bitmap_
alpha, FX_DWORD color, | 194 FX_BOOL CGdiPrinterDriver::StartDIBits(const CFX_DIBSource* pSource, int bitmap_
alpha, FX_DWORD color, |
195 const CFX_AffineMatrix* pMatrix, FX_DWORD
render_flags, FX_LPVOID& handle, | 195 const CFX_AffineMatrix* pMatrix, FX_DWORD
render_flags, void*& handle, |
196 int alpha_flag, void* pIccTransform, int
blend_type) | 196 int alpha_flag, void* pIccTransform, int
blend_type) |
197 { | 197 { |
198 if (bitmap_alpha < 255 || pSource->HasAlpha() || (pSource->IsAlphaMask() &&
(pSource->GetBPP() != 1 || !m_bSupportROP))) { | 198 if (bitmap_alpha < 255 || pSource->HasAlpha() || (pSource->IsAlphaMask() &&
(pSource->GetBPP() != 1 || !m_bSupportROP))) { |
199 return FALSE; | 199 return FALSE; |
200 } | 200 } |
201 CFX_FloatRect unit_rect = pMatrix->GetUnitRect(); | 201 CFX_FloatRect unit_rect = pMatrix->GetUnitRect(); |
202 FX_RECT full_rect = unit_rect.GetOutterRect(); | 202 FX_RECT full_rect = unit_rect.GetOutterRect(); |
203 if (FXSYS_fabs(pMatrix->b) < 0.5f && pMatrix->a != 0 && FXSYS_fabs(pMatrix->
c) < 0.5f && pMatrix->d != 0) { | 203 if (FXSYS_fabs(pMatrix->b) < 0.5f && pMatrix->a != 0 && FXSYS_fabs(pMatrix->
c) < 0.5f && pMatrix->d != 0) { |
204 FX_BOOL bFlipX = pMatrix->a < 0; | 204 FX_BOOL bFlipX = pMatrix->a < 0; |
205 FX_BOOL bFlipY = pMatrix->d > 0; | 205 FX_BOOL bFlipY = pMatrix->d > 0; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 CPSOutput::~CPSOutput() | 243 CPSOutput::~CPSOutput() |
244 { | 244 { |
245 if (m_pBuf) { | 245 if (m_pBuf) { |
246 FX_Free(m_pBuf); | 246 FX_Free(m_pBuf); |
247 } | 247 } |
248 } | 248 } |
249 void CPSOutput::Init() | 249 void CPSOutput::Init() |
250 { | 250 { |
251 m_pBuf = FX_Alloc(FX_CHAR, 1026); | 251 m_pBuf = FX_Alloc(FX_CHAR, 1026); |
252 } | 252 } |
253 void CPSOutput::OutputPS(FX_LPCSTR string, int len) | 253 void CPSOutput::OutputPS(const FX_CHAR* string, int len) |
254 { | 254 { |
255 if (len < 0) { | 255 if (len < 0) { |
256 len = (int)FXSYS_strlen(string); | 256 len = (int)FXSYS_strlen(string); |
257 } | 257 } |
258 int sent_len = 0; | 258 int sent_len = 0; |
259 while (len > 0) { | 259 while (len > 0) { |
260 int send_len = len > 1024 ? 1024 : len; | 260 int send_len = len > 1024 ? 1024 : len; |
261 *(FX_WORD*)m_pBuf = send_len; | 261 *(FX_WORD*)m_pBuf = send_len; |
262 FXSYS_memcpy(m_pBuf + 2, string + sent_len, send_len); | 262 FXSYS_memcpy(m_pBuf + 2, string + sent_len, send_len); |
263 int ret = ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, m_pBuf, 0, NULL); | 263 int ret = ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, m_pBuf, 0, NULL); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 FX_BOOL CPSPrinterDriver::StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD c
olor, int dest_left, int dest_top, | 386 FX_BOOL CPSPrinterDriver::StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD c
olor, int dest_left, int dest_top, |
387 int dest_width, int dest_height, const F
X_RECT* pClipRect, FX_DWORD flags, | 387 int dest_width, int dest_height, const F
X_RECT* pClipRect, FX_DWORD flags, |
388 int alpha_flag, void* pIccTransform, int
blend_type) | 388 int alpha_flag, void* pIccTransform, int
blend_type) |
389 { | 389 { |
390 if (blend_type != FXDIB_BLEND_NORMAL) { | 390 if (blend_type != FXDIB_BLEND_NORMAL) { |
391 return FALSE; | 391 return FALSE; |
392 } | 392 } |
393 return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top, dest_
width, dest_height, flags, alpha_flag, pIccTransform); | 393 return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top, dest_
width, dest_height, flags, alpha_flag, pIccTransform); |
394 } | 394 } |
395 FX_BOOL CPSPrinterDriver::StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_a
lpha, FX_DWORD color, | 395 FX_BOOL CPSPrinterDriver::StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_a
lpha, FX_DWORD color, |
396 const CFX_AffineMatrix* pMatrix, FX_DWORD
render_flags, FX_LPVOID& handle, | 396 const CFX_AffineMatrix* pMatrix, FX_DWORD
render_flags, void*& handle, |
397 int alpha_flag, void* pIccTransform, int b
lend_type) | 397 int alpha_flag, void* pIccTransform, int b
lend_type) |
398 { | 398 { |
399 if (blend_type != FXDIB_BLEND_NORMAL) { | 399 if (blend_type != FXDIB_BLEND_NORMAL) { |
400 return FALSE; | 400 return FALSE; |
401 } | 401 } |
402 if (bitmap_alpha < 255) { | 402 if (bitmap_alpha < 255) { |
403 return FALSE; | 403 return FALSE; |
404 } | 404 } |
405 handle = NULL; | 405 handle = NULL; |
406 return m_PSRenderer.DrawDIBits(pBitmap, color, pMatrix, render_flags, alpha_
flag, pIccTransform); | 406 return m_PSRenderer.DrawDIBits(pBitmap, color, pMatrix, render_flags, alpha_
flag, pIccTransform); |
407 } | 407 } |
408 FX_BOOL CPSPrinterDriver::DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pChar
Pos, CFX_Font* pFont, | 408 FX_BOOL CPSPrinterDriver::DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pChar
Pos, CFX_Font* pFont, |
409 CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT
font_size, FX_DWORD color, | 409 CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT
font_size, FX_DWORD color, |
410 int alpha_flag, void* pIccTransform) | 410 int alpha_flag, void* pIccTransform) |
411 { | 411 { |
412 return m_PSRenderer.DrawText(nChars, pCharPos, pFont, pCache, pObject2Device
, font_size, color, alpha_flag, pIccTransform); | 412 return m_PSRenderer.DrawText(nChars, pCharPos, pFont, pCache, pObject2Device
, font_size, color, alpha_flag, pIccTransform); |
413 } | 413 } |
414 #endif | 414 #endif |
OLD | NEW |