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 b1ae5b4e448f79eb5900b069d3b4ab81d56e0130..b112332d2ce562a72d332e2395045688ea490d75 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.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" |
@@ -46,6 +48,16 @@ bool TabContentsHasFocus(const TabContents* contents) { |
return view->Contains(view->GetFocusManager()->GetFocusedView()); |
} |
+int SideToDegrees(sensors::ScreenOrientation::Side side, int old_degrees) { |
+ switch (side) { |
+ case sensors::ScreenOrientation::TOP: return 0; |
+ case sensors::ScreenOrientation::RIGHT: return 90; |
+ case sensors::ScreenOrientation::LEFT: return -90; |
+ case sensors::ScreenOrientation::BOTTOM: return 180; |
+ default: return old_degrees; |
+ } |
+} |
+ |
} // namespace |
// static |
@@ -61,7 +73,8 @@ TouchBrowserFrameView::TouchBrowserFrameView(BrowserFrame* frame, |
keyboard_showing_(false), |
keyboard_height_(kDefaultKeyboardHeight), |
focus_listener_added_(false), |
- keyboard_(NULL) { |
+ keyboard_(NULL), |
+ degrees_(0) { |
registrar_.Add(this, |
content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
NotificationService::AllSources()); |
@@ -92,10 +105,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); |
} |
std::string TouchBrowserFrameView::GetClassName() const { |
@@ -361,6 +377,25 @@ void TouchBrowserFrameView::AnimationEnded(const ui::Animation* animation) { |
SchedulePaint(); |
} |
+void TouchBrowserFrameView::OnScreenOrientationChanged( |
+ const sensors::ScreenOrientation& change) { |
+ |
sky
2011/08/17 16:39:42
nit: remove this line.
|
+ views::View* to_rotate = |
+ views::desktop::DesktopWindowView::desktop_window_view; |
+ |
+ if (!to_rotate) { |
+ views::Widget* widget = GetWidget(); |
+ to_rotate = widget->GetRootView(); |
+ } |
+ |
+ int new_degrees = SideToDegrees(change.upward, degrees_); |
+ |
+ to_rotate->EnqueueAnimation(new views::ScreenRotation(to_rotate, |
sky
2011/08/17 16:39:42
Where is EnqueueAnimation defined?
|
+ degrees_, |
+ new_degrees)); |
+ degrees_ = new_degrees; |
+} |
+ |
#if defined(OS_CHROMEOS) |
void TouchBrowserFrameView::VirtualKeyboardChanged( |
chromeos::input_method::InputMethodManager* manager, |