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

Side by Side Diff: ui/gfx/transform.cc

Issue 23724024: Refactor TransformPoint{,Reverse}. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase and resolve conflicts. Created 7 years, 3 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
« no previous file with comments | « ui/gfx/transform.h ('k') | ui/gfx/transform_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « ui/gfx/transform.h ('k') | ui/gfx/transform_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698