Index: ash/display/display_controller.cc |
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc |
index e777dfc577d71c5444157ec7f770ae4a1792ca87..6c146ef9e077062791409fe4d90a6baad1b336c6 100644 |
--- a/ash/display/display_controller.cc |
+++ b/ash/display/display_controller.cc |
@@ -82,6 +82,7 @@ const int64 kSwapDisplayThrottleTimeoutMs = 500; |
// Persistent key names |
const char kPositionKey[] = "position"; |
const char kOffsetKey[] = "offset"; |
+const char kMirroredKey[] = "mirrored"; |
bool GetPositionFromString(const base::StringPiece& position, |
DisplayLayout::Position* field) { |
@@ -205,17 +206,21 @@ void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root, |
// DisplayLayout |
// static |
-DisplayLayout DisplayLayout::FromInts(int position, int offsets) { |
- return DisplayLayout(static_cast<Position>(position), offsets); |
+DisplayLayout DisplayLayout::FromInts(int position, int offsets, bool mirror) { |
+ return DisplayLayout(static_cast<Position>(position), offsets, mirror); |
} |
DisplayLayout::DisplayLayout() |
: position(RIGHT), |
- offset(0) {} |
+ offset(0), |
+ mirrored(false) {} |
-DisplayLayout::DisplayLayout(DisplayLayout::Position position, int offset) |
+DisplayLayout::DisplayLayout(DisplayLayout::Position position, |
+ int offset, |
+ bool mirrored) |
: position(position), |
- offset(offset) { |
+ offset(offset), |
+ mirrored(mirrored) { |
DCHECK_LE(TOP, position); |
DCHECK_GE(LEFT, position); |
@@ -243,7 +248,7 @@ DisplayLayout DisplayLayout::Invert() const { |
inverted_position = RIGHT; |
break; |
} |
- return DisplayLayout(inverted_position, -offset); |
+ return DisplayLayout(inverted_position, -offset, mirrored); |
} |
// static |
@@ -263,6 +268,7 @@ bool DisplayLayout::ConvertToValue(const DisplayLayout& layout, |
const std::string position_str = GetStringFromPosition(layout.position); |
dict_value->SetString(kPositionKey, position_str); |
dict_value->SetInteger(kOffsetKey, layout.offset); |
+ dict_value->SetBoolean(kMirroredKey, layout.mirrored); |
return true; |
} |
@@ -277,6 +283,7 @@ void DisplayLayout::RegisterJSONConverter( |
converter->RegisterCustomField<Position>( |
kPositionKey, &DisplayLayout::position, &GetPositionFromString); |
converter->RegisterIntField(kOffsetKey, &DisplayLayout::offset); |
+ converter->RegisterBoolField(kMirroredKey, &DisplayLayout::mirrored); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -870,6 +877,15 @@ void DisplayController::NotifyDisplayConfigurationChanging() { |
} |
void DisplayController::NotifyDisplayConfigurationChanged() { |
+ internal::DisplayManager* display_manager = GetDisplayManager(); |
+ if (display_manager->num_connected_displays() > 1) { |
+ bool mirrored = display_manager->IsMirrored(); |
+ DisplayIdPair pair = mirrored ? |
+ std::make_pair(GetPrimaryDisplay().id(), |
+ display_manager->mirrored_display_id()) : |
+ GetCurrentDisplayIdPair(); |
+ paired_layouts_[pair].mirrored = mirrored; |
+ } |
FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged()); |
} |