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

Side by Side Diff: ash/display/display_manager.cc

Issue 12438016: Save display preference when all display configuration changes has been completed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: replace dcheck Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_manager.h" 5 #include "ash/display/display_manager.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 } 172 }
173 173
174 void DisplayManager::SetDisplayRotation(int64 display_id, 174 void DisplayManager::SetDisplayRotation(int64 display_id,
175 gfx::Display::Rotation rotation) { 175 gfx::Display::Rotation rotation) {
176 if (!IsDisplayRotationEnabled()) 176 if (!IsDisplayRotationEnabled())
177 return; 177 return;
178 DisplayInfoList display_info_list; 178 DisplayInfoList display_info_list;
179 for (DisplayList::const_iterator iter = displays_.begin(); 179 for (DisplayList::const_iterator iter = displays_.begin();
180 iter != displays_.end(); ++iter) { 180 iter != displays_.end(); ++iter) {
181 DisplayInfo info = GetDisplayInfo(*iter); 181 DisplayInfo info = GetDisplayInfo(*iter);
182 if (info.id() == display_id) 182 if (info.id() == display_id) {
183 if (info.rotation() == rotation)
184 return;
183 info.set_rotation(rotation); 185 info.set_rotation(rotation);
186 }
184 display_info_list.push_back(info); 187 display_info_list.push_back(info);
185 } 188 }
186 UpdateDisplays(display_info_list); 189 UpdateDisplays(display_info_list);
187 } 190 }
188 191
189 void DisplayManager::SetDisplayUIScale(int64 display_id, 192 void DisplayManager::SetDisplayUIScale(int64 display_id,
190 float ui_scale) { 193 float ui_scale) {
191 if (!IsDisplayUIScalingEnabled()) 194 if (!IsDisplayUIScalingEnabled())
192 return; 195 return;
193 DisplayInfoList display_info_list; 196 DisplayInfoList display_info_list;
194 for (DisplayList::const_iterator iter = displays_.begin(); 197 for (DisplayList::const_iterator iter = displays_.begin();
195 iter != displays_.end(); ++iter) { 198 iter != displays_.end(); ++iter) {
196 DisplayInfo info = GetDisplayInfo(*iter); 199 DisplayInfo info = GetDisplayInfo(*iter);
197 if (info.id() == display_id) 200 if (info.id() == display_id) {
201 if (info.ui_scale() == ui_scale)
202 return;
198 info.set_ui_scale(ui_scale); 203 info.set_ui_scale(ui_scale);
204 }
199 display_info_list.push_back(info); 205 display_info_list.push_back(info);
200 } 206 }
201 UpdateDisplays(display_info_list); 207 UpdateDisplays(display_info_list);
202 } 208 }
203 209
204 210
205 bool DisplayManager::IsDisplayRotationEnabled() const { 211 bool DisplayManager::IsDisplayRotationEnabled() const {
206 static bool enabled = !CommandLine::ForCurrentProcess()-> 212 static bool enabled = !CommandLine::ForCurrentProcess()->
207 HasSwitch(switches::kAshDisableDisplayRotation); 213 HasSwitch(switches::kAshDisableDisplayRotation);
208 return enabled; 214 return enabled;
209 } 215 }
210 216
211 bool DisplayManager::IsDisplayUIScalingEnabled() const { 217 bool DisplayManager::IsDisplayUIScalingEnabled() const {
212 static bool enabled = !CommandLine::ForCurrentProcess()-> 218 static bool enabled = !CommandLine::ForCurrentProcess()->
213 HasSwitch(switches::kAshDisableUIScaling); 219 HasSwitch(switches::kAshDisableUIScaling);
214 if (!enabled) 220 if (!enabled)
215 return false; 221 return false;
216 // UI Scaling is effective only when the internal display has 222 // UI Scaling is effective only when the internal display has
217 // 2x density (currently Pixel). 223 // 2x density (currently Pixel).
218 int64 display_id = gfx::Display::InternalDisplayId(); 224 int64 display_id = gfx::Display::InternalDisplayId();
219 #if defined(OS_CHROMEOS) 225 #if defined(OS_CHROMEOS)
220 // On linux desktop, allow ui scaling on the first dislpay. 226 // On linux desktop, allow ui scaling on the first dislpay if an internal
221 if (!base::chromeos::IsRunningOnChromeOS()) 227 // display isn't specified.
228 if (display_id == gfx::Display::kInvalidDisplayID &&
229 !base::chromeos::IsRunningOnChromeOS()) {
222 display_id = Shell::GetInstance()->display_manager()->first_display_id(); 230 display_id = Shell::GetInstance()->display_manager()->first_display_id();
231 }
223 #endif 232 #endif
224 return GetDisplayForId(display_id).device_scale_factor() == 2.0f; 233 return GetDisplayForId(display_id).device_scale_factor() == 2.0f;
225 } 234 }
226 235
227 gfx::Insets DisplayManager::GetOverscanInsets(int64 display_id) const { 236 gfx::Insets DisplayManager::GetOverscanInsets(int64 display_id) const {
228 std::map<int64, DisplayInfo>::const_iterator it = 237 std::map<int64, DisplayInfo>::const_iterator it =
229 display_info_.find(display_id); 238 display_info_.find(display_id);
230 return (it != display_info_.end()) ? 239 return (it != display_info_.end()) ?
231 it->second.overscan_insets_in_dip() : gfx::Insets(); 240 it->second.overscan_insets_in_dip() : gfx::Insets();
232 } 241 }
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 removed_displays.empty()) { 373 removed_displays.empty()) {
365 return; 374 return;
366 } 375 }
367 376
368 displays_ = new_displays; 377 displays_ = new_displays;
369 378
370 // Temporarily add displays to be removed because display object 379 // Temporarily add displays to be removed because display object
371 // being removed are accessed during shutting down the root. 380 // being removed are accessed during shutting down the root.
372 displays_.insert(displays_.end(), removed_displays.begin(), 381 displays_.insert(displays_.end(), removed_displays.begin(),
373 removed_displays.end()); 382 removed_displays.end());
383 DisplayController* display_controller =
384 Shell::GetInstance()->display_controller();
385 // |display_controller| is NULL during the bootstrap.
386 if (display_controller)
387 display_controller->NotifyDisplayConfigurationChanging();
388
374 for (DisplayList::const_reverse_iterator iter = removed_displays.rbegin(); 389 for (DisplayList::const_reverse_iterator iter = removed_displays.rbegin();
375 iter != removed_displays.rend(); ++iter) { 390 iter != removed_displays.rend(); ++iter) {
376 Shell::GetInstance()->screen()->NotifyDisplayRemoved(displays_.back()); 391 Shell::GetInstance()->screen()->NotifyDisplayRemoved(displays_.back());
377 displays_.pop_back(); 392 displays_.pop_back();
378 } 393 }
379 for (std::vector<size_t>::iterator iter = added_display_indices.begin(); 394 for (std::vector<size_t>::iterator iter = added_display_indices.begin();
380 iter != added_display_indices.end(); ++iter) { 395 iter != added_display_indices.end(); ++iter) {
381 Shell::GetInstance()->screen()->NotifyDisplayAdded(displays_[*iter]); 396 Shell::GetInstance()->screen()->NotifyDisplayAdded(displays_[*iter]);
382 } 397 }
383 for (std::vector<size_t>::iterator iter = changed_display_indices.begin(); 398 for (std::vector<size_t>::iterator iter = changed_display_indices.begin();
384 iter != changed_display_indices.end(); ++iter) { 399 iter != changed_display_indices.end(); ++iter) {
385 Shell::GetInstance()->screen()->NotifyBoundsChanged(displays_[*iter]); 400 Shell::GetInstance()->screen()->NotifyBoundsChanged(displays_[*iter]);
386 } 401 }
402 if (display_controller)
403 display_controller->NotifyDisplayConfigurationChanged();
404
387 EnsurePointerInDisplays(); 405 EnsurePointerInDisplays();
388
389 #if defined(USE_X11) && defined(OS_CHROMEOS) 406 #if defined(USE_X11) && defined(OS_CHROMEOS)
390 if (!changed_display_indices.empty() && base::chromeos::IsRunningOnChromeOS()) 407 if (!changed_display_indices.empty() && base::chromeos::IsRunningOnChromeOS())
391 ui::ClearX11DefaultRootWindow(); 408 ui::ClearX11DefaultRootWindow();
392 #endif 409 #endif
393 } 410 }
394 411
395 gfx::Display* DisplayManager::GetDisplayAt(size_t index) { 412 gfx::Display* DisplayManager::GetDisplayAt(size_t index) {
396 return index < displays_.size() ? &displays_[index] : NULL; 413 return index < displays_.size() ? &displays_[index] : NULL;
397 } 414 }
398 415
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 // always (0,0) and the secondary display's bounds will be updated 662 // always (0,0) and the secondary display's bounds will be updated
646 // by |DisplayController::UpdateDisplayBoundsForLayout|. 663 // by |DisplayController::UpdateDisplayBoundsForLayout|.
647 new_display.SetScaleAndBounds( 664 new_display.SetScaleAndBounds(
648 display_info.device_scale_factor(), gfx::Rect(bounds_in_pixel.size())); 665 display_info.device_scale_factor(), gfx::Rect(bounds_in_pixel.size()));
649 new_display.set_rotation(display_info.rotation()); 666 new_display.set_rotation(display_info.rotation());
650 return new_display; 667 return new_display;
651 } 668 }
652 669
653 } // namespace internal 670 } // namespace internal
654 } // namespace ash 671 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/display_controller_unittest.cc ('k') | chrome/browser/chromeos/chrome_browser_main_chromeos.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698