Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(282)

Side by Side Diff: chrome/browser/ui/touch/frame/touch_browser_frame_view.cc

Issue 7273073: Animated Rotation (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Address reviewer comments Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/touch/frame/touch_browser_frame_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
OLDNEW
« no previous file with comments | « chrome/browser/ui/touch/frame/touch_browser_frame_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698