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 <limits.h> | 7 #include <limits.h> |
8 | 8 |
9 #include "../../include/fxcrt/fx_coordinates.h" | 9 #include "../../include/fxcrt/fx_coordinates.h" |
10 #include "../../include/fxcrt/fx_ext.h" | 10 #include "../../include/fxcrt/fx_ext.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 void FX_RECT::Union(const FX_RECT& other_rect) | 38 void FX_RECT::Union(const FX_RECT& other_rect) |
39 { | 39 { |
40 Normalize(); | 40 Normalize(); |
41 FX_RECT other = other_rect; | 41 FX_RECT other = other_rect; |
42 other.Normalize(); | 42 other.Normalize(); |
43 left = left < other.left ? left : other.left; | 43 left = left < other.left ? left : other.left; |
44 right = right > other.right ? right : other.right; | 44 right = right > other.right ? right : other.right; |
45 bottom = bottom > other.bottom ? bottom : other.bottom; | 45 bottom = bottom > other.bottom ? bottom : other.bottom; |
46 top = top < other.top ? top : other.top; | 46 top = top < other.top ? top : other.top; |
47 } | 47 } |
48 FX_BOOL GetIntersection(FX_FLOAT low1, FX_FLOAT high1, FX_FLOAT low2, FX_FLOAT h
igh2, | 48 bool GetIntersection(FX_FLOAT low1, FX_FLOAT high1, FX_FLOAT low2, FX_FLOAT high
2, |
49 FX_FLOAT& interlow, FX_FLOAT& interhigh) | 49 FX_FLOAT& interlow, FX_FLOAT& interhigh) |
50 { | 50 { |
51 if (low1 >= high2 || low2 >= high1) { | 51 if (low1 >= high2 || low2 >= high1) { |
52 return FALSE; | 52 return false; |
53 } | 53 } |
54 interlow = low1 > low2 ? low1 : low2; | 54 interlow = low1 > low2 ? low1 : low2; |
55 interhigh = high1 > high2 ? high2 : high1; | 55 interhigh = high1 > high2 ? high2 : high1; |
56 return TRUE; | 56 return true; |
57 } | 57 } |
58 extern "C" int FXSYS_round(FX_FLOAT d) | 58 extern "C" int FXSYS_round(FX_FLOAT d) |
59 { | 59 { |
60 if (d < (FX_FLOAT)INT_MIN) { | 60 if (d < (FX_FLOAT)INT_MIN) { |
61 return INT_MIN; | 61 return INT_MIN; |
62 } | 62 } |
63 if (d > (FX_FLOAT)INT_MAX) { | 63 if (d > (FX_FLOAT)INT_MAX) { |
64 return INT_MAX; | 64 return INT_MAX; |
65 } | 65 } |
66 | 66 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 } | 191 } |
192 FX_RECT CFX_FloatRect::GetClosestRect() const | 192 FX_RECT CFX_FloatRect::GetClosestRect() const |
193 { | 193 { |
194 CFX_FloatRect rect1 = *this; | 194 CFX_FloatRect rect1 = *this; |
195 FX_RECT rect; | 195 FX_RECT rect; |
196 _MatchFloatRange(rect1.left, rect1.right, rect.left, rect.right); | 196 _MatchFloatRange(rect1.left, rect1.right, rect.left, rect.right); |
197 _MatchFloatRange(rect1.bottom, rect1.top, rect.top, rect.bottom); | 197 _MatchFloatRange(rect1.bottom, rect1.top, rect.top, rect.bottom); |
198 rect.Normalize(); | 198 rect.Normalize(); |
199 return rect; | 199 return rect; |
200 } | 200 } |
201 FX_BOOL CFX_FloatRect::Contains(const CFX_FloatRect& other_rect) const | 201 bool CFX_FloatRect::Contains(const CFX_FloatRect& other_rect) const |
202 { | 202 { |
203 CFX_FloatRect n1 = *this; | 203 CFX_FloatRect n1 = *this; |
204 n1.Normalize(); | 204 n1.Normalize(); |
205 CFX_FloatRect n2 = other_rect; | 205 CFX_FloatRect n2 = other_rect; |
206 n2.Normalize(); | 206 n2.Normalize(); |
207 if (n2.left >= n1.left && n2.right <= n1.right && n2.bottom >= n1.bottom &&
n2.top <= n1.top) { | 207 if (n2.left >= n1.left && n2.right <= n1.right && n2.bottom >= n1.bottom &&
n2.top <= n1.top) { |
208 return TRUE; | 208 return true; |
209 } | 209 } |
210 return FALSE; | 210 return false; |
211 } | 211 } |
212 FX_BOOL CFX_FloatRect::Contains(FX_FLOAT x, FX_FLOAT y) const | 212 bool CFX_FloatRect::Contains(FX_FLOAT x, FX_FLOAT y) const |
213 { | 213 { |
214 CFX_FloatRect n1 = *this; | 214 CFX_FloatRect n1 = *this; |
215 n1.Normalize(); | 215 n1.Normalize(); |
216 return x <= n1.right && x >= n1.left && y <= n1.top && y >= n1.bottom; | 216 return x <= n1.right && x >= n1.left && y <= n1.top && y >= n1.bottom; |
217 } | 217 } |
218 void CFX_FloatRect::UpdateRect(FX_FLOAT x, FX_FLOAT y) | 218 void CFX_FloatRect::UpdateRect(FX_FLOAT x, FX_FLOAT y) |
219 { | 219 { |
220 if (left > x) { | 220 if (left > x) { |
221 left = x; | 221 left = x; |
222 } | 222 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 static void FXCRT_Matrix_Concat(CFX_Matrix &m, const CFX_Matrix &m1, const CFX_M
atrix &m2) | 292 static void FXCRT_Matrix_Concat(CFX_Matrix &m, const CFX_Matrix &m1, const CFX_M
atrix &m2) |
293 { | 293 { |
294 FX_FLOAT aa = m1.a * m2.a + m1.b * m2.c; | 294 FX_FLOAT aa = m1.a * m2.a + m1.b * m2.c; |
295 FX_FLOAT bb = m1.a * m2.b + m1.b * m2.d; | 295 FX_FLOAT bb = m1.a * m2.b + m1.b * m2.d; |
296 FX_FLOAT cc = m1.c * m2.a + m1.d * m2.c; | 296 FX_FLOAT cc = m1.c * m2.a + m1.d * m2.c; |
297 FX_FLOAT dd = m1.c * m2.b + m1.d * m2.d; | 297 FX_FLOAT dd = m1.c * m2.b + m1.d * m2.d; |
298 FX_FLOAT ee = m1.e * m2.a + m1.f * m2.c + m2.e; | 298 FX_FLOAT ee = m1.e * m2.a + m1.f * m2.c + m2.e; |
299 FX_FLOAT ff = m1.e * m2.b + m1.f * m2.d + m2.f; | 299 FX_FLOAT ff = m1.e * m2.b + m1.f * m2.d + m2.f; |
300 m.a = aa, m.b = bb, m.c = cc, m.d = dd, m.e = ee, m.f = ff; | 300 m.a = aa, m.b = bb, m.c = cc, m.d = dd, m.e = ee, m.f = ff; |
301 } | 301 } |
302 void CFX_Matrix::Concat(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT
e, FX_FLOAT f, FX_BOOL bPrepended) | 302 void CFX_Matrix::Concat(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT
e, FX_FLOAT f, bool bPrepended) |
303 { | 303 { |
304 CFX_Matrix m; | 304 CFX_Matrix m; |
305 m.Set(a, b, c, d, e, f); | 305 m.Set(a, b, c, d, e, f); |
306 Concat(m, bPrepended); | 306 Concat(m, bPrepended); |
307 } | 307 } |
308 void CFX_Matrix::Concat(const CFX_Matrix &m, FX_BOOL bPrepended) | 308 void CFX_Matrix::Concat(const CFX_Matrix &m, bool bPrepended) |
309 { | 309 { |
310 if (bPrepended) { | 310 if (bPrepended) { |
311 FXCRT_Matrix_Concat(*this, m, *this); | 311 FXCRT_Matrix_Concat(*this, m, *this); |
312 } else { | 312 } else { |
313 FXCRT_Matrix_Concat(*this, *this, m); | 313 FXCRT_Matrix_Concat(*this, *this, m); |
314 } | 314 } |
315 } | 315 } |
316 void CFX_Matrix::ConcatInverse(const CFX_Matrix& src, FX_BOOL bPrepended) | 316 void CFX_Matrix::ConcatInverse(const CFX_Matrix& src, bool bPrepended) |
317 { | 317 { |
318 CFX_Matrix m; | 318 CFX_Matrix m; |
319 m.SetReverse(src); | 319 m.SetReverse(src); |
320 Concat(m, bPrepended); | 320 Concat(m, bPrepended); |
321 } | 321 } |
322 FX_BOOL CFX_Matrix::IsInvertible() const | 322 bool CFX_Matrix::IsInvertible() const |
323 { | 323 { |
324 return FXSYS_fabs(a * d - b * c) >= 0.0001f; | 324 return FXSYS_fabs(a * d - b * c) >= 0.0001f; |
325 } | 325 } |
326 FX_BOOL CFX_Matrix::Is90Rotated() const | 326 bool CFX_Matrix::Is90Rotated() const |
327 { | 327 { |
328 return FXSYS_fabs(a * 1000) < FXSYS_fabs(b) && FXSYS_fabs(d * 1000) < FXSYS_
fabs(c); | 328 return FXSYS_fabs(a * 1000) < FXSYS_fabs(b) && FXSYS_fabs(d * 1000) < FXSYS_
fabs(c); |
329 } | 329 } |
330 FX_BOOL CFX_Matrix::IsScaled() const | 330 bool CFX_Matrix::IsScaled() const |
331 { | 331 { |
332 return FXSYS_fabs(b * 1000) < FXSYS_fabs(a) && FXSYS_fabs(c * 1000) < FXSYS_
fabs(d); | 332 return FXSYS_fabs(b * 1000) < FXSYS_fabs(a) && FXSYS_fabs(c * 1000) < FXSYS_
fabs(d); |
333 } | 333 } |
334 void CFX_Matrix::Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended) | 334 void CFX_Matrix::Translate(FX_FLOAT x, FX_FLOAT y, bool bPrepended) |
335 { | 335 { |
336 if (bPrepended) { | 336 if (bPrepended) { |
337 e += x * a + y * c; | 337 e += x * a + y * c; |
338 f += y * d + x * b; | 338 f += y * d + x * b; |
339 } else { | 339 } else { |
340 e += x, f += y; | 340 e += x, f += y; |
341 } | 341 } |
342 } | 342 } |
343 void CFX_Matrix::Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended) | 343 void CFX_Matrix::Scale(FX_FLOAT sx, FX_FLOAT sy, bool bPrepended) |
344 { | 344 { |
345 a *= sx, d *= sy; | 345 a *= sx, d *= sy; |
346 if (bPrepended) { | 346 if (bPrepended) { |
347 b *= sx; | 347 b *= sx; |
348 c *= sy; | 348 c *= sy; |
349 } else { | 349 } else { |
350 b *= sy; | 350 b *= sy; |
351 c *= sx; | 351 c *= sx; |
352 e *= sx; | 352 e *= sx; |
353 f *= sy; | 353 f *= sy; |
354 } | 354 } |
355 } | 355 } |
356 void CFX_Matrix::Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended) | 356 void CFX_Matrix::Rotate(FX_FLOAT fRadian, bool bPrepended) |
357 { | 357 { |
358 FX_FLOAT cosValue = FXSYS_cos(fRadian); | 358 FX_FLOAT cosValue = FXSYS_cos(fRadian); |
359 FX_FLOAT sinValue = FXSYS_sin(fRadian); | 359 FX_FLOAT sinValue = FXSYS_sin(fRadian); |
360 CFX_Matrix m; | 360 CFX_Matrix m; |
361 m.Set(cosValue, sinValue, -sinValue, cosValue, 0, 0); | 361 m.Set(cosValue, sinValue, -sinValue, cosValue, 0, 0); |
362 if (bPrepended) { | 362 if (bPrepended) { |
363 FXCRT_Matrix_Concat(*this, m, *this); | 363 FXCRT_Matrix_Concat(*this, m, *this); |
364 } else { | 364 } else { |
365 FXCRT_Matrix_Concat(*this, *this, m); | 365 FXCRT_Matrix_Concat(*this, *this, m); |
366 } | 366 } |
367 } | 367 } |
368 void CFX_Matrix::RotateAt(FX_FLOAT fRadian, FX_FLOAT dx, FX_FLOAT dy, FX_BOOL bP
repended) | 368 void CFX_Matrix::RotateAt(FX_FLOAT fRadian, FX_FLOAT dx, FX_FLOAT dy, bool bPrep
ended) |
369 { | 369 { |
370 Translate(dx, dy, bPrepended); | 370 Translate(dx, dy, bPrepended); |
371 Rotate(fRadian, bPrepended); | 371 Rotate(fRadian, bPrepended); |
372 Translate(-dx, -dy, bPrepended); | 372 Translate(-dx, -dy, bPrepended); |
373 } | 373 } |
374 void CFX_Matrix::Shear(FX_FLOAT fAlphaRadian, FX_FLOAT fBetaRadian, FX_BOOL bPre
pended) | 374 void CFX_Matrix::Shear(FX_FLOAT fAlphaRadian, FX_FLOAT fBetaRadian, bool bPrepen
ded) |
375 { | 375 { |
376 CFX_Matrix m; | 376 CFX_Matrix m; |
377 m.Set(1, FXSYS_tan(fAlphaRadian), FXSYS_tan(fBetaRadian), 1, 0, 0); | 377 m.Set(1, FXSYS_tan(fAlphaRadian), FXSYS_tan(fBetaRadian), 1, 0, 0); |
378 if (bPrepended) { | 378 if (bPrepended) { |
379 FXCRT_Matrix_Concat(*this, m, *this); | 379 FXCRT_Matrix_Concat(*this, m, *this); |
380 } else { | 380 } else { |
381 FXCRT_Matrix_Concat(*this, *this, m); | 381 FXCRT_Matrix_Concat(*this, *this, m); |
382 } | 382 } |
383 } | 383 } |
384 void CFX_Matrix::MatchRect(const CFX_FloatRect& dest, const CFX_FloatRect& src) | 384 void CFX_Matrix::MatchRect(const CFX_FloatRect& dest, const CFX_FloatRect& src) |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 left = x[i]; | 560 left = x[i]; |
561 } | 561 } |
562 if (top < y[i]) { | 562 if (top < y[i]) { |
563 top = y[i]; | 563 top = y[i]; |
564 } | 564 } |
565 if (bottom > y[i]) { | 565 if (bottom > y[i]) { |
566 bottom = y[i]; | 566 bottom = y[i]; |
567 } | 567 } |
568 } | 568 } |
569 } | 569 } |
OLD | NEW |