| Index: chrome/browser/ui/touch/frame/touch_browser_frame_view.cc
|
| diff --git a/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc b/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc
|
| index 836983b6c439fc7c0d9fb3b6c060764cbda4f09e..fc5a758973457a4ff2099cc0c2f08fc017285b66 100644
|
| --- a/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc
|
| +++ b/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc
|
| @@ -23,6 +23,8 @@
|
| #include "ui/base/animation/slide_animation.h"
|
| #include "ui/gfx/rect.h"
|
| #include "ui/gfx/transform.h"
|
| +#include "views/animation/screen_rotation_setter.h"
|
| +#include "views/desktop/desktop_window_view.h"
|
| #include "views/controls/button/image_button.h"
|
| #include "views/controls/textfield/textfield.h"
|
| #include "views/focus/focus_manager.h"
|
| @@ -47,6 +49,37 @@ bool TabContentsHasFocus(const TabContents* contents) {
|
| return view->Contains(view->GetFocusManager()->GetFocusedView());
|
| }
|
|
|
| +ui::Transform SideToTransform(sensors::ScreenOrientation::Side side,
|
| + const ui::Transform& old_transform,
|
| + const gfx::Size& size) {
|
| + gfx::Point origin;
|
| + gfx::Point bottom_right(size.width(), size.height());
|
| + old_transform.TransformPoint(origin);
|
| + old_transform.TransformPoint(bottom_right);
|
| + int original_width = abs(origin.x() - bottom_right.x());
|
| + int original_height = abs(origin.y() - bottom_right.y());
|
| + ui::Transform to_return;
|
| + switch (side) {
|
| + case sensors::ScreenOrientation::TOP: break;
|
| + case sensors::ScreenOrientation::RIGHT:
|
| + to_return.ConcatRotate(90);
|
| + to_return.ConcatTranslate(original_width, 0);
|
| + break;
|
| + case sensors::ScreenOrientation::LEFT:
|
| + to_return.ConcatRotate(-90);
|
| + to_return.ConcatTranslate(0, original_height);
|
| + break;
|
| + case sensors::ScreenOrientation::BOTTOM:
|
| + to_return.ConcatRotate(180);
|
| + to_return.ConcatTranslate(original_width, original_height);
|
| + break;
|
| + default:
|
| + to_return = old_transform;
|
| + break;
|
| + }
|
| + return to_return;
|
| +}
|
| +
|
| } // namespace
|
|
|
| // static
|
| @@ -93,10 +126,13 @@ TouchBrowserFrameView::TouchBrowserFrameView(BrowserFrame* frame,
|
| chromeos::input_method::InputMethodManager::GetInstance();
|
| manager->AddVirtualKeyboardObserver(this);
|
| #endif
|
| +
|
| + sensors::Provider::GetInstance()->AddListener(this);
|
| }
|
|
|
| TouchBrowserFrameView::~TouchBrowserFrameView() {
|
| browser_view()->browser()->tabstrip_model()->RemoveObserver(this);
|
| + sensors::Provider::GetInstance()->RemoveListener(this);
|
| }
|
|
|
| int TouchBrowserFrameView::NonClientHitTest(const gfx::Point& point) {
|
| @@ -369,6 +405,27 @@ void TouchBrowserFrameView::AnimationEnded(const ui::Animation* animation) {
|
| SchedulePaint();
|
| }
|
|
|
| +void TouchBrowserFrameView::OnScreenOrientationChanged(
|
| + const sensors::ScreenOrientation& change) {
|
| + views::View* to_rotate =
|
| + views::desktop::DesktopWindowView::desktop_window_view;
|
| +
|
| + if (!to_rotate) {
|
| + views::Widget* widget = GetWidget();
|
| + to_rotate = widget->GetRootView();
|
| + }
|
| +
|
| + if (!setter_) {
|
| + setter_ = new views::ScreenRotationSetter(to_rotate);
|
| + to_rotate->SetLayerPropertySetter(setter_);
|
| + }
|
| +
|
| + ui::Transform xform = SideToTransform(change.upward,
|
| + to_rotate->GetTransform(),
|
| + to_rotate->size());
|
| + to_rotate->SetTransform(xform);
|
| +}
|
| +
|
| #if defined(OS_CHROMEOS)
|
| void TouchBrowserFrameView::VirtualKeyboardChanged(
|
| chromeos::input_method::InputMethodManager* manager,
|
|
|