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

Side by Side Diff: ash/system/palette/palette_tray.cc

Issue 2961313003: Touch gestures for System Tray/ IME/ Stylus/ Notifications (Closed)
Patch Set: Fixed tdanderson's comments. Created 3 years, 5 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/system/palette/palette_tray.h" 5 #include "ash/system/palette/palette_tray.h"
6 6
7 #include "ash/accelerators/accelerator_controller.h" 7 #include "ash/accelerators/accelerator_controller.h"
8 #include "ash/accessibility_delegate.h" 8 #include "ash/accessibility_delegate.h"
9 #include "ash/resources/vector_icons/vector_icons.h" 9 #include "ash/resources/vector_icons/vector_icons.h"
10 #include "ash/root_window_controller.h" 10 #include "ash/root_window_controller.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 SetInkDropMode(InkDropMode::ON); 146 SetInkDropMode(InkDropMode::ON);
147 SetLayoutManager(new views::FillLayout()); 147 SetLayoutManager(new views::FillLayout());
148 icon_ = new views::ImageView(); 148 icon_ = new views::ImageView();
149 UpdateTrayIcon(); 149 UpdateTrayIcon();
150 150
151 tray_container()->SetMargin(kTrayIconMainAxisInset, kTrayIconCrossAxisInset); 151 tray_container()->SetMargin(kTrayIconMainAxisInset, kTrayIconCrossAxisInset);
152 tray_container()->AddChildView(icon_); 152 tray_container()->AddChildView(icon_);
153 153
154 Shell::Get()->AddShellObserver(this); 154 Shell::Get()->AddShellObserver(this);
155 ui::InputDeviceManager::GetInstance()->AddObserver(this); 155 ui::InputDeviceManager::GetInstance()->AddObserver(this);
156
157 if (!drag_controller())
158 set_drag_controller(base::MakeUnique<TrayDragController>(shelf));
156 } 159 }
157 160
158 PaletteTray::~PaletteTray() { 161 PaletteTray::~PaletteTray() {
159 if (bubble_) 162 if (bubble_)
160 bubble_->bubble_view()->ResetDelegate(); 163 bubble_->bubble_view()->ResetDelegate();
161 164
162 ui::InputDeviceManager::GetInstance()->RemoveObserver(this); 165 ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
163 Shell::Get()->RemoveShellObserver(this); 166 Shell::Get()->RemoveShellObserver(this);
164 } 167 }
165 168
166 bool PaletteTray::PerformAction(const ui::Event& event) {
167 if (bubble_) {
168 if (num_actions_in_bubble_ == 0)
169 RecordPaletteOptionsUsage(PaletteTrayOptions::PALETTE_CLOSED_NO_ACTION);
170 HidePalette();
171 return true;
172 }
173
174 return ShowPalette();
175 }
176
177 bool PaletteTray::ShowPalette() {
178 if (bubble_)
179 return false;
180
181 DCHECK(tray_container());
182
183 views::TrayBubbleView::InitParams init_params;
184 init_params.delegate = this;
185 init_params.parent_window = GetBubbleWindowContainer();
186 init_params.anchor_view = GetBubbleAnchor();
187 init_params.anchor_alignment = GetAnchorAlignment();
188 init_params.min_width = kPaletteWidth;
189 init_params.max_width = kPaletteWidth;
190 init_params.close_on_deactivate = true;
191
192 // TODO(tdanderson): Refactor into common row layout code.
193 // TODO(tdanderson|jdufault): Add material design ripple effects to the menu
194 // rows.
195
196 // Create and customize bubble view.
197 views::TrayBubbleView* bubble_view = new views::TrayBubbleView(init_params);
198 bubble_view->set_anchor_view_insets(GetBubbleAnchorInsets());
199 bubble_view->set_margins(
200 gfx::Insets(kPalettePaddingOnTop, 0, kPalettePaddingOnBottom, 0));
201
202 // Add title.
203 auto* title_view = new TitleView(this);
204 title_view->SetBorder(views::CreateEmptyBorder(
205 gfx::Insets(0, kPaddingBetweenTitleAndLeftEdge, 0, 0)));
206 bubble_view->AddChildView(title_view);
207
208 // Add horizontal separator.
209 views::Separator* separator = new views::Separator();
210 separator->SetColor(kPaletteSeparatorColor);
211 separator->SetBorder(views::CreateEmptyBorder(gfx::Insets(
212 kPaddingBetweenTitleAndSeparator, 0, kMenuSeparatorVerticalPadding, 0)));
213 bubble_view->AddChildView(separator);
214
215 // Add palette tools.
216 // TODO(tdanderson|jdufault): Use SystemMenuButton to get the material design
217 // ripples.
218 std::vector<PaletteToolView> views = palette_tool_manager_->CreateViews();
219 for (const PaletteToolView& view : views)
220 bubble_view->AddChildView(view.view);
221
222 // Show the bubble.
223 bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view));
224 SetIsActive(true);
225 return true;
226 }
227
228 bool PaletteTray::ContainsPointInScreen(const gfx::Point& point) { 169 bool PaletteTray::ContainsPointInScreen(const gfx::Point& point) {
229 if (icon_ && icon_->GetBoundsInScreen().Contains(point)) 170 if (icon_ && icon_->GetBoundsInScreen().Contains(point))
230 return true; 171 return true;
231 172
232 return bubble_ && bubble_->bubble_view()->GetBoundsInScreen().Contains(point); 173 return bubble_ && bubble_->bubble_view()->GetBoundsInScreen().Contains(point);
233 } 174 }
234 175
235 void PaletteTray::OnSessionStateChanged(session_manager::SessionState state) { 176 void PaletteTray::OnSessionStateChanged(session_manager::SessionState state) {
236 UpdateIconVisibility(); 177 UpdateIconVisibility();
237 } 178 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 214
274 // Don't do anything if the palette should not be shown or if the user has 215 // Don't do anything if the palette should not be shown or if the user has
275 // disabled it all-together. 216 // disabled it all-together.
276 if (!IsInUserSession() || !palette_delegate->ShouldShowPalette()) 217 if (!IsInUserSession() || !palette_delegate->ShouldShowPalette())
277 return; 218 return;
278 219
279 // Auto show/hide the palette if allowed by the user. 220 // Auto show/hide the palette if allowed by the user.
280 if (palette_delegate->ShouldAutoOpenPalette()) { 221 if (palette_delegate->ShouldAutoOpenPalette()) {
281 if (stylus_state == ui::StylusState::REMOVED && !bubble_) { 222 if (stylus_state == ui::StylusState::REMOVED && !bubble_) {
282 is_bubble_auto_opened_ = true; 223 is_bubble_auto_opened_ = true;
283 ShowPalette(); 224 ShowBubble();
284 } else if (stylus_state == ui::StylusState::INSERTED && bubble_) { 225 } else if (stylus_state == ui::StylusState::INSERTED && bubble_) {
285 HidePalette(); 226 HidePalette();
286 } 227 }
287 } 228 }
288 229
289 // Disable any active modes if the stylus has been inserted. 230 // Disable any active modes if the stylus has been inserted.
290 if (stylus_state == ui::StylusState::INSERTED) 231 if (stylus_state == ui::StylusState::INSERTED)
291 palette_tool_manager_->DisableActiveTool(PaletteGroup::MODE); 232 palette_tool_manager_->DisableActiveTool(PaletteGroup::MODE);
292 } 233 }
293 234
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 // |delegate| can be null in tests. 319 // |delegate| can be null in tests.
379 if (!delegate) 320 if (!delegate)
380 return; 321 return;
381 322
382 // OnPaletteEnabledPrefChanged will get called with the initial pref value, 323 // OnPaletteEnabledPrefChanged will get called with the initial pref value,
383 // which will take care of showing the palette. 324 // which will take care of showing the palette.
384 palette_enabled_subscription_ = delegate->AddPaletteEnableListener(base::Bind( 325 palette_enabled_subscription_ = delegate->AddPaletteEnableListener(base::Bind(
385 &PaletteTray::OnPaletteEnabledPrefChanged, weak_factory_.GetWeakPtr())); 326 &PaletteTray::OnPaletteEnabledPrefChanged, weak_factory_.GetWeakPtr()));
386 } 327 }
387 328
329 bool PaletteTray::PerformAction(const ui::Event& event) {
330 if (bubble_) {
331 if (num_actions_in_bubble_ == 0)
332 RecordPaletteOptionsUsage(PaletteTrayOptions::PALETTE_CLOSED_NO_ACTION);
333 HidePalette();
334 return true;
335 }
336
337 ShowBubble();
338 return true;
339 }
340
341 void PaletteTray::CloseBubble() {
342 HidePalette();
343 }
344
345 void PaletteTray::ShowBubble() {
346 if (bubble_)
347 return;
348
349 DCHECK(tray_container());
350
351 views::TrayBubbleView::InitParams init_params;
352 init_params.delegate = this;
353 init_params.parent_window = GetBubbleWindowContainer();
354 init_params.anchor_view = GetBubbleAnchor();
355 init_params.anchor_alignment = GetAnchorAlignment();
356 init_params.min_width = kPaletteWidth;
357 init_params.max_width = kPaletteWidth;
358 init_params.close_on_deactivate = true;
359
360 // TODO(tdanderson): Refactor into common row layout code.
361 // TODO(tdanderson|jdufault): Add material design ripple effects to the menu
362 // rows.
363
364 // Create and customize bubble view.
365 views::TrayBubbleView* bubble_view = new views::TrayBubbleView(init_params);
366 bubble_view->set_anchor_view_insets(GetBubbleAnchorInsets());
367 bubble_view->set_margins(
368 gfx::Insets(kPalettePaddingOnTop, 0, kPalettePaddingOnBottom, 0));
369
370 // Add title.
371 auto* title_view = new TitleView(this);
372 title_view->SetBorder(views::CreateEmptyBorder(
373 gfx::Insets(0, kPaddingBetweenTitleAndLeftEdge, 0, 0)));
374 bubble_view->AddChildView(title_view);
375
376 // Add horizontal separator.
377 views::Separator* separator = new views::Separator();
378 separator->SetColor(kPaletteSeparatorColor);
379 separator->SetBorder(views::CreateEmptyBorder(gfx::Insets(
380 kPaddingBetweenTitleAndSeparator, 0, kMenuSeparatorVerticalPadding, 0)));
381 bubble_view->AddChildView(separator);
382
383 // Add palette tools.
384 // TODO(tdanderson|jdufault): Use SystemMenuButton to get the material design
385 // ripples.
386 std::vector<PaletteToolView> views = palette_tool_manager_->CreateViews();
387 for (const PaletteToolView& view : views)
388 bubble_view->AddChildView(view.view);
389
390 // Show the bubble.
391 bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view));
oshima 2017/07/18 17:20:38 nit: makeunique
minch1 2017/07/18 20:01:52 Done.
392 SetIsActive(true);
393 }
394
395 views::TrayBubbleView* PaletteTray::GetBubbleView() {
396 return bubble_ ? bubble_->bubble_view() : nullptr;
397 }
398
388 void PaletteTray::UpdateTrayIcon() { 399 void PaletteTray::UpdateTrayIcon() {
389 icon_->SetImage(CreateVectorIcon( 400 icon_->SetImage(CreateVectorIcon(
390 palette_tool_manager_->GetActiveTrayIcon( 401 palette_tool_manager_->GetActiveTrayIcon(
391 palette_tool_manager_->GetActiveTool(ash::PaletteGroup::MODE)), 402 palette_tool_manager_->GetActiveTool(ash::PaletteGroup::MODE)),
392 kTrayIconSize, kShelfIconColor)); 403 kTrayIconSize, kShelfIconColor));
393 } 404 }
394 405
395 void PaletteTray::OnPaletteEnabledPrefChanged(bool enabled) { 406 void PaletteTray::OnPaletteEnabledPrefChanged(bool enabled) {
396 is_palette_enabled_ = enabled; 407 is_palette_enabled_ = enabled;
397 408
398 if (!enabled) { 409 if (!enabled) {
399 SetVisible(false); 410 SetVisible(false);
400 palette_tool_manager_->DisableActiveTool(PaletteGroup::MODE); 411 palette_tool_manager_->DisableActiveTool(PaletteGroup::MODE);
401 } else { 412 } else {
402 UpdateIconVisibility(); 413 UpdateIconVisibility();
403 } 414 }
404 } 415 }
405 416
406 void PaletteTray::UpdateIconVisibility() { 417 void PaletteTray::UpdateIconVisibility() {
407 SetVisible(is_palette_enabled_ && palette_utils::HasStylusInput() && 418 SetVisible(is_palette_enabled_ && palette_utils::HasStylusInput() &&
408 ShouldShowOnDisplay(this) && IsInUserSession()); 419 ShouldShowOnDisplay(this) && IsInUserSession());
409 } 420 }
410 421
411 } // namespace ash 422 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698