| 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 be65c923106125db36cee2fe35cf8224c597a74b..2a4b0be18eaf18fefa8b914603361f6833e84a55 100644
|
| --- a/chrome/browser/android/vr_shell/ui_scene_manager.cc
|
| +++ b/chrome/browser/android/vr_shell/ui_scene_manager.cc
|
| @@ -11,6 +11,7 @@
|
| #include "chrome/browser/android/vr_shell/ui_elements/audio_capture_indicator.h"
|
| #include "chrome/browser/android/vr_shell/ui_elements/button.h"
|
| #include "chrome/browser/android/vr_shell/ui_elements/exit_prompt.h"
|
| +#include "chrome/browser/android/vr_shell/ui_elements/exit_prompt_backplane.h"
|
| #include "chrome/browser/android/vr_shell/ui_elements/exit_warning.h"
|
| #include "chrome/browser/android/vr_shell/ui_elements/loading_indicator.h"
|
| #include "chrome/browser/android/vr_shell/ui_elements/permanent_security_warning.h"
|
| @@ -49,6 +50,7 @@ static constexpr float kBackgroundDistanceMultiplier = 1.414;
|
|
|
| static constexpr float kExitPromptWidth = 0.672 * kContentDistance;
|
| static constexpr float kExitPromptHeight = 0.2 * kContentDistance;
|
| +static constexpr float kExitPromptBackplaneSize = 1000.0;
|
|
|
| static constexpr float kUrlBarDistance = 2.4;
|
| static constexpr float kUrlBarWidth = 0.672 * kUrlBarDistance;
|
| @@ -96,6 +98,7 @@ UiSceneManager::UiSceneManager(VrBrowserInterface* browser,
|
| if (in_cct_)
|
| CreateCloseButton();
|
| CreateScreenDimmer();
|
| + CreateExitPrompt();
|
|
|
| ConfigureScene();
|
| ConfigureSecurityWarnings();
|
| @@ -220,26 +223,9 @@ void UiSceneManager::CreateContentQuad() {
|
| element->set_size({kBackplaneSize, kBackplaneSize, 1.0});
|
| element->set_translation({0.0, 0.0, -kTextureOffset});
|
| element->set_parent_id(main_content_->id());
|
| - main_content_backplane_ = element.get();
|
| content_elements_.push_back(element.get());
|
| scene_->AddUiElement(std::move(element));
|
|
|
| - element = base::MakeUnique<ExitPrompt>(
|
| - 512,
|
| - base::Bind(&UiSceneManager::OnExitPromptPrimaryButtonClicked,
|
| - base::Unretained(this)),
|
| - base::Bind(&UiSceneManager::OnExitPromptSecondaryButtonClicked,
|
| - base::Unretained(this)));
|
| - element->set_debug_id(kExitPrompt);
|
| - element->set_id(AllocateId());
|
| - element->set_fill(vr_shell::Fill::NONE);
|
| - element->set_size({kExitPromptWidth, kExitPromptHeight, 1});
|
| - element->set_translation({0.0, 0.0, kTextureOffset});
|
| - element->set_parent_id(main_content_->id());
|
| - element->set_visible(false);
|
| - exit_prompt_ = element.get();
|
| - scene_->AddUiElement(std::move(element));
|
| -
|
| // Limit reticle distance to a sphere based on content distance.
|
| scene_->SetBackgroundDistance(main_content_->translation().z() *
|
| -kBackgroundDistanceMultiplier);
|
| @@ -323,6 +309,38 @@ void UiSceneManager::CreateCloseButton() {
|
| scene_->AddUiElement(std::move(element));
|
| }
|
|
|
| +void UiSceneManager::CreateExitPrompt() {
|
| + std::unique_ptr<UiElement> element = base::MakeUnique<ExitPrompt>(
|
| + 512,
|
| + base::Bind(&UiSceneManager::OnExitPromptPrimaryButtonClicked,
|
| + base::Unretained(this)),
|
| + base::Bind(&UiSceneManager::OnExitPromptSecondaryButtonClicked,
|
| + base::Unretained(this)));
|
| + element->set_debug_id(kExitPrompt);
|
| + element->set_id(AllocateId());
|
| + element->set_fill(vr_shell::Fill::NONE);
|
| + element->set_size({kExitPromptWidth, kExitPromptHeight, 1});
|
| + element->set_translation({0.0, 0.0, kTextureOffset});
|
| + element->set_parent_id(main_content_->id());
|
| + element->set_visible(false);
|
| + exit_prompt_ = element.get();
|
| + scene_->AddUiElement(std::move(element));
|
| +
|
| + // Place an invisible but hittable plane behind the exit prompt, to keep the
|
| + // reticle roughly planar with the content if near content.
|
| + element = base::MakeUnique<ExitPromptBackplane>(base::Bind(
|
| + &UiSceneManager::OnExitPromptBackplaneClicked, base::Unretained(this)));
|
| + element->set_debug_id(kExitPromptBackplane);
|
| + element->set_id(AllocateId());
|
| + element->set_fill(vr_shell::Fill::NONE);
|
| + element->set_size({kExitPromptBackplaneSize, kExitPromptBackplaneSize, 1.0});
|
| + element->set_translation({0.0, 0.0, -kTextureOffset});
|
| + element->set_parent_id(exit_prompt_->id());
|
| + exit_prompt_backplane_ = element.get();
|
| + content_elements_.push_back(element.get());
|
| + scene_->AddUiElement(std::move(element));
|
| +}
|
| +
|
| base::WeakPtr<UiSceneManager> UiSceneManager::GetWeakPtr() {
|
| return weak_ptr_factory_.GetWeakPtr();
|
| }
|
| @@ -340,7 +358,6 @@ void UiSceneManager::SetWebVrMode(bool web_vr) {
|
|
|
| void UiSceneManager::ConfigureScene() {
|
| exit_warning_->SetEnabled(scene_->is_exiting());
|
| - exit_prompt_->SetEnabled(scene_->is_prompting_to_exit());
|
| screen_dimmer_->SetEnabled(scene_->is_exiting());
|
|
|
| // Controls (URL bar, loading progress, etc).
|
| @@ -350,13 +367,20 @@ void UiSceneManager::ConfigureScene() {
|
| }
|
|
|
| // Content elements.
|
| - main_content_->SetEnabled(!web_vr_mode_ && !scene_->is_prompting_to_exit());
|
| - main_content_backplane_->SetEnabled(!web_vr_mode_);
|
| + for (UiElement* element : content_elements_) {
|
| + element->SetEnabled(!web_vr_mode_ && !scene_->is_prompting_to_exit());
|
| + }
|
| +
|
| // Background elements.
|
| for (UiElement* element : background_elements_) {
|
| element->SetEnabled(!web_vr_mode_);
|
| }
|
|
|
| + // Exit prompt.
|
| + bool showExitPrompt = !web_vr_mode_ && scene_->is_prompting_to_exit();
|
| + exit_prompt_->SetEnabled(showExitPrompt);
|
| + exit_prompt_backplane_->SetEnabled(showExitPrompt);
|
| +
|
| // Update content quad parameters depending on fullscreen.
|
| // TODO(http://crbug.com/642937): Animate fullscreen transitions.
|
| if (fullscreen_) {
|
| @@ -457,13 +481,21 @@ void UiSceneManager::OnSecurityIconClicked() {
|
| ConfigureScene();
|
| }
|
|
|
| -void UiSceneManager::OnExitPromptPrimaryButtonClicked() {
|
| +void UiSceneManager::OnExitPromptBackplaneClicked() {
|
| + CloseExitPrompt();
|
| +}
|
| +
|
| +void UiSceneManager::CloseExitPrompt() {
|
| if (!scene_->is_prompting_to_exit())
|
| return;
|
| scene_->set_is_prompting_to_exit(false);
|
| ConfigureScene();
|
| }
|
|
|
| +void UiSceneManager::OnExitPromptPrimaryButtonClicked() {
|
| + CloseExitPrompt();
|
| +}
|
| +
|
| void UiSceneManager::OnExitPromptSecondaryButtonClicked() {
|
| OnUnsupportedMode(UiUnsupportedMode::kUnhandledPageInfo);
|
| }
|
|
|