| Index: ash/display/display_manager.cc
|
| diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
|
| index 431a8450685ce84ebe60adfc3ace4f298ae7fa65..cda6ffce840bb1333b21d88f30ec3df200365c66 100644
|
| --- a/ash/display/display_manager.cc
|
| +++ b/ash/display/display_manager.cc
|
| @@ -144,30 +144,19 @@ const gfx::Display& DisplayManager::FindDisplayContainingPoint(
|
|
|
| void DisplayManager::SetOverscanInsets(int64 display_id,
|
| const gfx::Insets& insets_in_dip) {
|
| + display_info_[display_id].overscan_insets_in_dip = insets_in_dip;
|
| +
|
| + // Copies the |displays_| because UpdateDisplays() compares the passed
|
| + // displays and its internal |displays_|.
|
| DisplayList displays = displays_;
|
| - std::map<int64, gfx::Insets>::const_iterator old_overscan =
|
| - overscan_mapping_.find(display_id);
|
| - if (old_overscan != overscan_mapping_.end()) {
|
| - gfx::Insets old_insets = old_overscan->second;
|
| - for (DisplayList::iterator iter = displays.begin();
|
| - iter != displays.end(); ++iter) {
|
| - if (iter->id() == display_id) {
|
| - // Undo the existing insets before applying the new insets.
|
| - gfx::Rect bounds = iter->bounds_in_pixel();
|
| - bounds.Inset(old_insets.Scale(-iter->device_scale_factor()));
|
| - iter->SetScaleAndBounds(iter->device_scale_factor(), bounds);
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - overscan_mapping_[display_id] = insets_in_dip;
|
| - OnNativeDisplaysChanged(displays);
|
| + UpdateDisplays(displays);
|
| }
|
|
|
| gfx::Insets DisplayManager::GetOverscanInsets(int64 display_id) const {
|
| - std::map<int64, gfx::Insets>::const_iterator it =
|
| - overscan_mapping_.find(display_id);
|
| - return (it != overscan_mapping_.end()) ? it->second : gfx::Insets();
|
| + std::map<int64, DisplayInfo>::const_iterator it =
|
| + display_info_.find(display_id);
|
| + return (it != display_info_.end()) ?
|
| + it->second.overscan_insets_in_dip : gfx::Insets();
|
| }
|
|
|
| void DisplayManager::OnNativeDisplaysChanged(
|
| @@ -211,13 +200,34 @@ void DisplayManager::OnNativeDisplaysChanged(
|
| new_displays = updated_displays;
|
| }
|
|
|
| + for (DisplayList::const_iterator iter = new_displays.begin();
|
| + iter != new_displays.end(); ++iter) {
|
| + std::map<int64, DisplayInfo>::iterator info =
|
| + display_info_.find(iter->id());
|
| + if (info != display_info_.end()) {
|
| + info->second.original_bounds_in_pixel = iter->bounds_in_pixel();
|
| + } else {
|
| + display_info_[iter->id()].original_bounds_in_pixel =
|
| + iter->bounds_in_pixel();
|
| + }
|
| + }
|
| +
|
| + UpdateDisplays(new_displays);
|
| + RefreshDisplayNames();
|
| +}
|
| +
|
| +void DisplayManager::UpdateDisplays(
|
| + const std::vector<gfx::Display>& updated_displays) {
|
| + DisplayList new_displays = updated_displays;
|
| +
|
| for (DisplayList::iterator iter = new_displays.begin();
|
| iter != new_displays.end(); ++iter) {
|
| - std::map<int64, gfx::Insets>::const_iterator overscan_insets =
|
| - overscan_mapping_.find(iter->id());
|
| - if (overscan_insets != overscan_mapping_.end()) {
|
| - gfx::Rect bounds = iter->bounds_in_pixel();
|
| - bounds.Inset(overscan_insets->second.Scale(iter->device_scale_factor()));
|
| + std::map<int64, DisplayInfo>::const_iterator info =
|
| + display_info_.find(iter->id());
|
| + if (info != display_info_.end()) {
|
| + gfx::Rect bounds = info->second.original_bounds_in_pixel;
|
| + bounds.Inset(info->second.overscan_insets_in_dip.Scale(
|
| + iter->device_scale_factor()));
|
| iter->SetScaleAndBounds(iter->device_scale_factor(), bounds);
|
| }
|
| }
|
| @@ -281,7 +291,6 @@ void DisplayManager::OnNativeDisplaysChanged(
|
| }
|
|
|
| displays_ = new_displays;
|
| - RefreshDisplayNames();
|
|
|
| // Temporarily add displays to be removed because display object
|
| // being removed are accessed during shutting down the root.
|
| @@ -379,10 +388,10 @@ std::string DisplayManager::GetDisplayNameFor(
|
| if (!display.is_valid())
|
| return l10n_util::GetStringUTF8(IDS_ASH_STATUS_TRAY_UNKNOWN_DISPLAY_NAME);
|
|
|
| - std::map<int64, std::string>::const_iterator iter =
|
| - display_names_.find(display.id());
|
| - if (iter != display_names_.end())
|
| - return iter->second;
|
| + std::map<int64, DisplayInfo>::const_iterator iter =
|
| + display_info_.find(display.id());
|
| + if (iter != display_info_.end())
|
| + return iter->second.name;
|
|
|
| return base::StringPrintf("Display %d", static_cast<int>(display.id()));
|
| }
|
| @@ -535,8 +544,6 @@ void DisplayManager::EnsurePointerInDisplays() {
|
| }
|
|
|
| void DisplayManager::RefreshDisplayNames() {
|
| - display_names_.clear();
|
| -
|
| #if defined(OS_CHROMEOS)
|
| if (!base::chromeos::IsRunningOnChromeOS())
|
| return;
|
| @@ -555,10 +562,10 @@ void DisplayManager::RefreshDisplayNames() {
|
| outputs[i], &manufacturer_id, &serial_number, &name)) {
|
| int64 id = gfx::Display::GetID(manufacturer_id, serial_number);
|
| if (IsInternalDisplayId(id)) {
|
| - display_names_[id] =
|
| + display_info_[id].name =
|
| l10n_util::GetStringUTF8(IDS_ASH_INTERNAL_DISPLAY_NAME);
|
| } else {
|
| - display_names_[id] = name;
|
| + display_info_[id].name = name;
|
| }
|
| }
|
| }
|
|
|