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

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

Issue 1422513004: Merge to XFA: Add type cast definitions for CPDF_Stream. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 1 month 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_render.h" 7 #include "../../../include/fpdfapi/fpdf_render.h"
8 #include "../../../include/fpdfapi/fpdf_pageobj.h" 8 #include "../../../include/fpdfapi/fpdf_pageobj.h"
9 #include "../../../include/fxge/fx_ge.h" 9 #include "../../../include/fxge/fx_ge.h"
10 #include "../fpdf_page/pageint.h" 10 #include "../fpdf_page/pageint.h"
11 #include "render_int.h" 11 #include "render_int.h"
12 #define SHADING_STEPS 256 12 #define SHADING_STEPS 256
13 static void _DrawAxialShading(CFX_DIBitmap* pBitmap, 13 static void DrawAxialShading(CFX_DIBitmap* pBitmap,
14 CFX_AffineMatrix* pObject2Bitmap, 14 CFX_AffineMatrix* pObject2Bitmap,
15 CPDF_Dictionary* pDict, 15 CPDF_Dictionary* pDict,
16 CPDF_Function** pFuncs, 16 CPDF_Function** pFuncs,
17 int nFuncs, 17 int nFuncs,
18 CPDF_ColorSpace* pCS, 18 CPDF_ColorSpace* pCS,
19 int alpha) { 19 int alpha) {
20 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 20 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
21 CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords")); 21 CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords"));
22 if (pCoords == NULL) { 22 if (pCoords == NULL) {
23 return; 23 return;
24 } 24 }
25 FX_FLOAT start_x = pCoords->GetNumber(0); 25 FX_FLOAT start_x = pCoords->GetNumber(0);
26 FX_FLOAT start_y = pCoords->GetNumber(1); 26 FX_FLOAT start_y = pCoords->GetNumber(1);
27 FX_FLOAT end_x = pCoords->GetNumber(2); 27 FX_FLOAT end_x = pCoords->GetNumber(2);
28 FX_FLOAT end_y = pCoords->GetNumber(3); 28 FX_FLOAT end_y = pCoords->GetNumber(3);
29 FX_FLOAT t_min = 0, t_max = 1.0f; 29 FX_FLOAT t_min = 0, t_max = 1.0f;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 } else if (index >= SHADING_STEPS) { 94 } else if (index >= SHADING_STEPS) {
95 if (!bEndExtend) { 95 if (!bEndExtend) {
96 continue; 96 continue;
97 } 97 }
98 index = SHADING_STEPS - 1; 98 index = SHADING_STEPS - 1;
99 } 99 }
100 dib_buf[column] = rgb_array[index]; 100 dib_buf[column] = rgb_array[index];
101 } 101 }
102 } 102 }
103 } 103 }
104 static void _DrawRadialShading(CFX_DIBitmap* pBitmap, 104 static void DrawRadialShading(CFX_DIBitmap* pBitmap,
105 CFX_AffineMatrix* pObject2Bitmap, 105 CFX_AffineMatrix* pObject2Bitmap,
106 CPDF_Dictionary* pDict, 106 CPDF_Dictionary* pDict,
107 CPDF_Function** pFuncs, 107 CPDF_Function** pFuncs,
108 int nFuncs, 108 int nFuncs,
109 CPDF_ColorSpace* pCS, 109 CPDF_ColorSpace* pCS,
110 int alpha) { 110 int alpha) {
111 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 111 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
112 CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords")); 112 CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords"));
113 if (pCoords == NULL) { 113 if (pCoords == NULL) {
114 return; 114 return;
115 } 115 }
116 FX_FLOAT start_x = pCoords->GetNumber(0); 116 FX_FLOAT start_x = pCoords->GetNumber(0);
117 FX_FLOAT start_y = pCoords->GetNumber(1); 117 FX_FLOAT start_y = pCoords->GetNumber(1);
118 FX_FLOAT start_r = pCoords->GetNumber(2); 118 FX_FLOAT start_r = pCoords->GetNumber(2);
119 FX_FLOAT end_x = pCoords->GetNumber(3); 119 FX_FLOAT end_x = pCoords->GetNumber(3);
120 FX_FLOAT end_y = pCoords->GetNumber(4); 120 FX_FLOAT end_y = pCoords->GetNumber(4);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 if (index >= SHADING_STEPS) { 232 if (index >= SHADING_STEPS) {
233 if (!bEndExtend) { 233 if (!bEndExtend) {
234 continue; 234 continue;
235 } 235 }
236 index = SHADING_STEPS - 1; 236 index = SHADING_STEPS - 1;
237 } 237 }
238 dib_buf[column] = rgb_array[index]; 238 dib_buf[column] = rgb_array[index];
239 } 239 }
240 } 240 }
241 } 241 }
242 static void _DrawFuncShading(CFX_DIBitmap* pBitmap, 242 static void DrawFuncShading(CFX_DIBitmap* pBitmap,
243 CFX_AffineMatrix* pObject2Bitmap, 243 CFX_AffineMatrix* pObject2Bitmap,
244 CPDF_Dictionary* pDict, 244 CPDF_Dictionary* pDict,
245 CPDF_Function** pFuncs, 245 CPDF_Function** pFuncs,
246 int nFuncs, 246 int nFuncs,
247 CPDF_ColorSpace* pCS, 247 CPDF_ColorSpace* pCS,
248 int alpha) { 248 int alpha) {
249 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 249 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
250 CPDF_Array* pDomain = pDict->GetArray(FX_BSTRC("Domain")); 250 CPDF_Array* pDomain = pDict->GetArray(FX_BSTRC("Domain"));
251 FX_FLOAT xmin = 0, ymin = 0, xmax = 1.0f, ymax = 1.0f; 251 FX_FLOAT xmin = 0, ymin = 0, xmax = 1.0f, ymax = 1.0f;
252 if (pDomain) { 252 if (pDomain) {
253 xmin = pDomain->GetNumber(0); 253 xmin = pDomain->GetNumber(0);
254 xmax = pDomain->GetNumber(1); 254 xmax = pDomain->GetNumber(1);
255 ymin = pDomain->GetNumber(2); 255 ymin = pDomain->GetNumber(2);
256 ymax = pDomain->GetNumber(3); 256 ymax = pDomain->GetNumber(3);
257 } 257 }
258 CFX_AffineMatrix mtDomain2Target = pDict->GetMatrix(FX_BSTRC("Matrix")); 258 CFX_AffineMatrix mtDomain2Target = pDict->GetMatrix(FX_BSTRC("Matrix"));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 return FALSE; 316 return FALSE;
317 } 317 }
318 } else { 318 } else {
319 if (y < y2 || y > y1) { 319 if (y < y2 || y > y1) {
320 return FALSE; 320 return FALSE;
321 } 321 }
322 } 322 }
323 x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1); 323 x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1);
324 return TRUE; 324 return TRUE;
325 } 325 }
326 static void _DrawGouraud(CFX_DIBitmap* pBitmap, 326 static void DrawGouraud(CFX_DIBitmap* pBitmap,
327 int alpha, 327 int alpha,
328 CPDF_MeshVertex triangle[3]) { 328 CPDF_MeshVertex triangle[3]) {
329 FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y; 329 FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y;
330 for (int i = 1; i < 3; i++) { 330 for (int i = 1; i < 3; i++) {
331 if (min_y > triangle[i].y) { 331 if (min_y > triangle[i].y) {
332 min_y = triangle[i].y; 332 min_y = triangle[i].y;
333 } 333 }
334 if (max_y < triangle[i].y) { 334 if (max_y < triangle[i].y) {
335 max_y = triangle[i].y; 335 max_y = triangle[i].y;
336 } 336 }
337 } 337 }
338 if (min_y == max_y) { 338 if (min_y == max_y) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 R += r_unit; 401 R += r_unit;
402 G += g_unit; 402 G += g_unit;
403 B += b_unit; 403 B += b_unit;
404 FXARGB_SETDIB(dib_buf, 404 FXARGB_SETDIB(dib_buf,
405 FXARGB_MAKE(alpha, (int32_t)(R * 255), (int32_t)(G * 255), 405 FXARGB_MAKE(alpha, (int32_t)(R * 255), (int32_t)(G * 255),
406 (int32_t)(B * 255))); 406 (int32_t)(B * 255)));
407 dib_buf += 4; 407 dib_buf += 4;
408 } 408 }
409 } 409 }
410 } 410 }
411 static void _DrawFreeGouraudShading(CFX_DIBitmap* pBitmap, 411 static void DrawFreeGouraudShading(CFX_DIBitmap* pBitmap,
412 CFX_AffineMatrix* pObject2Bitmap, 412 CFX_AffineMatrix* pObject2Bitmap,
413 CPDF_Stream* pShadingStream, 413 CPDF_Stream* pShadingStream,
414 CPDF_Function** pFuncs, 414 CPDF_Function** pFuncs,
415 int nFuncs, 415 int nFuncs,
416 CPDF_ColorSpace* pCS, 416 CPDF_ColorSpace* pCS,
417 int alpha) { 417 int alpha) {
418 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 418 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
419 if (pShadingStream->GetType() != PDFOBJ_STREAM) { 419
420 CPDF_MeshStream stream;
421 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS))
420 return; 422 return;
421 } 423
422 CPDF_MeshStream stream;
423 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
424 return;
425 }
426 CPDF_MeshVertex triangle[3]; 424 CPDF_MeshVertex triangle[3];
427 FXSYS_memset(triangle, 0, sizeof(triangle)); 425 FXSYS_memset(triangle, 0, sizeof(triangle));
428 426
429 while (!stream.m_BitStream.IsEOF()) { 427 while (!stream.m_BitStream.IsEOF()) {
430 CPDF_MeshVertex vertex; 428 CPDF_MeshVertex vertex;
431 FX_DWORD flag = stream.GetVertex(vertex, pObject2Bitmap); 429 FX_DWORD flag = stream.GetVertex(vertex, pObject2Bitmap);
432 if (flag == 0) { 430 if (flag == 0) {
433 triangle[0] = vertex; 431 triangle[0] = vertex;
434 for (int j = 1; j < 3; j++) { 432 for (int j = 1; j < 3; j++) {
435 stream.GetVertex(triangle[j], pObject2Bitmap); 433 stream.GetVertex(triangle[j], pObject2Bitmap);
436 } 434 }
437 } else { 435 } else {
438 if (flag == 1) { 436 if (flag == 1) {
439 triangle[0] = triangle[1]; 437 triangle[0] = triangle[1];
440 } 438 }
441 triangle[1] = triangle[2]; 439 triangle[1] = triangle[2];
442 triangle[2] = vertex; 440 triangle[2] = vertex;
443 } 441 }
444 _DrawGouraud(pBitmap, alpha, triangle); 442 DrawGouraud(pBitmap, alpha, triangle);
445 } 443 }
446 } 444 }
447 static void _DrawLatticeGouraudShading(CFX_DIBitmap* pBitmap, 445 static void DrawLatticeGouraudShading(CFX_DIBitmap* pBitmap,
448 CFX_AffineMatrix* pObject2Bitmap, 446 CFX_AffineMatrix* pObject2Bitmap,
449 CPDF_Stream* pShadingStream, 447 CPDF_Stream* pShadingStream,
450 CPDF_Function** pFuncs, 448 CPDF_Function** pFuncs,
451 int nFuncs, 449 int nFuncs,
452 CPDF_ColorSpace* pCS, 450 CPDF_ColorSpace* pCS,
453 int alpha) { 451 int alpha) {
454 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 452 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
455 if (pShadingStream->GetType() != PDFOBJ_STREAM) { 453
454 int row_verts = pShadingStream->GetDict()->GetInteger("VerticesPerRow");
455 if (row_verts < 2)
456 return; 456 return;
457 } 457
458 int row_verts = pShadingStream->GetDict()->GetInteger("VerticesPerRow"); 458 CPDF_MeshStream stream;
459 if (row_verts < 2) { 459 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS))
460 return; 460 return;
461 } 461
462 CPDF_MeshStream stream;
463 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
464 return;
465 }
466 CPDF_MeshVertex* vertex = FX_Alloc2D(CPDF_MeshVertex, row_verts, 2); 462 CPDF_MeshVertex* vertex = FX_Alloc2D(CPDF_MeshVertex, row_verts, 2);
467 if (!stream.GetVertexRow(vertex, row_verts, pObject2Bitmap)) { 463 if (!stream.GetVertexRow(vertex, row_verts, pObject2Bitmap)) {
468 FX_Free(vertex); 464 FX_Free(vertex);
469 return; 465 return;
470 } 466 }
471 int last_index = 0; 467 int last_index = 0;
472 while (1) { 468 while (1) {
473 CPDF_MeshVertex* last_row = vertex + last_index * row_verts; 469 CPDF_MeshVertex* last_row = vertex + last_index * row_verts;
474 CPDF_MeshVertex* this_row = vertex + (1 - last_index) * row_verts; 470 CPDF_MeshVertex* this_row = vertex + (1 - last_index) * row_verts;
475 if (!stream.GetVertexRow(this_row, row_verts, pObject2Bitmap)) { 471 if (!stream.GetVertexRow(this_row, row_verts, pObject2Bitmap)) {
476 FX_Free(vertex); 472 FX_Free(vertex);
477 return; 473 return;
478 } 474 }
479 CPDF_MeshVertex triangle[3]; 475 CPDF_MeshVertex triangle[3];
480 for (int i = 1; i < row_verts; i++) { 476 for (int i = 1; i < row_verts; i++) {
481 triangle[0] = last_row[i]; 477 triangle[0] = last_row[i];
482 triangle[1] = this_row[i - 1]; 478 triangle[1] = this_row[i - 1];
483 triangle[2] = last_row[i - 1]; 479 triangle[2] = last_row[i - 1];
484 _DrawGouraud(pBitmap, alpha, triangle); 480 DrawGouraud(pBitmap, alpha, triangle);
485 triangle[2] = this_row[i]; 481 triangle[2] = this_row[i];
486 _DrawGouraud(pBitmap, alpha, triangle); 482 DrawGouraud(pBitmap, alpha, triangle);
487 } 483 }
488 last_index = 1 - last_index; 484 last_index = 1 - last_index;
489 } 485 }
490 FX_Free(vertex); 486 FX_Free(vertex);
491 } 487 }
492 struct Coon_BezierCoeff { 488 struct Coon_BezierCoeff {
493 float a, b, c, d; 489 float a, b, c, d;
494 void FromPoints(float p0, float p1, float p2, float p3) { 490 void FromPoints(float p0, float p1, float p2, float p3) {
495 a = -p0 + 3 * p1 - 3 * p2 + p3; 491 a = -p0 + 3 * p1 - 3 * p2 + p3;
496 b = 3 * p0 - 6 * p1 + 3 * p2; 492 b = 3 * p0 - 6 * p1 + 3 * p2;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 FX_BOOL bCompBits = (stream.m_nCompBits == 1 || stream.m_nCompBits == 2 || 737 FX_BOOL bCompBits = (stream.m_nCompBits == 1 || stream.m_nCompBits == 2 ||
742 stream.m_nCompBits == 4 || stream.m_nCompBits == 8 || 738 stream.m_nCompBits == 4 || stream.m_nCompBits == 8 ||
743 stream.m_nCompBits == 12 || stream.m_nCompBits == 16); 739 stream.m_nCompBits == 12 || stream.m_nCompBits == 16);
744 740
745 FX_BOOL bFlagBits = (stream.m_nFlagBits == 2 || stream.m_nFlagBits == 4 || 741 FX_BOOL bFlagBits = (stream.m_nFlagBits == 2 || stream.m_nFlagBits == 4 ||
746 stream.m_nFlagBits == 8); 742 stream.m_nFlagBits == 8);
747 743
748 return bCoorBits && bCompBits && bFlagBits; 744 return bCoorBits && bCompBits && bFlagBits;
749 } 745 }
750 746
751 static void _DrawCoonPatchMeshes(FX_BOOL bTensor, 747 static void DrawCoonPatchMeshes(FX_BOOL bTensor,
752 CFX_DIBitmap* pBitmap, 748 CFX_DIBitmap* pBitmap,
753 CFX_AffineMatrix* pObject2Bitmap, 749 CFX_AffineMatrix* pObject2Bitmap,
754 CPDF_Stream* pShadingStream, 750 CPDF_Stream* pShadingStream,
755 CPDF_Function** pFuncs, 751 CPDF_Function** pFuncs,
756 int nFuncs, 752 int nFuncs,
757 CPDF_ColorSpace* pCS, 753 CPDF_ColorSpace* pCS,
758 int fill_mode, 754 int fill_mode,
759 int alpha) { 755 int alpha) {
760 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 756 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
761 if (pShadingStream->GetType() != PDFOBJ_STREAM) { 757
762 return;
763 }
764 CFX_FxgeDevice device; 758 CFX_FxgeDevice device;
765 device.Attach(pBitmap); 759 device.Attach(pBitmap);
766 CPDF_MeshStream stream; 760 CPDF_MeshStream stream;
767 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) { 761 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS))
768 return; 762 return;
769 } 763 if (!_CheckCoonTensorPara(stream))
770
771 if (!_CheckCoonTensorPara(stream)) {
772 return; 764 return;
773 }
774 765
775 CPDF_PatchDrawer patch; 766 CPDF_PatchDrawer patch;
776 patch.alpha = alpha; 767 patch.alpha = alpha;
777 patch.pDevice = &device; 768 patch.pDevice = &device;
778 patch.fill_mode = fill_mode; 769 patch.fill_mode = fill_mode;
779 patch.path.SetPointCount(13); 770 patch.path.SetPointCount(13);
780 FX_PATHPOINT* pPoints = patch.path.GetPoints(); 771 FX_PATHPOINT* pPoints = patch.path.GetPoints();
781 pPoints[0].m_Flag = FXPT_MOVETO; 772 pPoints[0].m_Flag = FXPT_MOVETO;
782 for (int i = 1; i < 13; i++) { 773 for (int i = 1; i < 13; i++) {
783 pPoints[i].m_Flag = FXPT_BEZIERTO; 774 pPoints[i].m_Flag = FXPT_BEZIERTO;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 CFX_AffineMatrix FinalMatrix = *pMatrix; 862 CFX_AffineMatrix FinalMatrix = *pMatrix;
872 FinalMatrix.Concat(*buffer.GetMatrix()); 863 FinalMatrix.Concat(*buffer.GetMatrix());
873 CFX_DIBitmap* pBitmap = buffer.GetBitmap(); 864 CFX_DIBitmap* pBitmap = buffer.GetBitmap();
874 if (pBitmap->GetBuffer() == NULL) { 865 if (pBitmap->GetBuffer() == NULL) {
875 return; 866 return;
876 } 867 }
877 pBitmap->Clear(background); 868 pBitmap->Clear(background);
878 int fill_mode = m_Options.m_Flags; 869 int fill_mode = m_Options.m_Flags;
879 switch (pPattern->m_ShadingType) { 870 switch (pPattern->m_ShadingType) {
880 case 1: 871 case 1:
881 _DrawFuncShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs, 872 DrawFuncShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs, pColorSpace,
873 alpha);
874 break;
875 case 2:
876 DrawAxialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs,
882 pColorSpace, alpha); 877 pColorSpace, alpha);
883 break; 878 break;
884 case 2: 879 case 3:
885 _DrawAxialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs, 880 DrawRadialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs,
886 pColorSpace, alpha); 881 pColorSpace, alpha);
887 break; 882 break;
888 case 3:
889 _DrawRadialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs,
890 pColorSpace, alpha);
891 break;
892 case 4: { 883 case 4: {
893 _DrawFreeGouraudShading(pBitmap, &FinalMatrix, 884 DrawFreeGouraudShading(pBitmap, &FinalMatrix,
894 (CPDF_Stream*)pPattern->m_pShadingObj, pFuncs, 885 ToStream(pPattern->m_pShadingObj), pFuncs, nFuncs,
895 nFuncs, pColorSpace, alpha); 886 pColorSpace, alpha);
896 } break; 887 } break;
897 case 5: { 888 case 5: {
898 _DrawLatticeGouraudShading(pBitmap, &FinalMatrix, 889 DrawLatticeGouraudShading(pBitmap, &FinalMatrix,
899 (CPDF_Stream*)pPattern->m_pShadingObj, pFuncs, 890 ToStream(pPattern->m_pShadingObj), pFuncs,
900 nFuncs, pColorSpace, alpha); 891 nFuncs, pColorSpace, alpha);
901 } break; 892 } break;
902 case 6: 893 case 6:
903 case 7: { 894 case 7: {
904 _DrawCoonPatchMeshes(pPattern->m_ShadingType - 6, pBitmap, &FinalMatrix, 895 DrawCoonPatchMeshes(pPattern->m_ShadingType - 6, pBitmap, &FinalMatrix,
905 (CPDF_Stream*)pPattern->m_pShadingObj, pFuncs, 896 ToStream(pPattern->m_pShadingObj), pFuncs, nFuncs,
906 nFuncs, pColorSpace, fill_mode, alpha); 897 pColorSpace, fill_mode, alpha);
907 } break; 898 } break;
908 } 899 }
909 if (bAlphaMode) { 900 if (bAlphaMode) {
910 pBitmap->LoadChannel(FXDIB_Red, pBitmap, FXDIB_Alpha); 901 pBitmap->LoadChannel(FXDIB_Red, pBitmap, FXDIB_Alpha);
911 } 902 }
912 if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) { 903 if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
913 pBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor); 904 pBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor);
914 } 905 }
915 buffer.OutputToDevice(); 906 buffer.OutputToDevice();
916 } 907 }
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 } 1203 }
1213 } 1204 }
1214 if (bStroke) { 1205 if (bStroke) {
1215 CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor(); 1206 CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor();
1216 if (StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) { 1207 if (StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
1217 DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE); 1208 DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE);
1218 bStroke = FALSE; 1209 bStroke = FALSE;
1219 } 1210 }
1220 } 1211 }
1221 } 1212 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698