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

Side by Side Diff: ash/wm/frame_painter_unittest.cc

Issue 10918077: Adding proper dragging behavior for L/R maximized windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed first set of comments Created 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ash/wm/frame_painter.h" 5 #include "ash/wm/frame_painter.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h" 8 #include "ash/shell_window_ids.h"
9 #include "ash/test/ash_test_base.h" 9 #include "ash/test/ash_test_base.h"
10 #include "ash/wm/property_util.h"
10 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
11 #include "grit/ui_resources.h" 12 #include "grit/ui_resources.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/aura/root_window.h" 14 #include "ui/aura/root_window.h"
15 #include "ui/base/hit_test.h"
16 #include "ui/gfx/screen.h"
14 #include "ui/views/controls/button/image_button.h" 17 #include "ui/views/controls/button/image_button.h"
15 #include "ui/views/widget/widget.h" 18 #include "ui/views/widget/widget.h"
19 #include "ui/views/widget/widget_delegate.h"
20 #include "ui/views/window/non_client_view.h"
16 21
17 using views::Widget; 22 using views::Widget;
18 using views::ImageButton; 23 using views::ImageButton;
19 24
20 namespace { 25 namespace {
21 26
27 class ResizableWidgetDelegate : public views::WidgetDelegate {
28 public:
29 ResizableWidgetDelegate(views::Widget* widget) {
30 widget_ = widget;
31 }
32
33 virtual bool CanResize() const OVERRIDE { return true; }
34 // Implementations of the widget class.
35 virtual views::Widget* GetWidget() {return widget_; }
sky 2012/09/06 19:45:11 OVERRIDE on these two lines, and space after {
Mr4D (OOO till 08-26) 2012/09/06 23:16:13 Done.
36 virtual const views::Widget* GetWidget() const { return widget_; }
37 private:
sky 2012/09/06 19:45:11 newline bewteen 36/67.
Mr4D (OOO till 08-26) 2012/09/06 23:16:13 Done.
38 views::Widget* widget_;
39 };
sky 2012/09/06 19:45:11 DISALLOW_...
Mr4D (OOO till 08-26) 2012/09/06 23:16:13 Done.
40
22 // Creates a test widget that owns its native widget. 41 // Creates a test widget that owns its native widget.
23 Widget* CreateTestWidget() { 42 Widget* CreateTestWidget() {
24 Widget* widget = new Widget; 43 Widget* widget = new Widget;
25 Widget::InitParams params; 44 Widget::InitParams params;
26 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 45 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
27 widget->Init(params); 46 widget->Init(params);
28 return widget; 47 return widget;
29 } 48 }
30 49
31 Widget* CreateAlwaysOnTopWidget() { 50 Widget* CreateAlwaysOnTopWidget() {
32 Widget* widget = new Widget; 51 Widget* widget = new Widget;
33 Widget::InitParams params; 52 Widget::InitParams params;
34 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 53 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
35 params.keep_on_top = true; 54 params.keep_on_top = true;
36 widget->Init(params); 55 widget->Init(params);
37 return widget; 56 return widget;
38 } 57 }
39 58
59 Widget* CreateResizableWidget() {
60 Widget* widget = new Widget;
61 Widget::InitParams params;
62 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
63 params.keep_on_top = true;
64 params.delegate = new ResizableWidgetDelegate(widget);
65 params.type = Widget::InitParams::TYPE_WINDOW;
66 widget->Init(params);
67 return widget;
68 }
69
40 } // namespace 70 } // namespace
41 71
42 namespace ash { 72 namespace ash {
43 73
44 typedef ash::test::AshTestBase FramePainterTest; 74 typedef ash::test::AshTestBase FramePainterTest;
45 75
46 TEST_F(FramePainterTest, Basics) { 76 TEST_F(FramePainterTest, Basics) {
47 // Other tests might have created a FramePainter, so we cannot assert that 77 // Other tests might have created a FramePainter, so we cannot assert that
48 // FramePainter::instances_ is NULL here. 78 // FramePainter::instances_ is NULL here.
49 79
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 NULL)); 184 NULL));
155 185
156 // Custom overlay image is drawn completely opaque. 186 // Custom overlay image is drawn completely opaque.
157 gfx::ImageSkia custom_overlay; 187 gfx::ImageSkia custom_overlay;
158 EXPECT_EQ(255, 188 EXPECT_EQ(255,
159 p1.GetHeaderOpacity(FramePainter::ACTIVE, 189 p1.GetHeaderOpacity(FramePainter::ACTIVE,
160 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, 190 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE,
161 &custom_overlay)); 191 &custom_overlay));
162 } 192 }
163 193
194 // Test the hit test function with windows which are "partially maximized".
195 TEST_F(FramePainterTest, HitTestSpecialMaximizedModes) {
196 // Create a widget and a painter for it.
197 scoped_ptr<Widget> w1(CreateResizableWidget());
198 views::NonClientFrameView* frame = w1->CreateNonClientFrameView();
199 FramePainter p1;
200 ImageButton size1(NULL);
201 ImageButton close1(NULL);
202 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES);
203 w1->Show();
204 gfx::Rect any_rect = gfx::Rect(0, 0, 100, 100);
205 w1->SetBounds(any_rect);
206 frame->SetBounds(0, 0, 100, 100);
sky 2012/09/06 19:45:11 Why do you need this? w1->SetBounds should take ca
Mr4D (OOO till 08-26) 2012/09/06 23:16:13 You need both. I was puzzled by this myself when w
sky 2012/09/07 02:43:30 Please investigate this more deeply. Setting the f
Mr4D (OOO till 08-26) 2012/09/08 01:17:41 I have dumped already several hours on this and wi
207 EXPECT_EQ(HTTOPLEFT,
208 p1.NonClientHitTest(frame, gfx::Point(0, 15)));
209 gfx::Rect screen = gfx::Screen::GetDisplayMatching(any_rect).work_area();
210 w1->SetBounds(gfx::Rect(
211 screen.x(), screen.y(), screen.width() / 2, screen.height()));
212 frame->SetBounds(
213 screen.x(), screen.y(), screen.width() / 2, screen.height());
214 // A hit without a set restore rect should produce a top left hit.
215 EXPECT_EQ(HTTOPLEFT,
216 p1.NonClientHitTest(frame, gfx::Point(0, 15)));
217 ash::SetRestoreBoundsInScreen(w1->GetNativeWindow(), any_rect);
218 // A hit into the corner should produce nowhere - not left.
219 EXPECT_EQ(HTCAPTION,
220 p1.NonClientHitTest(frame, gfx::Point(0, 15)));
221 // A hit into the middle upper area should generate right - not top&right.
222 EXPECT_EQ(HTRIGHT,
223 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, 15)));
224 // A hit into the middle should generate right.
225 EXPECT_EQ(HTRIGHT,
226 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2,
227 screen.height() / 2)));
228 // A hit into the middle lower area should generate right - not bottom&right.
229 EXPECT_EQ(HTRIGHT,
230 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2,
231 screen.height() - 1)));
232 }
233
164 } // namespace ash 234 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698