Chromium Code Reviews| Index: ash/display/display_controller.cc |
| diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc |
| index e8186db924d7683419601f82f80d81d7789a6ed9..91405c55f5a408f6d8422c92d2bc2c3acb502b15 100644 |
| --- a/ash/display/display_controller.cc |
| +++ b/ash/display/display_controller.cc |
| @@ -9,6 +9,7 @@ |
| #include <map> |
| #include "ash/ash_switches.h" |
| +#include "ash/display/display_layout_store.h" |
| #include "ash/display/display_manager.h" |
| #include "ash/display/root_window_transformers.h" |
| #include "ash/host/root_window_host_factory.h" |
| @@ -223,23 +224,6 @@ DisplayController::DisplayController() |
| base::chromeos::IsRunningOnChromeOS()) |
| limiter_.reset(new DisplayChangeLimiter); |
| #endif |
| - if (command_line->HasSwitch(switches::kAshSecondaryDisplayLayout)) { |
| - std::string value = command_line->GetSwitchValueASCII( |
| - switches::kAshSecondaryDisplayLayout); |
| - char layout; |
| - int offset = 0; |
| - if (sscanf(value.c_str(), "%c,%d", &layout, &offset) == 2) { |
| - if (layout == 't') |
| - default_display_layout_.position = DisplayLayout::TOP; |
| - else if (layout == 'b') |
| - default_display_layout_.position = DisplayLayout::BOTTOM; |
| - else if (layout == 'r') |
| - default_display_layout_.position = DisplayLayout::RIGHT; |
| - else if (layout == 'l') |
| - default_display_layout_.position = DisplayLayout::LEFT; |
| - default_display_layout_.offset = offset; |
| - } |
| - } |
| // Reset primary display to make sure that tests don't use |
| // stale display info from previous tests. |
| primary_display_id = gfx::Display::kInvalidDisplayID; |
| @@ -389,19 +373,6 @@ DisplayController::GetAllRootWindowControllers() { |
| return controllers; |
| } |
| -void DisplayController::SetDefaultDisplayLayout(const DisplayLayout& layout) { |
| - CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| - if (!command_line->HasSwitch(switches::kAshSecondaryDisplayLayout)) |
| - default_display_layout_ = layout; |
| -} |
| - |
| -void DisplayController::RegisterLayoutForDisplayIdPair( |
| - int64 id1, |
| - int64 id2, |
| - const DisplayLayout& layout) { |
| - RegisterLayoutForDisplayIdPairInternal(id1, id2, layout, true); |
| -} |
| - |
| void DisplayController::SetLayoutForCurrentDisplays( |
| const DisplayLayout& layout_relative_to_primary) { |
| DCHECK_EQ(2U, GetDisplayManager()->GetNumDisplays()); |
| @@ -413,11 +384,15 @@ void DisplayController::SetLayoutForCurrentDisplays( |
| DisplayLayout to_set = pair.first == primary.id() ? |
| layout_relative_to_primary : layout_relative_to_primary.Invert(); |
| - const DisplayLayout& current_layout = paired_layouts_[pair]; |
| + internal::DisplayLayoutStore* layout_store = |
| + GetDisplayManager()->layout_store(); |
| + DisplayLayout current_layout = |
| + layout_store->GetRegisteredDisplayLayout(pair); |
| if (to_set.position != current_layout.position || |
| to_set.offset != current_layout.offset) { |
| to_set.primary_id = primary.id(); |
| - paired_layouts_[pair] = to_set; |
| + layout_store->RegisterLayoutForDisplayIdPair( |
| + pair.first, pair.second, to_set); |
| NotifyDisplayConfigurationChanging(); |
| // TODO(oshima): Call UpdateDisplays instead. |
| UpdateDisplayBoundsForLayout(); |
| @@ -430,10 +405,12 @@ DisplayLayout DisplayController::GetCurrentDisplayLayout() { |
| // Invert if the primary was swapped. |
| if (GetDisplayManager()->num_connected_displays() > 1) { |
| DisplayIdPair pair = GetCurrentDisplayIdPair(); |
| - return ComputeDisplayLayoutForDisplayIdPair(pair); |
| + return GetDisplayManager()->layout_store()-> |
| + ComputeDisplayLayoutForDisplayIdPair(pair); |
| } |
| // On release build, just fallback to default instead of blowing up. |
| - DisplayLayout layout = default_display_layout_; |
| + DisplayLayout layout = |
| + GetDisplayManager()->layout_store()->default_display_layout(); |
| layout.primary_id = primary_display_id; |
|
Jun Mukai
2013/07/09 16:54:17
can't we move this setting primary_display_id logi
oshima
2013/07/09 17:27:58
store doesn't know about the current primary (only
|
| return layout; |
| } |
| @@ -456,14 +433,6 @@ DisplayIdPair DisplayController::GetCurrentDisplayIdPair() const { |
| } |
| } |
| -DisplayLayout DisplayController::GetRegisteredDisplayLayout( |
| - const DisplayIdPair& pair) { |
| - std::map<DisplayIdPair, DisplayLayout>::const_iterator iter = |
| - paired_layouts_.find(pair); |
| - return |
| - iter != paired_layouts_.end() ? iter->second : CreateDisplayLayout(pair); |
| -} |
| - |
| void DisplayController::ToggleMirrorMode() { |
| internal::DisplayManager* display_manager = GetDisplayManager(); |
| if (display_manager->num_connected_displays() <= 1) |
| @@ -559,7 +528,8 @@ void DisplayController::SetPrimaryDisplay( |
| old_primary_display.id()); |
| primary_display_id = new_primary_display.id(); |
| - paired_layouts_[GetCurrentDisplayIdPair()].primary_id = primary_display_id; |
| + GetDisplayManager()->layout_store()->UpdatePrimaryDisplayId( |
| + GetCurrentDisplayIdPair(), primary_display_id); |
| display_manager->UpdateWorkAreaOfDisplayNearestWindow( |
| primary_root, old_primary_display.GetWorkAreaInsets()); |
| @@ -794,13 +764,14 @@ void DisplayController::NotifyDisplayConfigurationChanged() { |
| focus_activation_store_->Restore(); |
| internal::DisplayManager* display_manager = GetDisplayManager(); |
| + internal::DisplayLayoutStore* layout_store = display_manager->layout_store(); |
| if (display_manager->num_connected_displays() > 1) { |
| DisplayIdPair pair = GetCurrentDisplayIdPair(); |
| - if (paired_layouts_.find(pair) == paired_layouts_.end()) |
| - CreateDisplayLayout(pair); |
| - paired_layouts_[pair].mirrored = display_manager->IsMirrored(); |
| + layout_store->UpdateMirrorStatus(pair, display_manager->IsMirrored()); |
| + DisplayLayout layout = layout_store->GetRegisteredDisplayLayout(pair); |
| + |
| if (Shell::GetScreen()->GetNumDisplays() > 1 ) { |
| - int64 primary_id = paired_layouts_[pair].primary_id; |
| + int64 primary_id = layout.primary_id; |
| SetPrimaryDisplayId( |
| primary_id == gfx::Display::kInvalidDisplayID ? |
| pair.first : primary_id); |
| @@ -808,23 +779,13 @@ void DisplayController::NotifyDisplayConfigurationChanged() { |
| // 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. |
| - paired_layouts_[pair].primary_id = GetPrimaryDisplay().id(); |
| + layout_store->UpdatePrimaryDisplayId(pair, GetPrimaryDisplay().id()); |
| } |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged()); |
| UpdateHostWindowNames(); |
| } |
| -void DisplayController::RegisterLayoutForDisplayIdPairInternal( |
| - int64 id1, |
| - int64 id2, |
| - const DisplayLayout& layout, |
| - bool override) { |
| - DisplayIdPair pair = std::make_pair(id1, id2); |
| - if (override || paired_layouts_.find(pair) == paired_layouts_.end()) |
| - paired_layouts_[pair] = layout; |
| -} |
| - |
| void DisplayController::OnFadeOutForSwapDisplayFinished() { |
| #if defined(OS_CHROMEOS) && defined(USE_X11) |
| SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); |
| @@ -832,18 +793,6 @@ void DisplayController::OnFadeOutForSwapDisplayFinished() { |
| #endif |
| } |
| -DisplayLayout DisplayController::ComputeDisplayLayoutForDisplayIdPair( |
| - const DisplayIdPair& pair) { |
| - DisplayLayout layout = GetRegisteredDisplayLayout(pair); |
| - int64 primary_id = layout.primary_id; |
| - // TODO(oshima): replace this with DCHECK. |
| - if (primary_id == gfx::Display::kInvalidDisplayID) |
| - primary_id = GetPrimaryDisplay().id(); |
| - // Invert if the primary was swapped. If mirrored, first is always |
| - // primary. |
| - return pair.first == primary_id ? layout : layout.Invert(); |
| -} |
| - |
| void DisplayController::UpdateHostWindowNames() { |
| #if defined(USE_X11) |
| // crbug.com/120229 - set the window title for the primary dislpay |
| @@ -860,12 +809,4 @@ void DisplayController::UpdateHostWindowNames() { |
| #endif |
| } |
| -DisplayLayout DisplayController::CreateDisplayLayout( |
| - const DisplayIdPair& pair) { |
| - DisplayLayout layout = default_display_layout_; |
| - layout.primary_id = pair.first; |
| - paired_layouts_[pair] = layout; |
| - return layout; |
| -} |
| - |
| } // namespace ash |