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

Side by Side Diff: core/src/fxge/agg/fx_agg_driver.cpp

Issue 1773593007: Move fx_agg_driver files up one level (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 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 "core/src/fxge/agg/include/fx_agg_driver.h" 7 #include "core/src/fxge/agg/fx_agg_driver.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "core/include/fxcodec/fx_codec.h" 11 #include "core/include/fxcodec/fx_codec.h"
12 #include "core/include/fxge/fx_ge.h" 12 #include "core/include/fxge/fx_ge.h"
13 #include "core/src/fxge/dib/dib_int.h" 13 #include "core/src/fxge/dib/dib_int.h"
14 #include "core/src/fxge/ge/fx_text_int.h" 14 #include "core/src/fxge/ge/fx_text_int.h"
15 #include "third_party/agg23/agg_conv_dash.h" 15 #include "third_party/agg23/agg_conv_dash.h"
16 #include "third_party/agg23/agg_conv_stroke.h" 16 #include "third_party/agg23/agg_conv_stroke.h"
17 #include "third_party/agg23/agg_curves.h" 17 #include "third_party/agg23/agg_curves.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 rasterizer.add_path_transformed(stroke, pObject2Device); 176 rasterizer.add_path_transformed(stroke, pObject2Device);
177 } else { 177 } else {
178 agg::conv_stroke<agg::path_storage> stroke(path_data); 178 agg::conv_stroke<agg::path_storage> stroke(path_data);
179 stroke.line_join(join); 179 stroke.line_join(join);
180 stroke.line_cap(cap); 180 stroke.line_cap(cap);
181 stroke.miter_limit(pGraphState->m_MiterLimit); 181 stroke.miter_limit(pGraphState->m_MiterLimit);
182 stroke.width(width); 182 stroke.width(width);
183 rasterizer.add_path_transformed(stroke, pObject2Device); 183 rasterizer.add_path_transformed(stroke, pObject2Device);
184 } 184 }
185 } 185 }
186
186 IFX_RenderDeviceDriver* IFX_RenderDeviceDriver::CreateFxgeDriver( 187 IFX_RenderDeviceDriver* IFX_RenderDeviceDriver::CreateFxgeDriver(
187 CFX_DIBitmap* pBitmap, 188 CFX_DIBitmap* pBitmap,
188 FX_BOOL bRgbByteOrder, 189 FX_BOOL bRgbByteOrder,
189 CFX_DIBitmap* pOriDevice, 190 CFX_DIBitmap* pOriDevice,
190 FX_BOOL bGroupKnockout) { 191 FX_BOOL bGroupKnockout) {
191 return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice, 192 return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice,
192 bGroupKnockout); 193 bGroupKnockout);
193 } 194 }
195
194 CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap, 196 CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap,
195 int dither_bits, 197 int dither_bits,
196 FX_BOOL bRgbByteOrder, 198 FX_BOOL bRgbByteOrder,
197 CFX_DIBitmap* pOriDevice, 199 CFX_DIBitmap* pOriDevice,
198 FX_BOOL bGroupKnockout) { 200 FX_BOOL bGroupKnockout) {
199 m_pBitmap = pBitmap; 201 m_pBitmap = pBitmap;
200 m_DitherBits = dither_bits; 202 m_DitherBits = dither_bits;
201 m_pClipRgn = NULL; 203 m_pClipRgn = NULL;
202 m_pPlatformBitmap = NULL; 204 m_pPlatformBitmap = NULL;
203 m_pPlatformGraphics = NULL; 205 m_pPlatformGraphics = NULL;
204 m_pDwRenderTartget = NULL; 206 m_pDwRenderTartget = NULL;
205 m_bRgbByteOrder = bRgbByteOrder; 207 m_bRgbByteOrder = bRgbByteOrder;
206 m_pOriDevice = pOriDevice; 208 m_pOriDevice = pOriDevice;
207 m_bGroupKnockout = bGroupKnockout; 209 m_bGroupKnockout = bGroupKnockout;
208 m_FillFlags = 0; 210 m_FillFlags = 0;
209 InitPlatform(); 211 InitPlatform();
210 } 212 }
213
211 CFX_AggDeviceDriver::~CFX_AggDeviceDriver() { 214 CFX_AggDeviceDriver::~CFX_AggDeviceDriver() {
212 delete m_pClipRgn; 215 delete m_pClipRgn;
213 for (int i = 0; i < m_StateStack.GetSize(); i++) 216 for (int i = 0; i < m_StateStack.GetSize(); i++)
214 delete m_StateStack[i]; 217 delete m_StateStack[i];
215 DestroyPlatform(); 218 DestroyPlatform();
216 } 219 }
220
221 uint8_t* CFX_AggDeviceDriver::GetBuffer() const {
222 return m_pBitmap->GetBuffer();
223 }
224
217 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ 225 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
218 void CFX_AggDeviceDriver::InitPlatform() {} 226 void CFX_AggDeviceDriver::InitPlatform() {}
227
219 void CFX_AggDeviceDriver::DestroyPlatform() {} 228 void CFX_AggDeviceDriver::DestroyPlatform() {}
229
220 FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars, 230 FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars,
221 const FXTEXT_CHARPOS* pCharPos, 231 const FXTEXT_CHARPOS* pCharPos,
222 CFX_Font* pFont, 232 CFX_Font* pFont,
223 CFX_FontCache* pCache, 233 CFX_FontCache* pCache,
224 const CFX_Matrix* pObject2Device, 234 const CFX_Matrix* pObject2Device,
225 FX_FLOAT font_size, 235 FX_FLOAT font_size,
226 FX_DWORD color, 236 FX_DWORD color,
227 int alpha_flag, 237 int alpha_flag,
228 void* pIccTransform) { 238 void* pIccTransform) {
229 return FALSE; 239 return FALSE;
230 } 240 } // _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
231 #endif 241 #endif
242
232 int CFX_AggDeviceDriver::GetDeviceCaps(int caps_id) { 243 int CFX_AggDeviceDriver::GetDeviceCaps(int caps_id) {
233 switch (caps_id) { 244 switch (caps_id) {
234 case FXDC_DEVICE_CLASS: 245 case FXDC_DEVICE_CLASS:
235 return FXDC_DISPLAY; 246 return FXDC_DISPLAY;
236 case FXDC_PIXEL_WIDTH: 247 case FXDC_PIXEL_WIDTH:
237 return m_pBitmap->GetWidth(); 248 return m_pBitmap->GetWidth();
238 case FXDC_PIXEL_HEIGHT: 249 case FXDC_PIXEL_HEIGHT:
239 return m_pBitmap->GetHeight(); 250 return m_pBitmap->GetHeight();
240 case FXDC_BITS_PIXEL: 251 case FXDC_BITS_PIXEL:
241 return m_pBitmap->GetBPP(); 252 return m_pBitmap->GetBPP();
(...skipping 15 matching lines...) Expand all
257 if (m_pBitmap->IsCmykImage()) { 268 if (m_pBitmap->IsCmykImage()) {
258 flags |= FXRC_CMYK_OUTPUT; 269 flags |= FXRC_CMYK_OUTPUT;
259 } 270 }
260 return flags; 271 return flags;
261 } 272 }
262 case FXDC_DITHER_BITS: 273 case FXDC_DITHER_BITS:
263 return m_DitherBits; 274 return m_DitherBits;
264 } 275 }
265 return 0; 276 return 0;
266 } 277 }
278
267 void CFX_AggDeviceDriver::SaveState() { 279 void CFX_AggDeviceDriver::SaveState() {
268 CFX_ClipRgn* pClip = NULL; 280 CFX_ClipRgn* pClip = NULL;
269 if (m_pClipRgn) { 281 if (m_pClipRgn) {
270 pClip = new CFX_ClipRgn(*m_pClipRgn); 282 pClip = new CFX_ClipRgn(*m_pClipRgn);
271 } 283 }
272 m_StateStack.Add(pClip); 284 m_StateStack.Add(pClip);
273 } 285 }
286
274 void CFX_AggDeviceDriver::RestoreState(FX_BOOL bKeepSaved) { 287 void CFX_AggDeviceDriver::RestoreState(FX_BOOL bKeepSaved) {
275 if (m_StateStack.GetSize() == 0) { 288 if (m_StateStack.GetSize() == 0) {
276 delete m_pClipRgn; 289 delete m_pClipRgn;
277 m_pClipRgn = NULL; 290 m_pClipRgn = NULL;
278 return; 291 return;
279 } 292 }
280 CFX_ClipRgn* pSavedClip = m_StateStack[m_StateStack.GetSize() - 1]; 293 CFX_ClipRgn* pSavedClip = m_StateStack[m_StateStack.GetSize() - 1];
281 delete m_pClipRgn; 294 delete m_pClipRgn;
282 m_pClipRgn = NULL; 295 m_pClipRgn = NULL;
283 if (bKeepSaved) { 296 if (bKeepSaved) {
284 if (pSavedClip) { 297 if (pSavedClip) {
285 m_pClipRgn = new CFX_ClipRgn(*pSavedClip); 298 m_pClipRgn = new CFX_ClipRgn(*pSavedClip);
286 } 299 }
287 } else { 300 } else {
288 m_StateStack.RemoveAt(m_StateStack.GetSize() - 1); 301 m_StateStack.RemoveAt(m_StateStack.GetSize() - 1);
289 m_pClipRgn = pSavedClip; 302 m_pClipRgn = pSavedClip;
290 } 303 }
291 } 304 }
305
292 void CFX_AggDeviceDriver::SetClipMask(agg::rasterizer_scanline_aa& rasterizer) { 306 void CFX_AggDeviceDriver::SetClipMask(agg::rasterizer_scanline_aa& rasterizer) {
293 FX_RECT path_rect(rasterizer.min_x(), rasterizer.min_y(), 307 FX_RECT path_rect(rasterizer.min_x(), rasterizer.min_y(),
294 rasterizer.max_x() + 1, rasterizer.max_y() + 1); 308 rasterizer.max_x() + 1, rasterizer.max_y() + 1);
295 path_rect.Intersect(m_pClipRgn->GetBox()); 309 path_rect.Intersect(m_pClipRgn->GetBox());
296 CFX_DIBitmapRef mask; 310 CFX_DIBitmapRef mask;
297 CFX_DIBitmap* pThisLayer = mask.New(); 311 CFX_DIBitmap* pThisLayer = mask.New();
298 if (!pThisLayer) { 312 if (!pThisLayer) {
299 return; 313 return;
300 } 314 }
301 pThisLayer->Create(path_rect.Width(), path_rect.Height(), FXDIB_8bppMask); 315 pThisLayer->Create(path_rect.Width(), path_rect.Height(), FXDIB_8bppMask);
302 pThisLayer->Clear(0); 316 pThisLayer->Clear(0);
303 agg::rendering_buffer raw_buf(pThisLayer->GetBuffer(), pThisLayer->GetWidth(), 317 agg::rendering_buffer raw_buf(pThisLayer->GetBuffer(), pThisLayer->GetWidth(),
304 pThisLayer->GetHeight(), 318 pThisLayer->GetHeight(),
305 pThisLayer->GetPitch()); 319 pThisLayer->GetPitch());
306 agg::pixfmt_gray8 pixel_buf(raw_buf); 320 agg::pixfmt_gray8 pixel_buf(raw_buf);
307 agg::renderer_base<agg::pixfmt_gray8> base_buf(pixel_buf); 321 agg::renderer_base<agg::pixfmt_gray8> base_buf(pixel_buf);
308 agg::renderer_scanline_aa_offset<agg::renderer_base<agg::pixfmt_gray8> > 322 agg::renderer_scanline_aa_offset<agg::renderer_base<agg::pixfmt_gray8> >
309 final_render(base_buf, path_rect.left, path_rect.top); 323 final_render(base_buf, path_rect.left, path_rect.top);
310 final_render.color(agg::gray8(255)); 324 final_render.color(agg::gray8(255));
311 agg::scanline_u8 scanline; 325 agg::scanline_u8 scanline;
312 agg::render_scanlines(rasterizer, scanline, final_render, 326 agg::render_scanlines(rasterizer, scanline, final_render,
313 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0); 327 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
314 m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, mask); 328 m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, mask);
315 } 329 }
330
316 FX_BOOL CFX_AggDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData, 331 FX_BOOL CFX_AggDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData,
317 const CFX_Matrix* pObject2Device, 332 const CFX_Matrix* pObject2Device,
318 int fill_mode) { 333 int fill_mode) {
319 m_FillFlags = fill_mode; 334 m_FillFlags = fill_mode;
320 if (!m_pClipRgn) { 335 if (!m_pClipRgn) {
321 m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), 336 m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
322 GetDeviceCaps(FXDC_PIXEL_HEIGHT)); 337 GetDeviceCaps(FXDC_PIXEL_HEIGHT));
323 } 338 }
324 if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) { 339 if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
325 CFX_FloatRect rectf; 340 CFX_FloatRect rectf;
(...skipping 12 matching lines...) Expand all
338 agg::rasterizer_scanline_aa rasterizer; 353 agg::rasterizer_scanline_aa rasterizer;
339 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), 354 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
340 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT))); 355 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
341 rasterizer.add_path(path_data.m_PathData); 356 rasterizer.add_path(path_data.m_PathData);
342 rasterizer.filling_rule((fill_mode & 3) == FXFILL_WINDING 357 rasterizer.filling_rule((fill_mode & 3) == FXFILL_WINDING
343 ? agg::fill_non_zero 358 ? agg::fill_non_zero
344 : agg::fill_even_odd); 359 : agg::fill_even_odd);
345 SetClipMask(rasterizer); 360 SetClipMask(rasterizer);
346 return TRUE; 361 return TRUE;
347 } 362 }
363
348 FX_BOOL CFX_AggDeviceDriver::SetClip_PathStroke( 364 FX_BOOL CFX_AggDeviceDriver::SetClip_PathStroke(
349 const CFX_PathData* pPathData, 365 const CFX_PathData* pPathData,
350 const CFX_Matrix* pObject2Device, 366 const CFX_Matrix* pObject2Device,
351 const CFX_GraphStateData* pGraphState) { 367 const CFX_GraphStateData* pGraphState) {
352 if (!m_pClipRgn) { 368 if (!m_pClipRgn) {
353 m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), 369 m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
354 GetDeviceCaps(FXDC_PIXEL_HEIGHT)); 370 GetDeviceCaps(FXDC_PIXEL_HEIGHT));
355 } 371 }
356 CAgg_PathData path_data; 372 CAgg_PathData path_data;
357 path_data.BuildPath(pPathData, NULL); 373 path_data.BuildPath(pPathData, NULL);
358 agg::rasterizer_scanline_aa rasterizer; 374 agg::rasterizer_scanline_aa rasterizer;
359 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), 375 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
360 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT))); 376 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
361 RasterizeStroke(rasterizer, path_data.m_PathData, pObject2Device, 377 RasterizeStroke(rasterizer, path_data.m_PathData, pObject2Device,
362 pGraphState); 378 pGraphState);
363 rasterizer.filling_rule(agg::fill_non_zero); 379 rasterizer.filling_rule(agg::fill_non_zero);
364 SetClipMask(rasterizer); 380 SetClipMask(rasterizer);
365 return TRUE; 381 return TRUE;
366 } 382 }
383
367 class CFX_Renderer { 384 class CFX_Renderer {
368 private: 385 private:
369 int m_Alpha, m_Red, m_Green, m_Blue, m_Gray; 386 int m_Alpha, m_Red, m_Green, m_Blue, m_Gray;
370 FX_DWORD m_Color; 387 FX_DWORD m_Color;
371 FX_BOOL m_bFullCover; 388 FX_BOOL m_bFullCover;
372 FX_BOOL m_bRgbByteOrder; 389 FX_BOOL m_bRgbByteOrder;
373 CFX_DIBitmap* m_pOriDevice; 390 CFX_DIBitmap* m_pOriDevice;
374 FX_RECT m_ClipBox; 391 FX_RECT m_ClipBox;
375 const CFX_DIBitmap* m_pClipMask; 392 const CFX_DIBitmap* m_pClipMask;
376 CFX_DIBitmap* m_pDevice; 393 CFX_DIBitmap* m_pDevice;
377 const CFX_ClipRgn* m_pClipRgn; 394 const CFX_ClipRgn* m_pClipRgn;
378 void (CFX_Renderer::*composite_span)(uint8_t*, 395 void (CFX_Renderer::*composite_span)(uint8_t*,
379 int, 396 int,
380 int, 397 int,
381 int, 398 int,
382 uint8_t*, 399 uint8_t*,
383 int, 400 int,
384 int, 401 int,
385 uint8_t*, 402 uint8_t*,
386 uint8_t*); 403 uint8_t*);
387 404
388 public: 405 public:
389 void prepare(unsigned) {} 406 void prepare(unsigned) {}
407
390 void CompositeSpan(uint8_t* dest_scan, 408 void CompositeSpan(uint8_t* dest_scan,
391 uint8_t* ori_scan, 409 uint8_t* ori_scan,
392 int Bpp, 410 int Bpp,
393 FX_BOOL bDestAlpha, 411 FX_BOOL bDestAlpha,
394 int span_left, 412 int span_left,
395 int span_len, 413 int span_len,
396 uint8_t* cover_scan, 414 uint8_t* cover_scan,
397 int clip_left, 415 int clip_left,
398 int clip_right, 416 int clip_right,
399 uint8_t* clip_scan) { 417 uint8_t* clip_scan) {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 if (!index) { 593 if (!index) {
576 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8)); 594 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
577 } else { 595 } else {
578 *dest_scan1 |= 1 << (7 - (col + span_left) % 8); 596 *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
579 } 597 }
580 } 598 }
581 dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8; 599 dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
582 } 600 }
583 } 601 }
584 } 602 }
603
585 void CompositeSpan1bpp(uint8_t* dest_scan, 604 void CompositeSpan1bpp(uint8_t* dest_scan,
586 int Bpp, 605 int Bpp,
587 int span_left, 606 int span_left,
588 int span_len, 607 int span_len,
589 uint8_t* cover_scan, 608 uint8_t* cover_scan,
590 int clip_left, 609 int clip_left,
591 int clip_right, 610 int clip_right,
592 uint8_t* clip_scan, 611 uint8_t* clip_scan,
593 uint8_t* dest_extra_alpha_scan) { 612 uint8_t* dest_extra_alpha_scan) {
594 ASSERT(!m_bRgbByteOrder); 613 ASSERT(!m_bRgbByteOrder);
(...skipping 24 matching lines...) Expand all
619 if (src_alpha) { 638 if (src_alpha) {
620 if (!index) { 639 if (!index) {
621 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8)); 640 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
622 } else { 641 } else {
623 *dest_scan1 |= 1 << (7 - (col + span_left) % 8); 642 *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
624 } 643 }
625 } 644 }
626 dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8; 645 dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
627 } 646 }
628 } 647 }
648
629 void CompositeSpanGray(uint8_t* dest_scan, 649 void CompositeSpanGray(uint8_t* dest_scan,
630 int Bpp, 650 int Bpp,
631 int span_left, 651 int span_left,
632 int span_len, 652 int span_len,
633 uint8_t* cover_scan, 653 uint8_t* cover_scan,
634 int clip_left, 654 int clip_left,
635 int clip_right, 655 int clip_right,
636 uint8_t* clip_scan, 656 uint8_t* clip_scan,
637 uint8_t* dest_extra_alpha_scan) { 657 uint8_t* dest_extra_alpha_scan) {
638 ASSERT(!m_bRgbByteOrder); 658 ASSERT(!m_bRgbByteOrder);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 if (src_alpha == 255) { 706 if (src_alpha == 255) {
687 *dest_scan = m_Gray; 707 *dest_scan = m_Gray;
688 } else { 708 } else {
689 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha); 709 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
690 } 710 }
691 } 711 }
692 dest_scan++; 712 dest_scan++;
693 } 713 }
694 } 714 }
695 } 715 }
716
696 void CompositeSpanARGB(uint8_t* dest_scan, 717 void CompositeSpanARGB(uint8_t* dest_scan,
697 int Bpp, 718 int Bpp,
698 int span_left, 719 int span_left,
699 int span_len, 720 int span_len,
700 uint8_t* cover_scan, 721 uint8_t* cover_scan,
701 int clip_left, 722 int clip_left,
702 int clip_right, 723 int clip_right,
703 uint8_t* clip_scan, 724 uint8_t* clip_scan,
704 uint8_t* dest_extra_alpha_scan) { 725 uint8_t* dest_extra_alpha_scan) {
705 int col_start = span_left < clip_left ? clip_left - span_left : 0; 726 int col_start = span_left < clip_left ? clip_left - span_left : 0;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio); 801 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
781 dest_scan++; 802 dest_scan++;
782 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio); 803 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
783 dest_scan += 2; 804 dest_scan += 2;
784 continue; 805 continue;
785 } 806 }
786 } 807 }
787 dest_scan += Bpp; 808 dest_scan += Bpp;
788 } 809 }
789 } 810 }
811
790 void CompositeSpanRGB(uint8_t* dest_scan, 812 void CompositeSpanRGB(uint8_t* dest_scan,
791 int Bpp, 813 int Bpp,
792 int span_left, 814 int span_left,
793 int span_len, 815 int span_len,
794 uint8_t* cover_scan, 816 uint8_t* cover_scan,
795 int clip_left, 817 int clip_left,
796 int clip_right, 818 int clip_right,
797 uint8_t* clip_scan, 819 uint8_t* clip_scan,
798 uint8_t* dest_extra_alpha_scan) { 820 uint8_t* dest_extra_alpha_scan) {
799 int col_start = span_left < clip_left ? clip_left - span_left : 0; 821 int col_start = span_left < clip_left ? clip_left - span_left : 0;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 dest_scan++; 928 dest_scan++;
907 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha); 929 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
908 dest_scan += Bpp - 2; 930 dest_scan += Bpp - 2;
909 continue; 931 continue;
910 } 932 }
911 } 933 }
912 dest_scan += Bpp; 934 dest_scan += Bpp;
913 } 935 }
914 } 936 }
915 } 937 }
938
916 void CompositeSpanCMYK(uint8_t* dest_scan, 939 void CompositeSpanCMYK(uint8_t* dest_scan,
917 int Bpp, 940 int Bpp,
918 int span_left, 941 int span_left,
919 int span_len, 942 int span_len,
920 uint8_t* cover_scan, 943 uint8_t* cover_scan,
921 int clip_left, 944 int clip_left,
922 int clip_right, 945 int clip_right,
923 uint8_t* clip_scan, 946 uint8_t* clip_scan,
924 uint8_t* dest_extra_alpha_scan) { 947 uint8_t* dest_extra_alpha_scan) {
925 ASSERT(!m_bRgbByteOrder); 948 ASSERT(!m_bRgbByteOrder);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 dest_scan++; 1010 dest_scan++;
988 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha); 1011 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
989 dest_scan++; 1012 dest_scan++;
990 continue; 1013 continue;
991 } 1014 }
992 } 1015 }
993 dest_scan += 4; 1016 dest_scan += 4;
994 } 1017 }
995 } 1018 }
996 } 1019 }
1020
997 template <class Scanline> 1021 template <class Scanline>
998 void render(const Scanline& sl) { 1022 void render(const Scanline& sl) {
999 if (!m_pOriDevice && !composite_span) { 1023 if (!m_pOriDevice && !composite_span) {
1000 return; 1024 return;
1001 } 1025 }
1002 int y = sl.y(); 1026 int y = sl.y();
1003 if (y < m_ClipBox.top || y >= m_ClipBox.bottom) { 1027 if (y < m_ClipBox.top || y >= m_ClipBox.bottom) {
1004 return; 1028 return;
1005 } 1029 }
1006 uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * y; 1030 uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * y;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 ArgbDecode(color, m_Alpha, m_Red, m_Green, m_Blue); 1201 ArgbDecode(color, m_Alpha, m_Red, m_Green, m_Blue);
1178 } 1202 }
1179 } 1203 }
1180 } 1204 }
1181 if (m_pDevice->GetBPP() == 1) { 1205 if (m_pDevice->GetBPP() == 1) {
1182 composite_span = &CFX_Renderer::CompositeSpan1bpp; 1206 composite_span = &CFX_Renderer::CompositeSpan1bpp;
1183 } 1207 }
1184 return TRUE; 1208 return TRUE;
1185 } 1209 }
1186 }; 1210 };
1211
1187 FX_BOOL CFX_AggDeviceDriver::RenderRasterizer( 1212 FX_BOOL CFX_AggDeviceDriver::RenderRasterizer(
1188 agg::rasterizer_scanline_aa& rasterizer, 1213 agg::rasterizer_scanline_aa& rasterizer,
1189 FX_DWORD color, 1214 FX_DWORD color,
1190 FX_BOOL bFullCover, 1215 FX_BOOL bFullCover,
1191 FX_BOOL bGroupKnockout, 1216 FX_BOOL bGroupKnockout,
1192 int alpha_flag, 1217 int alpha_flag,
1193 void* pIccTransform) { 1218 void* pIccTransform) {
1194 CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : NULL; 1219 CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : NULL;
1195 CFX_Renderer render; 1220 CFX_Renderer render;
1196 if (!render.Init(m_pBitmap, pt, m_pClipRgn, color, bFullCover, 1221 if (!render.Init(m_pBitmap, pt, m_pClipRgn, color, bFullCover,
1197 m_bRgbByteOrder, alpha_flag, pIccTransform)) { 1222 m_bRgbByteOrder, alpha_flag, pIccTransform)) {
1198 return FALSE; 1223 return FALSE;
1199 } 1224 }
1200 agg::scanline_u8 scanline; 1225 agg::scanline_u8 scanline;
1201 agg::render_scanlines(rasterizer, scanline, render, 1226 agg::render_scanlines(rasterizer, scanline, render,
1202 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0); 1227 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
1203 return TRUE; 1228 return TRUE;
1204 } 1229 }
1230
1205 FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData, 1231 FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData,
1206 const CFX_Matrix* pObject2Device, 1232 const CFX_Matrix* pObject2Device,
1207 const CFX_GraphStateData* pGraphState, 1233 const CFX_GraphStateData* pGraphState,
1208 FX_DWORD fill_color, 1234 FX_DWORD fill_color,
1209 FX_DWORD stroke_color, 1235 FX_DWORD stroke_color,
1210 int fill_mode, 1236 int fill_mode,
1211 int alpha_flag, 1237 int alpha_flag,
1212 void* pIccTransform, 1238 void* pIccTransform,
1213 int blend_type) { 1239 int blend_type) {
1214 if (blend_type != FXDIB_BLEND_NORMAL) { 1240 if (blend_type != FXDIB_BLEND_NORMAL) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 | 1304 int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 |
1279 FXGETFLAG_ALPHA_STROKE(alpha_flag); 1305 FXGETFLAG_ALPHA_STROKE(alpha_flag);
1280 if (!RenderRasterizer(rasterizer, stroke_color, 1306 if (!RenderRasterizer(rasterizer, stroke_color,
1281 fill_mode & FXFILL_FULLCOVER, m_bGroupKnockout, 1307 fill_mode & FXFILL_FULLCOVER, m_bGroupKnockout,
1282 fill_flag, pIccTransform)) { 1308 fill_flag, pIccTransform)) {
1283 return FALSE; 1309 return FALSE;
1284 } 1310 }
1285 } 1311 }
1286 return TRUE; 1312 return TRUE;
1287 } 1313 }
1314
1288 void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) { 1315 void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) {
1289 if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight()) { 1316 if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight()) {
1290 return; 1317 return;
1291 } 1318 }
1292 uint8_t* pos = (uint8_t*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() + 1319 uint8_t* pos = (uint8_t*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() +
1293 x * pBitmap->GetBPP() / 8; 1320 x * pBitmap->GetBPP() / 8;
1294 if (pBitmap->GetFormat() == FXDIB_Argb) { 1321 if (pBitmap->GetFormat() == FXDIB_Argb) {
1295 FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb)); 1322 FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb));
1296 } else { 1323 } else {
1297 int alpha = FXARGB_A(argb); 1324 int alpha = FXARGB_A(argb);
1298 pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255; 1325 pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255;
1299 pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255; 1326 pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255;
1300 pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255; 1327 pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255;
1301 } 1328 }
1302 } 1329 }
1330
1303 void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap, 1331 void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap,
1304 int left, 1332 int left,
1305 int top, 1333 int top,
1306 int width, 1334 int width,
1307 int height, 1335 int height,
1308 FX_ARGB argb) { 1336 FX_ARGB argb) {
1309 int src_alpha = FXARGB_A(argb); 1337 int src_alpha = FXARGB_A(argb);
1310 if (src_alpha == 0) { 1338 if (src_alpha == 0) {
1311 return; 1339 return;
1312 } 1340 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1373 *dest_scan = FX_GAMMA_INVERSE( 1401 *dest_scan = FX_GAMMA_INVERSE(
1374 FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_b, src_alpha)); 1402 FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_b, src_alpha));
1375 dest_scan++; 1403 dest_scan++;
1376 if (Bpp == 4) { 1404 if (Bpp == 4) {
1377 dest_scan++; 1405 dest_scan++;
1378 } 1406 }
1379 } 1407 }
1380 } 1408 }
1381 } 1409 }
1382 } 1410 }
1411
1383 void RgbByteOrderTransferBitmap(CFX_DIBitmap* pBitmap, 1412 void RgbByteOrderTransferBitmap(CFX_DIBitmap* pBitmap,
1384 int dest_left, 1413 int dest_left,
1385 int dest_top, 1414 int dest_top,
1386 int width, 1415 int width,
1387 int height, 1416 int height,
1388 const CFX_DIBSource* pSrcBitmap, 1417 const CFX_DIBSource* pSrcBitmap,
1389 int src_left, 1418 int src_left,
1390 int src_top) { 1419 int src_top) {
1391 if (!pBitmap) { 1420 if (!pBitmap) {
1392 return; 1421 return;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 src_scan[2])); 1505 src_scan[2]));
1477 src_scan += 4; 1506 src_scan += 4;
1478 dest_scan += 4; 1507 dest_scan += 4;
1479 } 1508 }
1480 } 1509 }
1481 } 1510 }
1482 } else { 1511 } else {
1483 ASSERT(FALSE); 1512 ASSERT(FALSE);
1484 } 1513 }
1485 } 1514 }
1515
1486 FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, uint8_t alpha) { 1516 FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, uint8_t alpha) {
1487 uint8_t r, g, b; 1517 uint8_t r, g, b;
1488 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), 1518 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk),
1489 FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r, g, b); 1519 FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r, g, b);
1490 return ArgbEncode(alpha, r, g, b); 1520 return ArgbEncode(alpha, r, g, b);
1491 } 1521 }
1522
1492 FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice, 1523 FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice,
1493 int x, 1524 int x,
1494 int y, 1525 int y,
1495 FX_DWORD color, 1526 FX_DWORD color,
1496 int alpha_flag, 1527 int alpha_flag,
1497 void* pIccTransform) { 1528 void* pIccTransform) {
1498 FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag); 1529 FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
1499 int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color); 1530 int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
1500 if (pIccTransform) { 1531 if (pIccTransform) {
1501 ICodec_IccModule* pIccModule = 1532 ICodec_IccModule* pIccModule =
(...skipping 15 matching lines...) Expand all
1517 color = _DefaultCMYK2ARGB(color, alpha); 1548 color = _DefaultCMYK2ARGB(color, alpha);
1518 } 1549 }
1519 } 1550 }
1520 } 1551 }
1521 pDevice->SetPixel(x, y, color); 1552 pDevice->SetPixel(x, y, color);
1522 if (pDevice->m_pAlphaMask) { 1553 if (pDevice->m_pAlphaMask) {
1523 pDevice->m_pAlphaMask->SetPixel(x, y, alpha << 24); 1554 pDevice->m_pAlphaMask->SetPixel(x, y, alpha << 24);
1524 } 1555 }
1525 return TRUE; 1556 return TRUE;
1526 } 1557 }
1558
1527 FX_BOOL CFX_AggDeviceDriver::SetPixel(int x, 1559 FX_BOOL CFX_AggDeviceDriver::SetPixel(int x,
1528 int y, 1560 int y,
1529 FX_DWORD color, 1561 FX_DWORD color,
1530 int alpha_flag, 1562 int alpha_flag,
1531 void* pIccTransform) { 1563 void* pIccTransform) {
1532 if (!m_pBitmap->GetBuffer()) { 1564 if (!m_pBitmap->GetBuffer()) {
1533 return TRUE; 1565 return TRUE;
1534 } 1566 }
1535 if (!CFX_GEModule::Get()->GetCodecModule() || 1567 if (!CFX_GEModule::Get()->GetCodecModule() ||
1536 !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) { 1568 !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
(...skipping 26 matching lines...) Expand all
1563 if (bCMYK) { 1595 if (bCMYK) {
1564 FXSETFLAG_ALPHA_FILL(alpha_flag, new_alpha); 1596 FXSETFLAG_ALPHA_FILL(alpha_flag, new_alpha);
1565 } else { 1597 } else {
1566 color = (color & 0xffffff) | (new_alpha << 24); 1598 color = (color & 0xffffff) | (new_alpha << 24);
1567 } 1599 }
1568 return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform); 1600 return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
1569 } 1601 }
1570 } 1602 }
1571 return TRUE; 1603 return TRUE;
1572 } 1604 }
1605
1573 FX_BOOL CFX_AggDeviceDriver::FillRect(const FX_RECT* pRect, 1606 FX_BOOL CFX_AggDeviceDriver::FillRect(const FX_RECT* pRect,
1574 FX_DWORD fill_color, 1607 FX_DWORD fill_color,
1575 int alpha_flag, 1608 int alpha_flag,
1576 void* pIccTransform, 1609 void* pIccTransform,
1577 int blend_type) { 1610 int blend_type) {
1578 if (blend_type != FXDIB_BLEND_NORMAL) { 1611 if (blend_type != FXDIB_BLEND_NORMAL) {
1579 return FALSE; 1612 return FALSE;
1580 } 1613 }
1581 if (!m_pBitmap->GetBuffer()) { 1614 if (!m_pBitmap->GetBuffer()) {
1582 return TRUE; 1615 return TRUE;
(...skipping 19 matching lines...) Expand all
1602 } 1635 }
1603 return TRUE; 1636 return TRUE;
1604 } 1637 }
1605 m_pBitmap->CompositeMask( 1638 m_pBitmap->CompositeMask(
1606 draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(), 1639 draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(),
1607 (const CFX_DIBitmap*)m_pClipRgn->GetMask(), fill_color, 1640 (const CFX_DIBitmap*)m_pClipRgn->GetMask(), fill_color,
1608 draw_rect.left - clip_rect.left, draw_rect.top - clip_rect.top, 1641 draw_rect.left - clip_rect.left, draw_rect.top - clip_rect.top,
1609 FXDIB_BLEND_NORMAL, NULL, m_bRgbByteOrder, alpha_flag, pIccTransform); 1642 FXDIB_BLEND_NORMAL, NULL, m_bRgbByteOrder, alpha_flag, pIccTransform);
1610 return TRUE; 1643 return TRUE;
1611 } 1644 }
1645
1612 FX_BOOL CFX_AggDeviceDriver::GetClipBox(FX_RECT* pRect) { 1646 FX_BOOL CFX_AggDeviceDriver::GetClipBox(FX_RECT* pRect) {
1613 if (!m_pClipRgn) { 1647 if (!m_pClipRgn) {
1614 pRect->left = pRect->top = 0; 1648 pRect->left = pRect->top = 0;
1615 pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH); 1649 pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH);
1616 pRect->bottom = GetDeviceCaps(FXDC_PIXEL_HEIGHT); 1650 pRect->bottom = GetDeviceCaps(FXDC_PIXEL_HEIGHT);
1617 return TRUE; 1651 return TRUE;
1618 } 1652 }
1619 *pRect = m_pClipRgn->GetBox(); 1653 *pRect = m_pClipRgn->GetBox();
1620 return TRUE; 1654 return TRUE;
1621 } 1655 }
1656
1622 FX_BOOL CFX_AggDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap, 1657 FX_BOOL CFX_AggDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap,
1623 int left, 1658 int left,
1624 int top, 1659 int top,
1625 void* pIccTransform, 1660 void* pIccTransform,
1626 FX_BOOL bDEdge) { 1661 FX_BOOL bDEdge) {
1627 if (!m_pBitmap->GetBuffer()) { 1662 if (!m_pBitmap->GetBuffer()) {
1628 return TRUE; 1663 return TRUE;
1629 } 1664 }
1630 if (bDEdge) { 1665 if (bDEdge) {
1631 if (m_bRgbByteOrder) { 1666 if (m_bRgbByteOrder) {
(...skipping 28 matching lines...) Expand all
1660 if (m_bRgbByteOrder) { 1695 if (m_bRgbByteOrder) {
1661 RgbByteOrderTransferBitmap(pBitmap, 0, 0, rect.Width(), rect.Height(), 1696 RgbByteOrderTransferBitmap(pBitmap, 0, 0, rect.Width(), rect.Height(),
1662 pBack, left, top); 1697 pBack, left, top);
1663 } else { 1698 } else {
1664 bRet = pBitmap->TransferBitmap(0, 0, rect.Width(), rect.Height(), pBack, 1699 bRet = pBitmap->TransferBitmap(0, 0, rect.Width(), rect.Height(), pBack,
1665 left, top, pIccTransform); 1700 left, top, pIccTransform);
1666 } 1701 }
1667 delete pBack; 1702 delete pBack;
1668 return bRet; 1703 return bRet;
1669 } 1704 }
1705
1670 FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, 1706 FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
1671 FX_DWORD argb, 1707 FX_DWORD argb,
1672 const FX_RECT* pSrcRect, 1708 const FX_RECT* pSrcRect,
1673 int left, 1709 int left,
1674 int top, 1710 int top,
1675 int blend_type, 1711 int blend_type,
1676 int alpha_flag, 1712 int alpha_flag,
1677 void* pIccTransform) { 1713 void* pIccTransform) {
1678 if (!m_pBitmap->GetBuffer()) { 1714 if (!m_pBitmap->GetBuffer()) {
1679 return TRUE; 1715 return TRUE;
1680 } 1716 }
1681 if (pBitmap->IsAlphaMask()) 1717 if (pBitmap->IsAlphaMask())
1682 return m_pBitmap->CompositeMask( 1718 return m_pBitmap->CompositeMask(
1683 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb, 1719 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb,
1684 pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, 1720 pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder,
1685 alpha_flag, pIccTransform); 1721 alpha_flag, pIccTransform);
1686 return m_pBitmap->CompositeBitmap( 1722 return m_pBitmap->CompositeBitmap(
1687 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left, 1723 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left,
1688 pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, pIccTransform); 1724 pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, pIccTransform);
1689 } 1725 }
1726
1690 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, 1727 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource,
1691 FX_DWORD argb, 1728 FX_DWORD argb,
1692 int dest_left, 1729 int dest_left,
1693 int dest_top, 1730 int dest_top,
1694 int dest_width, 1731 int dest_width,
1695 int dest_height, 1732 int dest_height,
1696 const FX_RECT* pClipRect, 1733 const FX_RECT* pClipRect,
1697 FX_DWORD flags, 1734 FX_DWORD flags,
1698 int alpha_flag, 1735 int alpha_flag,
1699 void* pIccTransform, 1736 void* pIccTransform,
(...skipping 17 matching lines...) Expand all
1717 FALSE, m_bRgbByteOrder, alpha_flag, pIccTransform, 1754 FALSE, m_bRgbByteOrder, alpha_flag, pIccTransform,
1718 blend_type); 1755 blend_type);
1719 dest_clip.Offset(-dest_rect.left, -dest_rect.top); 1756 dest_clip.Offset(-dest_rect.left, -dest_rect.top);
1720 CFX_ImageStretcher stretcher; 1757 CFX_ImageStretcher stretcher;
1721 if (stretcher.Start(&composer, pSource, dest_width, dest_height, dest_clip, 1758 if (stretcher.Start(&composer, pSource, dest_width, dest_height, dest_clip,
1722 flags)) { 1759 flags)) {
1723 stretcher.Continue(NULL); 1760 stretcher.Continue(NULL);
1724 } 1761 }
1725 return TRUE; 1762 return TRUE;
1726 } 1763 }
1764
1727 FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, 1765 FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource,
1728 int bitmap_alpha, 1766 int bitmap_alpha,
1729 FX_DWORD argb, 1767 FX_DWORD argb,
1730 const CFX_Matrix* pMatrix, 1768 const CFX_Matrix* pMatrix,
1731 FX_DWORD render_flags, 1769 FX_DWORD render_flags,
1732 void*& handle, 1770 void*& handle,
1733 int alpha_flag, 1771 int alpha_flag,
1734 void* pIccTransform, 1772 void* pIccTransform,
1735 int blend_type) { 1773 int blend_type) {
1736 if (!m_pBitmap->GetBuffer()) { 1774 if (!m_pBitmap->GetBuffer()) {
1737 return TRUE; 1775 return TRUE;
1738 } 1776 }
1739 CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer; 1777 CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer;
1740 pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix, 1778 pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix,
1741 render_flags, m_bRgbByteOrder, alpha_flag, pIccTransform); 1779 render_flags, m_bRgbByteOrder, alpha_flag, pIccTransform);
1742 handle = pRenderer; 1780 handle = pRenderer;
1743 return TRUE; 1781 return TRUE;
1744 } 1782 }
1783
1745 FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) { 1784 FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) {
1746 if (!m_pBitmap->GetBuffer()) { 1785 if (!m_pBitmap->GetBuffer()) {
1747 return TRUE; 1786 return TRUE;
1748 } 1787 }
1749 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause); 1788 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause);
1750 } 1789 }
1790
1751 void CFX_AggDeviceDriver::CancelDIBits(void* pHandle) { 1791 void CFX_AggDeviceDriver::CancelDIBits(void* pHandle) {
1752 if (!m_pBitmap->GetBuffer()) { 1792 if (!m_pBitmap->GetBuffer()) {
1753 return; 1793 return;
1754 } 1794 }
1755 delete (CFX_ImageRenderer*)pHandle; 1795 delete (CFX_ImageRenderer*)pHandle;
1756 } 1796 }
1797
1757 CFX_FxgeDevice::CFX_FxgeDevice() { 1798 CFX_FxgeDevice::CFX_FxgeDevice() {
1758 m_bOwnedBitmap = FALSE; 1799 m_bOwnedBitmap = FALSE;
1759 } 1800 }
1801
1760 FX_BOOL CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap, 1802 FX_BOOL CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap,
1761 int dither_bits, 1803 int dither_bits,
1762 FX_BOOL bRgbByteOrder, 1804 FX_BOOL bRgbByteOrder,
1763 CFX_DIBitmap* pOriDevice, 1805 CFX_DIBitmap* pOriDevice,
1764 FX_BOOL bGroupKnockout) { 1806 FX_BOOL bGroupKnockout) {
1765 if (!pBitmap) { 1807 if (!pBitmap) {
1766 return FALSE; 1808 return FALSE;
1767 } 1809 }
1768 SetBitmap(pBitmap); 1810 SetBitmap(pBitmap);
1769 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver( 1811 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(
1770 pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout); 1812 pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout);
1771 SetDeviceDriver(pDriver); 1813 SetDeviceDriver(pDriver);
1772 return TRUE; 1814 return TRUE;
1773 } 1815 }
1816
1774 FX_BOOL CFX_FxgeDevice::Create(int width, 1817 FX_BOOL CFX_FxgeDevice::Create(int width,
1775 int height, 1818 int height,
1776 FXDIB_Format format, 1819 FXDIB_Format format,
1777 int dither_bits, 1820 int dither_bits,
1778 CFX_DIBitmap* pOriDevice) { 1821 CFX_DIBitmap* pOriDevice) {
1779 m_bOwnedBitmap = TRUE; 1822 m_bOwnedBitmap = TRUE;
1780 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; 1823 CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
1781 if (!pBitmap->Create(width, height, format)) { 1824 if (!pBitmap->Create(width, height, format)) {
1782 delete pBitmap; 1825 delete pBitmap;
1783 return FALSE; 1826 return FALSE;
1784 } 1827 }
1785 SetBitmap(pBitmap); 1828 SetBitmap(pBitmap);
1786 IFX_RenderDeviceDriver* pDriver = 1829 IFX_RenderDeviceDriver* pDriver =
1787 new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE); 1830 new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
1788 SetDeviceDriver(pDriver); 1831 SetDeviceDriver(pDriver);
1789 return TRUE; 1832 return TRUE;
1790 } 1833 }
1834
1791 CFX_FxgeDevice::~CFX_FxgeDevice() { 1835 CFX_FxgeDevice::~CFX_FxgeDevice() {
1792 if (m_bOwnedBitmap) { 1836 if (m_bOwnedBitmap) {
1793 delete GetBitmap(); 1837 delete GetBitmap();
1794 } 1838 }
1795 } 1839 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698