summaryrefslogtreecommitdiffstats
path: root/ui/views
diff options
context:
space:
mode:
Diffstat (limited to 'ui/views')
-rw-r--r--ui/views/controls/slide_out_view.cc4
-rw-r--r--ui/views/corewm/image_grid.cc39
-rw-r--r--ui/views/view.cc70
-rw-r--r--ui/views/view_unittest.cc50
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));