OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/ui/touch/frame/touch_browser_frame_view.h" | 5 #include "chrome/browser/ui/touch/frame/touch_browser_frame_view.h" |
6 | 6 |
| 7 #include "chrome/browser/ui/touch/animation/screen_rotation_setter.h" |
7 #include "chrome/browser/ui/touch/keyboard/keyboard_manager.h" | 8 #include "chrome/browser/ui/touch/keyboard/keyboard_manager.h" |
8 #include "views/controls/button/image_button.h" | 9 #include "views/controls/button/image_button.h" |
| 10 #include "views/desktop/desktop_window_view.h" |
| 11 #include "ui/gfx/transform.h" |
| 12 |
| 13 namespace { |
| 14 |
| 15 ui::Transform SideToTransform(sensors::ScreenOrientation::Side side, |
| 16 const ui::Transform& old_transform, |
| 17 const gfx::Size& size) { |
| 18 gfx::Point origin; |
| 19 gfx::Point bottom_right(size.width(), size.height()); |
| 20 old_transform.TransformPoint(origin); |
| 21 old_transform.TransformPoint(bottom_right); |
| 22 int original_width = abs(origin.x() - bottom_right.x()); |
| 23 int original_height = abs(origin.y() - bottom_right.y()); |
| 24 ui::Transform to_return; |
| 25 switch (side) { |
| 26 case sensors::ScreenOrientation::TOP: break; |
| 27 case sensors::ScreenOrientation::RIGHT: |
| 28 to_return.ConcatRotate(90); |
| 29 to_return.ConcatTranslate(original_width, 0); |
| 30 break; |
| 31 case sensors::ScreenOrientation::LEFT: |
| 32 to_return.ConcatRotate(-90); |
| 33 to_return.ConcatTranslate(0, original_height); |
| 34 break; |
| 35 case sensors::ScreenOrientation::BOTTOM: |
| 36 to_return.ConcatRotate(180); |
| 37 to_return.ConcatTranslate(original_width, original_height); |
| 38 break; |
| 39 default: |
| 40 to_return = old_transform; |
| 41 break; |
| 42 } |
| 43 return to_return; |
| 44 } |
| 45 |
| 46 } // namespace |
9 | 47 |
10 // static | 48 // static |
11 const char TouchBrowserFrameView::kViewClassName[] = | 49 const char TouchBrowserFrameView::kViewClassName[] = |
12 "browser/ui/touch/frame/TouchBrowserFrameView"; | 50 "browser/ui/touch/frame/TouchBrowserFrameView"; |
13 | 51 |
14 /////////////////////////////////////////////////////////////////////////////// | 52 /////////////////////////////////////////////////////////////////////////////// |
15 // TouchBrowserFrameView, public: | 53 // TouchBrowserFrameView, public: |
16 | 54 |
17 TouchBrowserFrameView::TouchBrowserFrameView(BrowserFrame* frame, | 55 TouchBrowserFrameView::TouchBrowserFrameView(BrowserFrame* frame, |
18 BrowserView* browser_view) | 56 BrowserView* browser_view) |
19 : OpaqueBrowserFrameView(frame, browser_view) { | 57 : OpaqueBrowserFrameView(frame, browser_view) { |
20 // Make sure the singleton KeyboardManager object is initialized. | 58 // Make sure the singleton KeyboardManager object is initialized. |
21 KeyboardManager::GetInstance(); | 59 KeyboardManager::GetInstance(); |
| 60 sensors::Provider::GetInstance()->AddListener(this); |
22 } | 61 } |
23 | 62 |
24 TouchBrowserFrameView::~TouchBrowserFrameView() { | 63 TouchBrowserFrameView::~TouchBrowserFrameView() { |
| 64 sensors::Provider::GetInstance()->RemoveListener(this); |
25 } | 65 } |
26 | 66 |
27 std::string TouchBrowserFrameView::GetClassName() const { | 67 std::string TouchBrowserFrameView::GetClassName() const { |
28 return kViewClassName; | 68 return kViewClassName; |
29 } | 69 } |
30 | 70 |
31 bool TouchBrowserFrameView::HitTest(const gfx::Point& point) const { | 71 bool TouchBrowserFrameView::HitTest(const gfx::Point& point) const { |
32 if (OpaqueBrowserFrameView::HitTest(point)) | 72 if (OpaqueBrowserFrameView::HitTest(point)) |
33 return true; | 73 return true; |
34 | 74 |
35 if (close_button()->IsVisible() && | 75 if (close_button()->IsVisible() && |
36 close_button()->GetMirroredBounds().Contains(point)) | 76 close_button()->GetMirroredBounds().Contains(point)) |
37 return true; | 77 return true; |
38 if (restore_button()->IsVisible() && | 78 if (restore_button()->IsVisible() && |
39 restore_button()->GetMirroredBounds().Contains(point)) | 79 restore_button()->GetMirroredBounds().Contains(point)) |
40 return true; | 80 return true; |
41 if (maximize_button()->IsVisible() && | 81 if (maximize_button()->IsVisible() && |
42 maximize_button()->GetMirroredBounds().Contains(point)) | 82 maximize_button()->GetMirroredBounds().Contains(point)) |
43 return true; | 83 return true; |
44 if (minimize_button()->IsVisible() && | 84 if (minimize_button()->IsVisible() && |
45 minimize_button()->GetMirroredBounds().Contains(point)) | 85 minimize_button()->GetMirroredBounds().Contains(point)) |
46 return true; | 86 return true; |
47 | 87 |
48 return false; | 88 return false; |
49 } | 89 } |
| 90 |
| 91 void TouchBrowserFrameView::OnScreenOrientationChanged( |
| 92 const sensors::ScreenOrientation& change) { |
| 93 // In views desktop mode, then the desktop_window_view will not be NULL and |
| 94 // is the view to be rotated. |
| 95 views::View* to_rotate = |
| 96 views::desktop::DesktopWindowView::desktop_window_view; |
| 97 |
| 98 if (!to_rotate) { |
| 99 // Otherwise, rotate the widget's view. |
| 100 views::Widget* widget = GetWidget(); |
| 101 to_rotate = widget->GetRootView(); |
| 102 } |
| 103 |
| 104 if (!initialized_screen_rotation_) { |
| 105 to_rotate->SetPaintToLayer(true); |
| 106 to_rotate->SetLayerPropertySetter( |
| 107 ScreenRotationSetterFactory::Create(to_rotate)); |
| 108 initialized_screen_rotation_ = true; |
| 109 } |
| 110 |
| 111 ui::Transform xform = SideToTransform(change.upward, |
| 112 to_rotate->GetTransform(), |
| 113 to_rotate->size()); |
| 114 to_rotate->SetTransform(xform); |
| 115 } |
| 116 |
OLD | NEW |