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

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

Issue 12505005: Store rotation/ui scale to local state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « ash/display/display_controller.h ('k') | ash/display/display_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_controller.h" 5 #include "ash/display/display_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/ash_switches.h" 9 #include "ash/ash_switches.h"
10 #include "ash/display/display_manager.h" 10 #include "ash/display/display_manager.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 // changing the settings while the system is still configurating 75 // changing the settings while the system is still configurating
76 // displays. It will be overriden by |kAfterDisplayChangeThrottleTimeoutMs| 76 // displays. It will be overriden by |kAfterDisplayChangeThrottleTimeoutMs|
77 // when the display change happens, so the actual timeout is much shorter. 77 // when the display change happens, so the actual timeout is much shorter.
78 const int64 kAfterDisplayChangeThrottleTimeoutMs = 500; 78 const int64 kAfterDisplayChangeThrottleTimeoutMs = 500;
79 const int64 kCycleDisplayThrottleTimeoutMs = 4000; 79 const int64 kCycleDisplayThrottleTimeoutMs = 4000;
80 const int64 kSwapDisplayThrottleTimeoutMs = 500; 80 const int64 kSwapDisplayThrottleTimeoutMs = 500;
81 81
82 // Persistent key names 82 // Persistent key names
83 const char kPositionKey[] = "position"; 83 const char kPositionKey[] = "position";
84 const char kOffsetKey[] = "offset"; 84 const char kOffsetKey[] = "offset";
85 const char kMirroredKey[] = "mirrored";
85 86
86 bool GetPositionFromString(const base::StringPiece& position, 87 bool GetPositionFromString(const base::StringPiece& position,
87 DisplayLayout::Position* field) { 88 DisplayLayout::Position* field) {
88 if (position == "top") { 89 if (position == "top") {
89 *field = DisplayLayout::TOP; 90 *field = DisplayLayout::TOP;
90 return true; 91 return true;
91 } else if (position == "bottom") { 92 } else if (position == "bottom") {
92 *field = DisplayLayout::BOTTOM; 93 *field = DisplayLayout::BOTTOM;
93 return true; 94 return true;
94 } else if (position == "right") { 95 } else if (position == "right") {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 #endif 199 #endif
199 RotateRootWindow(root, display, info); 200 RotateRootWindow(root, display, info);
200 } 201 }
201 202
202 } // namespace 203 } // namespace
203 204
204 //////////////////////////////////////////////////////////////////////////////// 205 ////////////////////////////////////////////////////////////////////////////////
205 // DisplayLayout 206 // DisplayLayout
206 207
207 // static 208 // static
208 DisplayLayout DisplayLayout::FromInts(int position, int offsets) { 209 DisplayLayout DisplayLayout::FromInts(int position, int offsets, bool mirror) {
209 return DisplayLayout(static_cast<Position>(position), offsets); 210 return DisplayLayout(static_cast<Position>(position), offsets, mirror);
210 } 211 }
211 212
212 DisplayLayout::DisplayLayout() 213 DisplayLayout::DisplayLayout()
213 : position(RIGHT), 214 : position(RIGHT),
214 offset(0) {} 215 offset(0),
216 mirrored(false) {}
215 217
216 DisplayLayout::DisplayLayout(DisplayLayout::Position position, int offset) 218 DisplayLayout::DisplayLayout(DisplayLayout::Position position,
219 int offset,
220 bool mirrored)
217 : position(position), 221 : position(position),
218 offset(offset) { 222 offset(offset),
223 mirrored(mirrored) {
219 DCHECK_LE(TOP, position); 224 DCHECK_LE(TOP, position);
220 DCHECK_GE(LEFT, position); 225 DCHECK_GE(LEFT, position);
221 226
222 // Set the default value to |position| in case position is invalid. DCHECKs 227 // Set the default value to |position| in case position is invalid. DCHECKs
223 // above doesn't stop in Release builds. 228 // above doesn't stop in Release builds.
224 if (TOP > position || LEFT < position) 229 if (TOP > position || LEFT < position)
225 this->position = RIGHT; 230 this->position = RIGHT;
226 231
227 DCHECK_GE(kMaxValidOffset, abs(offset)); 232 DCHECK_GE(kMaxValidOffset, abs(offset));
228 } 233 }
229 234
230 DisplayLayout DisplayLayout::Invert() const { 235 DisplayLayout DisplayLayout::Invert() const {
231 Position inverted_position = RIGHT; 236 Position inverted_position = RIGHT;
232 switch (position) { 237 switch (position) {
233 case TOP: 238 case TOP:
234 inverted_position = BOTTOM; 239 inverted_position = BOTTOM;
235 break; 240 break;
236 case BOTTOM: 241 case BOTTOM:
237 inverted_position = TOP; 242 inverted_position = TOP;
238 break; 243 break;
239 case RIGHT: 244 case RIGHT:
240 inverted_position = LEFT; 245 inverted_position = LEFT;
241 break; 246 break;
242 case LEFT: 247 case LEFT:
243 inverted_position = RIGHT; 248 inverted_position = RIGHT;
244 break; 249 break;
245 } 250 }
246 return DisplayLayout(inverted_position, -offset); 251 return DisplayLayout(inverted_position, -offset, mirrored);
247 } 252 }
248 253
249 // static 254 // static
250 bool DisplayLayout::ConvertFromValue(const base::Value& value, 255 bool DisplayLayout::ConvertFromValue(const base::Value& value,
251 DisplayLayout* layout) { 256 DisplayLayout* layout) {
252 base::JSONValueConverter<DisplayLayout> converter; 257 base::JSONValueConverter<DisplayLayout> converter;
253 return converter.Convert(value, layout); 258 return converter.Convert(value, layout);
254 } 259 }
255 260
256 // static 261 // static
257 bool DisplayLayout::ConvertToValue(const DisplayLayout& layout, 262 bool DisplayLayout::ConvertToValue(const DisplayLayout& layout,
258 base::Value* value) { 263 base::Value* value) {
259 base::DictionaryValue* dict_value = NULL; 264 base::DictionaryValue* dict_value = NULL;
260 if (!value->GetAsDictionary(&dict_value) || dict_value == NULL) 265 if (!value->GetAsDictionary(&dict_value) || dict_value == NULL)
261 return false; 266 return false;
262 267
263 const std::string position_str = GetStringFromPosition(layout.position); 268 const std::string position_str = GetStringFromPosition(layout.position);
264 dict_value->SetString(kPositionKey, position_str); 269 dict_value->SetString(kPositionKey, position_str);
265 dict_value->SetInteger(kOffsetKey, layout.offset); 270 dict_value->SetInteger(kOffsetKey, layout.offset);
271 dict_value->SetBoolean(kMirroredKey, layout.mirrored);
266 return true; 272 return true;
267 } 273 }
268 274
269 std::string DisplayLayout::ToString() const { 275 std::string DisplayLayout::ToString() const {
270 const std::string position_str = GetStringFromPosition(position); 276 const std::string position_str = GetStringFromPosition(position);
271 return base::StringPrintf("%s, %d", position_str.c_str(), offset); 277 return base::StringPrintf("%s, %d", position_str.c_str(), offset);
272 } 278 }
273 279
274 // static 280 // static
275 void DisplayLayout::RegisterJSONConverter( 281 void DisplayLayout::RegisterJSONConverter(
276 base::JSONValueConverter<DisplayLayout>* converter) { 282 base::JSONValueConverter<DisplayLayout>* converter) {
277 converter->RegisterCustomField<Position>( 283 converter->RegisterCustomField<Position>(
278 kPositionKey, &DisplayLayout::position, &GetPositionFromString); 284 kPositionKey, &DisplayLayout::position, &GetPositionFromString);
279 converter->RegisterIntField(kOffsetKey, &DisplayLayout::offset); 285 converter->RegisterIntField(kOffsetKey, &DisplayLayout::offset);
286 converter->RegisterBoolField(kMirroredKey, &DisplayLayout::mirrored);
280 } 287 }
281 288
282 //////////////////////////////////////////////////////////////////////////////// 289 ////////////////////////////////////////////////////////////////////////////////
283 // DisplayChangeLimiter 290 // DisplayChangeLimiter
284 291
285 DisplayController::DisplayChangeLimiter::DisplayChangeLimiter() 292 DisplayController::DisplayChangeLimiter::DisplayChangeLimiter()
286 : throttle_timeout_(base::Time::Now()) { 293 : throttle_timeout_(base::Time::Now()) {
287 } 294 }
288 295
289 void DisplayController::DisplayChangeLimiter::SetThrottleTimeout( 296 void DisplayController::DisplayChangeLimiter::SetThrottleTimeout(
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 secondary_display->set_bounds( 870 secondary_display->set_bounds(
864 gfx::Rect(new_secondary_origin, secondary_bounds.size())); 871 gfx::Rect(new_secondary_origin, secondary_bounds.size()));
865 secondary_display->UpdateWorkAreaFromInsets(insets); 872 secondary_display->UpdateWorkAreaFromInsets(insets);
866 } 873 }
867 874
868 void DisplayController::NotifyDisplayConfigurationChanging() { 875 void DisplayController::NotifyDisplayConfigurationChanging() {
869 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanging()); 876 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanging());
870 } 877 }
871 878
872 void DisplayController::NotifyDisplayConfigurationChanged() { 879 void DisplayController::NotifyDisplayConfigurationChanged() {
880 internal::DisplayManager* display_manager = GetDisplayManager();
881 if (display_manager->num_connected_displays() > 1) {
882 bool mirrored = display_manager->IsMirrored();
883 DisplayIdPair pair = mirrored ?
884 std::make_pair(GetPrimaryDisplay().id(),
885 display_manager->mirrored_display_id()) :
886 GetCurrentDisplayIdPair();
887 paired_layouts_[pair].mirrored = mirrored;
888 }
873 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged()); 889 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged());
874 } 890 }
875 891
876 void DisplayController::RegisterLayoutForDisplayIdPairInternal( 892 void DisplayController::RegisterLayoutForDisplayIdPairInternal(
877 int64 id1, 893 int64 id1,
878 int64 id2, 894 int64 id2,
879 const DisplayLayout& layout, 895 const DisplayLayout& layout,
880 bool override) { 896 bool override) {
881 DisplayIdPair pair = std::make_pair(id1, id2); 897 DisplayIdPair pair = std::make_pair(id1, id2);
882 if (override || paired_layouts_.find(pair) == paired_layouts_.end()) 898 if (override || paired_layouts_.find(pair) == paired_layouts_.end())
883 paired_layouts_[pair] = layout; 899 paired_layouts_[pair] = layout;
884 } 900 }
885 901
886 void DisplayController::OnFadeOutForSwapDisplayFinished() { 902 void DisplayController::OnFadeOutForSwapDisplayFinished() {
887 #if defined(OS_CHROMEOS) 903 #if defined(OS_CHROMEOS)
888 SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); 904 SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay());
889 Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation(); 905 Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation();
890 #endif 906 #endif
891 } 907 }
892 908
893 } // namespace ash 909 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/display_controller.h ('k') | ash/display/display_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698