OLD | NEW |
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/shell/window_type_launcher.h" | 5 #include "ash/shell/window_type_launcher.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "ash/common/session/session_state_delegate.h" | 9 #include "ash/common/session/session_state_delegate.h" |
10 #include "ash/common/shell_window_ids.h" | 10 #include "ash/common/shell_window_ids.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 #include "ui/wm/core/shadow_types.h" | 35 #include "ui/wm/core/shadow_types.h" |
36 | 36 |
37 using views::MenuItemView; | 37 using views::MenuItemView; |
38 using views::MenuRunner; | 38 using views::MenuRunner; |
39 | 39 |
40 namespace ash { | 40 namespace ash { |
41 namespace shell { | 41 namespace shell { |
42 | 42 |
43 namespace { | 43 namespace { |
44 | 44 |
45 SkColor g_colors[] = { SK_ColorRED, | 45 SkColor g_colors[] = {SK_ColorRED, SK_ColorYELLOW, SK_ColorBLUE, SK_ColorGREEN}; |
46 SK_ColorYELLOW, | |
47 SK_ColorBLUE, | |
48 SK_ColorGREEN }; | |
49 int g_color_index = 0; | 46 int g_color_index = 0; |
50 | 47 |
51 class ModalWindow : public views::WidgetDelegateView, | 48 class ModalWindow : public views::WidgetDelegateView, |
52 public views::ButtonListener { | 49 public views::ButtonListener { |
53 public: | 50 public: |
54 explicit ModalWindow(ui::ModalType modal_type) | 51 explicit ModalWindow(ui::ModalType modal_type) |
55 : modal_type_(modal_type), | 52 : modal_type_(modal_type), |
56 color_(g_colors[g_color_index]), | 53 color_(g_colors[g_color_index]), |
57 open_button_(new views::LabelButton(this, | 54 open_button_( |
58 base::ASCIIToUTF16("Moar!"))) { | 55 new views::LabelButton(this, base::ASCIIToUTF16("Moar!"))) { |
59 ++g_color_index %= arraysize(g_colors); | 56 ++g_color_index %= arraysize(g_colors); |
60 open_button_->SetStyle(views::Button::STYLE_BUTTON); | 57 open_button_->SetStyle(views::Button::STYLE_BUTTON); |
61 AddChildView(open_button_); | 58 AddChildView(open_button_); |
62 } | 59 } |
63 ~ModalWindow() override {} | 60 ~ModalWindow() override {} |
64 | 61 |
65 static void OpenModalWindow(aura::Window* parent, ui::ModalType modal_type) { | 62 static void OpenModalWindow(aura::Window* parent, ui::ModalType modal_type) { |
66 views::Widget* widget = | 63 views::Widget* widget = views::Widget::CreateWindowWithParent( |
67 views::Widget::CreateWindowWithParent(new ModalWindow(modal_type), | 64 new ModalWindow(modal_type), parent); |
68 parent); | |
69 widget->GetNativeView()->SetName("ModalWindow"); | 65 widget->GetNativeView()->SetName("ModalWindow"); |
70 widget->Show(); | 66 widget->Show(); |
71 } | 67 } |
72 | 68 |
73 // Overridden from views::View: | 69 // Overridden from views::View: |
74 void OnPaint(gfx::Canvas* canvas) override { | 70 void OnPaint(gfx::Canvas* canvas) override { |
75 canvas->FillRect(GetLocalBounds(), color_); | 71 canvas->FillRect(GetLocalBounds(), color_); |
76 } | 72 } |
77 gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); } | 73 gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); } |
78 void Layout() override { | 74 void Layout() override { |
79 gfx::Size open_ps = open_button_->GetPreferredSize(); | 75 gfx::Size open_ps = open_button_->GetPreferredSize(); |
80 gfx::Rect local_bounds = GetLocalBounds(); | 76 gfx::Rect local_bounds = GetLocalBounds(); |
81 open_button_->SetBounds( | 77 open_button_->SetBounds(5, local_bounds.bottom() - open_ps.height() - 5, |
82 5, local_bounds.bottom() - open_ps.height() - 5, | 78 open_ps.width(), open_ps.height()); |
83 open_ps.width(), open_ps.height()); | |
84 } | 79 } |
85 | 80 |
86 // Overridden from views::WidgetDelegate: | 81 // Overridden from views::WidgetDelegate: |
87 views::View* GetContentsView() override { return this; } | 82 views::View* GetContentsView() override { return this; } |
88 bool CanResize() const override { return true; } | 83 bool CanResize() const override { return true; } |
89 base::string16 GetWindowTitle() const override { | 84 base::string16 GetWindowTitle() const override { |
90 return base::ASCIIToUTF16("Modal Window"); | 85 return base::ASCIIToUTF16("Modal Window"); |
91 } | 86 } |
92 ui::ModalType GetModalType() const override { return modal_type_; } | 87 ui::ModalType GetModalType() const override { return modal_type_; } |
93 | 88 |
94 // Overridden from views::ButtonListener: | 89 // Overridden from views::ButtonListener: |
95 void ButtonPressed(views::Button* sender, const ui::Event& event) override { | 90 void ButtonPressed(views::Button* sender, const ui::Event& event) override { |
96 DCHECK(sender == open_button_); | 91 DCHECK(sender == open_button_); |
97 OpenModalWindow(GetWidget()->GetNativeView(), modal_type_); | 92 OpenModalWindow(GetWidget()->GetNativeView(), modal_type_); |
98 } | 93 } |
99 | 94 |
100 private: | 95 private: |
101 ui::ModalType modal_type_; | 96 ui::ModalType modal_type_; |
102 SkColor color_; | 97 SkColor color_; |
103 views::LabelButton* open_button_; | 98 views::LabelButton* open_button_; |
104 | 99 |
105 DISALLOW_COPY_AND_ASSIGN(ModalWindow); | 100 DISALLOW_COPY_AND_ASSIGN(ModalWindow); |
106 }; | 101 }; |
107 | 102 |
108 class NonModalTransient : public views::WidgetDelegateView { | 103 class NonModalTransient : public views::WidgetDelegateView { |
109 public: | 104 public: |
110 NonModalTransient() | 105 NonModalTransient() : color_(g_colors[g_color_index]) { |
111 : color_(g_colors[g_color_index]) { | |
112 ++g_color_index %= arraysize(g_colors); | 106 ++g_color_index %= arraysize(g_colors); |
113 } | 107 } |
114 ~NonModalTransient() override {} | 108 ~NonModalTransient() override {} |
115 | 109 |
116 static void OpenNonModalTransient(aura::Window* parent) { | 110 static void OpenNonModalTransient(aura::Window* parent) { |
117 views::Widget* widget = | 111 views::Widget* widget = |
118 views::Widget::CreateWindowWithParent(new NonModalTransient, parent); | 112 views::Widget::CreateWindowWithParent(new NonModalTransient, parent); |
119 widget->GetNativeView()->SetName("NonModalTransient"); | 113 widget->GetNativeView()->SetName("NonModalTransient"); |
120 widget->Show(); | 114 widget->Show(); |
121 } | 115 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 | 158 |
165 void AddViewToLayout(views::GridLayout* layout, views::View* view) { | 159 void AddViewToLayout(views::GridLayout* layout, views::View* view) { |
166 layout->StartRow(0, 0); | 160 layout->StartRow(0, 0); |
167 layout->AddView(view); | 161 layout->AddView(view); |
168 layout->AddPaddingRow(0, 5); | 162 layout->AddPaddingRow(0, 5); |
169 } | 163 } |
170 | 164 |
171 } // namespace | 165 } // namespace |
172 | 166 |
173 void InitWindowTypeLauncher() { | 167 void InitWindowTypeLauncher() { |
174 views::Widget* widget = | 168 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( |
175 views::Widget::CreateWindowWithContextAndBounds( | 169 new WindowTypeLauncher, Shell::GetPrimaryRootWindow(), |
176 new WindowTypeLauncher, | 170 gfx::Rect(120, 150, 300, 410)); |
177 Shell::GetPrimaryRootWindow(), | |
178 gfx::Rect(120, 150, 300, 410)); | |
179 widget->GetNativeView()->SetName("WindowTypeLauncher"); | 171 widget->GetNativeView()->SetName("WindowTypeLauncher"); |
180 ::wm::SetShadowType(widget->GetNativeView(), ::wm::SHADOW_TYPE_RECTANGULAR); | 172 ::wm::SetShadowType(widget->GetNativeView(), ::wm::SHADOW_TYPE_RECTANGULAR); |
181 widget->Show(); | 173 widget->Show(); |
182 } | 174 } |
183 | 175 |
184 WindowTypeLauncher::WindowTypeLauncher() | 176 WindowTypeLauncher::WindowTypeLauncher() |
185 : create_button_(new views::LabelButton( | 177 : create_button_( |
186 this, base::ASCIIToUTF16("Create Window"))), | 178 new views::LabelButton(this, base::ASCIIToUTF16("Create Window"))), |
187 panel_button_(new views::LabelButton( | 179 panel_button_( |
188 this, base::ASCIIToUTF16("Create Panel"))), | 180 new views::LabelButton(this, base::ASCIIToUTF16("Create Panel"))), |
189 create_nonresizable_button_(new views::LabelButton( | 181 create_nonresizable_button_(new views::LabelButton( |
190 this, base::ASCIIToUTF16("Create Non-Resizable Window"))), | 182 this, |
191 bubble_button_(new views::LabelButton( | 183 base::ASCIIToUTF16("Create Non-Resizable Window"))), |
192 this, base::ASCIIToUTF16("Create Pointy Bubble"))), | 184 bubble_button_( |
193 lock_button_(new views::LabelButton( | 185 new views::LabelButton(this, |
194 this, base::ASCIIToUTF16("Lock Screen"))), | 186 base::ASCIIToUTF16("Create Pointy Bubble"))), |
195 widgets_button_(new views::LabelButton( | 187 lock_button_( |
196 this, base::ASCIIToUTF16("Show Example Widgets"))), | 188 new views::LabelButton(this, base::ASCIIToUTF16("Lock Screen"))), |
| 189 widgets_button_( |
| 190 new views::LabelButton(this, |
| 191 base::ASCIIToUTF16("Show Example Widgets"))), |
197 system_modal_button_(new views::LabelButton( | 192 system_modal_button_(new views::LabelButton( |
198 this, base::ASCIIToUTF16("Open System Modal Window"))), | 193 this, |
| 194 base::ASCIIToUTF16("Open System Modal Window"))), |
199 window_modal_button_(new views::LabelButton( | 195 window_modal_button_(new views::LabelButton( |
200 this, base::ASCIIToUTF16("Open Window Modal Window"))), | 196 this, |
| 197 base::ASCIIToUTF16("Open Window Modal Window"))), |
201 child_modal_button_(new views::LabelButton( | 198 child_modal_button_(new views::LabelButton( |
202 this, base::ASCIIToUTF16("Open Child Modal Window"))), | 199 this, |
| 200 base::ASCIIToUTF16("Open Child Modal Window"))), |
203 transient_button_(new views::LabelButton( | 201 transient_button_(new views::LabelButton( |
204 this, base::ASCIIToUTF16("Open Non-Modal Transient Window"))), | 202 this, |
| 203 base::ASCIIToUTF16("Open Non-Modal Transient Window"))), |
205 examples_button_(new views::LabelButton( | 204 examples_button_(new views::LabelButton( |
206 this, base::ASCIIToUTF16("Open Views Examples Window"))), | 205 this, |
207 show_hide_window_button_(new views::LabelButton( | 206 base::ASCIIToUTF16("Open Views Examples Window"))), |
208 this, base::ASCIIToUTF16("Show/Hide a Window"))), | 207 show_hide_window_button_( |
| 208 new views::LabelButton(this, |
| 209 base::ASCIIToUTF16("Show/Hide a Window"))), |
209 show_web_notification_(new views::LabelButton( | 210 show_web_notification_(new views::LabelButton( |
210 this, base::ASCIIToUTF16("Show a web/app notification"))) { | 211 this, |
| 212 base::ASCIIToUTF16("Show a web/app notification"))) { |
211 create_button_->SetStyle(views::Button::STYLE_BUTTON); | 213 create_button_->SetStyle(views::Button::STYLE_BUTTON); |
212 panel_button_->SetStyle(views::Button::STYLE_BUTTON); | 214 panel_button_->SetStyle(views::Button::STYLE_BUTTON); |
213 create_nonresizable_button_->SetStyle(views::Button::STYLE_BUTTON); | 215 create_nonresizable_button_->SetStyle(views::Button::STYLE_BUTTON); |
214 bubble_button_->SetStyle(views::Button::STYLE_BUTTON); | 216 bubble_button_->SetStyle(views::Button::STYLE_BUTTON); |
215 lock_button_->SetStyle(views::Button::STYLE_BUTTON); | 217 lock_button_->SetStyle(views::Button::STYLE_BUTTON); |
216 widgets_button_->SetStyle(views::Button::STYLE_BUTTON); | 218 widgets_button_->SetStyle(views::Button::STYLE_BUTTON); |
217 system_modal_button_->SetStyle(views::Button::STYLE_BUTTON); | 219 system_modal_button_->SetStyle(views::Button::STYLE_BUTTON); |
218 window_modal_button_->SetStyle(views::Button::STYLE_BUTTON); | 220 window_modal_button_->SetStyle(views::Button::STYLE_BUTTON); |
219 child_modal_button_->SetStyle(views::Button::STYLE_BUTTON); | 221 child_modal_button_->SetStyle(views::Button::STYLE_BUTTON); |
220 transient_button_->SetStyle(views::Button::STYLE_BUTTON); | 222 transient_button_->SetStyle(views::Button::STYLE_BUTTON); |
221 examples_button_->SetStyle(views::Button::STYLE_BUTTON); | 223 examples_button_->SetStyle(views::Button::STYLE_BUTTON); |
222 show_hide_window_button_->SetStyle(views::Button::STYLE_BUTTON); | 224 show_hide_window_button_->SetStyle(views::Button::STYLE_BUTTON); |
223 show_web_notification_->SetStyle(views::Button::STYLE_BUTTON); | 225 show_web_notification_->SetStyle(views::Button::STYLE_BUTTON); |
224 | 226 |
225 views::GridLayout* layout = new views::GridLayout(this); | 227 views::GridLayout* layout = new views::GridLayout(this); |
226 layout->SetInsets(5, 5, 5, 5); | 228 layout->SetInsets(5, 5, 5, 5); |
227 SetLayoutManager(layout); | 229 SetLayoutManager(layout); |
228 views::ColumnSet* column_set = layout->AddColumnSet(0); | 230 views::ColumnSet* column_set = layout->AddColumnSet(0); |
229 column_set->AddColumn(views::GridLayout::LEADING, | 231 column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, |
230 views::GridLayout::CENTER, | 232 0, views::GridLayout::USE_PREF, 0, 0); |
231 0, | |
232 views::GridLayout::USE_PREF, | |
233 0, | |
234 0); | |
235 AddViewToLayout(layout, create_button_); | 233 AddViewToLayout(layout, create_button_); |
236 AddViewToLayout(layout, panel_button_); | 234 AddViewToLayout(layout, panel_button_); |
237 AddViewToLayout(layout, create_nonresizable_button_); | 235 AddViewToLayout(layout, create_nonresizable_button_); |
238 AddViewToLayout(layout, bubble_button_); | 236 AddViewToLayout(layout, bubble_button_); |
239 AddViewToLayout(layout, lock_button_); | 237 AddViewToLayout(layout, lock_button_); |
240 AddViewToLayout(layout, widgets_button_); | 238 AddViewToLayout(layout, widgets_button_); |
241 AddViewToLayout(layout, system_modal_button_); | 239 AddViewToLayout(layout, system_modal_button_); |
242 AddViewToLayout(layout, window_modal_button_); | 240 AddViewToLayout(layout, window_modal_button_); |
243 AddViewToLayout(layout, child_modal_button_); | 241 AddViewToLayout(layout, child_modal_button_); |
244 AddViewToLayout(layout, transient_button_); | 242 AddViewToLayout(layout, transient_button_); |
245 AddViewToLayout(layout, examples_button_); | 243 AddViewToLayout(layout, examples_button_); |
246 AddViewToLayout(layout, show_hide_window_button_); | 244 AddViewToLayout(layout, show_hide_window_button_); |
247 AddViewToLayout(layout, show_web_notification_); | 245 AddViewToLayout(layout, show_web_notification_); |
248 set_context_menu_controller(this); | 246 set_context_menu_controller(this); |
249 } | 247 } |
250 | 248 |
251 WindowTypeLauncher::~WindowTypeLauncher() { | 249 WindowTypeLauncher::~WindowTypeLauncher() {} |
252 } | |
253 | 250 |
254 void WindowTypeLauncher::OnPaint(gfx::Canvas* canvas) { | 251 void WindowTypeLauncher::OnPaint(gfx::Canvas* canvas) { |
255 canvas->FillRect(GetLocalBounds(), SK_ColorWHITE); | 252 canvas->FillRect(GetLocalBounds(), SK_ColorWHITE); |
256 } | 253 } |
257 | 254 |
258 bool WindowTypeLauncher::OnMousePressed(const ui::MouseEvent& event) { | 255 bool WindowTypeLauncher::OnMousePressed(const ui::MouseEvent& event) { |
259 // Overridden so we get OnMouseReleased and can show the context menu. | 256 // Overridden so we get OnMouseReleased and can show the context menu. |
260 return true; | 257 return true; |
261 } | 258 } |
262 | 259 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 default: | 342 default: |
346 break; | 343 break; |
347 } | 344 } |
348 } | 345 } |
349 | 346 |
350 void WindowTypeLauncher::ShowContextMenuForView( | 347 void WindowTypeLauncher::ShowContextMenuForView( |
351 views::View* source, | 348 views::View* source, |
352 const gfx::Point& point, | 349 const gfx::Point& point, |
353 ui::MenuSourceType source_type) { | 350 ui::MenuSourceType source_type) { |
354 MenuItemView* root = new MenuItemView(this); | 351 MenuItemView* root = new MenuItemView(this); |
355 root->AppendMenuItem(COMMAND_NEW_WINDOW, | 352 root->AppendMenuItem(COMMAND_NEW_WINDOW, base::ASCIIToUTF16("New Window"), |
356 base::ASCIIToUTF16("New Window"), | |
357 MenuItemView::NORMAL); | 353 MenuItemView::NORMAL); |
358 root->AppendMenuItem(COMMAND_TOGGLE_FULLSCREEN, | 354 root->AppendMenuItem(COMMAND_TOGGLE_FULLSCREEN, |
359 base::ASCIIToUTF16("Toggle FullScreen"), | 355 base::ASCIIToUTF16("Toggle FullScreen"), |
360 MenuItemView::NORMAL); | 356 MenuItemView::NORMAL); |
361 // MenuRunner takes ownership of root. | 357 // MenuRunner takes ownership of root. |
362 menu_runner_.reset(new MenuRunner( | 358 menu_runner_.reset(new MenuRunner( |
363 root, MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU)); | 359 root, MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU)); |
364 if (menu_runner_->RunMenuAt(GetWidget(), | 360 if (menu_runner_->RunMenuAt(GetWidget(), NULL, gfx::Rect(point, gfx::Size()), |
365 NULL, | |
366 gfx::Rect(point, gfx::Size()), | |
367 views::MENU_ANCHOR_TOPLEFT, | 361 views::MENU_ANCHOR_TOPLEFT, |
368 source_type) == MenuRunner::MENU_DELETED) { | 362 source_type) == MenuRunner::MENU_DELETED) { |
369 return; | 363 return; |
370 } | 364 } |
371 } | 365 } |
372 | 366 |
373 } // namespace shell | 367 } // namespace shell |
374 } // namespace ash | 368 } // namespace ash |
OLD | NEW |