diff options
Diffstat (limited to 'ui/views')
-rw-r--r-- | ui/views/controls/slide_out_view.cc | 4 | ||||
-rw-r--r-- | ui/views/corewm/image_grid.cc | 39 | ||||
-rw-r--r-- | ui/views/view.cc | 70 | ||||
-rw-r--r-- | ui/views/view_unittest.cc | 50 |
4 files changed, 83 insertions, 80 deletions
diff --git a/ui/views/controls/slide_out_view.cc b/ui/views/controls/slide_out_view.cc index e3d7425..058421d 100644 --- a/ui/views/controls/slide_out_view.cc +++ b/ui/views/controls/slide_out_view.cc @@ -43,7 +43,7 @@ ui::EventResult SlideOutView::OnGestureEvent(ui::GestureEvent* event) { gesture_scroll_amount_ += event->details().scroll_x(); gfx::Transform transform; - transform.SetTranslateX(gesture_scroll_amount_); + transform.Translate(gesture_scroll_amount_, 0.0); layer()->SetTransform(transform); layer()->SetOpacity( 1.f - std::min(fabsf(gesture_scroll_amount_) / width(), 1.f)); @@ -79,7 +79,7 @@ void SlideOutView::SlideOutAndClose(SlideDirection direction) { settings.AddObserver(this); gfx::Transform transform; - transform.SetTranslateX(direction == SLIDE_LEFT ? -width() : width()); + transform.Translate(direction == SLIDE_LEFT ? -width() : width(), 0.0); layer()->SetTransform(transform); layer()->SetOpacity(0.f); } diff --git a/ui/views/corewm/image_grid.cc b/ui/views/corewm/image_grid.cc index b98af63..92f8a94 100644 --- a/ui/views/corewm/image_grid.cc +++ b/ui/views/corewm/image_grid.cc @@ -107,9 +107,9 @@ void ImageGrid::SetSize(const gfx::Size& size) { if (top_layer_.get()) { if (center_width > 0) { gfx::Transform transform; - transform.SetScaleX( - static_cast<float>(center_width) / top_layer_->bounds().width()); - transform.ConcatTranslate(left, 0); + transform.Translate(left, 0); + transform.Scale( + static_cast<float>(center_width) / top_layer_->bounds().width(), 1); top_layer_->SetTransform(transform); } top_layer_->SetVisible(center_width > 0); @@ -117,10 +117,11 @@ void ImageGrid::SetSize(const gfx::Size& size) { if (bottom_layer_.get()) { if (center_width > 0) { gfx::Transform transform; - transform.SetScaleX( - static_cast<float>(center_width) / bottom_layer_->bounds().width()); - transform.ConcatTranslate( + transform.Translate( left, size.height() - bottom_layer_->bounds().height()); + transform.Scale( + static_cast<float>(center_width) / bottom_layer_->bounds().width(), + 1.0); bottom_layer_->SetTransform(transform); } bottom_layer_->SetVisible(center_width > 0); @@ -128,9 +129,10 @@ void ImageGrid::SetSize(const gfx::Size& size) { if (left_layer_.get()) { if (center_height > 0) { gfx::Transform transform; - transform.SetScaleY( + transform.Translate(0, top); + transform.Scale( + 1.0, (static_cast<float>(center_height) / left_layer_->bounds().height())); - transform.ConcatTranslate(0, top); left_layer_->SetTransform(transform); } left_layer_->SetVisible(center_height > 0); @@ -138,10 +140,11 @@ void ImageGrid::SetSize(const gfx::Size& size) { if (right_layer_.get()) { if (center_height > 0) { gfx::Transform transform; - transform.SetScaleY( - static_cast<float>(center_height) / right_layer_->bounds().height()); - transform.ConcatTranslate( + transform.Translate( size.width() - right_layer_->bounds().width(), top); + transform.Scale( + 1.0, + static_cast<float>(center_height) / right_layer_->bounds().height()); right_layer_->SetTransform(transform); } right_layer_->SetVisible(center_height > 0); @@ -157,7 +160,7 @@ void ImageGrid::SetSize(const gfx::Size& size) { } if (top_right_layer_.get()) { gfx::Transform transform; - transform.SetTranslateX(size.width() - top_right_layer_->bounds().width()); + transform.Translate(size.width() - top_right_layer_->bounds().width(), 0.0); top_right_layer_->SetTransform(transform); top_right_painter_->SetClipRect( LayerExceedsSize(top_right_layer_.get(), gfx::Size(right, top)) ? @@ -168,8 +171,8 @@ void ImageGrid::SetSize(const gfx::Size& size) { } if (bottom_left_layer_.get()) { gfx::Transform transform; - transform.SetTranslateY( - size.height() - bottom_left_layer_->bounds().height()); + transform.Translate( + 0.0, size.height() - bottom_left_layer_->bounds().height()); bottom_left_layer_->SetTransform(transform); bottom_left_painter_->SetClipRect( LayerExceedsSize(bottom_left_layer_.get(), gfx::Size(left, bottom)) ? @@ -180,7 +183,7 @@ void ImageGrid::SetSize(const gfx::Size& size) { } if (bottom_right_layer_.get()) { gfx::Transform transform; - transform.SetTranslate( + transform.Translate( size.width() - bottom_right_layer_->bounds().width(), size.height() - bottom_right_layer_->bounds().height()); bottom_right_layer_->SetTransform(transform); @@ -196,9 +199,9 @@ void ImageGrid::SetSize(const gfx::Size& size) { if (center_layer_.get()) { if (center_width > 0 && center_height > 0) { gfx::Transform transform; - transform.SetScale(center_width / center_layer_->bounds().width(), - center_height / center_layer_->bounds().height()); - transform.ConcatTranslate(left, top); + transform.Translate(left, top); + transform.Scale(center_width / center_layer_->bounds().width(), + center_height / center_layer_->bounds().height()); center_layer_->SetTransform(transform); } center_layer_->SetVisible(center_width > 0 && center_height > 0); diff --git a/ui/views/view.cc b/ui/views/view.cc index acc04d3..fdf8c12 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc @@ -2,9 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#define _USE_MATH_DEFINES // For VC++ to get M_PI. This has to be first. + #include "ui/views/view.h" #include <algorithm> +#include <cmath> #include "base/debug/trace_event.h" #include "base/logging.h" @@ -332,8 +335,10 @@ gfx::Rect View::GetVisibleBounds() const { while (view != NULL && !vis_bounds.IsEmpty()) { transform.ConcatTransform(view->GetTransform()); - transform.ConcatTranslate(static_cast<float>(view->GetMirroredX()), - static_cast<float>(view->y())); + gfx::Transform translation; + translation.Translate(static_cast<float>(view->GetMirroredX()), + static_cast<float>(view->y())); + transform.ConcatTransform(translation); vis_bounds = view->ConvertRectToParent(vis_bounds); const View* ancestor = view->parent_; @@ -1432,39 +1437,28 @@ std::string View::DoPrintViewGraph(bool first, View* view_with_children) { bounds().height()); result.append(bounds_buffer); - if (!GetTransform().IsIdentity()) { - gfx::Point translation; - float rotation; - gfx::Point3F scale; - if (ui::InterpolatedTransform::FactorTRS(GetTransform(), - &translation, - &rotation, - &scale)) { - if (!translation.IsOrigin()) { - base::snprintf(bounds_buffer, - arraysize(bounds_buffer), - "\\n translation: (%d, %d)", - translation.x(), - translation.y()); - result.append(bounds_buffer); - } - - if (fabs(rotation) > 1e-5) { - base::snprintf(bounds_buffer, - arraysize(bounds_buffer), - "\\n rotation: %3.2f", rotation); - result.append(bounds_buffer); - } - - if (!gfx::ToFlooredPoint(scale.AsPointF()).IsOrigin()) { - base::snprintf(bounds_buffer, - arraysize(bounds_buffer), - "\\n scale: (%2.4f, %2.4f)", - scale.x(), - scale.y()); - result.append(bounds_buffer); - } - } + gfx::DecomposedTransform decomp; + if (!GetTransform().IsIdentity() && + gfx::DecomposeTransform(&decomp, GetTransform())) { + base::snprintf(bounds_buffer, + arraysize(bounds_buffer), + "\\n translation: (%f, %f)", + decomp.translate[0], + decomp.translate[1]); + result.append(bounds_buffer); + + base::snprintf(bounds_buffer, + arraysize(bounds_buffer), + "\\n rotation: %3.2f", + std::acos(decomp.quaternion[3]) * 360.0 / M_PI); + result.append(bounds_buffer); + + base::snprintf(bounds_buffer, + arraysize(bounds_buffer), + "\\n scale: (%2.4f, %2.4f)", + decomp.scale[0], + decomp.scale[1]); + result.append(bounds_buffer); } result.append("\""); @@ -1798,8 +1792,10 @@ bool View::GetTransformRelativeTo(const View* ancestor, while (p && p != ancestor) { transform->ConcatTransform(p->GetTransform()); - transform->ConcatTranslate(static_cast<float>(p->GetMirroredX()), - static_cast<float>(p->y())); + gfx::Transform translation; + translation.Translate(static_cast<float>(p->GetMirroredX()), + static_cast<float>(p->y())); + transform->ConcatTransform(translation); p = p->parent_; } diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc index c29f11d..363c904 100644 --- a/ui/views/view_unittest.cc +++ b/ui/views/view_unittest.cc @@ -2058,7 +2058,7 @@ TEST_F(ViewTest, TransformPaint) { // Rotate |v1| counter-clockwise. gfx::Transform transform; RotateCounterclockwise(&transform); - transform.SetTranslateY(500.0f); + transform.matrix().set(1, 3, 500.0); v1->SetTransform(transform); // |v2| now occupies (100, 200) to (200, 400) in |root|. @@ -2092,7 +2092,7 @@ TEST_F(ViewTest, TransformEvent) { // Rotate |v1| counter-clockwise. gfx::Transform transform(v1->GetTransform()); RotateCounterclockwise(&transform); - transform.SetTranslateY(500.0f); + transform.matrix().set(1, 3, 500.0); v1->SetTransform(transform); // |v2| now occupies (100, 200) to (200, 400) in |root|. @@ -2114,7 +2114,7 @@ TEST_F(ViewTest, TransformEvent) { // Now rotate |v2| inside |v1| clockwise. transform = v2->GetTransform(); RotateClockwise(&transform); - transform.SetTranslateX(100.0f); + transform.matrix().setDouble(0, 3, 100.0); v2->SetTransform(transform); // Now, |v2| occupies (100, 100) to (200, 300) in |v1|, and (100, 300) to @@ -2144,12 +2144,13 @@ TEST_F(ViewTest, TransformEvent) { // Rotate |v3| clockwise with respect to |v2|. transform = v1->GetTransform(); RotateClockwise(&transform); - transform.SetTranslateX(30.0f); + transform.matrix().setDouble(0, 3, 30.0); v3->SetTransform(transform); // Scale |v2| with respect to |v1| along both axis. transform = v2->GetTransform(); - transform.SetScale(0.8f, 0.5f); + transform.matrix().setDouble(0, 0, 0.8); + transform.matrix().setDouble(1, 1, 0.5); v2->SetTransform(transform); // |v3| occupies (108, 105) to (132, 115) in |root|. @@ -2180,16 +2181,19 @@ TEST_F(ViewTest, TransformEvent) { // Rotate |v3| clockwise with respect to |v2|, and scale it along both axis. transform = v3->GetTransform(); RotateClockwise(&transform); - transform.SetTranslateX(30.0f); + transform.matrix().setDouble(0, 3, 30.0); // Rotation sets some scaling transformation. Using SetScale would overwrite // that and pollute the rotation. So combine the scaling with the existing // transforamtion. - transform.ConcatScale(0.8f, 0.5f); + gfx::Transform scale; + scale.Scale(0.8, 0.5); + transform.ConcatTransform(scale); v3->SetTransform(transform); // Translate |v2| with respect to |v1|. transform = v2->GetTransform(); - transform.SetTranslate(10, 10); + transform.matrix().setDouble(0, 3, 10.0); + transform.matrix().setDouble(1, 3, 10.0); v2->SetTransform(transform); // |v3| now occupies (120, 120) to (144, 130) in |root|. @@ -2233,7 +2237,7 @@ TEST_F(ViewTest, TransformVisibleBound) { // Rotate |child| counter-clockwise gfx::Transform transform; RotateCounterclockwise(&transform); - transform.SetTranslateY(50.0f); + transform.matrix().setDouble(1, 3, 50.0); child->SetTransform(transform); EXPECT_EQ(gfx::Rect(40, 0, 10, 50), child->GetVisibleBounds()); @@ -2347,20 +2351,20 @@ TEST_F(ViewTest, ConvertPointToViewWithTransform) { child->SetBoundsRect(gfx::Rect(7, 19, 500, 500)); gfx::Transform transform; - transform.SetScale(3.0f, 4.0f); + transform.Scale(3.0, 4.0); child->SetTransform(transform); child_child->SetBoundsRect(gfx::Rect(17, 13, 100, 100)); - transform = gfx::Transform(); - transform.SetScale(5.0f, 7.0f); + transform.MakeIdentity(); + transform.Scale(5.0, 7.0); child_child->SetTransform(transform); // Sanity check to make sure basic transforms act as expected. { gfx::Transform transform; - transform.ConcatTranslate(1, 1); - transform.ConcatScale(100, 55); - transform.ConcatTranslate(110, -110); + transform.Translate(110.0, -110.0); + transform.Scale(100.0, 55.0); + transform.Translate(1.0, 1.0); // convert to a 3x3 matrix. const SkMatrix& matrix = transform.matrix(); @@ -2375,11 +2379,11 @@ TEST_F(ViewTest, ConvertPointToViewWithTransform) { { gfx::Transform transform; - transform.SetTranslate(1, 1); + transform.Translate(1.0, 1.0); gfx::Transform t2; - t2.SetScale(100, 55); + t2.Scale(100.0, 55.0); gfx::Transform t3; - t3.SetTranslate(110, -110); + t3.Translate(110.0, -110.0); transform.ConcatTransform(t2); transform.ConcatTransform(t3); @@ -2468,7 +2472,7 @@ TEST_F(ViewTest, ConvertRectWithTransform) { // Rotate |v2| gfx::Transform t2; RotateCounterclockwise(&t2); - t2.SetTranslateY(100.0f); + t2.matrix().setDouble(1, 3, 100.0); v2->SetTransform(t2); // |v2| now occupies (30, 30) to (230, 130) in |widget| @@ -2477,7 +2481,7 @@ TEST_F(ViewTest, ConvertRectWithTransform) { // Scale down |v1| gfx::Transform t1; - t1.SetScale(0.5, 0.5); + t1.Scale(0.5, 0.5); v1->SetTransform(t1); // The rectangle should remain the same for |v1|. @@ -2981,7 +2985,7 @@ TEST_F(ViewLayerTest, LayerToggling) { // Make v1 have a layer again and verify v2s layer is wired up correctly. gfx::Transform transform; - transform.SetScale(2.0f, 2.0f); + transform.Scale(2.0, 2.0); v1->SetTransform(transform); EXPECT_TRUE(v1->layer() != NULL); EXPECT_TRUE(v2->layer() != NULL); @@ -3133,7 +3137,7 @@ TEST_F(ViewLayerTest, BoundInRTL) { TEST_F(ViewLayerTest, ToggleVisibilityWithTransform) { View* view = new View; gfx::Transform transform; - transform.SetScale(2.0f, 2.0f); + transform.Scale(2.0, 2.0); view->SetTransform(transform); widget()->SetContentsView(view); EXPECT_EQ(2.0f, view->GetTransform().matrix().get(0, 0)); @@ -3149,7 +3153,7 @@ TEST_F(ViewLayerTest, ToggleVisibilityWithTransform) { TEST_F(ViewLayerTest, ResetTransformOnLayerAfterAdd) { View* view = new View; gfx::Transform transform; - transform.SetScale(2.0f, 2.0f); + transform.Scale(2.0, 2.0); view->SetTransform(transform); widget()->SetContentsView(view); EXPECT_EQ(2.0f, view->GetTransform().matrix().get(0, 0)); |