| 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());
|
| }
|
|
|
|
|