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

Side by Side Diff: core/src/fpdfapi/fpdf_render/fpdf_render_pattern.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_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"
(...skipping 11 matching lines...) Expand all
22 FX_FLOAT start_x = pCoords->GetNumber(0); 22 FX_FLOAT start_x = pCoords->GetNumber(0);
23 FX_FLOAT start_y = pCoords->GetNumber(1); 23 FX_FLOAT start_y = pCoords->GetNumber(1);
24 FX_FLOAT end_x = pCoords->GetNumber(2); 24 FX_FLOAT end_x = pCoords->GetNumber(2);
25 FX_FLOAT end_y = pCoords->GetNumber(3); 25 FX_FLOAT end_y = pCoords->GetNumber(3);
26 FX_FLOAT t_min = 0, t_max = 1.0f; 26 FX_FLOAT t_min = 0, t_max = 1.0f;
27 CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain")); 27 CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain"));
28 if (pArray) { 28 if (pArray) {
29 t_min = pArray->GetNumber(0); 29 t_min = pArray->GetNumber(0);
30 t_max = pArray->GetNumber(1); 30 t_max = pArray->GetNumber(1);
31 } 31 }
32 FX_BOOL bStartExtend = FALSE, bEndExtend = FALSE; 32 bool bStartExtend = false, bEndExtend = false;
33 pArray = pDict->GetArray(FX_BSTRC("Extend")); 33 pArray = pDict->GetArray(FX_BSTRC("Extend"));
34 if (pArray) { 34 if (pArray) {
35 bStartExtend = pArray->GetInteger(0); 35 bStartExtend = pArray->GetInteger(0);
36 bEndExtend = pArray->GetInteger(1); 36 bEndExtend = pArray->GetInteger(1);
37 } 37 }
38 int width = pBitmap->GetWidth(); 38 int width = pBitmap->GetWidth();
39 int height = pBitmap->GetHeight(); 39 int height = pBitmap->GetHeight();
40 FX_FLOAT x_span = end_x - start_x; 40 FX_FLOAT x_span = end_x - start_x;
41 FX_FLOAT y_span = end_y - start_y; 41 FX_FLOAT y_span = end_y - start_y;
42 FX_FLOAT axis_len_square = FXSYS_Mul(x_span, x_span) + FXSYS_Mul(y_span, y_s pan); 42 FX_FLOAT axis_len_square = FXSYS_Mul(x_span, x_span) + FXSYS_Mul(y_span, y_s pan);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 FX_FLOAT end_y = pCoords->GetNumber(4); 109 FX_FLOAT end_y = pCoords->GetNumber(4);
110 FX_FLOAT end_r = pCoords->GetNumber(5); 110 FX_FLOAT end_r = pCoords->GetNumber(5);
111 CFX_AffineMatrix matrix; 111 CFX_AffineMatrix matrix;
112 matrix.SetReverse(*pObject2Bitmap); 112 matrix.SetReverse(*pObject2Bitmap);
113 FX_FLOAT t_min = 0, t_max = 1.0f; 113 FX_FLOAT t_min = 0, t_max = 1.0f;
114 CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain")); 114 CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain"));
115 if (pArray) { 115 if (pArray) {
116 t_min = pArray->GetNumber(0); 116 t_min = pArray->GetNumber(0);
117 t_max = pArray->GetNumber(1); 117 t_max = pArray->GetNumber(1);
118 } 118 }
119 FX_BOOL bStartExtend = FALSE, bEndExtend = FALSE; 119 bool bStartExtend = false, bEndExtend = false;
120 pArray = pDict->GetArray(FX_BSTRC("Extend")); 120 pArray = pDict->GetArray(FX_BSTRC("Extend"));
121 if (pArray) { 121 if (pArray) {
122 bStartExtend = pArray->GetInteger(0); 122 bStartExtend = pArray->GetInteger(0);
123 bEndExtend = pArray->GetInteger(1); 123 bEndExtend = pArray->GetInteger(1);
124 } 124 }
125 int total_results = 0; 125 int total_results = 0;
126 for (int j = 0; j < nFuncs; j ++) { 126 for (int j = 0; j < nFuncs; j ++) {
127 if (pFuncs[j]) { 127 if (pFuncs[j]) {
128 total_results += pFuncs[j]->CountOutputs(); 128 total_results += pFuncs[j]->CountOutputs();
129 } 129 }
(...skipping 18 matching lines...) Expand all
148 } 148 }
149 FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f; 149 FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
150 pCS->GetRGB(pResults, R, G, B); 150 pCS->GetRGB(pResults, R, G, B);
151 rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXS YS_round(G * 255), FXSYS_round(B * 255))); 151 rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXS YS_round(G * 255), FXSYS_round(B * 255)));
152 } 152 }
153 FX_FLOAT a = FXSYS_Mul(start_x - end_x, start_x - end_x) + 153 FX_FLOAT a = FXSYS_Mul(start_x - end_x, start_x - end_x) +
154 FXSYS_Mul(start_y - end_y, start_y - end_y) - FXSYS_Mul(start_r - end_r, start_r - end_r); 154 FXSYS_Mul(start_y - end_y, start_y - end_y) - FXSYS_Mul(start_r - end_r, start_r - end_r);
155 int width = pBitmap->GetWidth(); 155 int width = pBitmap->GetWidth();
156 int height = pBitmap->GetHeight(); 156 int height = pBitmap->GetHeight();
157 int pitch = pBitmap->GetPitch(); 157 int pitch = pBitmap->GetPitch();
158 FX_BOOL bDecreasing = FALSE; 158 bool bDecreasing = false;
159 if (start_r > end_r) { 159 if (start_r > end_r) {
160 int length = (int)FXSYS_sqrt((FXSYS_Mul(start_x - end_x, start_x - end_x ) + FXSYS_Mul(start_y - end_y, start_y - end_y))); 160 int length = (int)FXSYS_sqrt((FXSYS_Mul(start_x - end_x, start_x - end_x ) + FXSYS_Mul(start_y - end_y, start_y - end_y)));
161 if (length < start_r - end_r) { 161 if (length < start_r - end_r) {
162 bDecreasing = TRUE; 162 bDecreasing = true;
163 } 163 }
164 } 164 }
165 for (int row = 0; row < height; row ++) { 165 for (int row = 0; row < height; row ++) {
166 FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch); 166 FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
167 for (int column = 0; column < width; column ++) { 167 for (int column = 0; column < width; column ++) {
168 FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row; 168 FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
169 matrix.Transform(x, y); 169 matrix.Transform(x, y);
170 FX_FLOAT b = -2 * (FXSYS_Mul(x - start_x, end_x - start_x) + FXSYS_M ul(y - start_y, end_y - start_y) + 170 FX_FLOAT b = -2 * (FXSYS_Mul(x - start_x, end_x - start_x) + FXSYS_M ul(y - start_y, end_y - start_y) +
171 FXSYS_Mul(start_r, end_r - start_r)); 171 FXSYS_Mul(start_r, end_r - start_r));
172 FX_FLOAT c = FXSYS_Mul(x - start_x, x - start_x) + FXSYS_Mul(y - sta rt_y, y - start_y) - 172 FX_FLOAT c = FXSYS_Mul(x - start_x, x - start_x) + FXSYS_Mul(y - sta rt_y, y - start_y) -
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 offset += nresults; 274 offset += nresults;
275 } 275 }
276 } 276 }
277 } 277 }
278 FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f; 278 FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
279 pCS->GetRGB(pResults, R, G, B); 279 pCS->GetRGB(pResults, R, G, B);
280 dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE(alpha, (int32_t)(R * 255) , (int32_t)(G * 255), (int32_t)(B * 255))); 280 dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE(alpha, (int32_t)(R * 255) , (int32_t)(G * 255), (int32_t)(B * 255)));
281 } 281 }
282 } 282 }
283 } 283 }
284 FX_BOOL _GetScanlineIntersect(int y, FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_F LOAT y2, FX_FLOAT& x) 284 bool _GetScanlineIntersect(int y, FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOA T y2, FX_FLOAT& x)
285 { 285 {
286 if (y1 == y2) { 286 if (y1 == y2) {
287 return FALSE; 287 return false;
288 } 288 }
289 if (y1 < y2) { 289 if (y1 < y2) {
290 if (y < y1 || y > y2) { 290 if (y < y1 || y > y2) {
291 return FALSE; 291 return false;
292 } 292 }
293 } else { 293 } else {
294 if (y < y2 || y > y1) { 294 if (y < y2 || y > y1) {
295 return FALSE; 295 return false;
296 } 296 }
297 } 297 }
298 x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1); 298 x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1);
299 return TRUE; 299 return true;
300 } 300 }
301 static void _DrawGouraud(CFX_DIBitmap* pBitmap, int alpha, CPDF_MeshVertex trian gle[3]) 301 static void _DrawGouraud(CFX_DIBitmap* pBitmap, int alpha, CPDF_MeshVertex trian gle[3])
302 { 302 {
303 FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y; 303 FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y;
304 for (int i = 1; i < 3; i ++) { 304 for (int i = 1; i < 3; i ++) {
305 if (min_y > triangle[i].y) { 305 if (min_y > triangle[i].y) {
306 min_y = triangle[i].y; 306 min_y = triangle[i].y;
307 } 307 }
308 if (max_y < triangle[i].y) { 308 if (max_y < triangle[i].y) {
309 max_y = triangle[i].y; 309 max_y = triangle[i].y;
310 } 310 }
311 } 311 }
312 if (min_y == max_y) { 312 if (min_y == max_y) {
313 return; 313 return;
314 } 314 }
315 int min_yi = (int)FXSYS_floor(min_y), max_yi = (int)FXSYS_ceil(max_y); 315 int min_yi = (int)FXSYS_floor(min_y), max_yi = (int)FXSYS_ceil(max_y);
316 if (min_yi < 0) { 316 if (min_yi < 0) {
317 min_yi = 0; 317 min_yi = 0;
318 } 318 }
319 if (max_yi >= pBitmap->GetHeight()) { 319 if (max_yi >= pBitmap->GetHeight()) {
320 max_yi = pBitmap->GetHeight() - 1; 320 max_yi = pBitmap->GetHeight() - 1;
321 } 321 }
322 for (int y = min_yi; y <= max_yi; y ++) { 322 for (int y = min_yi; y <= max_yi; y ++) {
323 int nIntersects = 0; 323 int nIntersects = 0;
324 FX_FLOAT inter_x[3], r[3], g[3], b[3]; 324 FX_FLOAT inter_x[3], r[3], g[3], b[3];
325 for (int i = 0; i < 3; i ++) { 325 for (int i = 0; i < 3; i ++) {
326 CPDF_MeshVertex& vertex1 = triangle[i]; 326 CPDF_MeshVertex& vertex1 = triangle[i];
327 CPDF_MeshVertex& vertex2 = triangle[(i + 1) % 3]; 327 CPDF_MeshVertex& vertex2 = triangle[(i + 1) % 3];
328 FX_BOOL bIntersect = _GetScanlineIntersect(y, vertex1.x, vertex1.y, 328 bool bIntersect = _GetScanlineIntersect(y, vertex1.x, vertex1.y,
329 vertex2.x, vertex2.y, inter_x[nIntersects]); 329 vertex2.x, vertex2.y, inter_x[nIntersects]);
330 if (!bIntersect) { 330 if (!bIntersect) {
331 continue; 331 continue;
332 } 332 }
333 r[nIntersects] = vertex1.r + FXSYS_MulDiv(vertex2.r - vertex1.r, y - vertex1.y, vertex2.y - vertex1.y); 333 r[nIntersects] = vertex1.r + FXSYS_MulDiv(vertex2.r - vertex1.r, y - vertex1.y, vertex2.y - vertex1.y);
334 g[nIntersects] = vertex1.g + FXSYS_MulDiv(vertex2.g - vertex1.g, y - vertex1.y, vertex2.y - vertex1.y); 334 g[nIntersects] = vertex1.g + FXSYS_MulDiv(vertex2.g - vertex1.g, y - vertex1.y, vertex2.y - vertex1.y);
335 b[nIntersects] = vertex1.b + FXSYS_MulDiv(vertex2.b - vertex1.b, y - vertex1.y, vertex2.y - vertex1.y); 335 b[nIntersects] = vertex1.b + FXSYS_MulDiv(vertex2.b - vertex1.b, y - vertex1.y, vertex2.y - vertex1.y);
336 nIntersects ++; 336 nIntersects ++;
337 } 337 }
338 if (nIntersects != 2) { 338 if (nIntersects != 2) {
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 }; 594 };
595 struct CPDF_PatchDrawer { 595 struct CPDF_PatchDrawer {
596 Coon_Color patch_colors[4]; 596 Coon_Color patch_colors[4];
597 int max_delta; 597 int max_delta;
598 CFX_PathData path; 598 CFX_PathData path;
599 CFX_RenderDevice* pDevice; 599 CFX_RenderDevice* pDevice;
600 int fill_mode; 600 int fill_mode;
601 int alpha; 601 int alpha;
602 void Draw(int x_scale, int y_scale, int left, int bottom, Coon_Bezier C1, Co on_Bezier C2, Coon_Bezier D1, Coon_Bezier D2) 602 void Draw(int x_scale, int y_scale, int left, int bottom, Coon_Bezier C1, Co on_Bezier C2, Coon_Bezier D1, Coon_Bezier D2)
603 { 603 {
604 FX_BOOL bSmall = C1.Distance() < 2 && C2.Distance() < 2 && D1.Distance() < 2 && D2.Distance() < 2; 604 bool bSmall = C1.Distance() < 2 && C2.Distance() < 2 && D1.Distance() < 2 && D2.Distance() < 2;
605 Coon_Color div_colors[4]; 605 Coon_Color div_colors[4];
606 int d_bottom, d_left, d_top, d_right; 606 int d_bottom, d_left, d_top, d_right;
607 div_colors[0].BiInterpol(patch_colors, left, bottom, x_scale, y_scale); 607 div_colors[0].BiInterpol(patch_colors, left, bottom, x_scale, y_scale);
608 if (!bSmall) { 608 if (!bSmall) {
609 div_colors[1].BiInterpol(patch_colors, left, bottom + 1, x_scale, y_ scale); 609 div_colors[1].BiInterpol(patch_colors, left, bottom + 1, x_scale, y_ scale);
610 div_colors[2].BiInterpol(patch_colors, left + 1, bottom + 1, x_scale , y_scale); 610 div_colors[2].BiInterpol(patch_colors, left + 1, bottom + 1, x_scale , y_scale);
611 div_colors[3].BiInterpol(patch_colors, left + 1, bottom, x_scale, y_ scale); 611 div_colors[3].BiInterpol(patch_colors, left + 1, bottom, x_scale, y_ scale);
612 d_bottom = div_colors[3].Distance(div_colors[0]); 612 d_bottom = div_colors[3].Distance(div_colors[0]);
613 d_left = div_colors[1].Distance(div_colors[0]); 613 d_left = div_colors[1].Distance(div_colors[0]);
614 d_top = div_colors[1].Distance(div_colors[2]); 614 d_top = div_colors[1].Distance(div_colors[2]);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 bottom *= 2; 656 bottom *= 2;
657 Draw(x_scale, y_scale, left, bottom, C1.first_half(), m1f, D1.fi rst_half(), m2f); 657 Draw(x_scale, y_scale, left, bottom, C1.first_half(), m1f, D1.fi rst_half(), m2f);
658 Draw(x_scale, y_scale, left, bottom + 1, m1f, C2.first_half(), D 1.second_half(), m2s); 658 Draw(x_scale, y_scale, left, bottom + 1, m1f, C2.first_half(), D 1.second_half(), m2s);
659 Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), m1s, m2f, D2.first_half()); 659 Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), m1s, m2f, D2.first_half());
660 Draw(x_scale, y_scale, left + 1, bottom + 1, m1s, C2.second_half (), m2s, D2.second_half()); 660 Draw(x_scale, y_scale, left + 1, bottom + 1, m1s, C2.second_half (), m2s, D2.second_half());
661 } 661 }
662 } 662 }
663 } 663 }
664 }; 664 };
665 665
666 FX_BOOL _CheckCoonTensorPara(const CPDF_MeshStream &stream) 666 bool _CheckCoonTensorPara(const CPDF_MeshStream &stream)
667 { 667 {
668 FX_BOOL bCoorBits = ( stream.m_nCoordBits== 1 || 668 bool bCoorBits = ( stream.m_nCoordBits== 1 ||
669 stream.m_nCoordBits == 2 || 669 stream.m_nCoordBits == 2 ||
670 stream.m_nCoordBits == 4 || 670 stream.m_nCoordBits == 4 ||
671 stream.m_nCoordBits == 8 || 671 stream.m_nCoordBits == 8 ||
672 stream.m_nCoordBits == 12 || 672 stream.m_nCoordBits == 12 ||
673 stream.m_nCoordBits == 16 || 673 stream.m_nCoordBits == 16 ||
674 stream.m_nCoordBits == 24 || 674 stream.m_nCoordBits == 24 ||
675 stream.m_nCoordBits == 32 ); 675 stream.m_nCoordBits == 32 );
676 676
677 FX_BOOL bCompBits = ( stream.m_nCompBits == 1 || 677 bool bCompBits = ( stream.m_nCompBits == 1 ||
678 stream.m_nCompBits == 2 || 678 stream.m_nCompBits == 2 ||
679 stream.m_nCompBits == 4 || 679 stream.m_nCompBits == 4 ||
680 stream.m_nCompBits == 8 || 680 stream.m_nCompBits == 8 ||
681 stream.m_nCompBits == 12 || 681 stream.m_nCompBits == 12 ||
682 stream.m_nCompBits == 16 ); 682 stream.m_nCompBits == 16 );
683 683
684 FX_BOOL bFlagBits = ( stream.m_nFlagBits == 2 || 684 bool bFlagBits = ( stream.m_nFlagBits == 2 ||
685 stream.m_nFlagBits == 4 || 685 stream.m_nFlagBits == 4 ||
686 stream.m_nFlagBits == 8 ); 686 stream.m_nFlagBits == 8 );
687 687
688 return bCoorBits && bCompBits && bFlagBits; 688 return bCoorBits && bCompBits && bFlagBits;
689 } 689 }
690 690
691 static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_Aff ineMatrix* pObject2Bitmap, 691 static void _DrawCoonPatchMeshes(bool bTensor, CFX_DIBitmap* pBitmap, CFX_Affine Matrix* pObject2Bitmap,
692 CPDF_Stream* pShadingStream, CPDF_Function** pF uncs, int nFuncs, 692 CPDF_Stream* pShadingStream, CPDF_Function** pF uncs, int nFuncs,
693 CPDF_ColorSpace* pCS, int fill_mode, int alpha) 693 CPDF_ColorSpace* pCS, int fill_mode, int alpha)
694 { 694 {
695 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); 695 ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
696 if (pShadingStream->GetType() != PDFOBJ_STREAM) { 696 if (pShadingStream->GetType() != PDFOBJ_STREAM) {
697 return; 697 return;
698 } 698 }
699 CFX_FxgeDevice device; 699 CFX_FxgeDevice device;
700 device.Attach(pBitmap); 700 device.Attach(pBitmap);
701 CPDF_MeshStream stream; 701 CPDF_MeshStream stream;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 C2.FromPoints(coords[3].x, coords[3].y, coords[4].x, coords[4].y, coords [5].x, coords[5].y, 761 C2.FromPoints(coords[3].x, coords[3].y, coords[4].x, coords[4].y, coords [5].x, coords[5].y,
762 coords[6].x, coords[6].y); 762 coords[6].x, coords[6].y);
763 D1.FromPoints(coords[0].x, coords[0].y, coords[1].x, coords[1].y, coords [2].x, coords[2].y, 763 D1.FromPoints(coords[0].x, coords[0].y, coords[1].x, coords[1].y, coords [2].x, coords[2].y,
764 coords[3].x, coords[3].y); 764 coords[3].x, coords[3].y);
765 D2.FromPoints(coords[9].x, coords[9].y, coords[8].x, coords[8].y, coords [7].x, coords[7].y, 765 D2.FromPoints(coords[9].x, coords[9].y, coords[8].x, coords[8].y, coords [7].x, coords[7].y,
766 coords[6].x, coords[6].y); 766 coords[6].x, coords[6].y);
767 patch.Draw(1, 1, 0, 0, C1, C2, D1, D2); 767 patch.Draw(1, 1, 0, 0, C1, C2, D1, D2);
768 } 768 }
769 } 769 }
770 void CPDF_RenderStatus::DrawShading(CPDF_ShadingPattern* pPattern, CFX_AffineMat rix* pMatrix, 770 void CPDF_RenderStatus::DrawShading(CPDF_ShadingPattern* pPattern, CFX_AffineMat rix* pMatrix,
771 FX_RECT& clip_rect, int alpha, FX_BOOL bAlph aMode) 771 FX_RECT& clip_rect, int alpha, bool bAlphaMo de)
772 { 772 {
773 CPDF_Function** pFuncs = pPattern->m_pFunctions; 773 CPDF_Function** pFuncs = pPattern->m_pFunctions;
774 int nFuncs = pPattern->m_nFuncs; 774 int nFuncs = pPattern->m_nFuncs;
775 CPDF_Dictionary* pDict = pPattern->m_pShadingObj->GetDict(); 775 CPDF_Dictionary* pDict = pPattern->m_pShadingObj->GetDict();
776 CPDF_ColorSpace* pColorSpace = pPattern->m_pCS; 776 CPDF_ColorSpace* pColorSpace = pPattern->m_pCS;
777 if (pColorSpace == NULL) { 777 if (pColorSpace == NULL) {
778 return; 778 return;
779 } 779 }
780 FX_ARGB background = 0; 780 FX_ARGB background = 0;
781 if (!pPattern->m_bShadingObj && pPattern->m_pShadingObj->GetDict()->KeyExist (FX_BSTRC("Background"))) { 781 if (!pPattern->m_bShadingObj && pPattern->m_pShadingObj->GetDict()->KeyExist (FX_BSTRC("Background"))) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 break; 833 break;
834 } 834 }
835 if (bAlphaMode) { 835 if (bAlphaMode) {
836 pBitmap->LoadChannel(FXDIB_Red, pBitmap, FXDIB_Alpha); 836 pBitmap->LoadChannel(FXDIB_Red, pBitmap, FXDIB_Alpha);
837 } 837 }
838 if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) { 838 if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
839 pBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor) ; 839 pBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor) ;
840 } 840 }
841 buffer.OutputToDevice(); 841 buffer.OutputToDevice();
842 } 842 }
843 void CPDF_RenderStatus::DrawShadingPattern(CPDF_ShadingPattern* pattern, CPDF_Pa geObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke) 843 void CPDF_RenderStatus::DrawShadingPattern(CPDF_ShadingPattern* pattern, CPDF_Pa geObject* pPageObj, const CFX_AffineMatrix* pObj2Device, bool bStroke)
844 { 844 {
845 if (!pattern->Load()) { 845 if (!pattern->Load()) {
846 return; 846 return;
847 } 847 }
848 m_pDevice->SaveState(); 848 m_pDevice->SaveState();
849 if (pPageObj->m_Type == PDFPAGE_PATH) { 849 if (pPageObj->m_Type == PDFPAGE_PATH) {
850 if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) { 850 if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) {
851 m_pDevice->RestoreState(); 851 m_pDevice->RestoreState();
852 return; 852 return;
853 } 853 }
854 } else if (pPageObj->m_Type == PDFPAGE_IMAGE) { 854 } else if (pPageObj->m_Type == PDFPAGE_IMAGE) {
855 FX_RECT rect = pPageObj->GetBBox(pObj2Device); 855 FX_RECT rect = pPageObj->GetBBox(pObj2Device);
856 m_pDevice->SetClip_Rect(&rect); 856 m_pDevice->SetClip_Rect(&rect);
857 } else { 857 } else {
858 return; 858 return;
859 } 859 }
860 FX_RECT rect; 860 FX_RECT rect;
861 if (GetObjectClippedRect(pPageObj, pObj2Device, FALSE, rect)) { 861 if (GetObjectClippedRect(pPageObj, pObj2Device, false, rect)) {
862 m_pDevice->RestoreState(); 862 m_pDevice->RestoreState();
863 return; 863 return;
864 } 864 }
865 CFX_AffineMatrix matrix = pattern->m_Pattern2Form; 865 CFX_AffineMatrix matrix = pattern->m_Pattern2Form;
866 matrix.Concat(*pObj2Device); 866 matrix.Concat(*pObj2Device);
867 GetScaledMatrix(matrix); 867 GetScaledMatrix(matrix);
868 int alpha = pPageObj->m_GeneralState.GetAlpha(bStroke); 868 int alpha = pPageObj->m_GeneralState.GetAlpha(bStroke);
869 DrawShading(pattern, &matrix, rect, alpha, m_Options.m_ColorMode == RENDER_C OLOR_ALPHA); 869 DrawShading(pattern, &matrix, rect, alpha, m_Options.m_ColorMode == RENDER_C OLOR_ALPHA);
870 m_pDevice->RestoreState(); 870 m_pDevice->RestoreState();
871 } 871 }
872 FX_BOOL CPDF_RenderStatus::ProcessShading(CPDF_ShadingObject* pShadingObj, const CFX_AffineMatrix* pObj2Device) 872 bool CPDF_RenderStatus::ProcessShading(CPDF_ShadingObject* pShadingObj, const CF X_AffineMatrix* pObj2Device)
873 { 873 {
874 FX_RECT rect = pShadingObj->GetBBox(pObj2Device); 874 FX_RECT rect = pShadingObj->GetBBox(pObj2Device);
875 FX_RECT clip_box = m_pDevice->GetClipBox(); 875 FX_RECT clip_box = m_pDevice->GetClipBox();
876 rect.Intersect(clip_box); 876 rect.Intersect(clip_box);
877 if (rect.IsEmpty()) { 877 if (rect.IsEmpty()) {
878 return TRUE; 878 return true;
879 } 879 }
880 CFX_AffineMatrix matrix = pShadingObj->m_Matrix; 880 CFX_AffineMatrix matrix = pShadingObj->m_Matrix;
881 matrix.Concat(*pObj2Device); 881 matrix.Concat(*pObj2Device);
882 DrawShading(pShadingObj->m_pShading, &matrix, rect, pShadingObj->m_GeneralSt ate.GetAlpha(FALSE), 882 DrawShading(pShadingObj->m_pShading, &matrix, rect, pShadingObj->m_GeneralSt ate.GetAlpha(false),
883 m_Options.m_ColorMode == RENDER_COLOR_ALPHA); 883 m_Options.m_ColorMode == RENDER_COLOR_ALPHA);
884 return TRUE; 884 return true;
885 } 885 }
886 static CFX_DIBitmap* DrawPatternBitmap(CPDF_Document* pDoc, CPDF_PageRenderCache * pCache, 886 static CFX_DIBitmap* DrawPatternBitmap(CPDF_Document* pDoc, CPDF_PageRenderCache * pCache,
887 CPDF_TilingPattern* pPattern, const CFX_A ffineMatrix* pObject2Device, 887 CPDF_TilingPattern* pPattern, const CFX_A ffineMatrix* pObject2Device,
888 int width, int height, int flags) 888 int width, int height, int flags)
889 { 889 {
890 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; 890 CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
891 if (!pBitmap->Create(width, height, pPattern->m_bColored ? FXDIB_Argb : FXDI B_8bppMask)) { 891 if (!pBitmap->Create(width, height, pPattern->m_bColored ? FXDIB_Argb : FXDI B_8bppMask)) {
892 delete pBitmap; 892 delete pBitmap;
893 return NULL; 893 return NULL;
894 } 894 }
(...skipping 12 matching lines...) Expand all
907 if (!pPattern->m_bColored) { 907 if (!pPattern->m_bColored) {
908 options.m_ColorMode = RENDER_COLOR_ALPHA; 908 options.m_ColorMode = RENDER_COLOR_ALPHA;
909 } 909 }
910 flags |= RENDER_FORCE_HALFTONE; 910 flags |= RENDER_FORCE_HALFTONE;
911 options.m_Flags = flags; 911 options.m_Flags = flags;
912 CPDF_RenderContext context; 912 CPDF_RenderContext context;
913 context.Create(pDoc, pCache, NULL); 913 context.Create(pDoc, pCache, NULL);
914 context.DrawObjectList(&bitmap_device, pPattern->m_pForm, &mtPattern2Bitmap, &options); 914 context.DrawObjectList(&bitmap_device, pPattern->m_pForm, &mtPattern2Bitmap, &options);
915 return pBitmap; 915 return pBitmap;
916 } 916 }
917 void CPDF_RenderStatus::DrawTilingPattern(CPDF_TilingPattern* pPattern, CPDF_Pag eObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke) 917 void CPDF_RenderStatus::DrawTilingPattern(CPDF_TilingPattern* pPattern, CPDF_Pag eObject* pPageObj, const CFX_AffineMatrix* pObj2Device, bool bStroke)
918 { 918 {
919 if (!pPattern->Load()) { 919 if (!pPattern->Load()) {
920 return; 920 return;
921 } 921 }
922 m_pDevice->SaveState(); 922 m_pDevice->SaveState();
923 if (pPageObj->m_Type == PDFPAGE_PATH) { 923 if (pPageObj->m_Type == PDFPAGE_PATH) {
924 if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) { 924 if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) {
925 m_pDevice->RestoreState(); 925 m_pDevice->RestoreState();
926 return; 926 return;
927 } 927 }
928 } else if (pPageObj->m_Type == PDFPAGE_IMAGE) { 928 } else if (pPageObj->m_Type == PDFPAGE_IMAGE) {
929 FX_RECT rect = pPageObj->GetBBox(pObj2Device); 929 FX_RECT rect = pPageObj->GetBBox(pObj2Device);
930 m_pDevice->SetClip_Rect(&rect); 930 m_pDevice->SetClip_Rect(&rect);
931 } else { 931 } else {
932 return; 932 return;
933 } 933 }
934 FX_RECT clip_box = m_pDevice->GetClipBox(); 934 FX_RECT clip_box = m_pDevice->GetClipBox();
935 if (clip_box.IsEmpty()) { 935 if (clip_box.IsEmpty()) {
936 m_pDevice->RestoreState(); 936 m_pDevice->RestoreState();
937 return; 937 return;
938 } 938 }
939 CFX_Matrix dCTM = m_pDevice->GetCTM(); 939 CFX_Matrix dCTM = m_pDevice->GetCTM();
940 FX_FLOAT sa = FXSYS_fabs(dCTM.a); 940 FX_FLOAT sa = FXSYS_fabs(dCTM.a);
941 FX_FLOAT sd = FXSYS_fabs(dCTM.d); 941 FX_FLOAT sd = FXSYS_fabs(dCTM.d);
942 clip_box.right = clip_box.left + (int32_t)FXSYS_ceil(clip_box.Width() * sa); 942 clip_box.right = clip_box.left + (int32_t)FXSYS_ceil(clip_box.Width() * sa);
943 clip_box.bottom = clip_box.top + (int32_t)FXSYS_ceil(clip_box.Height() * sd) ; 943 clip_box.bottom = clip_box.top + (int32_t)FXSYS_ceil(clip_box.Height() * sd) ;
944 CFX_AffineMatrix mtPattern2Device = pPattern->m_Pattern2Form; 944 CFX_AffineMatrix mtPattern2Device = pPattern->m_Pattern2Form;
945 mtPattern2Device.Concat(*pObj2Device); 945 mtPattern2Device.Concat(*pObj2Device);
946 GetScaledMatrix(mtPattern2Device); 946 GetScaledMatrix(mtPattern2Device);
947 FX_BOOL bAligned = FALSE; 947 bool bAligned = false;
948 if (pPattern->m_BBox.left == 0 && pPattern->m_BBox.bottom == 0 && 948 if (pPattern->m_BBox.left == 0 && pPattern->m_BBox.bottom == 0 &&
949 pPattern->m_BBox.right == pPattern->m_XStep && pPattern->m_BBox.top == pPattern->m_YStep && 949 pPattern->m_BBox.right == pPattern->m_XStep && pPattern->m_BBox.top == pPattern->m_YStep &&
950 (mtPattern2Device.IsScaled() || mtPattern2Device.Is90Rotated())) { 950 (mtPattern2Device.IsScaled() || mtPattern2Device.Is90Rotated())) {
951 bAligned = TRUE; 951 bAligned = true;
952 } 952 }
953 CFX_FloatRect cell_bbox = pPattern->m_BBox; 953 CFX_FloatRect cell_bbox = pPattern->m_BBox;
954 mtPattern2Device.TransformRect(cell_bbox); 954 mtPattern2Device.TransformRect(cell_bbox);
955 int width = (int)FXSYS_ceil(cell_bbox.Width()); 955 int width = (int)FXSYS_ceil(cell_bbox.Width());
956 int height = (int)FXSYS_ceil(cell_bbox.Height()); 956 int height = (int)FXSYS_ceil(cell_bbox.Height());
957 if (width == 0) { 957 if (width == 0) {
958 width = 1; 958 width = 1;
959 } 959 }
960 if (height == 0) { 960 if (height == 0) {
961 height = 1; 961 height = 1;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 } 1068 }
1069 } else { 1069 } else {
1070 if (pPattern->m_bColored) { 1070 if (pPattern->m_bColored) {
1071 screen.CompositeBitmap(start_x, start_y, width, height, pPat ternBitmap, 0, 0); 1071 screen.CompositeBitmap(start_x, start_y, width, height, pPat ternBitmap, 0, 0);
1072 } else { 1072 } else {
1073 screen.CompositeMask(start_x, start_y, width, height, pPatte rnBitmap, fill_argb, 0, 0); 1073 screen.CompositeMask(start_x, start_y, width, height, pPatte rnBitmap, fill_argb, 0, 0);
1074 } 1074 }
1075 } 1075 }
1076 } 1076 }
1077 } 1077 }
1078 CompositeDIBitmap(&screen, clip_box.left, clip_box.top, 0, 255, FXDIB_BLEND_ NORMAL, FALSE); 1078 CompositeDIBitmap(&screen, clip_box.left, clip_box.top, 0, 255, FXDIB_BLEND_ NORMAL, false);
1079 m_pDevice->RestoreState(); 1079 m_pDevice->RestoreState();
1080 delete pPatternBitmap; 1080 delete pPatternBitmap;
1081 } 1081 }
1082 void CPDF_RenderStatus::DrawPathWithPattern(CPDF_PathObject* pPathObj, const CFX _AffineMatrix* pObj2Device, CPDF_Color* pColor, FX_BOOL bStroke) 1082 void CPDF_RenderStatus::DrawPathWithPattern(CPDF_PathObject* pPathObj, const CFX _AffineMatrix* pObj2Device, CPDF_Color* pColor, bool bStroke)
1083 { 1083 {
1084 CPDF_Pattern* pattern = pColor->GetPattern(); 1084 CPDF_Pattern* pattern = pColor->GetPattern();
1085 if (pattern == NULL) { 1085 if (pattern == NULL) {
1086 return; 1086 return;
1087 } 1087 }
1088 if(pattern->m_PatternType == PATTERN_TILING) { 1088 if(pattern->m_PatternType == PATTERN_TILING) {
1089 DrawTilingPattern((CPDF_TilingPattern*)pattern, pPathObj, pObj2Device, b Stroke); 1089 DrawTilingPattern((CPDF_TilingPattern*)pattern, pPathObj, pObj2Device, b Stroke);
1090 } else { 1090 } else {
1091 DrawShadingPattern((CPDF_ShadingPattern*)pattern, pPathObj, pObj2Device, bStroke); 1091 DrawShadingPattern((CPDF_ShadingPattern*)pattern, pPathObj, pObj2Device, bStroke);
1092 } 1092 }
1093 } 1093 }
1094 void CPDF_RenderStatus::ProcessPathPattern(CPDF_PathObject* pPathObj, const CFX_ AffineMatrix* pObj2Device, int& filltype, FX_BOOL& bStroke) 1094 void CPDF_RenderStatus::ProcessPathPattern(CPDF_PathObject* pPathObj, const CFX_ AffineMatrix* pObj2Device, int& filltype, bool& bStroke)
1095 { 1095 {
1096 if(filltype) { 1096 if(filltype) {
1097 CPDF_Color& FillColor = *pPathObj->m_ColorState.GetFillColor(); 1097 CPDF_Color& FillColor = *pPathObj->m_ColorState.GetFillColor();
1098 if(FillColor.m_pCS && FillColor.m_pCS->GetFamily() == PDFCS_PATTERN) { 1098 if(FillColor.m_pCS && FillColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
1099 DrawPathWithPattern(pPathObj, pObj2Device, &FillColor, FALSE); 1099 DrawPathWithPattern(pPathObj, pObj2Device, &FillColor, false);
1100 filltype = 0; 1100 filltype = 0;
1101 } 1101 }
1102 } 1102 }
1103 if(bStroke) { 1103 if(bStroke) {
1104 CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor(); 1104 CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor();
1105 if(StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) { 1105 if(StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
1106 DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE); 1106 DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, true);
1107 bStroke = FALSE; 1107 bStroke = false;
1108 } 1108 }
1109 } 1109 }
1110 } 1110 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp ('k') | core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698