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..940ba0caa12bc57a0af6bd6f88943c543bd106aa 100644 |
--- a/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc |
+++ b/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc |
@@ -9,6 +9,7 @@ |
#include "chrome/browser/tabs/tab_strip_model.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
+#include "chrome/browser/ui/touch/animation/screen_rotation_setter.h" |
#include "chrome/browser/ui/touch/frame/keyboard_container_view.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" |
@@ -23,6 +24,7 @@ |
#include "ui/base/animation/slide_animation.h" |
#include "ui/gfx/rect.h" |
#include "ui/gfx/transform.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_ = ScreenRotationSetterFactory::Create(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, |