| OLD | NEW |
| 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 #include <cmath> | 8 #include <cmath> |
| 9 #include <map> | 9 #include <map> |
| 10 | 10 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 #if defined(OS_WIN) | 144 #if defined(OS_WIN) |
| 145 // Windows 8 bots refused to resize the host window, and | 145 // Windows 8 bots refused to resize the host window, and |
| 146 // updating the transform results in incorrectly resizing | 146 // updating the transform results in incorrectly resizing |
| 147 // the root window. Don't apply the transform unless | 147 // the root window. Don't apply the transform unless |
| 148 // necessary so that unit tests pass on win8 bots. | 148 // necessary so that unit tests pass on win8 bots. |
| 149 if (info.rotation() == root_window->GetProperty(kRotationPropertyKey)) | 149 if (info.rotation() == root_window->GetProperty(kRotationPropertyKey)) |
| 150 return; | 150 return; |
| 151 root_window->SetProperty(kRotationPropertyKey, info.rotation()); | 151 root_window->SetProperty(kRotationPropertyKey, info.rotation()); |
| 152 #endif | 152 #endif |
| 153 gfx::Transform rotate; | 153 gfx::Transform rotate; |
| 154 // TODO(oshima): Manually complute the inverse of the | |
| 155 // rotate+translate matrix to compensate for computation error in | |
| 156 // the inverted matrix. Ideally, SkMatrix should have special | |
| 157 // case handling for rotate+translate case. crbug.com/222483. | |
| 158 gfx::Transform reverse_rotate; | |
| 159 | |
| 160 // The origin is (0, 0), so the translate width/height must be reduced by | 154 // The origin is (0, 0), so the translate width/height must be reduced by |
| 161 // 1 pixel. | 155 // 1 pixel. |
| 162 float one_pixel = 1.0f / display.device_scale_factor(); | 156 float one_pixel = 1.0f / display.device_scale_factor(); |
| 163 switch (info.rotation()) { | 157 switch (info.rotation()) { |
| 164 case gfx::Display::ROTATE_0: | 158 case gfx::Display::ROTATE_0: |
| 165 break; | 159 break; |
| 166 case gfx::Display::ROTATE_90: | 160 case gfx::Display::ROTATE_90: |
| 167 rotate.Translate(display.bounds().height() - one_pixel, 0); | 161 rotate.Translate(display.bounds().height() - one_pixel, 0); |
| 168 rotate.Rotate(90); | 162 rotate.Rotate(90); |
| 169 reverse_rotate.Rotate(270); | |
| 170 reverse_rotate.Translate(-(display.bounds().height() - one_pixel), 0); | |
| 171 break; | 163 break; |
| 172 case gfx::Display::ROTATE_270: | 164 case gfx::Display::ROTATE_270: |
| 173 rotate.Translate(0, display.bounds().width() - one_pixel); | 165 rotate.Translate(0, display.bounds().width() - one_pixel); |
| 174 rotate.Rotate(270); | 166 rotate.Rotate(270); |
| 175 reverse_rotate.Rotate(90); | |
| 176 reverse_rotate.Translate(0, -(display.bounds().width() - one_pixel)); | |
| 177 break; | 167 break; |
| 178 case gfx::Display::ROTATE_180: | 168 case gfx::Display::ROTATE_180: |
| 179 rotate.Translate(display.bounds().width() - one_pixel, | 169 rotate.Translate(display.bounds().width() - one_pixel, |
| 180 display.bounds().height() - one_pixel); | 170 display.bounds().height() - one_pixel); |
| 181 rotate.Rotate(180); | 171 rotate.Rotate(180); |
| 182 reverse_rotate.Rotate(180); | |
| 183 reverse_rotate.Translate(-(display.bounds().width() - one_pixel), | |
| 184 -(display.bounds().height() - one_pixel)); | |
| 185 break; | 172 break; |
| 186 } | 173 } |
| 187 RoundNearZero(&rotate); | 174 RoundNearZero(&rotate); |
| 188 RoundNearZero(&reverse_rotate); | |
| 189 | 175 |
| 190 scoped_ptr<aura::RootWindowTransformer> transformer( | 176 scoped_ptr<aura::RootWindowTransformer> transformer( |
| 191 new AshRootWindowTransformer(root_window, | 177 new AshRootWindowTransformer(root_window, |
| 192 rotate, | 178 rotate, |
| 193 reverse_rotate, | |
| 194 info.GetOverscanInsetsInPixel(), | 179 info.GetOverscanInsetsInPixel(), |
| 195 info.ui_scale())); | 180 info.ui_scale())); |
| 196 root_window->SetRootWindowTransformer(transformer.Pass()); | 181 root_window->SetRootWindowTransformer(transformer.Pass()); |
| 197 } | 182 } |
| 198 | 183 |
| 199 void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root, | 184 void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root, |
| 200 const gfx::Display& display) { | 185 const gfx::Display& display) { |
| 201 internal::DisplayInfo info = | 186 internal::DisplayInfo info = |
| 202 GetDisplayManager()->GetDisplayInfo(display.id()); | 187 GetDisplayManager()->GetDisplayInfo(display.id()); |
| 203 #if defined(OS_CHROMEOS) | 188 #if defined(OS_CHROMEOS) |
| (...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1033 } | 1018 } |
| 1034 | 1019 |
| 1035 void DisplayController::OnFadeOutForSwapDisplayFinished() { | 1020 void DisplayController::OnFadeOutForSwapDisplayFinished() { |
| 1036 #if defined(OS_CHROMEOS) | 1021 #if defined(OS_CHROMEOS) |
| 1037 SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); | 1022 SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); |
| 1038 Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation(); | 1023 Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation(); |
| 1039 #endif | 1024 #endif |
| 1040 } | 1025 } |
| 1041 | 1026 |
| 1042 } // namespace ash | 1027 } // namespace ash |
| OLD | NEW |