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 |