Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "ui/gfx/transform.h" | 5 #include "ui/gfx/transform.h" |
| 6 | 6 |
| 7 #include <cmath> | |
| 8 | |
| 7 #include "ui/gfx/point.h" | 9 #include "ui/gfx/point.h" |
| 8 #include "ui/gfx/rect.h" | 10 #include "ui/gfx/rect.h" |
| 9 #include "ui/gfx/skia_util.h" | 11 #include "ui/gfx/skia_util.h" |
| 10 | 12 |
| 11 namespace ui { | 13 namespace ui { |
| 12 | 14 |
| 13 Transform::Transform() { | 15 Transform::Transform() { |
| 14 matrix_.reset(); | 16 matrix_.reset(); |
| 15 } | 17 } |
| 16 | 18 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 return matrix_.setConcat(transform.matrix_, matrix_); | 66 return matrix_.setConcat(transform.matrix_, matrix_); |
| 65 } | 67 } |
| 66 | 68 |
| 67 bool Transform::HasChange() const { | 69 bool Transform::HasChange() const { |
| 68 return !matrix_.isIdentity(); | 70 return !matrix_.isIdentity(); |
| 69 } | 71 } |
| 70 | 72 |
| 71 bool Transform::TransformPoint(gfx::Point* point) { | 73 bool Transform::TransformPoint(gfx::Point* point) { |
| 72 SkPoint skp; | 74 SkPoint skp; |
| 73 matrix_.mapXY(SkIntToScalar(point->x()), SkIntToScalar(point->y()), &skp); | 75 matrix_.mapXY(SkIntToScalar(point->x()), SkIntToScalar(point->y()), &skp); |
| 74 point->SetPoint(static_cast<int>(skp.fX), static_cast<int>(skp.fY)); | 76 point->SetPoint(static_cast<int>(std::floor(skp.fX)), |
| 77 static_cast<int>(std::floor(skp.fY))); | |
|
wjmaclean
2011/05/24 12:11:40
Just curious ... for positive values, wouldn't thi
sky
2011/05/24 15:51:49
I'm sure we'll have rounding problems until we use
| |
| 75 return true; | 78 return true; |
| 76 } | 79 } |
| 77 | 80 |
| 78 bool Transform::TransformPointReverse(gfx::Point* point) { | 81 bool Transform::TransformPointReverse(gfx::Point* point) { |
| 79 SkMatrix inverse; | 82 SkMatrix inverse; |
| 80 // TODO(sad): Try to avoid trying to invert the matrix. | 83 // TODO(sad): Try to avoid trying to invert the matrix. |
| 81 if (matrix_.invert(&inverse)) { | 84 if (matrix_.invert(&inverse)) { |
| 82 SkPoint skp; | 85 SkPoint skp; |
| 83 inverse.mapXY(SkIntToScalar(point->x()), SkIntToScalar(point->y()), &skp); | 86 inverse.mapXY(SkIntToScalar(point->x()), SkIntToScalar(point->y()), &skp); |
| 84 point->SetPoint(static_cast<int>(skp.fX), static_cast<int>(skp.fY)); | 87 point->SetPoint(static_cast<int>(std::floor(skp.fX)), |
| 88 static_cast<int>(std::floor(skp.fY))); | |
| 85 return true; | 89 return true; |
| 86 } | 90 } |
| 87 return false; | 91 return false; |
| 88 } | 92 } |
| 89 | 93 |
| 90 bool Transform::TransformRect(gfx::Rect* rect) { | 94 bool Transform::TransformRect(gfx::Rect* rect) { |
| 91 SkRect src = gfx::RectToSkRect(*rect); | 95 SkRect src = gfx::RectToSkRect(*rect); |
| 92 if (!matrix_.mapRect(&src)) | 96 if (!matrix_.mapRect(&src)) |
| 93 return false; | 97 return false; |
| 94 gfx::Rect xrect = gfx::SkRectToRect(src); | 98 gfx::Rect xrect = gfx::SkRectToRect(src); |
| 95 rect->SetRect(xrect.x(), xrect.y(), xrect.width(), xrect.height()); | 99 rect->SetRect(xrect.x(), xrect.y(), xrect.width(), xrect.height()); |
| 96 return true; | 100 return true; |
| 97 } | 101 } |
| 98 | 102 |
| 99 } // namespace ui | 103 } // namespace ui |
| OLD | NEW |