| OLD | NEW |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 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 "chrome/browser/android/vr_shell/ui_scene.h" | 5 #include "chrome/browser/android/vr_shell/ui_scene.h" |
| 6 | 6 |
| 7 #define _USE_MATH_DEFINES // For M_PI in MSVC. | 7 #define _USE_MATH_DEFINES // For M_PI in MSVC. |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "chrome/browser/android/vr_shell/animation.h" | 14 #include "chrome/browser/android/vr_shell/animation.h" |
| 15 #include "chrome/browser/android/vr_shell/easing.h" | 15 #include "chrome/browser/android/vr_shell/easing.h" |
| 16 #include "chrome/browser/android/vr_shell/ui_elements.h" | 16 #include "chrome/browser/android/vr_shell/ui_elements.h" |
| 17 #include "chrome/browser/android/vr_shell/vr_math.h" | 17 #include "device/vr/vr_math.h" |
| 18 #include "device/vr/vr_types.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 20 |
| 20 #define TOLERANCE 0.0001 | 21 #define TOLERANCE 0.0001 |
| 21 | 22 |
| 22 #define EXPECT_VEC3F_NEAR(a, b) \ | 23 #define EXPECT_VEC3F_NEAR(a, b) \ |
| 23 EXPECT_NEAR(a.x, b.x, TOLERANCE); \ | 24 EXPECT_NEAR(a.x(), b.x(), TOLERANCE); \ |
| 24 EXPECT_NEAR(a.y, b.y, TOLERANCE); \ | 25 EXPECT_NEAR(a.y(), b.y(), TOLERANCE); \ |
| 25 EXPECT_NEAR(a.z, b.z, TOLERANCE); | 26 EXPECT_NEAR(a.z(), b.z(), TOLERANCE); |
| 26 | 27 |
| 27 namespace vr_shell { | 28 namespace vr_shell { |
| 28 | 29 |
| 29 namespace { | 30 namespace { |
| 30 | 31 |
| 31 base::TimeTicks usToTicks(uint64_t us) { | 32 base::TimeTicks usToTicks(uint64_t us) { |
| 32 return base::TimeTicks::FromInternalValue(us); | 33 return base::TimeTicks::FromInternalValue(us); |
| 33 } | 34 } |
| 34 | 35 |
| 35 base::TimeDelta usToDelta(uint64_t us) { | 36 base::TimeDelta usToDelta(uint64_t us) { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 element = base::MakeUnique<ContentRectangle>(); | 126 element = base::MakeUnique<ContentRectangle>(); |
| 126 element->id = 1; | 127 element->id = 1; |
| 127 element->parent_id = 0; | 128 element->parent_id = 0; |
| 128 element->size = {1, 1, 1}; | 129 element->size = {1, 1, 1}; |
| 129 element->scale = {2, 2, 1}; | 130 element->scale = {2, 2, 1}; |
| 130 element->rotation = {0, 0, 1, M_PI / 2}; | 131 element->rotation = {0, 0, 1, M_PI / 2}; |
| 131 element->translation = {3, 0, 0}; | 132 element->translation = {3, 0, 0}; |
| 132 scene.AddUiElement(std::move(element)); | 133 scene.AddUiElement(std::move(element)); |
| 133 const ContentRectangle* child = scene.GetUiElementById(1); | 134 const ContentRectangle* child = scene.GetUiElementById(1); |
| 134 | 135 |
| 135 const gvr::Vec3f origin({0, 0, 0}); | 136 const gfx::Vector3dF origin(0, 0, 0); |
| 136 const gvr::Vec3f point({1, 0, 0}); | 137 const gfx::Vector3dF point(1, 0, 0); |
| 137 | 138 |
| 138 scene.UpdateTransforms(usToTicks(0)); | 139 scene.UpdateTransforms(usToTicks(0)); |
| 139 auto new_origin = MatrixVectorMul(child->TransformMatrix(), origin); | 140 auto new_origin = vr::MatrixVectorMul(child->TransformMatrix(), origin); |
| 140 auto new_point = MatrixVectorMul(child->TransformMatrix(), point); | 141 auto new_point = vr::MatrixVectorMul(child->TransformMatrix(), point); |
| 141 EXPECT_VEC3F_NEAR(gvr::Vec3f({6, 10, 0}), new_origin); | 142 EXPECT_VEC3F_NEAR(gfx::Vector3dF(6, 10, 0), new_origin); |
| 142 EXPECT_VEC3F_NEAR(gvr::Vec3f({0, 10, 0}), new_point); | 143 EXPECT_VEC3F_NEAR(gfx::Vector3dF(0, 10, 0), new_point); |
| 143 } | 144 } |
| 144 | 145 |
| 145 TEST(UiScene, Opacity) { | 146 TEST(UiScene, Opacity) { |
| 146 UiScene scene; | 147 UiScene scene; |
| 147 | 148 |
| 148 auto element = base::MakeUnique<ContentRectangle>(); | 149 auto element = base::MakeUnique<ContentRectangle>(); |
| 149 element->id = 0; | 150 element->id = 0; |
| 150 element->opacity = 0.5; | 151 element->opacity = 0.5; |
| 151 scene.AddUiElement(std::move(element)); | 152 scene.AddUiElement(std::move(element)); |
| 152 | 153 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 // Add a child to the parent, with anchoring. | 203 // Add a child to the parent, with anchoring. |
| 203 element = base::MakeUnique<ContentRectangle>(); | 204 element = base::MakeUnique<ContentRectangle>(); |
| 204 element->id = 1; | 205 element->id = 1; |
| 205 element->parent_id = 0; | 206 element->parent_id = 0; |
| 206 element->x_anchoring = GetParam().x_anchoring; | 207 element->x_anchoring = GetParam().x_anchoring; |
| 207 element->y_anchoring = GetParam().y_anchoring; | 208 element->y_anchoring = GetParam().y_anchoring; |
| 208 scene.AddUiElement(std::move(element)); | 209 scene.AddUiElement(std::move(element)); |
| 209 | 210 |
| 210 scene.UpdateTransforms(usToTicks(0)); | 211 scene.UpdateTransforms(usToTicks(0)); |
| 211 const ContentRectangle* child = scene.GetUiElementById(1); | 212 const ContentRectangle* child = scene.GetUiElementById(1); |
| 212 EXPECT_NEAR(child->GetCenter().x, GetParam().expected_x, TOLERANCE); | 213 EXPECT_NEAR(child->GetCenter().x(), GetParam().expected_x, TOLERANCE); |
| 213 EXPECT_NEAR(child->GetCenter().y, GetParam().expected_y, TOLERANCE); | 214 EXPECT_NEAR(child->GetCenter().y(), GetParam().expected_y, TOLERANCE); |
| 214 scene.RemoveUiElement(1); | 215 scene.RemoveUiElement(1); |
| 215 } | 216 } |
| 216 | 217 |
| 217 const std::vector<AnchoringTestCase> anchoring_test_cases = { | 218 const std::vector<AnchoringTestCase> anchoring_test_cases = { |
| 218 {XAnchoring::XNONE, YAnchoring::YNONE, 0, 0}, | 219 {XAnchoring::XNONE, YAnchoring::YNONE, 0, 0}, |
| 219 {XAnchoring::XLEFT, YAnchoring::YNONE, -2, 0}, | 220 {XAnchoring::XLEFT, YAnchoring::YNONE, -2, 0}, |
| 220 {XAnchoring::XRIGHT, YAnchoring::YNONE, 2, 0}, | 221 {XAnchoring::XRIGHT, YAnchoring::YNONE, 2, 0}, |
| 221 {XAnchoring::XNONE, YAnchoring::YTOP, 0, 2}, | 222 {XAnchoring::XNONE, YAnchoring::YTOP, 0, 2}, |
| 222 {XAnchoring::XNONE, YAnchoring::YBOTTOM, 0, -2}, | 223 {XAnchoring::XNONE, YAnchoring::YBOTTOM, 0, -2}, |
| 223 {XAnchoring::XLEFT, YAnchoring::YTOP, -2, 2}, | 224 {XAnchoring::XLEFT, YAnchoring::YTOP, -2, 2}, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 EXPECT_EQ(element->id, 10); | 272 EXPECT_EQ(element->id, 10); |
| 272 EXPECT_EQ(element->name, "abc"); | 273 EXPECT_EQ(element->name, "abc"); |
| 273 EXPECT_EQ(element->parent_id, 11); | 274 EXPECT_EQ(element->parent_id, 11); |
| 274 EXPECT_EQ(element->visible, false); | 275 EXPECT_EQ(element->visible, false); |
| 275 EXPECT_EQ(element->hit_testable, false); | 276 EXPECT_EQ(element->hit_testable, false); |
| 276 EXPECT_EQ(element->fill, Fill::SPRITE); | 277 EXPECT_EQ(element->fill, Fill::SPRITE); |
| 277 EXPECT_EQ(element->x_anchoring, XAnchoring::XLEFT); | 278 EXPECT_EQ(element->x_anchoring, XAnchoring::XLEFT); |
| 278 EXPECT_EQ(element->y_anchoring, YAnchoring::YTOP); | 279 EXPECT_EQ(element->y_anchoring, YAnchoring::YTOP); |
| 279 EXPECT_FLOAT_EQ(element->opacity, 0.357); | 280 EXPECT_FLOAT_EQ(element->opacity, 0.357); |
| 280 | 281 |
| 281 EXPECT_EQ(element->copy_rect.x, 100); | 282 EXPECT_EQ(element->copy_rect.x(), 100); |
| 282 EXPECT_EQ(element->copy_rect.y, 101); | 283 EXPECT_EQ(element->copy_rect.y(), 101); |
| 283 EXPECT_EQ(element->copy_rect.width, 102); | 284 EXPECT_EQ(element->copy_rect.width(), 102); |
| 284 EXPECT_EQ(element->copy_rect.height, 103); | 285 EXPECT_EQ(element->copy_rect.height(), 103); |
| 285 | 286 |
| 286 EXPECT_FLOAT_EQ(element->size.x, 200); | 287 EXPECT_FLOAT_EQ(element->size.x(), 200); |
| 287 EXPECT_FLOAT_EQ(element->size.y, 201); | 288 EXPECT_FLOAT_EQ(element->size.y(), 201); |
| 288 EXPECT_FLOAT_EQ(element->size.z, 1); | 289 EXPECT_FLOAT_EQ(element->size.z(), 1); |
| 289 | 290 |
| 290 EXPECT_FLOAT_EQ(element->scale.x, 300); | 291 EXPECT_FLOAT_EQ(element->scale.x(), 300); |
| 291 EXPECT_FLOAT_EQ(element->scale.y, 301); | 292 EXPECT_FLOAT_EQ(element->scale.y(), 301); |
| 292 EXPECT_FLOAT_EQ(element->scale.z, 302); | 293 EXPECT_FLOAT_EQ(element->scale.z(), 302); |
| 293 | 294 |
| 294 EXPECT_FLOAT_EQ(element->rotation.x, 400); | 295 EXPECT_FLOAT_EQ(element->rotation.x, 400); |
| 295 EXPECT_FLOAT_EQ(element->rotation.y, 401); | 296 EXPECT_FLOAT_EQ(element->rotation.y, 401); |
| 296 EXPECT_FLOAT_EQ(element->rotation.z, 402); | 297 EXPECT_FLOAT_EQ(element->rotation.z, 402); |
| 297 EXPECT_FLOAT_EQ(element->rotation.angle, 403); | 298 EXPECT_FLOAT_EQ(element->rotation.angle, 403); |
| 298 | 299 |
| 299 EXPECT_FLOAT_EQ(element->translation.x, 500); | 300 EXPECT_FLOAT_EQ(element->translation.x(), 500); |
| 300 EXPECT_FLOAT_EQ(element->translation.y, 501); | 301 EXPECT_FLOAT_EQ(element->translation.y(), 501); |
| 301 EXPECT_FLOAT_EQ(element->translation.z, 502); | 302 EXPECT_FLOAT_EQ(element->translation.z(), 502); |
| 302 | 303 |
| 303 dict.Clear(); | 304 dict.Clear(); |
| 304 dict.SetInteger("id", 12); | 305 dict.SetInteger("id", 12); |
| 305 dict.SetBoolean("lockToFov", true); | 306 dict.SetBoolean("lockToFov", true); |
| 306 | 307 |
| 307 scene.AddUiElementFromDict(dict); | 308 scene.AddUiElementFromDict(dict); |
| 308 element = scene.GetUiElementById(12); | 309 element = scene.GetUiElementById(12); |
| 309 EXPECT_NE(element, nullptr); | 310 EXPECT_NE(element, nullptr); |
| 310 | 311 |
| 311 EXPECT_EQ(element->id, 12); | 312 EXPECT_EQ(element->id, 12); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 333 center_color.SetDouble("b", 0.7); | 334 center_color.SetDouble("b", 0.7); |
| 334 center_color.SetDouble("a", 0.8); | 335 center_color.SetDouble("a", 0.8); |
| 335 | 336 |
| 336 // Test SPRITE filling. | 337 // Test SPRITE filling. |
| 337 dict.SetInteger("id", 9); | 338 dict.SetInteger("id", 9); |
| 338 dict.SetInteger("fillType", Fill::SPRITE); | 339 dict.SetInteger("fillType", Fill::SPRITE); |
| 339 scene.AddUiElementFromDict(dict); | 340 scene.AddUiElementFromDict(dict); |
| 340 const auto* element = scene.GetUiElementById(9); | 341 const auto* element = scene.GetUiElementById(9); |
| 341 | 342 |
| 342 EXPECT_EQ(element->fill, Fill::SPRITE); | 343 EXPECT_EQ(element->fill, Fill::SPRITE); |
| 343 EXPECT_EQ(element->copy_rect.x, 1); | 344 EXPECT_EQ(element->copy_rect.x(), 1); |
| 344 EXPECT_EQ(element->copy_rect.y, 2); | 345 EXPECT_EQ(element->copy_rect.y(), 2); |
| 345 EXPECT_EQ(element->copy_rect.width, 3); | 346 EXPECT_EQ(element->copy_rect.width(), 3); |
| 346 EXPECT_EQ(element->copy_rect.height, 4); | 347 EXPECT_EQ(element->copy_rect.height(), 4); |
| 347 | 348 |
| 348 // Test OPAQUE_GRADIENT filling. | 349 // Test OPAQUE_GRADIENT filling. |
| 349 dict.Clear(); | 350 dict.Clear(); |
| 350 dict.SetInteger("id", 10); | 351 dict.SetInteger("id", 10); |
| 351 dict.SetInteger("fillType", Fill::OPAQUE_GRADIENT); | 352 dict.SetInteger("fillType", Fill::OPAQUE_GRADIENT); |
| 352 dict.Set("edgeColor", edge_color.DeepCopy()); | 353 dict.Set("edgeColor", edge_color.DeepCopy()); |
| 353 dict.Set("centerColor", center_color.DeepCopy()); | 354 dict.Set("centerColor", center_color.DeepCopy()); |
| 354 scene.AddUiElementFromDict(dict); | 355 scene.AddUiElementFromDict(dict); |
| 355 element = scene.GetUiElementById(10); | 356 element = scene.GetUiElementById(10); |
| 356 | 357 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 EXPECT_FLOAT_EQ(300, animation->from[0]); | 445 EXPECT_FLOAT_EQ(300, animation->from[0]); |
| 445 EXPECT_FLOAT_EQ(301, animation->from[1]); | 446 EXPECT_FLOAT_EQ(301, animation->from[1]); |
| 446 EXPECT_FLOAT_EQ(302, animation->from[2]); | 447 EXPECT_FLOAT_EQ(302, animation->from[2]); |
| 447 EXPECT_FLOAT_EQ(303, animation->from[3]); | 448 EXPECT_FLOAT_EQ(303, animation->from[3]); |
| 448 | 449 |
| 449 EXPECT_EQ(usToTicks(22345000), animation->start); | 450 EXPECT_EQ(usToTicks(22345000), animation->start); |
| 450 EXPECT_EQ(usToDelta(54321000), animation->duration); | 451 EXPECT_EQ(usToDelta(54321000), animation->duration); |
| 451 } | 452 } |
| 452 | 453 |
| 453 } // namespace vr_shell | 454 } // namespace vr_shell |
| OLD | NEW |