OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium 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 // MSVC++ requires this to be set before any other includes to get M_PI. | 5 // MSVC++ requires this to be set before any other includes to get M_PI. |
6 #define _USE_MATH_DEFINES | 6 #define _USE_MATH_DEFINES |
7 | 7 |
8 #include "ui/gfx/transform.h" | 8 #include "ui/gfx/transform.h" |
9 | 9 |
10 #include <cmath> | 10 #include <cmath> |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 | 362 |
363 Vector2dF Transform::To2dTranslation() const { | 363 Vector2dF Transform::To2dTranslation() const { |
364 DCHECK(IsIdentityOrTranslation()); | 364 DCHECK(IsIdentityOrTranslation()); |
365 // Ensure that this translation is truly 2d. | 365 // Ensure that this translation is truly 2d. |
366 const SkMScalar translate_z = matrix_.get(2, 3); | 366 const SkMScalar translate_z = matrix_.get(2, 3); |
367 DCHECK_EQ(0.f, translate_z); | 367 DCHECK_EQ(0.f, translate_z); |
368 return gfx::Vector2dF(SkMScalarToFloat(matrix_.get(0, 3)), | 368 return gfx::Vector2dF(SkMScalarToFloat(matrix_.get(0, 3)), |
369 SkMScalarToFloat(matrix_.get(1, 3))); | 369 SkMScalarToFloat(matrix_.get(1, 3))); |
370 } | 370 } |
371 | 371 |
372 void Transform::TransformPoint(Point& point) const { | 372 void Transform::TransformPoint(Point* point) const { |
| 373 DCHECK(point); |
373 TransformPointInternal(matrix_, point); | 374 TransformPointInternal(matrix_, point); |
374 } | 375 } |
375 | 376 |
376 void Transform::TransformPoint(Point3F& point) const { | 377 void Transform::TransformPoint(Point3F* point) const { |
| 378 DCHECK(point); |
377 TransformPointInternal(matrix_, point); | 379 TransformPointInternal(matrix_, point); |
378 } | 380 } |
379 | 381 |
380 bool Transform::TransformPointReverse(Point& point) const { | 382 bool Transform::TransformPointReverse(Point* point) const { |
| 383 DCHECK(point); |
| 384 |
381 // TODO(sad): Try to avoid trying to invert the matrix. | 385 // TODO(sad): Try to avoid trying to invert the matrix. |
382 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor); | 386 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor); |
383 if (!matrix_.invert(&inverse)) | 387 if (!matrix_.invert(&inverse)) |
384 return false; | 388 return false; |
385 | 389 |
386 TransformPointInternal(inverse, point); | 390 TransformPointInternal(inverse, point); |
387 return true; | 391 return true; |
388 } | 392 } |
389 | 393 |
390 bool Transform::TransformPointReverse(Point3F& point) const { | 394 bool Transform::TransformPointReverse(Point3F* point) const { |
| 395 DCHECK(point); |
| 396 |
391 // TODO(sad): Try to avoid trying to invert the matrix. | 397 // TODO(sad): Try to avoid trying to invert the matrix. |
392 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor); | 398 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor); |
393 if (!matrix_.invert(&inverse)) | 399 if (!matrix_.invert(&inverse)) |
394 return false; | 400 return false; |
395 | 401 |
396 TransformPointInternal(inverse, point); | 402 TransformPointInternal(inverse, point); |
397 return true; | 403 return true; |
398 } | 404 } |
399 | 405 |
400 void Transform::TransformRect(RectF* rect) const { | 406 void Transform::TransformRect(RectF* rect) const { |
(...skipping 29 matching lines...) Expand all Loading... |
430 return false; | 436 return false; |
431 | 437 |
432 if (!BlendDecomposedTransforms(&to_decomp, to_decomp, from_decomp, progress)) | 438 if (!BlendDecomposedTransforms(&to_decomp, to_decomp, from_decomp, progress)) |
433 return false; | 439 return false; |
434 | 440 |
435 matrix_ = ComposeTransform(to_decomp).matrix(); | 441 matrix_ = ComposeTransform(to_decomp).matrix(); |
436 return true; | 442 return true; |
437 } | 443 } |
438 | 444 |
439 void Transform::TransformPointInternal(const SkMatrix44& xform, | 445 void Transform::TransformPointInternal(const SkMatrix44& xform, |
440 Point3F& point) const { | 446 Point3F* point) const { |
441 if (xform.isIdentity()) | 447 if (xform.isIdentity()) |
442 return; | 448 return; |
443 | 449 |
444 SkMScalar p[4] = {SkFloatToMScalar(point.x()), SkFloatToMScalar(point.y()), | 450 SkMScalar p[4] = {SkFloatToMScalar(point->x()), SkFloatToMScalar(point->y()), |
445 SkFloatToMScalar(point.z()), 1}; | 451 SkFloatToMScalar(point->z()), 1}; |
446 | 452 |
447 xform.mapMScalars(p); | 453 xform.mapMScalars(p); |
448 | 454 |
449 if (p[3] != 1 && abs(p[3]) > 0) { | 455 if (p[3] != 1 && abs(p[3]) > 0) { |
450 point.SetPoint(p[0] / p[3], p[1] / p[3], p[2]/ p[3]); | 456 point->SetPoint(p[0] / p[3], p[1] / p[3], p[2]/ p[3]); |
451 } else { | 457 } else { |
452 point.SetPoint(p[0], p[1], p[2]); | 458 point->SetPoint(p[0], p[1], p[2]); |
453 } | 459 } |
454 } | 460 } |
455 | 461 |
456 void Transform::TransformPointInternal(const SkMatrix44& xform, | 462 void Transform::TransformPointInternal(const SkMatrix44& xform, |
457 Point& point) const { | 463 Point* point) const { |
458 if (xform.isIdentity()) | 464 if (xform.isIdentity()) |
459 return; | 465 return; |
460 | 466 |
461 SkMScalar p[4] = {SkFloatToMScalar(point.x()), SkFloatToMScalar(point.y()), 0, | 467 SkMScalar p[4] = {SkFloatToMScalar(point->x()), SkFloatToMScalar(point->y()), |
462 1}; | 468 0, 1}; |
463 | 469 |
464 xform.mapMScalars(p); | 470 xform.mapMScalars(p); |
465 | 471 |
466 point.SetPoint(ToRoundedInt(p[0]), ToRoundedInt(p[1])); | 472 point->SetPoint(ToRoundedInt(p[0]), ToRoundedInt(p[1])); |
467 } | 473 } |
468 | 474 |
469 std::string Transform::ToString() const { | 475 std::string Transform::ToString() const { |
470 return base::StringPrintf( | 476 return base::StringPrintf( |
471 "[ %+0.4f %+0.4f %+0.4f %+0.4f \n" | 477 "[ %+0.4f %+0.4f %+0.4f %+0.4f \n" |
472 " %+0.4f %+0.4f %+0.4f %+0.4f \n" | 478 " %+0.4f %+0.4f %+0.4f %+0.4f \n" |
473 " %+0.4f %+0.4f %+0.4f %+0.4f \n" | 479 " %+0.4f %+0.4f %+0.4f %+0.4f \n" |
474 " %+0.4f %+0.4f %+0.4f %+0.4f ]\n", | 480 " %+0.4f %+0.4f %+0.4f %+0.4f ]\n", |
475 matrix_.get(0, 0), | 481 matrix_.get(0, 0), |
476 matrix_.get(0, 1), | 482 matrix_.get(0, 1), |
477 matrix_.get(0, 2), | 483 matrix_.get(0, 2), |
478 matrix_.get(0, 3), | 484 matrix_.get(0, 3), |
479 matrix_.get(1, 0), | 485 matrix_.get(1, 0), |
480 matrix_.get(1, 1), | 486 matrix_.get(1, 1), |
481 matrix_.get(1, 2), | 487 matrix_.get(1, 2), |
482 matrix_.get(1, 3), | 488 matrix_.get(1, 3), |
483 matrix_.get(2, 0), | 489 matrix_.get(2, 0), |
484 matrix_.get(2, 1), | 490 matrix_.get(2, 1), |
485 matrix_.get(2, 2), | 491 matrix_.get(2, 2), |
486 matrix_.get(2, 3), | 492 matrix_.get(2, 3), |
487 matrix_.get(3, 0), | 493 matrix_.get(3, 0), |
488 matrix_.get(3, 1), | 494 matrix_.get(3, 1), |
489 matrix_.get(3, 2), | 495 matrix_.get(3, 2), |
490 matrix_.get(3, 3)); | 496 matrix_.get(3, 3)); |
491 } | 497 } |
492 | 498 |
493 } // namespace gfx | 499 } // namespace gfx |
OLD | NEW |