| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/display/display_change_observer_chromeos.h" | 5 #include "ash/display/display_change_observer_chromeos.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 if (display::Display::HasInternalDisplay()) | 68 if (display::Display::HasInternalDisplay()) |
| 69 DCHECK_EQ(display::Display::InternalDisplayId(), state->display_id()); | 69 DCHECK_EQ(display::Display::InternalDisplayId(), state->display_id()); |
| 70 display::Display::SetInternalDisplayId(state->display_id()); | 70 display::Display::SetInternalDisplayId(state->display_id()); |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 } | 73 } |
| 74 | 74 |
| 75 } // namespace | 75 } // namespace |
| 76 | 76 |
| 77 // static | 77 // static |
| 78 DisplayInfo::ManagedDisplayModeList | 78 ui::ManagedDisplayInfo::ManagedDisplayModeList |
| 79 DisplayChangeObserver::GetInternalManagedDisplayModeList( | 79 DisplayChangeObserver::GetInternalManagedDisplayModeList( |
| 80 const DisplayInfo& display_info, | 80 const ui::ManagedDisplayInfo& display_info, |
| 81 const ui::DisplaySnapshot& output) { | 81 const ui::DisplaySnapshot& output) { |
| 82 const ui::DisplayMode* ui_native_mode = output.native_mode(); | 82 const ui::DisplayMode* ui_native_mode = output.native_mode(); |
| 83 scoped_refptr<ManagedDisplayMode> native_mode = new ManagedDisplayMode( | 83 scoped_refptr<ui::ManagedDisplayMode> native_mode = |
| 84 ui_native_mode->size(), ui_native_mode->refresh_rate(), | 84 new ui::ManagedDisplayMode(ui_native_mode->size(), |
| 85 ui_native_mode->is_interlaced(), true, 1.0, | 85 ui_native_mode->refresh_rate(), |
| 86 display_info.device_scale_factor()); | 86 ui_native_mode->is_interlaced(), true, 1.0, |
| 87 display_info.device_scale_factor()); |
| 87 | 88 |
| 88 return CreateInternalManagedDisplayModeList(native_mode); | 89 return CreateInternalManagedDisplayModeList(native_mode); |
| 89 } | 90 } |
| 90 | 91 |
| 91 // static | 92 // static |
| 92 DisplayInfo::ManagedDisplayModeList | 93 ui::ManagedDisplayInfo::ManagedDisplayModeList |
| 93 DisplayChangeObserver::GetExternalManagedDisplayModeList( | 94 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
| 94 const ui::DisplaySnapshot& output) { | 95 const ui::DisplaySnapshot& output) { |
| 95 using DisplayModeMap = | 96 using DisplayModeMap = |
| 96 std::map<std::pair<int, int>, scoped_refptr<ManagedDisplayMode>>; | 97 std::map<std::pair<int, int>, scoped_refptr<ui::ManagedDisplayMode>>; |
| 97 DisplayModeMap display_mode_map; | 98 DisplayModeMap display_mode_map; |
| 98 | 99 |
| 99 scoped_refptr<ManagedDisplayMode> native_mode = new ManagedDisplayMode(); | 100 scoped_refptr<ui::ManagedDisplayMode> native_mode = |
| 101 new ui::ManagedDisplayMode(); |
| 100 for (const auto& mode_info : output.modes()) { | 102 for (const auto& mode_info : output.modes()) { |
| 101 const std::pair<int, int> size(mode_info->size().width(), | 103 const std::pair<int, int> size(mode_info->size().width(), |
| 102 mode_info->size().height()); | 104 mode_info->size().height()); |
| 103 scoped_refptr<ManagedDisplayMode> display_mode = new ManagedDisplayMode( | 105 scoped_refptr<ui::ManagedDisplayMode> display_mode = |
| 104 mode_info->size(), mode_info->refresh_rate(), | 106 new ui::ManagedDisplayMode(mode_info->size(), mode_info->refresh_rate(), |
| 105 mode_info->is_interlaced(), output.native_mode() == mode_info.get(), | 107 mode_info->is_interlaced(), |
| 106 1.0, 1.0); | 108 output.native_mode() == mode_info.get(), 1.0, |
| 109 1.0); |
| 107 if (display_mode->native()) | 110 if (display_mode->native()) |
| 108 native_mode = display_mode; | 111 native_mode = display_mode; |
| 109 | 112 |
| 110 // Add the display mode if it isn't already present and override interlaced | 113 // Add the display mode if it isn't already present and override interlaced |
| 111 // display modes with non-interlaced ones. | 114 // display modes with non-interlaced ones. |
| 112 DisplayModeMap::iterator display_mode_it = display_mode_map.find(size); | 115 DisplayModeMap::iterator display_mode_it = display_mode_map.find(size); |
| 113 if (display_mode_it == display_mode_map.end()) | 116 if (display_mode_it == display_mode_map.end()) |
| 114 display_mode_map.insert(std::make_pair(size, display_mode)); | 117 display_mode_map.insert(std::make_pair(size, display_mode)); |
| 115 else if (display_mode_it->second->is_interlaced() && | 118 else if (display_mode_it->second->is_interlaced() && |
| 116 !display_mode->is_interlaced()) | 119 !display_mode->is_interlaced()) |
| 117 display_mode_it->second = std::move(display_mode); | 120 display_mode_it->second = std::move(display_mode); |
| 118 } | 121 } |
| 119 | 122 |
| 120 DisplayInfo::ManagedDisplayModeList display_mode_list; | 123 ui::ManagedDisplayInfo::ManagedDisplayModeList display_mode_list; |
| 121 for (const auto& display_mode_pair : display_mode_map) | 124 for (const auto& display_mode_pair : display_mode_map) |
| 122 display_mode_list.push_back(std::move(display_mode_pair.second)); | 125 display_mode_list.push_back(std::move(display_mode_pair.second)); |
| 123 | 126 |
| 124 if (output.native_mode()) { | 127 if (output.native_mode()) { |
| 125 const std::pair<int, int> size(native_mode->size().width(), | 128 const std::pair<int, int> size(native_mode->size().width(), |
| 126 native_mode->size().height()); | 129 native_mode->size().height()); |
| 127 DisplayModeMap::iterator it = display_mode_map.find(size); | 130 DisplayModeMap::iterator it = display_mode_map.find(size); |
| 128 DCHECK(it != display_mode_map.end()) | 131 DCHECK(it != display_mode_map.end()) |
| 129 << "Native mode must be part of the mode list."; | 132 << "Native mode must be part of the mode list."; |
| 130 | 133 |
| 131 // If the native mode was replaced re-add it. | 134 // If the native mode was replaced re-add it. |
| 132 if (!it->second->native()) | 135 if (!it->second->native()) |
| 133 display_mode_list.push_back(native_mode); | 136 display_mode_list.push_back(native_mode); |
| 134 } | 137 } |
| 135 | 138 |
| 136 if (native_mode->size().width() >= kMinimumWidthFor4K) { | 139 if (native_mode->size().width() >= kMinimumWidthFor4K) { |
| 137 for (size_t i = 0; i < arraysize(kAdditionalDeviceScaleFactorsFor4k); ++i) { | 140 for (size_t i = 0; i < arraysize(kAdditionalDeviceScaleFactorsFor4k); ++i) { |
| 138 scoped_refptr<ManagedDisplayMode> mode = new ManagedDisplayMode( | 141 scoped_refptr<ui::ManagedDisplayMode> mode = new ui::ManagedDisplayMode( |
| 139 native_mode->size(), native_mode->refresh_rate(), | 142 native_mode->size(), native_mode->refresh_rate(), |
| 140 native_mode->is_interlaced(), false /* native */, | 143 native_mode->is_interlaced(), false /* native */, |
| 141 native_mode->ui_scale(), kAdditionalDeviceScaleFactorsFor4k[i]); | 144 native_mode->ui_scale(), kAdditionalDeviceScaleFactorsFor4k[i]); |
| 142 display_mode_list.push_back(mode); | 145 display_mode_list.push_back(mode); |
| 143 } | 146 } |
| 144 } | 147 } |
| 145 | 148 |
| 146 return display_mode_list; | 149 return display_mode_list; |
| 147 } | 150 } |
| 148 | 151 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 170 const display::DisplayLayout& layout = Shell::GetInstance() | 173 const display::DisplayLayout& layout = Shell::GetInstance() |
| 171 ->display_manager() | 174 ->display_manager() |
| 172 ->layout_store() | 175 ->layout_store() |
| 173 ->GetRegisteredDisplayLayout(list); | 176 ->GetRegisteredDisplayLayout(list); |
| 174 return layout.mirrored ? ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR | 177 return layout.mirrored ? ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR |
| 175 : ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED; | 178 : ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED; |
| 176 } | 179 } |
| 177 | 180 |
| 178 bool DisplayChangeObserver::GetResolutionForDisplayId(int64_t display_id, | 181 bool DisplayChangeObserver::GetResolutionForDisplayId(int64_t display_id, |
| 179 gfx::Size* size) const { | 182 gfx::Size* size) const { |
| 180 scoped_refptr<ManagedDisplayMode> mode = | 183 scoped_refptr<ui::ManagedDisplayMode> mode = |
| 181 Shell::GetInstance()->display_manager()->GetSelectedModeForDisplayId( | 184 Shell::GetInstance()->display_manager()->GetSelectedModeForDisplayId( |
| 182 display_id); | 185 display_id); |
| 183 if (!mode) | 186 if (!mode) |
| 184 return false; | 187 return false; |
| 185 *size = mode->size(); | 188 *size = mode->size(); |
| 186 return true; | 189 return true; |
| 187 } | 190 } |
| 188 | 191 |
| 189 void DisplayChangeObserver::OnDisplayModeChanged( | 192 void DisplayChangeObserver::OnDisplayModeChanged( |
| 190 const ui::DisplayConfigurator::DisplayStateList& display_states) { | 193 const ui::DisplayConfigurator::DisplayStateList& display_states) { |
| 191 UpdateInternalDisplayId(display_states); | 194 UpdateInternalDisplayId(display_states); |
| 192 | 195 |
| 193 std::vector<DisplayInfo> displays; | 196 std::vector<ui::ManagedDisplayInfo> displays; |
| 194 std::set<int64_t> ids; | 197 std::set<int64_t> ids; |
| 195 for (const ui::DisplaySnapshot* state : display_states) { | 198 for (const ui::DisplaySnapshot* state : display_states) { |
| 196 const ui::DisplayMode* mode_info = state->current_mode(); | 199 const ui::DisplayMode* mode_info = state->current_mode(); |
| 197 if (!mode_info) | 200 if (!mode_info) |
| 198 continue; | 201 continue; |
| 199 | 202 |
| 200 float device_scale_factor = 1.0f; | 203 float device_scale_factor = 1.0f; |
| 201 // Sets dpi only if the screen size is not blacklisted. | 204 // Sets dpi only if the screen size is not blacklisted. |
| 202 float dpi = ui::IsDisplaySizeBlackListed(state->physical_size()) | 205 float dpi = ui::IsDisplaySizeBlackListed(state->physical_size()) |
| 203 ? 0 | 206 ? 0 |
| 204 : kInchInMm * mode_info->size().width() / | 207 : kInchInMm * mode_info->size().width() / |
| 205 state->physical_size().width(); | 208 state->physical_size().width(); |
| 206 if (state->type() == ui::DISPLAY_CONNECTION_TYPE_INTERNAL) { | 209 if (state->type() == ui::DISPLAY_CONNECTION_TYPE_INTERNAL) { |
| 207 if (dpi) | 210 if (dpi) |
| 208 device_scale_factor = FindDeviceScaleFactor(dpi); | 211 device_scale_factor = FindDeviceScaleFactor(dpi); |
| 209 } else { | 212 } else { |
| 210 scoped_refptr<ManagedDisplayMode> mode = | 213 scoped_refptr<ui::ManagedDisplayMode> mode = |
| 211 Shell::GetInstance()->display_manager()->GetSelectedModeForDisplayId( | 214 Shell::GetInstance()->display_manager()->GetSelectedModeForDisplayId( |
| 212 state->display_id()); | 215 state->display_id()); |
| 213 if (mode) { | 216 if (mode) { |
| 214 device_scale_factor = mode->device_scale_factor(); | 217 device_scale_factor = mode->device_scale_factor(); |
| 215 } else { | 218 } else { |
| 216 // For monitors that are 40 inches and 4K or above, set | 219 // For monitors that are 40 inches and 4K or above, set |
| 217 // |device_scale_factor| to 2x. For margin purposes, 100 is subtracted | 220 // |device_scale_factor| to 2x. For margin purposes, 100 is subtracted |
| 218 // from the value of |k2xThreshouldSizeSquaredFor4KInMm| | 221 // from the value of |k2xThreshouldSizeSquaredFor4KInMm| |
| 219 const int k2xThreshouldSizeSquaredFor4KInMm = | 222 const int k2xThreshouldSizeSquaredFor4KInMm = |
| 220 (40 * 40 * kInchInMm * kInchInMm) - 100; | 223 (40 * 40 * kInchInMm * kInchInMm) - 100; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 242 name = state->display_name(); | 245 name = state->display_name(); |
| 243 } | 246 } |
| 244 | 247 |
| 245 if (name.empty()) | 248 if (name.empty()) |
| 246 name = l10n_util::GetStringUTF8(IDS_ASH_STATUS_TRAY_UNKNOWN_DISPLAY_NAME); | 249 name = l10n_util::GetStringUTF8(IDS_ASH_STATUS_TRAY_UNKNOWN_DISPLAY_NAME); |
| 247 | 250 |
| 248 bool has_overscan = state->has_overscan(); | 251 bool has_overscan = state->has_overscan(); |
| 249 int64_t id = state->display_id(); | 252 int64_t id = state->display_id(); |
| 250 ids.insert(id); | 253 ids.insert(id); |
| 251 | 254 |
| 252 displays.push_back(DisplayInfo(id, name, has_overscan)); | 255 displays.push_back(ui::ManagedDisplayInfo(id, name, has_overscan)); |
| 253 DisplayInfo& new_info = displays.back(); | 256 ui::ManagedDisplayInfo& new_info = displays.back(); |
| 254 new_info.set_sys_path(state->sys_path()); | 257 new_info.set_sys_path(state->sys_path()); |
| 255 new_info.set_device_scale_factor(device_scale_factor); | 258 new_info.set_device_scale_factor(device_scale_factor); |
| 256 new_info.SetBounds(display_bounds); | 259 new_info.SetBounds(display_bounds); |
| 257 new_info.set_native(true); | 260 new_info.set_native(true); |
| 258 new_info.set_is_aspect_preserving_scaling( | 261 new_info.set_is_aspect_preserving_scaling( |
| 259 state->is_aspect_preserving_scaling()); | 262 state->is_aspect_preserving_scaling()); |
| 260 if (dpi) | 263 if (dpi) |
| 261 new_info.set_device_dpi(dpi); | 264 new_info.set_device_dpi(dpi); |
| 262 | 265 |
| 263 DisplayInfo::ManagedDisplayModeList display_modes = | 266 ui::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
| 264 (state->type() == ui::DISPLAY_CONNECTION_TYPE_INTERNAL) | 267 (state->type() == ui::DISPLAY_CONNECTION_TYPE_INTERNAL) |
| 265 ? GetInternalManagedDisplayModeList(new_info, *state) | 268 ? GetInternalManagedDisplayModeList(new_info, *state) |
| 266 : GetExternalManagedDisplayModeList(*state); | 269 : GetExternalManagedDisplayModeList(*state); |
| 267 new_info.SetManagedDisplayModes(display_modes); | 270 new_info.SetManagedDisplayModes(display_modes); |
| 268 | 271 |
| 269 new_info.set_available_color_profiles( | 272 new_info.set_available_color_profiles( |
| 270 Shell::GetInstance() | 273 Shell::GetInstance() |
| 271 ->display_configurator() | 274 ->display_configurator() |
| 272 ->GetAvailableColorCalibrationProfiles(id)); | 275 ->GetAvailableColorCalibrationProfiles(id)); |
| 273 new_info.set_maximum_cursor_size(state->maximum_cursor_size()); | 276 new_info.set_maximum_cursor_size(state->maximum_cursor_size()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 } | 314 } |
| 312 return 1.0f; | 315 return 1.0f; |
| 313 } | 316 } |
| 314 | 317 |
| 315 void DisplayChangeObserver::OnTouchscreenDeviceConfigurationChanged() { | 318 void DisplayChangeObserver::OnTouchscreenDeviceConfigurationChanged() { |
| 316 OnDisplayModeChanged( | 319 OnDisplayModeChanged( |
| 317 Shell::GetInstance()->display_configurator()->cached_displays()); | 320 Shell::GetInstance()->display_configurator()->cached_displays()); |
| 318 } | 321 } |
| 319 | 322 |
| 320 } // namespace ash | 323 } // namespace ash |
| OLD | NEW |