| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/src/fpdfapi/fpdf_render/render_int.h" | 7 #include "core/src/fpdfapi/fpdf_render/render_int.h" |
| 8 | 8 |
| 9 #include "core/include/fpdfapi/fpdf_pageobj.h" | 9 #include "core/include/fpdfapi/fpdf_pageobj.h" |
| 10 #include "core/include/fpdfapi/fpdf_render.h" | 10 #include "core/include/fpdfapi/fpdf_render.h" |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 } | 312 } |
| 313 if (y1 < y2) { | 313 if (y1 < y2) { |
| 314 if (y < y1 || y > y2) { | 314 if (y < y1 || y > y2) { |
| 315 return FALSE; | 315 return FALSE; |
| 316 } | 316 } |
| 317 } else { | 317 } else { |
| 318 if (y < y2 || y > y1) { | 318 if (y < y2 || y > y1) { |
| 319 return FALSE; | 319 return FALSE; |
| 320 } | 320 } |
| 321 } | 321 } |
| 322 x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1); | 322 x = x1 + ((x2 - x1) * (y - y1) / (y2 - y1)); |
| 323 return TRUE; | 323 return TRUE; |
| 324 } | 324 } |
| 325 static void DrawGouraud(CFX_DIBitmap* pBitmap, | 325 static void DrawGouraud(CFX_DIBitmap* pBitmap, |
| 326 int alpha, | 326 int alpha, |
| 327 CPDF_MeshVertex triangle[3]) { | 327 CPDF_MeshVertex triangle[3]) { |
| 328 FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y; | 328 FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y; |
| 329 for (int i = 1; i < 3; i++) { | 329 for (int i = 1; i < 3; i++) { |
| 330 if (min_y > triangle[i].y) { | 330 if (min_y > triangle[i].y) { |
| 331 min_y = triangle[i].y; | 331 min_y = triangle[i].y; |
| 332 } | 332 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 348 int nIntersects = 0; | 348 int nIntersects = 0; |
| 349 FX_FLOAT inter_x[3], r[3], g[3], b[3]; | 349 FX_FLOAT inter_x[3], r[3], g[3], b[3]; |
| 350 for (int i = 0; i < 3; i++) { | 350 for (int i = 0; i < 3; i++) { |
| 351 CPDF_MeshVertex& vertex1 = triangle[i]; | 351 CPDF_MeshVertex& vertex1 = triangle[i]; |
| 352 CPDF_MeshVertex& vertex2 = triangle[(i + 1) % 3]; | 352 CPDF_MeshVertex& vertex2 = triangle[(i + 1) % 3]; |
| 353 FX_BOOL bIntersect = _GetScanlineIntersect( | 353 FX_BOOL bIntersect = _GetScanlineIntersect( |
| 354 y, vertex1.x, vertex1.y, vertex2.x, vertex2.y, inter_x[nIntersects]); | 354 y, vertex1.x, vertex1.y, vertex2.x, vertex2.y, inter_x[nIntersects]); |
| 355 if (!bIntersect) { | 355 if (!bIntersect) { |
| 356 continue; | 356 continue; |
| 357 } | 357 } |
| 358 r[nIntersects] = | 358 |
| 359 vertex1.r + FXSYS_MulDiv(vertex2.r - vertex1.r, y - vertex1.y, | 359 FX_FLOAT y_dist = (y - vertex1.y) / (vertex2.y - vertex1.y); |
| 360 vertex2.y - vertex1.y); | 360 r[nIntersects] = vertex1.r + ((vertex2.r - vertex1.r) * y_dist); |
| 361 g[nIntersects] = | 361 g[nIntersects] = vertex1.g + ((vertex2.g - vertex1.g) * y_dist); |
| 362 vertex1.g + FXSYS_MulDiv(vertex2.g - vertex1.g, y - vertex1.y, | 362 b[nIntersects] = vertex1.b + ((vertex2.b - vertex1.b) * y_dist); |
| 363 vertex2.y - vertex1.y); | |
| 364 b[nIntersects] = | |
| 365 vertex1.b + FXSYS_MulDiv(vertex2.b - vertex1.b, y - vertex1.y, | |
| 366 vertex2.y - vertex1.y); | |
| 367 nIntersects++; | 363 nIntersects++; |
| 368 } | 364 } |
| 369 if (nIntersects != 2) { | 365 if (nIntersects != 2) { |
| 370 continue; | 366 continue; |
| 371 } | 367 } |
| 372 int min_x, max_x, start_index, end_index; | 368 int min_x, max_x, start_index, end_index; |
| 373 if (inter_x[0] < inter_x[1]) { | 369 if (inter_x[0] < inter_x[1]) { |
| 374 min_x = (int)FXSYS_floor(inter_x[0]); | 370 min_x = (int)FXSYS_floor(inter_x[0]); |
| 375 max_x = (int)FXSYS_ceil(inter_x[1]); | 371 max_x = (int)FXSYS_ceil(inter_x[1]); |
| 376 start_index = 0; | 372 start_index = 0; |
| (...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 } | 1202 } |
| 1207 } | 1203 } |
| 1208 if (bStroke) { | 1204 if (bStroke) { |
| 1209 CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor(); | 1205 CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor(); |
| 1210 if (StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) { | 1206 if (StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) { |
| 1211 DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE); | 1207 DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE); |
| 1212 bStroke = FALSE; | 1208 bStroke = FALSE; |
| 1213 } | 1209 } |
| 1214 } | 1210 } |
| 1215 } | 1211 } |
| OLD | NEW |