| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ | 5 #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ |
| 6 #define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ | 6 #define CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 // possible, and false if the ray is parallel to the plane. | 75 // possible, and false if the ray is parallel to the plane. |
| 76 bool GetRayDistance(const gfx::Point3F& ray_origin, | 76 bool GetRayDistance(const gfx::Point3F& ray_origin, |
| 77 const gfx::Vector3dF& ray_vector, | 77 const gfx::Vector3dF& ray_vector, |
| 78 float* distance) const; | 78 float* distance) const; |
| 79 | 79 |
| 80 // Projects a 3D world point onto the X and Y axes of the transformed | 80 // Projects a 3D world point onto the X and Y axes of the transformed |
| 81 // rectangle, returning 2D coordinates relative to the un-transformed unit | 81 // rectangle, returning 2D coordinates relative to the un-transformed unit |
| 82 // rectangle. This allows beam intersection points to be mapped to sprite | 82 // rectangle. This allows beam intersection points to be mapped to sprite |
| 83 // pixel coordinates. Points that fall onto the rectangle will generate X and | 83 // pixel coordinates. Points that fall onto the rectangle will generate X and |
| 84 // Y values on the interval [-0.5, 0.5]. | 84 // Y values on the interval [-0.5, 0.5]. |
| 85 gfx::PointF GetUnitRectangleCoordinates(const gfx::Point3F& world_point); | 85 gfx::PointF GetUnitRectangleCoordinates( |
| 86 const gfx::Point3F& world_point) const; |
| 86 | 87 |
| 87 private: | 88 private: |
| 88 Transform transform_; | 89 Transform transform_; |
| 89 }; | 90 }; |
| 90 | 91 |
| 91 class UiElement : public WorldRectangle { | 92 class UiElement : public WorldRectangle { |
| 92 public: | 93 public: |
| 93 UiElement(); | 94 UiElement(); |
| 94 virtual ~UiElement(); | 95 virtual ~UiElement(); |
| 95 | 96 |
| 96 void Animate(const base::TimeTicks& time); | 97 void Animate(const base::TimeTicks& time); |
| 97 | 98 |
| 98 // Indicates whether the element should be visually rendered. | 99 // Indicates whether the element should be visually rendered. |
| 99 bool IsVisible() const; | 100 bool IsVisible() const; |
| 100 | 101 |
| 101 // Indicates whether the element should be tested for cursor input. | 102 // Indicates whether the element should be tested for cursor input. |
| 102 bool IsHitTestable() const; | 103 bool IsHitTestable() const; |
| 103 | 104 |
| 104 virtual void Render(VrShellRenderer* renderer, | 105 virtual void Render(VrShellRenderer* renderer, |
| 105 vr::Mat4f view_proj_matrix) const; | 106 vr::Mat4f view_proj_matrix) const; |
| 106 | 107 |
| 107 virtual void Initialize(); | 108 virtual void Initialize(); |
| 108 | 109 |
| 109 // Controller interaction methods. | 110 // Controller interaction methods. |
| 110 virtual void OnHoverEnter(); | 111 virtual void OnHoverEnter(gfx::PointF position); |
| 111 virtual void OnHoverLeave(); | 112 virtual void OnHoverLeave(); |
| 112 virtual void OnButtonDown(); | 113 virtual void OnMove(gfx::PointF position); |
| 113 virtual void OnButtonUp(); | 114 virtual void OnButtonDown(gfx::PointF position); |
| 115 virtual void OnButtonUp(gfx::PointF position); |
| 114 | 116 |
| 115 int id() const { return id_; } | 117 int id() const { return id_; } |
| 116 void set_id(int id) { id_ = id; } | 118 void set_id(int id) { id_ = id; } |
| 117 | 119 |
| 118 // If a non-negative parent ID is specified, applicable transformations | 120 // If a non-negative parent ID is specified, applicable transformations |
| 119 // are applied relative to the parent, rather than absolutely. | 121 // are applied relative to the parent, rather than absolutely. |
| 120 int parent_id() const { return parent_id_; } | 122 int parent_id() const { return parent_id_; } |
| 121 void set_parent_id(int id) { parent_id_ = id; } | 123 void set_parent_id(int id) { parent_id_ = id; } |
| 122 | 124 |
| 123 // If true, this object will be visible. | 125 // If true, this object will be visible. |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 bool visible_ = true; | 233 bool visible_ = true; |
| 232 | 234 |
| 233 // If false, the reticle will not hit the element, even if visible. | 235 // If false, the reticle will not hit the element, even if visible. |
| 234 bool hit_testable_ = true; | 236 bool hit_testable_ = true; |
| 235 | 237 |
| 236 // If true, transformations will be applied relative to the field of view, | 238 // If true, transformations will be applied relative to the field of view, |
| 237 // rather than the world. | 239 // rather than the world. |
| 238 bool lock_to_fov_ = false; | 240 bool lock_to_fov_ = false; |
| 239 | 241 |
| 240 // The computed lock to the FoV, incorporating lock of parent objects. | 242 // The computed lock to the FoV, incorporating lock of parent objects. |
| 241 bool computed_lock_to_fov_; | 243 bool computed_lock_to_fov_ = false; |
| 242 | 244 |
| 243 // The size of the object. This does not affect children. | 245 // The size of the object. This does not affect children. |
| 244 gfx::Vector3dF size_ = {1.0f, 1.0f, 1.0f}; | 246 gfx::Vector3dF size_ = {1.0f, 1.0f, 1.0f}; |
| 245 | 247 |
| 246 // The scale of the object, and its children. | 248 // The scale of the object, and its children. |
| 247 gfx::Vector3dF scale_ = {1.0f, 1.0f, 1.0f}; | 249 gfx::Vector3dF scale_ = {1.0f, 1.0f, 1.0f}; |
| 248 | 250 |
| 249 // The rotation of the object, and its children. | 251 // The rotation of the object, and its children. |
| 250 vr::RotationAxisAngle rotation_ = {1.0f, 0.0f, 0.0f, 0.0f}; | 252 vr::RotationAxisAngle rotation_ = {1.0f, 0.0f, 0.0f, 0.0f}; |
| 251 | 253 |
| 252 // The translation of the object, and its children. Translation is applied | 254 // The translation of the object, and its children. Translation is applied |
| 253 // after rotation and scaling. | 255 // after rotation and scaling. |
| 254 gfx::Vector3dF translation_ = {0.0f, 0.0f, 0.0f}; | 256 gfx::Vector3dF translation_ = {0.0f, 0.0f, 0.0f}; |
| 255 | 257 |
| 256 // The opacity of the object (between 0.0 and 1.0). | 258 // The opacity of the object (between 0.0 and 1.0). |
| 257 float opacity_ = 1.0f; | 259 float opacity_ = 1.0f; |
| 258 | 260 |
| 259 // The computed opacity, incorporating opacity of parent objects. | 261 // The computed opacity, incorporating opacity of parent objects. |
| 260 float computed_opacity_; | 262 float computed_opacity_ = 1.0f; |
| 261 | 263 |
| 262 // If anchoring is specified, the translation will be relative to the | 264 // If anchoring is specified, the translation will be relative to the |
| 263 // specified edge(s) of the parent, rather than the center. A parent object | 265 // specified edge(s) of the parent, rather than the center. A parent object |
| 264 // must be specified when using anchoring. | 266 // must be specified when using anchoring. |
| 265 XAnchoring x_anchoring_ = XAnchoring::XNONE; | 267 XAnchoring x_anchoring_ = XAnchoring::XNONE; |
| 266 YAnchoring y_anchoring_ = YAnchoring::YNONE; | 268 YAnchoring y_anchoring_ = YAnchoring::YNONE; |
| 267 | 269 |
| 268 // Animations that affect the properties of the object over time. | 270 // Animations that affect the properties of the object over time. |
| 269 std::vector<std::unique_ptr<Animation>> animations_; | 271 std::vector<std::unique_ptr<Animation>> animations_; |
| 270 | 272 |
| 271 Fill fill_ = Fill::NONE; | 273 Fill fill_ = Fill::NONE; |
| 272 | 274 |
| 273 vr::Colorf edge_color_ = {1.0f, 1.0f, 1.0f, 1.0f}; | 275 vr::Colorf edge_color_ = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 274 vr::Colorf center_color_ = {1.0f, 1.0f, 1.0f, 1.0f}; | 276 vr::Colorf center_color_ = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 275 | 277 |
| 276 int gridline_count_ = 1; | 278 int gridline_count_ = 1; |
| 277 | 279 |
| 278 int draw_phase_ = 1; | 280 int draw_phase_ = 1; |
| 279 | 281 |
| 280 // This transform can be used by children to derive position of its parent. | 282 // This transform can be used by children to derive position of its parent. |
| 281 Transform inheritable_transform_; | 283 Transform inheritable_transform_; |
| 282 | 284 |
| 283 // A flag usable during transformation calculates to avoid duplicate work. | 285 // A flag usable during transformation calculates to avoid duplicate work. |
| 284 bool dirty_; | 286 bool dirty_ = false; |
| 285 | 287 |
| 286 Transform transform_; | 288 Transform transform_; |
| 287 | 289 |
| 288 DISALLOW_COPY_AND_ASSIGN(UiElement); | 290 DISALLOW_COPY_AND_ASSIGN(UiElement); |
| 289 }; | 291 }; |
| 290 | 292 |
| 291 } // namespace vr_shell | 293 } // namespace vr_shell |
| 292 | 294 |
| 293 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ | 295 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_UI_ELEMENTS_UI_ELEMENT_H_ |
| OLD | NEW |