Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: ash/display/display_controller.cc

Issue 201573015: Introdcue AshWindowTreeHost and move ash/chrome specific code in WTH to ash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/display/display_controller.cc
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc
index 6a4931dabdf8f547fc26856d4b22bee837532bdb..11c49ce66878c668e41abeec8bc8f14308b701ad 100644
--- a/ash/display/display_controller.cc
+++ b/ash/display/display_controller.cc
@@ -15,7 +15,8 @@
#include "ash/display/mirror_window_controller.h"
#include "ash/display/root_window_transformers.h"
#include "ash/display/virtual_keyboard_window_controller.h"
-#include "ash/host/window_tree_host_factory.h"
+#include "ash/host/ash_window_tree_host.h"
+#include "ash/host/root_window_transformer.h"
#include "ash/root_window_controller.h"
#include "ash/root_window_settings.h"
#include "ash/screen_util.h"
@@ -27,11 +28,11 @@
#include "ui/aura/client/capture_client.h"
#include "ui/aura/client/focus_client.h"
#include "ui/aura/client/screen_position_client.h"
-#include "ui/aura/root_window_transformer.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/aura/window_property.h"
#include "ui/aura/window_tracker.h"
+#include "ui/aura/window_tree_host.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_vsync_manager.h"
#include "ui/gfx/display.h"
@@ -76,9 +77,10 @@ DisplayManager* GetDisplayManager() {
return Shell::GetInstance()->display_manager();
}
-void SetDisplayPropertiesOnHost(aura::WindowTreeHost* host,
+void SetDisplayPropertiesOnHost(AshWindowTreeHost* ash_host,
const gfx::Display& display) {
DisplayInfo info = GetDisplayManager()->GetDisplayInfo(display.id());
+ aura::WindowTreeHost* host = ash_host->AsWindowTreeHost();
#if defined(OS_CHROMEOS) && defined(USE_X11)
// Native window property (Atom in X11) that specifies the display's
// rotation, scale factor and if it's internal display. They are
@@ -116,9 +118,9 @@ void SetDisplayPropertiesOnHost(aura::WindowTreeHost* host,
kCARDINAL,
100 * display.device_scale_factor());
#endif
- scoped_ptr<aura::RootWindowTransformer> transformer(
+ scoped_ptr<RootWindowTransformer> transformer(
CreateRootWindowTransformerForDisplay(host->window(), display));
- host->SetRootWindowTransformer(transformer.Pass());
+ ash_host->SetRootWindowTransformer(transformer.Pass());
DisplayMode mode;
if (GetDisplayManager()->GetSelectedModeForDisplayId(display.id(), &mode) &&
@@ -129,6 +131,10 @@ void SetDisplayPropertiesOnHost(aura::WindowTreeHost* host,
}
}
+aura::Window* GetWindow(AshWindowTreeHost* ash_host) {
+ return ash_host->AsWindowTreeHost()->window();
+}
+
} // namespace
// A utility class to store/restore focused/active window
@@ -218,7 +224,7 @@ bool DisplayController::DisplayChangeLimiter::IsThrottled() const {
// DisplayController
DisplayController::DisplayController()
- : primary_root_window_for_replace_(NULL),
+ : primary_tree_host_for_replace_(NULL),
focus_activation_store_(new FocusActivationStore()),
cursor_window_controller_(new CursorWindowController()),
mirror_window_controller_(new MirrorWindowController()) {
@@ -257,28 +263,34 @@ void DisplayController::Shutdown() {
Shell::GetScreen()->RemoveObserver(this);
// Delete all root window controllers, which deletes root window
// from the last so that the primary root window gets deleted last.
- for (std::map<int64, aura::Window*>::const_reverse_iterator it =
- root_windows_.rbegin(); it != root_windows_.rend(); ++it) {
- RootWindowController* controller = GetRootWindowController(it->second);
+ for (WindowTreeHostMap::const_reverse_iterator it =
+ window_tree_hosts_.rbegin();
+ it != window_tree_hosts_.rend();
+ ++it) {
+ RootWindowController* controller =
+ GetRootWindowController(GetWindow(it->second));
DCHECK(controller);
delete controller;
}
}
-void DisplayController::InitPrimaryDisplay() {
+void DisplayController::CreatePrimaryHost() {
const gfx::Display& primary_candidate =
GetDisplayManager()->GetPrimaryDisplayCandidate();
primary_display_id = primary_candidate.id();
AddWindowTreeHostForDisplay(primary_candidate);
}
-void DisplayController::InitSecondaryDisplays() {
+void DisplayController::InitDisplays() {
+ RootWindowController::CreateForPrimaryDisplay(
+ window_tree_hosts_[primary_display_id]);
+
DisplayManager* display_manager = GetDisplayManager();
for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) {
const gfx::Display& display = display_manager->GetDisplayAt(i);
if (primary_display_id != display.id()) {
- aura::WindowTreeHost* host = AddWindowTreeHostForDisplay(display);
- RootWindowController::CreateForSecondaryDisplay(host);
+ AshWindowTreeHost* ash_host = AddWindowTreeHostForDisplay(display);
+ RootWindowController::CreateForSecondaryDisplay(ash_host);
}
}
UpdateHostWindowNames();
@@ -298,18 +310,19 @@ int64 DisplayController::GetPrimaryDisplayId() {
}
aura::Window* DisplayController::GetPrimaryRootWindow() {
- DCHECK(!root_windows_.empty());
- return root_windows_[primary_display_id];
+ return GetRootWindowForDisplayId(primary_display_id);
}
aura::Window* DisplayController::GetRootWindowForDisplayId(int64 id) {
- return root_windows_[id];
+ DCHECK_EQ(1u, window_tree_hosts_.count(id));
+ return GetWindow(window_tree_hosts_[id]);
}
void DisplayController::CloseChildWindows() {
- for (std::map<int64, aura::Window*>::const_iterator it =
- root_windows_.begin(); it != root_windows_.end(); ++it) {
- aura::Window* root_window = it->second;
+ for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin();
+ it != window_tree_hosts_.end();
+ ++it) {
+ aura::Window* root_window = GetWindow(it->second);
RootWindowController* controller = GetRootWindowController(root_window);
if (controller) {
controller->CloseChildWindows();
@@ -324,11 +337,12 @@ void DisplayController::CloseChildWindows() {
aura::Window::Windows DisplayController::GetAllRootWindows() {
aura::Window::Windows windows;
- for (std::map<int64, aura::Window*>::const_iterator it =
- root_windows_.begin(); it != root_windows_.end(); ++it) {
+ for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin();
+ it != window_tree_hosts_.end();
+ ++it) {
DCHECK(it->second);
- if (GetRootWindowController(it->second))
- windows.push_back(it->second);
+ if (GetRootWindowController(GetWindow(it->second)))
+ windows.push_back(GetWindow(it->second));
}
return windows;
}
@@ -345,9 +359,11 @@ void DisplayController::SetOverscanInsets(int64 display_id,
std::vector<RootWindowController*>
DisplayController::GetAllRootWindowControllers() {
std::vector<RootWindowController*> controllers;
- for (std::map<int64, aura::Window*>::const_iterator it =
- root_windows_.begin(); it != root_windows_.end(); ++it) {
- RootWindowController* controller = GetRootWindowController(it->second);
+ for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin();
+ it != window_tree_hosts_.end();
+ ++it) {
+ RootWindowController* controller =
+ GetRootWindowController(GetWindow(it->second));
if (controller)
controllers.push_back(controller);
}
@@ -423,39 +439,41 @@ void DisplayController::SetPrimaryDisplay(
}
if (primary_display_id == new_primary_display.id() ||
- root_windows_.size() < 2) {
+ window_tree_hosts_.size() < 2) {
return;
}
- aura::Window* non_primary_root = root_windows_[new_primary_display.id()];
- LOG_IF(ERROR, !non_primary_root)
+ AshWindowTreeHost* non_primary_host =
+ window_tree_hosts_[new_primary_display.id()];
+ LOG_IF(ERROR, !non_primary_host)
<< "Unknown display is requested in SetPrimaryDisplay: id="
<< new_primary_display.id();
- if (!non_primary_root)
+ if (!non_primary_host)
return;
gfx::Display old_primary_display = Shell::GetScreen()->GetPrimaryDisplay();
// Swap root windows between current and new primary display.
- aura::Window* primary_root = root_windows_[primary_display_id];
- DCHECK(primary_root);
- DCHECK_NE(primary_root, non_primary_root);
+ AshWindowTreeHost* primary_host = window_tree_hosts_[primary_display_id];
+ DCHECK(primary_host);
+ DCHECK_NE(primary_host, non_primary_host);
- root_windows_[new_primary_display.id()] = primary_root;
- GetRootWindowSettings(primary_root)->display_id = new_primary_display.id();
+ window_tree_hosts_[new_primary_display.id()] = primary_host;
+ GetRootWindowSettings(GetWindow(primary_host))->display_id =
+ new_primary_display.id();
- root_windows_[old_primary_display.id()] = non_primary_root;
- GetRootWindowSettings(non_primary_root)->display_id =
+ window_tree_hosts_[old_primary_display.id()] = non_primary_host;
+ GetRootWindowSettings(GetWindow(non_primary_host))->display_id =
old_primary_display.id();
primary_display_id = new_primary_display.id();
GetDisplayManager()->layout_store()->UpdatePrimaryDisplayId(
display_manager->GetCurrentDisplayIdPair(), primary_display_id);
- UpdateWorkAreaOfDisplayNearestWindow(
- primary_root, old_primary_display.GetWorkAreaInsets());
- UpdateWorkAreaOfDisplayNearestWindow(
- non_primary_root, new_primary_display.GetWorkAreaInsets());
+ UpdateWorkAreaOfDisplayNearestWindow(GetWindow(primary_host),
+ old_primary_display.GetWorkAreaInsets());
+ UpdateWorkAreaOfDisplayNearestWindow(GetWindow(non_primary_host),
+ new_primary_display.GetWorkAreaInsets());
// Update the dispay manager with new display info.
std::vector<DisplayInfo> display_info_list;
@@ -529,67 +547,69 @@ void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) {
const DisplayInfo& display_info =
GetDisplayManager()->GetDisplayInfo(display.id());
DCHECK(!display_info.bounds_in_native().IsEmpty());
- aura::WindowTreeHost* host = root_windows_[display.id()]->GetHost();
- host->SetBounds(display_info.bounds_in_native());
- SetDisplayPropertiesOnHost(host, display);
+ AshWindowTreeHost* ash_host = window_tree_hosts_[display.id()];
+ ash_host->AsWindowTreeHost()->SetBounds(display_info.bounds_in_native());
+ SetDisplayPropertiesOnHost(ash_host, display);
}
void DisplayController::OnDisplayAdded(const gfx::Display& display) {
- if (primary_root_window_for_replace_) {
- DCHECK(root_windows_.empty());
+ if (primary_tree_host_for_replace_) {
+ DCHECK(window_tree_hosts_.empty());
primary_display_id = display.id();
- root_windows_[display.id()] = primary_root_window_for_replace_;
- GetRootWindowSettings(primary_root_window_for_replace_)->display_id =
- display.id();
- primary_root_window_for_replace_ = NULL;
+ window_tree_hosts_[display.id()] = primary_tree_host_for_replace_;
+ GetRootWindowSettings(GetWindow(primary_tree_host_for_replace_))
+ ->display_id = display.id();
+ primary_tree_host_for_replace_ = NULL;
const DisplayInfo& display_info =
GetDisplayManager()->GetDisplayInfo(display.id());
- aura::WindowTreeHost* host = root_windows_[display.id()]->GetHost();
- host->SetBounds(display_info.bounds_in_native());
- SetDisplayPropertiesOnHost(host, display);
+ AshWindowTreeHost* ash_host = window_tree_hosts_[display.id()];
+ ash_host->AsWindowTreeHost()->SetBounds(display_info.bounds_in_native());
+ SetDisplayPropertiesOnHost(ash_host, display);
} else {
if (primary_display_id == gfx::Display::kInvalidDisplayID)
primary_display_id = display.id();
- DCHECK(!root_windows_.empty());
- aura::WindowTreeHost* host = AddWindowTreeHostForDisplay(display);
- RootWindowController::CreateForSecondaryDisplay(host);
+ DCHECK(!window_tree_hosts_.empty());
+ AshWindowTreeHost* ash_host = AddWindowTreeHostForDisplay(display);
+ RootWindowController::CreateForSecondaryDisplay(ash_host);
}
}
void DisplayController::OnDisplayRemoved(const gfx::Display& display) {
- aura::Window* root_to_delete = root_windows_[display.id()];
- DCHECK(root_to_delete) << display.ToString();
+ AshWindowTreeHost* host_to_delete = window_tree_hosts_[display.id()];
+ DCHECK(host_to_delete) << display.ToString();
// Display for root window will be deleted when the Primary RootWindow
// is deleted by the Shell.
- root_windows_.erase(display.id());
+ window_tree_hosts_.erase(display.id());
// When the primary root window's display is removed, move the primary
// root to the other display.
if (primary_display_id == display.id()) {
// Temporarily store the primary root window in
// |primary_root_window_for_replace_| when replacing the display.
- if (root_windows_.size() == 0) {
+ if (window_tree_hosts_.size() == 0) {
primary_display_id = gfx::Display::kInvalidDisplayID;
- primary_root_window_for_replace_ = root_to_delete;
+ primary_tree_host_for_replace_ = host_to_delete;
return;
}
- DCHECK_EQ(1U, root_windows_.size());
+ DCHECK_EQ(1U, window_tree_hosts_.size());
primary_display_id = ScreenUtil::GetSecondaryDisplay().id();
- aura::Window* primary_root = root_to_delete;
+ AshWindowTreeHost* primary_host = host_to_delete;
- // Delete the other root instead.
- root_to_delete = root_windows_[primary_display_id];
- GetRootWindowSettings(root_to_delete)->display_id = display.id();
+ // Delete the other host instead.
+ host_to_delete = window_tree_hosts_[primary_display_id];
+ GetRootWindowSettings(GetWindow(host_to_delete))->display_id = display.id();
// Setup primary root.
- root_windows_[primary_display_id] = primary_root;
- GetRootWindowSettings(primary_root)->display_id = primary_display_id;
+ window_tree_hosts_[primary_display_id] = primary_host;
+ GetRootWindowSettings(GetWindow(primary_host))->display_id =
+ primary_display_id;
OnDisplayBoundsChanged(
GetDisplayManager()->GetDisplayForId(primary_display_id));
}
- RootWindowController* controller = GetRootWindowController(root_to_delete);
+ RootWindowController* controller =
+ GetRootWindowController(GetWindow(host_to_delete));
DCHECK(controller);
controller->MoveWindowsTo(GetPrimaryRootWindow());
// Delete most of root window related objects, but don't delete
@@ -679,15 +699,15 @@ void DisplayController::PostDisplayConfigurationChange() {
EnsurePointerInDisplays();
}
-aura::WindowTreeHost* DisplayController::AddWindowTreeHostForDisplay(
+AshWindowTreeHost* DisplayController::AddWindowTreeHostForDisplay(
const gfx::Display& display) {
static int host_count = 0;
const DisplayInfo& display_info =
GetDisplayManager()->GetDisplayInfo(display.id());
const gfx::Rect& bounds_in_native = display_info.bounds_in_native();
- aura::WindowTreeHost* host =
- Shell::GetInstance()->window_tree_host_factory()->CreateWindowTreeHost(
- bounds_in_native);
+ AshWindowTreeHost* ash_host = AshWindowTreeHost::Create(bounds_in_native);
+ aura::WindowTreeHost* host = ash_host->AsWindowTreeHost();
+
host->window()->SetName(base::StringPrintf("RootWindow-%d", host_count++));
host->compositor()->SetBackgroundColor(SK_ColorBLACK);
// No need to remove our observer observer because the DisplayController
@@ -696,17 +716,17 @@ aura::WindowTreeHost* DisplayController::AddWindowTreeHostForDisplay(
InitRootWindowSettings(host->window())->display_id = display.id();
host->InitHost();
- root_windows_[display.id()] = host->window();
- SetDisplayPropertiesOnHost(host, display);
+ window_tree_hosts_[display.id()] = ash_host;
+ SetDisplayPropertiesOnHost(ash_host, display);
#if defined(OS_CHROMEOS)
static bool force_constrain_pointer_to_root =
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshConstrainPointerToRoot);
if (base::SysInfo::IsRunningOnChromeOS() || force_constrain_pointer_to_root)
- host->ConfineCursorToRootWindow();
+ ash_host->ConfineCursorToRootWindow();
#endif
- return host;
+ return ash_host;
}
void DisplayController::OnFadeOutForSwapDisplayFinished() {

Powered by Google App Engine
This is Rietveld 408576698