| Index: ash/display/display_controller.cc
|
| diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc
|
| index ebc8849742064a4596df9f19f5b23744501c025c..feb3b2a379f1192035eaf8ddcc298289aab94d1b 100644
|
| --- a/ash/display/display_controller.cc
|
| +++ b/ash/display/display_controller.cc
|
| @@ -135,6 +135,12 @@ void RotateRootWindow(aura::RootWindow* root_window,
|
| root_window->SetProperty(kRotationPropertyKey, info.rotation());
|
| #endif
|
| gfx::Transform rotate;
|
| + // TODO(oshima): Manually complute the inverse of the
|
| + // rotate+translate matrix to compensate for computation error in
|
| + // the inverted matrix. Ideally, SkMatrix should have special
|
| + // case handling for rotate+translate case. crbug.com/222483.
|
| + gfx::Transform reverse_rotate;
|
| +
|
| // The origin is (0, 0), so the translate width/height must be reduced by 1.
|
| switch (info.rotation()) {
|
| case gfx::Display::ROTATE_0:
|
| @@ -142,18 +148,26 @@ void RotateRootWindow(aura::RootWindow* root_window,
|
| case gfx::Display::ROTATE_90:
|
| rotate.Translate(display.bounds().height() - 1, 0);
|
| rotate.Rotate(90);
|
| + // Rotate 270 instead of 90 as it will cause calcuration error.
|
| + reverse_rotate.Rotate(270);
|
| + reverse_rotate.Translate(-(display.bounds().height() - 1), 0);
|
| break;
|
| case gfx::Display::ROTATE_270:
|
| rotate.Translate(0, display.bounds().width() - 1);
|
| rotate.Rotate(270);
|
| + reverse_rotate.Rotate(90);
|
| + reverse_rotate.Translate(0, -(display.bounds().width() - 1));
|
| break;
|
| case gfx::Display::ROTATE_180:
|
| rotate.Translate(display.bounds().width() - 1,
|
| display.bounds().height() - 1);
|
| rotate.Rotate(180);
|
| + reverse_rotate.Rotate(180);
|
| + reverse_rotate.Translate(-(display.bounds().width() - 1),
|
| + -(display.bounds().height() - 1));
|
| break;
|
| }
|
| - root_window->SetTransform(rotate);
|
| + root_window->SetTransformPair(rotate, reverse_rotate);
|
| }
|
|
|
| void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root,
|
|
|