| 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 "xfa/src/fxgraphics/src/fx_path_generator.h" | 7 #include "xfa/src/fxgraphics/src/fx_path_generator.h" |
| 8 #include "xfa/src/fxgraphics/src/pre.h" | 8 #include "xfa/src/fxgraphics/src/pre.h" |
| 9 CFX_PathGenerator::CFX_PathGenerator() { | 9 CFX_PathGenerator::CFX_PathGenerator() { |
| 10 m_pPathData = NULL; | 10 m_pPathData = NULL; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 } | 113 } |
| 114 void CFX_PathGenerator::ArcTo(FX_FLOAT x, | 114 void CFX_PathGenerator::ArcTo(FX_FLOAT x, |
| 115 FX_FLOAT y, | 115 FX_FLOAT y, |
| 116 FX_FLOAT width, | 116 FX_FLOAT width, |
| 117 FX_FLOAT height, | 117 FX_FLOAT height, |
| 118 FX_FLOAT start_angle, | 118 FX_FLOAT start_angle, |
| 119 FX_FLOAT sweep_angle) { | 119 FX_FLOAT sweep_angle) { |
| 120 FX_FLOAT x0 = FXSYS_cos(sweep_angle / 2); | 120 FX_FLOAT x0 = FXSYS_cos(sweep_angle / 2); |
| 121 FX_FLOAT y0 = FXSYS_sin(sweep_angle / 2); | 121 FX_FLOAT y0 = FXSYS_sin(sweep_angle / 2); |
| 122 FX_FLOAT tx = FXSYS_Div((1.0f - x0) * 4, 3 * 1.0f); | 122 FX_FLOAT tx = FXSYS_Div((1.0f - x0) * 4, 3 * 1.0f); |
| 123 FX_FLOAT ty = y0 - FXSYS_Div(FXSYS_Mul(tx, x0), y0); | 123 FX_FLOAT ty = y0 - FXSYS_Div(tx * x0, y0); |
| 124 FX_FLOAT px[3], py[3]; | 124 FX_FLOAT px[3], py[3]; |
| 125 px[0] = x0 + tx; | 125 px[0] = x0 + tx; |
| 126 py[0] = -ty; | 126 py[0] = -ty; |
| 127 px[1] = x0 + tx; | 127 px[1] = x0 + tx; |
| 128 py[1] = ty; | 128 py[1] = ty; |
| 129 FX_FLOAT sn = FXSYS_sin(start_angle + sweep_angle / 2); | 129 FX_FLOAT sn = FXSYS_sin(start_angle + sweep_angle / 2); |
| 130 FX_FLOAT cs = FXSYS_cos(start_angle + sweep_angle / 2); | 130 FX_FLOAT cs = FXSYS_cos(start_angle + sweep_angle / 2); |
| 131 int old_count = m_pPathData->GetPointCount(); | 131 int old_count = m_pPathData->GetPointCount(); |
| 132 m_pPathData->AddPointCount(3); | 132 m_pPathData->AddPointCount(3); |
| 133 FX_FLOAT bezier_x, bezier_y; | 133 FX_FLOAT bezier_x, bezier_y; |
| 134 bezier_x = x + FXSYS_Mul(width, FXSYS_Mul(px[0], cs) - FXSYS_Mul(py[0], sn)); | 134 bezier_x = x + (width * ((px[0] * cs) - (py[0] * sn))); |
| 135 bezier_y = y + FXSYS_Mul(height, FXSYS_Mul(px[0], sn) + FXSYS_Mul(py[0], cs)); | 135 bezier_y = y + (height * ((px[0] * sn) + (py[0] * cs))); |
| 136 m_pPathData->SetPoint(old_count, bezier_x, bezier_y, FXPT_BEZIERTO); | 136 m_pPathData->SetPoint(old_count, bezier_x, bezier_y, FXPT_BEZIERTO); |
| 137 bezier_x = x + FXSYS_Mul(width, FXSYS_Mul(px[1], cs) - FXSYS_Mul(py[1], sn)); | 137 bezier_x = x + (width * ((px[1] * cs) - (py[1] * sn))); |
| 138 bezier_y = y + FXSYS_Mul(height, FXSYS_Mul(px[1], sn) + FXSYS_Mul(py[1], cs)); | 138 bezier_y = y + (height * ((px[1] * sn) + (py[1] * cs))); |
| 139 m_pPathData->SetPoint(old_count + 1, bezier_x, bezier_y, FXPT_BEZIERTO); | 139 m_pPathData->SetPoint(old_count + 1, bezier_x, bezier_y, FXPT_BEZIERTO); |
| 140 bezier_x = x + FXSYS_Mul(width, FXSYS_cos(start_angle + sweep_angle)), | 140 bezier_x = x + (width * FXSYS_cos(start_angle + sweep_angle)); |
| 141 bezier_y = y + FXSYS_Mul(height, FXSYS_sin(start_angle + sweep_angle)); | 141 bezier_y = y + (height * FXSYS_sin(start_angle + sweep_angle)); |
| 142 m_pPathData->SetPoint(old_count + 2, bezier_x, bezier_y, FXPT_BEZIERTO); | 142 m_pPathData->SetPoint(old_count + 2, bezier_x, bezier_y, FXPT_BEZIERTO); |
| 143 } | 143 } |
| 144 void CFX_PathGenerator::AddArc(FX_FLOAT x, | 144 void CFX_PathGenerator::AddArc(FX_FLOAT x, |
| 145 FX_FLOAT y, | 145 FX_FLOAT y, |
| 146 FX_FLOAT width, | 146 FX_FLOAT width, |
| 147 FX_FLOAT height, | 147 FX_FLOAT height, |
| 148 FX_FLOAT start_angle, | 148 FX_FLOAT start_angle, |
| 149 FX_FLOAT sweep_angle) { | 149 FX_FLOAT sweep_angle) { |
| 150 #if 0 | 150 #if 0 |
| 151 FX_FIXFLOAT32 sweep = sweep_angle; | 151 FX_FIXFLOAT32 sweep = sweep_angle; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 182 start_angle += FX_PI * 2; | 182 start_angle += FX_PI * 2; |
| 183 } | 183 } |
| 184 if (sweep_angle >= FX_PI * 2) { | 184 if (sweep_angle >= FX_PI * 2) { |
| 185 sweep_angle = FX_PI * 2; | 185 sweep_angle = FX_PI * 2; |
| 186 } | 186 } |
| 187 if (sweep_angle <= -FX_PI * 2) { | 187 if (sweep_angle <= -FX_PI * 2) { |
| 188 sweep_angle = -FX_PI * 2; | 188 sweep_angle = -FX_PI * 2; |
| 189 } | 189 } |
| 190 m_pPathData->AddPointCount(1); | 190 m_pPathData->AddPointCount(1); |
| 191 m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, | 191 m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, |
| 192 x + FXSYS_Mul(width, FXSYS_cos(start_angle)), | 192 x + (width * FXSYS_cos(start_angle)), |
| 193 y + FXSYS_Mul(height, FXSYS_sin(start_angle)), | 193 y + (height * FXSYS_sin(start_angle)), FXPT_MOVETO); |
| 194 FXPT_MOVETO); | |
| 195 FX_FLOAT total_sweep = 0, local_sweep = 0, prev_sweep = 0; | 194 FX_FLOAT total_sweep = 0, local_sweep = 0, prev_sweep = 0; |
| 196 FX_BOOL done = FALSE; | 195 FX_BOOL done = FALSE; |
| 197 do { | 196 do { |
| 198 if (sweep_angle < 0) { | 197 if (sweep_angle < 0) { |
| 199 prev_sweep = total_sweep; | 198 prev_sweep = total_sweep; |
| 200 local_sweep = -FX_PI / 2; | 199 local_sweep = -FX_PI / 2; |
| 201 total_sweep -= FX_PI / 2; | 200 total_sweep -= FX_PI / 2; |
| 202 if (total_sweep <= sweep_angle + bezier_arc_angle_epsilon) { | 201 if (total_sweep <= sweep_angle + bezier_arc_angle_epsilon) { |
| 203 local_sweep = sweep_angle - prev_sweep; | 202 local_sweep = sweep_angle - prev_sweep; |
| 204 done = TRUE; | 203 done = TRUE; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 220 void CFX_PathGenerator::AddPie(FX_FLOAT x, | 219 void CFX_PathGenerator::AddPie(FX_FLOAT x, |
| 221 FX_FLOAT y, | 220 FX_FLOAT y, |
| 222 FX_FLOAT width, | 221 FX_FLOAT width, |
| 223 FX_FLOAT height, | 222 FX_FLOAT height, |
| 224 FX_FLOAT start_angle, | 223 FX_FLOAT start_angle, |
| 225 FX_FLOAT sweep_angle) { | 224 FX_FLOAT sweep_angle) { |
| 226 if (sweep_angle == 0) { | 225 if (sweep_angle == 0) { |
| 227 int old_count = m_pPathData->GetPointCount(); | 226 int old_count = m_pPathData->GetPointCount(); |
| 228 m_pPathData->AddPointCount(2); | 227 m_pPathData->AddPointCount(2); |
| 229 m_pPathData->SetPoint(old_count, x, y, FXPT_MOVETO); | 228 m_pPathData->SetPoint(old_count, x, y, FXPT_MOVETO); |
| 230 m_pPathData->SetPoint( | 229 m_pPathData->SetPoint(old_count + 1, x + (width * FXSYS_cos(start_angle)), |
| 231 old_count + 1, x + FXSYS_Mul(width, FXSYS_cos(start_angle)), | 230 y + (height * FXSYS_sin(start_angle)), FXPT_LINETO); |
| 232 y + FXSYS_Mul(height, FXSYS_sin(start_angle)), FXPT_LINETO); | |
| 233 return; | 231 return; |
| 234 } | 232 } |
| 235 AddArc(x, y, width, height, start_angle, sweep_angle); | 233 AddArc(x, y, width, height, start_angle, sweep_angle); |
| 236 m_pPathData->AddPointCount(1); | 234 m_pPathData->AddPointCount(1); |
| 237 m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, x, y, | 235 m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, x, y, |
| 238 FXPT_LINETO | FXPT_CLOSEFIGURE); | 236 FXPT_LINETO | FXPT_CLOSEFIGURE); |
| 239 } | 237 } |
| OLD | NEW |