Index: ash/display/display_controller.cc |
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc |
index 343db545c3bf9309594d42698053b6103d7d48e9..7b7cc5882e5592a336e718a28d2fa3c442bb5215 100644 |
--- a/ash/display/display_controller.cc |
+++ b/ash/display/display_controller.cc |
@@ -17,16 +17,14 @@ |
#include "ash/host/root_window_host_factory.h" |
#include "ash/root_window_controller.h" |
#include "ash/root_window_settings.h" |
-#include "ash/screen_ash.h" |
+#include "ash/screen_util.h" |
#include "ash/shell.h" |
#include "ash/shell_delegate.h" |
#include "ash/wm/coordinate_conversion.h" |
#include "base/command_line.h" |
#include "base/strings/stringprintf.h" |
-#include "third_party/skia/include/utils/SkMatrix44.h" |
#include "ui/aura/client/activation_client.h" |
#include "ui/aura/client/capture_client.h" |
-#include "ui/aura/client/cursor_client.h" |
#include "ui/aura/client/focus_client.h" |
#include "ui/aura/client/screen_position_client.h" |
#include "ui/aura/root_window.h" |
@@ -35,7 +33,6 @@ |
#include "ui/aura/window_property.h" |
#include "ui/aura/window_tracker.h" |
#include "ui/compositor/compositor.h" |
-#include "ui/compositor/dip_util.h" |
#include "ui/gfx/display.h" |
#include "ui/gfx/screen.h" |
@@ -63,10 +60,6 @@ namespace { |
// during the shutdown instead of always keeping two display instances |
// (one here and another one in display_manager) in sync, which is error prone. |
int64 primary_display_id = gfx::Display::kInvalidDisplayID; |
-gfx::Display* primary_display_for_shutdown = NULL; |
-// Keeps the number of displays during the shutdown after |
-// ash::Shell:: is deleted. |
-int num_displays_for_shutdown = -1; |
// Specifies how long the display change should have been disabled |
// after each display change operations. |
@@ -235,13 +228,9 @@ DisplayController::DisplayController() |
// Reset primary display to make sure that tests don't use |
// stale display info from previous tests. |
primary_display_id = gfx::Display::kInvalidDisplayID; |
- delete primary_display_for_shutdown; |
- primary_display_for_shutdown = NULL; |
- num_displays_for_shutdown = -1; |
} |
DisplayController::~DisplayController() { |
- DCHECK(primary_display_for_shutdown); |
} |
void DisplayController::Start() { |
@@ -263,11 +252,6 @@ void DisplayController::Shutdown() { |
mirror_window_controller_.reset(); |
virtual_keyboard_window_controller_.reset(); |
- DCHECK(!primary_display_for_shutdown); |
- primary_display_for_shutdown = new gfx::Display( |
- GetDisplayManager()->GetDisplayForId(primary_display_id)); |
- num_displays_for_shutdown = GetDisplayManager()->GetNumDisplays(); |
- |
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. |
@@ -280,21 +264,6 @@ void DisplayController::Shutdown() { |
} |
} |
-// static |
-const gfx::Display& DisplayController::GetPrimaryDisplay() { |
- DCHECK_NE(primary_display_id, gfx::Display::kInvalidDisplayID); |
- if (primary_display_for_shutdown) |
- return *primary_display_for_shutdown; |
- return GetDisplayManager()->GetDisplayForId(primary_display_id); |
-} |
- |
-// static |
-int DisplayController::GetNumDisplays() { |
- if (num_displays_for_shutdown >= 0) |
- return num_displays_for_shutdown; |
- return GetDisplayManager()->GetNumDisplays(); |
-} |
- |
void DisplayController::InitPrimaryDisplay() { |
const gfx::Display& primary_candidate = |
GetDisplayManager()->GetPrimaryDisplayCandidate(); |
@@ -322,6 +291,11 @@ void DisplayController::RemoveObserver(Observer* observer) { |
observers_.RemoveObserver(observer); |
} |
+// static |
+int64 DisplayController::GetPrimaryDisplayId() { |
+ return primary_display_id; |
+} |
+ |
aura::Window* DisplayController::GetPrimaryRootWindow() { |
DCHECK(!root_windows_.empty()); |
return root_windows_[primary_display_id]; |
@@ -418,10 +392,10 @@ void DisplayController::SwapPrimaryDisplay() { |
&DisplayController::OnFadeOutForSwapDisplayFinished, |
base::Unretained(this))); |
} else { |
- SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); |
+ SetPrimaryDisplay(ScreenUtil::GetSecondaryDisplay()); |
} |
#else |
- SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); |
+ SetPrimaryDisplay(ScreenUtil::GetSecondaryDisplay()); |
#endif |
} |
} |
@@ -461,7 +435,7 @@ void DisplayController::SetPrimaryDisplay( |
if (!non_primary_root) |
return; |
- gfx::Display old_primary_display = GetPrimaryDisplay(); |
+ 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]; |
@@ -490,7 +464,7 @@ void DisplayController::SetPrimaryDisplay( |
display_info_list.push_back(display_manager->GetDisplayInfo( |
primary_display_id)); |
display_info_list.push_back(display_manager->GetDisplayInfo( |
- ScreenAsh::GetSecondaryDisplay().id())); |
+ ScreenUtil::GetSecondaryDisplay().id())); |
GetDisplayManager()->set_force_bounds_changed(true); |
GetDisplayManager()->UpdateDisplays(display_info_list); |
GetDisplayManager()->set_force_bounds_changed(false); |
@@ -553,70 +527,6 @@ bool DisplayController::UpdateWorkAreaOfDisplayNearestWindow( |
return GetDisplayManager()->UpdateWorkAreaOfDisplay(id, insets); |
} |
-const gfx::Display& DisplayController::GetDisplayNearestWindow( |
- const aura::Window* window) const { |
- if (!window) |
- return GetPrimaryDisplay(); |
- const aura::Window* root_window = window->GetRootWindow(); |
- if (!root_window) |
- return GetPrimaryDisplay(); |
- int64 id = internal::GetRootWindowSettings(root_window)->display_id; |
- // if id is |kInvaildDisplayID|, it's being deleted. |
- DCHECK(id != gfx::Display::kInvalidDisplayID); |
- |
- internal::DisplayManager* display_manager = GetDisplayManager(); |
- // RootWindow needs Display to determine its device scale factor |
- // for non desktop display. |
- if (display_manager->non_desktop_display().id() == id) |
- return display_manager->non_desktop_display(); |
- return display_manager->GetDisplayForId(id); |
-} |
- |
-const gfx::Display& DisplayController::GetDisplayNearestPoint( |
- const gfx::Point& point) const { |
- const gfx::Display& display = |
- GetDisplayManager()->FindDisplayContainingPoint(point); |
- if (display.is_valid()) |
- return display; |
- |
- // Fallback to the display that has the shortest Manhattan distance from |
- // the |point|. This is correct in the only areas that matter, namely in the |
- // corners between the physical screens. |
- int min_distance = INT_MAX; |
- const gfx::Display* nearest_display = NULL; |
- for (size_t i = 0; i < GetDisplayManager()->GetNumDisplays(); ++i) { |
- const gfx::Display& display = GetDisplayManager()->GetDisplayAt(i); |
- int distance = display.bounds().ManhattanDistanceToPoint(point); |
- if (distance < min_distance) { |
- min_distance = distance; |
- nearest_display = &display; |
- } |
- } |
- // There should always be at least one display that is less than INT_MAX away. |
- DCHECK(nearest_display); |
- return *nearest_display; |
-} |
- |
-const gfx::Display& DisplayController::GetDisplayMatching( |
- const gfx::Rect& rect) const { |
- if (rect.IsEmpty()) |
- return GetDisplayNearestPoint(rect.origin()); |
- |
- int max_area = 0; |
- const gfx::Display* matching = NULL; |
- for (size_t i = 0; i < GetDisplayManager()->GetNumDisplays(); ++i) { |
- const gfx::Display& display = GetDisplayManager()->GetDisplayAt(i); |
- gfx::Rect intersect = gfx::IntersectRects(display.bounds(), rect); |
- int area = intersect.width() * intersect.height(); |
- if (area > max_area) { |
- max_area = area; |
- matching = &display; |
- } |
- } |
- // Fallback to the primary display if there is no matching display. |
- return matching ? *matching : GetPrimaryDisplay(); |
-} |
- |
void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) { |
const internal::DisplayInfo& display_info = |
GetDisplayManager()->GetDisplayInfo(display.id()); |
@@ -669,7 +579,7 @@ void DisplayController::OnDisplayRemoved(const gfx::Display& display) { |
return; |
} |
DCHECK_EQ(1U, root_windows_.size()); |
- primary_display_id = ScreenAsh::GetSecondaryDisplay().id(); |
+ primary_display_id = ScreenUtil::GetSecondaryDisplay().id(); |
aura::Window* primary_root = root_to_delete; |
// Delete the other root instead. |
@@ -695,8 +605,10 @@ void DisplayController::OnDisplayRemoved(const gfx::Display& display) { |
} |
void DisplayController::OnWindowTreeHostResized(const aura::RootWindow* root) { |
+ gfx::Display display = Shell::GetScreen()->GetDisplayNearestWindow( |
+ const_cast<aura::Window*>(root->window())); |
+ |
internal::DisplayManager* display_manager = GetDisplayManager(); |
- gfx::Display display = GetDisplayNearestWindow(root->window()); |
if (display_manager->UpdateDisplayBounds( |
display.id(), |
root->host()->GetBounds())) { |
@@ -728,9 +640,9 @@ void DisplayController::CloseNonDesktopDisplay() { |
void DisplayController::PreDisplayConfigurationChange(bool clear_focus) { |
FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanging()); |
focus_activation_store_->Store(clear_focus); |
- |
- gfx::Point point_in_screen = Shell::GetScreen()->GetCursorScreenPoint(); |
- gfx::Display display = GetDisplayNearestPoint(point_in_screen); |
+ gfx::Screen* screen = Shell::GetScreen(); |
+ gfx::Point point_in_screen = screen->GetCursorScreenPoint(); |
+ gfx::Display display = screen->GetDisplayNearestPoint(point_in_screen); |
aura::Window* root_window = GetRootWindowForDisplayId(display.id()); |
aura::client::ScreenPositionClient* client = |
@@ -763,7 +675,8 @@ void DisplayController::PostDisplayConfigurationChange() { |
// ignored. Happens when a) default layout's primary id |
// doesn't exist, or b) the primary_id has already been |
// set to the same and didn't update it. |
- layout_store->UpdatePrimaryDisplayId(pair, GetPrimaryDisplay().id()); |
+ layout_store->UpdatePrimaryDisplayId( |
+ pair, Shell::GetScreen()->GetPrimaryDisplay().id()); |
} |
} |
FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged()); |
@@ -806,7 +719,7 @@ aura::RootWindow* DisplayController::AddRootWindowForDisplay( |
void DisplayController::OnFadeOutForSwapDisplayFinished() { |
#if defined(OS_CHROMEOS) && defined(USE_X11) |
- SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); |
+ SetPrimaryDisplay(ScreenUtil::GetSecondaryDisplay()); |
Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation(); |
#endif |
} |