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

Unified Diff: ash/display/display_controller.cc

Issue 138003007: [Cleanup] Screen cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make sure screen_for_shutdown is reset everytime Created 6 years, 11 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
« no previous file with comments | « ash/display/display_controller.h ('k') | ash/display/display_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
}
« no previous file with comments | « ash/display/display_controller.h ('k') | ash/display/display_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698