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

Side by Side Diff: ash/common/system/tray/tray_details_view.cc

Issue 2478273003: Use overlay scrollbars for the cros system menu. (Closed)
Patch Set: rebase Created 4 years, 1 month 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 (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/common/system/tray/tray_details_view.h" 5 #include "ash/common/system/tray/tray_details_view.h"
6 6
7 #include "ash/common/ash_view_ids.h" 7 #include "ash/common/ash_view_ids.h"
8 #include "ash/common/material_design/material_design_controller.h" 8 #include "ash/common/material_design/material_design_controller.h"
9 #include "ash/common/system/tray/fixed_sized_scroll_view.h" 9 #include "ash/common/system/tray/fixed_sized_scroll_view.h"
10 #include "ash/common/system/tray/system_tray.h" 10 #include "ash/common/system/tray/system_tray.h"
(...skipping 10 matching lines...) Expand all
21 #include "ui/views/controls/progress_bar.h" 21 #include "ui/views/controls/progress_bar.h"
22 #include "ui/views/controls/scroll_view.h" 22 #include "ui/views/controls/scroll_view.h"
23 #include "ui/views/controls/separator.h" 23 #include "ui/views/controls/separator.h"
24 #include "ui/views/layout/box_layout.h" 24 #include "ui/views/layout/box_layout.h"
25 #include "ui/views/view_targeter.h" 25 #include "ui/views/view_targeter.h"
26 #include "ui/views/view_targeter_delegate.h" 26 #include "ui/views/view_targeter_delegate.h"
27 27
28 namespace ash { 28 namespace ash {
29 namespace { 29 namespace {
30 30
31 bool UseMd() {
32 return MaterialDesignController::IsSystemTrayMenuMaterial();
33 }
34
31 // A view that is used as ScrollView contents. It supports designating some of 35 // A view that is used as ScrollView contents. It supports designating some of
32 // the children as sticky header rows. The sticky header rows are not scrolled 36 // the children as sticky header rows. The sticky header rows are not scrolled
33 // above the top of the visible viewport until the next one "pushes" it up and 37 // above the top of the visible viewport until the next one "pushes" it up and
34 // are painted above other children. To indicate that a child is a sticky header 38 // are painted above other children. To indicate that a child is a sticky header
35 // row use set_id(VIEW_ID_STICKY_HEADER). 39 // row use set_id(VIEW_ID_STICKY_HEADER).
36 class ScrollContentsView : public views::View, 40 class ScrollContentsView : public views::View,
37 public views::ViewTargeterDelegate { 41 public views::ViewTargeterDelegate {
38 public: 42 public:
39 ScrollContentsView() { 43 ScrollContentsView() {
40 SetEventTargeter(base::MakeUnique<views::ViewTargeter>(this)); 44 SetEventTargeter(base::MakeUnique<views::ViewTargeter>(this));
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 title_row_separator_(nullptr), 293 title_row_separator_(nullptr),
290 scroll_border_(nullptr), 294 scroll_border_(nullptr),
291 back_button_(nullptr) { 295 back_button_(nullptr) {
292 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); 296 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
293 set_background(views::Background::CreateSolidBackground(kBackgroundColor)); 297 set_background(views::Background::CreateSolidBackground(kBackgroundColor));
294 } 298 }
295 299
296 TrayDetailsView::~TrayDetailsView() {} 300 TrayDetailsView::~TrayDetailsView() {}
297 301
298 void TrayDetailsView::OnViewClicked(views::View* sender) { 302 void TrayDetailsView::OnViewClicked(views::View* sender) {
299 if (!MaterialDesignController::IsSystemTrayMenuMaterial() && title_row_ && 303 if (!UseMd() && title_row_ && sender == title_row_->content()) {
300 sender == title_row_->content()) {
301 TransitionToDefaultView(); 304 TransitionToDefaultView();
302 return; 305 return;
303 } 306 }
304 307
305 HandleViewClicked(sender); 308 HandleViewClicked(sender);
306 } 309 }
307 310
308 void TrayDetailsView::ButtonPressed(views::Button* sender, 311 void TrayDetailsView::ButtonPressed(views::Button* sender,
309 const ui::Event& event) { 312 const ui::Event& event) {
310 if (MaterialDesignController::IsSystemTrayMenuMaterial() && 313 if (UseMd() && sender == back_button_) {
311 sender == back_button_) {
312 TransitionToDefaultView(); 314 TransitionToDefaultView();
313 return; 315 return;
314 } 316 }
315 317
316 HandleButtonPressed(sender, event); 318 HandleButtonPressed(sender, event);
317 } 319 }
318 320
319 void TrayDetailsView::CreateTitleRow(int string_id) { 321 void TrayDetailsView::CreateTitleRow(int string_id) {
320 DCHECK(!title_row_); 322 DCHECK(!title_row_);
321 title_row_ = new SpecialPopupRow(); 323 title_row_ = new SpecialPopupRow();
322 title_row_->SetTextLabel(string_id, this); 324 title_row_->SetTextLabel(string_id, this);
323 if (MaterialDesignController::IsSystemTrayMenuMaterial()) { 325 if (UseMd()) {
324 title_row_->SetBorder(views::CreateEmptyBorder(kTitleRowPaddingTop, 0, 326 title_row_->SetBorder(views::CreateEmptyBorder(kTitleRowPaddingTop, 0,
325 kTitleRowPaddingBottom, 0)); 327 kTitleRowPaddingBottom, 0));
326 AddChildViewAt(title_row_, 0); 328 AddChildViewAt(title_row_, 0);
327 // In material design, we use a customized bottom border which is nomally a 329 // In material design, we use a customized bottom border which is nomally a
328 // simple separator (views::Separator) but can be combined with an 330 // simple separator (views::Separator) but can be combined with an
329 // overlapping progress bar. 331 // overlapping progress bar.
330 title_row_separator_ = new views::View; 332 title_row_separator_ = new views::View;
331 title_row_separator_->SetLayoutManager(new TitleRowSeparatorLayout); 333 title_row_separator_->SetLayoutManager(new TitleRowSeparatorLayout);
332 views::Separator* separator = 334 views::Separator* separator =
333 new views::Separator(views::Separator::HORIZONTAL); 335 new views::Separator(views::Separator::HORIZONTAL);
334 separator->SetColor(kTitleRowSeparatorBorderColor); 336 separator->SetColor(kTitleRowSeparatorBorderColor);
335 separator->SetPreferredSize(kTitleRowSeparatorBorderHeight); 337 separator->SetPreferredSize(kTitleRowSeparatorBorderHeight);
336 separator->SetBorder(views::CreateEmptyBorder( 338 separator->SetBorder(views::CreateEmptyBorder(
337 kTitleRowSeparatorHeight - kTitleRowSeparatorBorderHeight, 0, 0, 0)); 339 kTitleRowSeparatorHeight - kTitleRowSeparatorBorderHeight, 0, 0, 0));
338 title_row_separator_->AddChildView(separator); 340 title_row_separator_->AddChildView(separator);
339 AddChildViewAt(title_row_separator_, 1); 341 AddChildViewAt(title_row_separator_, 1);
340 } else { 342 } else {
341 AddChildViewAt(title_row_, child_count()); 343 AddChildViewAt(title_row_, child_count());
342 } 344 }
343 345
344 CreateExtraTitleRowButtons(); 346 CreateExtraTitleRowButtons();
345 347
346 if (MaterialDesignController::IsSystemTrayMenuMaterial()) 348 if (UseMd())
347 back_button_ = title_row_->AddBackButton(this); 349 back_button_ = title_row_->AddBackButton(this);
348 350
349 Layout(); 351 Layout();
350 } 352 }
351 353
352 void TrayDetailsView::CreateScrollableList() { 354 void TrayDetailsView::CreateScrollableList() {
353 DCHECK(!scroller_); 355 DCHECK(!scroller_);
354 scroll_content_ = new ScrollContentsView(); 356 scroll_content_ = new ScrollContentsView();
355 scroller_ = new FixedSizedScrollView; 357 scroller_ = new FixedSizedScrollView;
356 scroller_->SetContentsView(scroll_content_); 358 scroller_->SetContentsView(scroll_content_);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 394
393 void TrayDetailsView::HandleButtonPressed(views::Button* sender, 395 void TrayDetailsView::HandleButtonPressed(views::Button* sender,
394 const ui::Event& event) {} 396 const ui::Event& event) {}
395 397
396 void TrayDetailsView::CreateExtraTitleRowButtons() {} 398 void TrayDetailsView::CreateExtraTitleRowButtons() {}
397 399
398 void TrayDetailsView::TransitionToDefaultView() { 400 void TrayDetailsView::TransitionToDefaultView() {
399 // Cache pointer to owner in this function scope. TrayDetailsView will be 401 // Cache pointer to owner in this function scope. TrayDetailsView will be
400 // deleted after called ShowDefaultView. 402 // deleted after called ShowDefaultView.
401 SystemTrayItem* owner = owner_; 403 SystemTrayItem* owner = owner_;
402 if (MaterialDesignController::IsSystemTrayMenuMaterial()) { 404 if (UseMd()) {
403 if (back_button_ && back_button_->HasFocus()) 405 if (back_button_ && back_button_->HasFocus())
404 owner->set_restore_focus(true); 406 owner->set_restore_focus(true);
405 } else { 407 } else {
406 if (title_row_ && title_row_->content() && 408 if (title_row_ && title_row_->content() &&
407 title_row_->content()->HasFocus()) { 409 title_row_->content()->HasFocus()) {
408 owner->set_restore_focus(true); 410 owner->set_restore_focus(true);
409 } 411 }
410 } 412 }
411 owner->system_tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 413 owner->system_tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
412 owner->set_restore_focus(false); 414 owner->set_restore_focus(false);
413 } 415 }
414 416
415 void TrayDetailsView::Layout() { 417 void TrayDetailsView::Layout() {
416 if (bounds().IsEmpty()) { 418 if (bounds().IsEmpty()) {
417 views::View::Layout(); 419 views::View::Layout();
418 return; 420 return;
419 } 421 }
420 422
421 if (scroller_) { 423 if (scroller_) {
422 scroller_->set_fixed_size(gfx::Size()); 424 if (UseMd()) {
423 gfx::Size size = GetPreferredSize(); 425 gfx::Size scroller_size = scroll_content_->GetPreferredSize();
426 gfx::Size pref_size = GetPreferredSize();
427 scroller()->ClipHeightTo(
428 0, scroller_size.height() - (pref_size.height() - height()));
429 } else {
430 scroller_->set_fixed_size(gfx::Size());
431 gfx::Size size = GetPreferredSize();
424 432
425 // Set the scroller to fill the space above the bottom row, so that the 433 // Set the scroller to fill the space above the bottom row, so that the
426 // bottom row of the detailed view will always stay just above the title 434 // bottom row of the detailed view will always stay just above the title
427 // row. 435 // row.
428 gfx::Size scroller_size = scroll_content_->GetPreferredSize(); 436 gfx::Size scroller_size = scroll_content_->GetPreferredSize();
429 scroller_->set_fixed_size( 437 scroller_->set_fixed_size(
430 gfx::Size(width() + scroller_->GetScrollBarWidth(), 438 gfx::Size(width() + scroller_->GetScrollBarWidth(),
431 scroller_size.height() - (size.height() - height()))); 439 scroller_size.height() - (size.height() - height())));
440 }
432 } 441 }
433 442
434 views::View::Layout(); 443 views::View::Layout();
435 444
436 if (title_row_ && !MaterialDesignController::IsSystemTrayMenuMaterial()) { 445 if (title_row_ && !UseMd()) {
437 // Always make sure the title row is bottom-aligned in non-MD. 446 // Always make sure the title row is bottom-aligned in non-MD.
438 gfx::Rect fbounds = title_row_->bounds(); 447 gfx::Rect fbounds = title_row_->bounds();
439 fbounds.set_y(height() - title_row_->height()); 448 fbounds.set_y(height() - title_row_->height());
440 title_row_->SetBoundsRect(fbounds); 449 title_row_->SetBoundsRect(fbounds);
441 } 450 }
442 } 451 }
443 452
444 void TrayDetailsView::OnPaintBorder(gfx::Canvas* canvas) { 453 void TrayDetailsView::OnPaintBorder(gfx::Canvas* canvas) {
445 if (scroll_border_) { 454 if (scroll_border_) {
446 int index = GetIndexOf(scroller_); 455 int index = GetIndexOf(scroller_);
447 if (index < child_count() - 1 && child_at(index + 1) != title_row_) 456 if (index < child_count() - 1 && child_at(index + 1) != title_row_)
448 scroll_border_->set_visible(true); 457 scroll_border_->set_visible(true);
449 else 458 else
450 scroll_border_->set_visible(false); 459 scroll_border_->set_visible(false);
451 } 460 }
452 461
453 views::View::OnPaintBorder(canvas); 462 views::View::OnPaintBorder(canvas);
454 } 463 }
455 464
456 } // namespace ash 465 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/system/tray/fixed_sized_scroll_view.cc ('k') | ui/views/controls/scrollbar/base_scroll_bar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698