Index: chrome/browser/android/vr_shell/ui_scene_manager.cc |
diff --git a/chrome/browser/android/vr_shell/ui_scene_manager.cc b/chrome/browser/android/vr_shell/ui_scene_manager.cc |
index 32efa09a4e6ab84ebb23c085b7020add7e804e47..e8a62ad89d2e8117d898443d11a75404e96663fe 100644 |
--- a/chrome/browser/android/vr_shell/ui_scene_manager.cc |
+++ b/chrome/browser/android/vr_shell/ui_scene_manager.cc |
@@ -57,18 +57,32 @@ static constexpr float kLoadingIndicatorHeight = 0.008 * kUrlBarDistance; |
static constexpr float kLoadingIndicatorOffset = |
-0.016 * kUrlBarDistance - kLoadingIndicatorHeight / 2; |
-static constexpr float kFullscreenWidth = 2.88; |
-static constexpr float kFullscreenHeight = 1.62; |
-static constexpr float kFullscreenDistance = 3; |
-static constexpr float kFullscreenVerticalOffset = -0.26; |
-static constexpr vr::Colorf kFullscreenBackgroundColor = {0.1, 0.1, 0.1, 1.0}; |
- |
static constexpr float kSceneSize = 25.0; |
static constexpr float kSceneHeight = 4.0; |
static constexpr int kFloorGridlineCount = 40; |
static constexpr vr::Colorf kBackgroundHorizonColor = {0.57, 0.57, 0.57, 1.0}; |
static constexpr vr::Colorf kBackgroundCenterColor = {0.48, 0.48, 0.48, 1.0}; |
+static constexpr float kFullscreenWidthDms = 1.138; |
+static constexpr float kFullscreenHeightDms = 0.64; |
+static constexpr float kFullscreenVerticalOffsetDms = 0.1; |
+// Fullscreen distance calculated as value needed to make the content quad |
+// extend down to the floor (with small pullback used to prevent actual |
+// intersection). Note this assumes the vertical offset will always be offest |
+// below the origin (ie negative). |
+static constexpr float kFullscreenDistance = |
+ (kSceneHeight / 2.0) / |
+ ((kFullscreenVerticalOffsetDms + (kFullscreenHeightDms / 2.0)) + 0.01); |
+ |
+static constexpr float kFullscreenHeight = |
+ kFullscreenHeightDms * kFullscreenDistance; |
+static constexpr float kFullscreenWidth = |
+ kFullscreenWidthDms * kFullscreenDistance; |
+static constexpr float kFullscreenVerticalOffset = |
+ -kFullscreenVerticalOffsetDms * kFullscreenDistance; |
+static constexpr vr::Colorf kFullscreenHorizonColor = {0.1, 0.1, 0.1, 1.0}; |
+static constexpr vr::Colorf kFullscreenCenterColor = {0.2, 0.2, 0.2, 1.0}; |
+ |
// Tiny distance to offset textures that should appear in the same plane. |
static constexpr float kTextureOffset = 0.01; |
@@ -101,6 +115,7 @@ UiSceneManager::~UiSceneManager() {} |
void UiSceneManager::CreateScreenDimmer() { |
std::unique_ptr<UiElement> element; |
element = base::MakeUnique<ScreenDimmer>(); |
+ element->set_debug_id(kScreenDimmer); |
element->set_id(AllocateId()); |
element->set_fill(vr_shell::Fill::NONE); |
element->set_visible(false); |
@@ -145,6 +160,7 @@ void UiSceneManager::CreateSecurityWarnings() { |
scene_->AddUiElement(std::move(element)); |
element = base::MakeUnique<ExitWarning>(1024); |
+ element->set_debug_id(kExitWarning); |
element->set_id(AllocateId()); |
element->set_fill(vr_shell::Fill::NONE); |
element->set_size({kExitWarningWidth, kExitWarningHeight, 1}); |
@@ -163,6 +179,7 @@ void UiSceneManager::CreateSystemIndicators() { |
// TODO(acondor): Make constants for sizes and positions once the UX for the |
// indicators is defined. |
element = base::MakeUnique<AudioCaptureIndicator>(512); |
+ element->set_debug_id(kAudioCaptureIndicator); |
element->set_id(AllocateId()); |
element->set_translation({-0.3, 0.8, -kContentDistance + 0.1}); |
element->set_size({0.5, 0, 1}); |
@@ -171,6 +188,7 @@ void UiSceneManager::CreateSystemIndicators() { |
scene_->AddUiElement(std::move(element)); |
element = base::MakeUnique<VideoCaptureIndicator>(512); |
+ element->set_debug_id(kVideoCaptureIndicator); |
element->set_id(AllocateId()); |
element->set_translation({0.3, 0.8, -kContentDistance + 0.1}); |
element->set_size({0.5, 0, 1}); |
@@ -179,6 +197,7 @@ void UiSceneManager::CreateSystemIndicators() { |
scene_->AddUiElement(std::move(element)); |
element = base::MakeUnique<ScreenCaptureIndicator>(512); |
+ element->set_debug_id(kScreenCaptureIndicator); |
element->set_id(AllocateId()); |
element->set_translation({0.0, 0.65, -kContentDistance + 0.1}); |
element->set_size({0.4, 0, 1}); |
@@ -191,6 +210,7 @@ void UiSceneManager::CreateContentQuad() { |
std::unique_ptr<UiElement> element; |
element = base::MakeUnique<UiElement>(); |
+ element->set_debug_id(kContentQuad); |
element->set_id(AllocateId()); |
element->set_fill(vr_shell::Fill::CONTENT); |
element->set_size({kContentWidth, kContentHeight, 1}); |
@@ -203,6 +223,7 @@ void UiSceneManager::CreateContentQuad() { |
// Place an invisible but hittable plane behind the content quad, to keep the |
// reticle roughly planar with the content if near content. |
element = base::MakeUnique<UiElement>(); |
+ element->set_debug_id(kBackplane); |
element->set_id(AllocateId()); |
element->set_fill(vr_shell::Fill::NONE); |
element->set_size({kBackplaneSize, kBackplaneSize, 1.0}); |
@@ -221,6 +242,7 @@ void UiSceneManager::CreateBackground() { |
// Floor. |
element = base::MakeUnique<UiElement>(); |
+ element->set_debug_id(kFloor); |
element->set_id(AllocateId()); |
element->set_size({kSceneSize, kSceneSize, 1.0}); |
element->set_translation({0.0, -kSceneHeight / 2, 0.0}); |
@@ -229,11 +251,13 @@ void UiSceneManager::CreateBackground() { |
element->set_edge_color(kBackgroundHorizonColor); |
element->set_center_color(kBackgroundCenterColor); |
element->set_draw_phase(0); |
- control_elements_.push_back(element.get()); |
+ floor_ = element.get(); |
+ content_elements_.push_back(element.get()); |
scene_->AddUiElement(std::move(element)); |
// Ceiling. |
element = base::MakeUnique<UiElement>(); |
+ element->set_debug_id(kCeiling); |
element->set_id(AllocateId()); |
element->set_fill(vr_shell::Fill::OPAQUE_GRADIENT); |
element->set_size({kSceneSize, kSceneSize, 1.0}); |
@@ -243,11 +267,13 @@ void UiSceneManager::CreateBackground() { |
element->set_edge_color(kBackgroundHorizonColor); |
element->set_center_color(kBackgroundCenterColor); |
element->set_draw_phase(0); |
- control_elements_.push_back(element.get()); |
+ ceiling_ = element.get(); |
+ content_elements_.push_back(element.get()); |
scene_->AddUiElement(std::move(element)); |
// Floor grid. |
element = base::MakeUnique<UiElement>(); |
+ element->set_debug_id(kFloorGrid); |
element->set_id(AllocateId()); |
element->set_fill(vr_shell::Fill::GRID_GRADIENT); |
element->set_size({kSceneSize, kSceneSize, 1.0}); |
@@ -260,7 +286,8 @@ void UiSceneManager::CreateBackground() { |
element->set_edge_color(edge_color); |
element->set_gridline_count(kFloorGridlineCount); |
element->set_draw_phase(0); |
- control_elements_.push_back(element.get()); |
+ floor_grid_ = element.get(); |
+ content_elements_.push_back(element.get()); |
scene_->AddUiElement(std::move(element)); |
scene_->SetBackgroundColor(kBackgroundHorizonColor); |
@@ -269,6 +296,7 @@ void UiSceneManager::CreateBackground() { |
void UiSceneManager::CreateUrlBar() { |
// TODO(cjgrant): Incorporate final size and position. |
auto url_bar = base::MakeUnique<UrlBar>(512); |
+ url_bar->set_debug_id(kUrlBar); |
url_bar->set_id(AllocateId()); |
url_bar->set_translation({0, kUrlBarVerticalOffset, -kUrlBarDistance}); |
url_bar->set_size({kUrlBarWidth, kUrlBarHeight, 1}); |
@@ -279,6 +307,7 @@ void UiSceneManager::CreateUrlBar() { |
scene_->AddUiElement(std::move(url_bar)); |
auto indicator = base::MakeUnique<LoadingIndicator>(256); |
+ indicator->set_debug_id(kLoadingIndicator); |
indicator->set_id(AllocateId()); |
indicator->set_translation({0, 0, kLoadingIndicatorOffset}); |
indicator->set_size({kLoadingIndicatorWidth, kLoadingIndicatorHeight, 1}); |
@@ -334,22 +363,37 @@ void UiSceneManager::ConfigureScene() { |
// Update content quad parameters depending on fullscreen. |
// TODO(http://crbug.com/642937): Animate fullscreen transitions. |
if (fullscreen_) { |
- scene_->SetBackgroundColor(kFullscreenBackgroundColor); |
main_content_->set_translation( |
{0, kFullscreenVerticalOffset, -kFullscreenDistance}); |
main_content_->set_size({kFullscreenWidth, kFullscreenHeight, 1}); |
+ |
+ ConfigureBackgroundColor(kFullscreenCenterColor, kFullscreenHorizonColor); |
} else { |
- scene_->SetBackgroundColor(kBackgroundHorizonColor); |
// Note that main_content_ is already visible in this case. |
main_content_->set_translation( |
{0, kContentVerticalOffset, -kContentDistance}); |
main_content_->set_size({kContentWidth, kContentHeight, 1}); |
+ |
+ ConfigureBackgroundColor(kBackgroundCenterColor, kBackgroundHorizonColor); |
} |
scene_->SetBackgroundDistance(main_content_->translation().z() * |
-kBackgroundDistanceMultiplier); |
} |
+void UiSceneManager::ConfigureBackgroundColor(vr::Colorf center_color, |
+ vr::Colorf horizon_color) { |
+ scene_->SetBackgroundColor(horizon_color); |
+ floor_->set_edge_color(horizon_color); |
+ floor_->set_center_color(center_color); |
+ ceiling_->set_edge_color(horizon_color); |
+ ceiling_->set_center_color(center_color); |
+ floor_grid_->set_center_color(horizon_color); |
+ vr::Colorf edge_color = horizon_color; |
+ edge_color.a = 0.0; |
+ floor_grid_->set_edge_color(edge_color); |
+} |
+ |
void UiSceneManager::SetAudioCapturingIndicator(bool enabled) { |
audio_capture_indicator_->set_visible(enabled); |
} |