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

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

Issue 2491033006: Adjust positioning of cros tray bubbles. (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
« no previous file with comments | « ash/common/system/tray/tray_background_view.h ('k') | ash/common/system/tray/tray_constants.cc » ('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) 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_background_view.h" 5 #include "ash/common/system/tray/tray_background_view.h"
6 6
7 #include "ash/common/material_design/material_design_controller.h" 7 #include "ash/common/material_design/material_design_controller.h"
8 #include "ash/common/shelf/shelf_constants.h" 8 #include "ash/common/shelf/shelf_constants.h"
9 #include "ash/common/shelf/wm_shelf.h" 9 #include "ash/common/shelf/wm_shelf.h"
10 #include "ash/common/shelf/wm_shelf_util.h" 10 #include "ash/common/shelf/wm_shelf_util.h"
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 views::BoxLayout::Orientation orientation = 238 views::BoxLayout::Orientation orientation =
239 is_horizontal ? views::BoxLayout::kHorizontal 239 is_horizontal ? views::BoxLayout::kHorizontal
240 : views::BoxLayout::kVertical; 240 : views::BoxLayout::kVertical;
241 const gfx::Insets insets( 241 const gfx::Insets insets(
242 ash::MaterialDesignController::IsShelfMaterial() 242 ash::MaterialDesignController::IsShelfMaterial()
243 ? is_horizontal ? gfx::Insets(0, kHitRegionPadding, 0, 243 ? is_horizontal ? gfx::Insets(0, kHitRegionPadding, 0,
244 kHitRegionPadding + kSeparatorWidth) 244 kHitRegionPadding + kSeparatorWidth)
245 : gfx::Insets(kHitRegionPadding, 0, 245 : gfx::Insets(kHitRegionPadding, 0,
246 kHitRegionPadding + kSeparatorWidth, 0) 246 kHitRegionPadding + kSeparatorWidth, 0)
247 : gfx::Insets(kBackgroundAdjustPadding)); 247 : gfx::Insets(kBackgroundAdjustPadding));
248 const gfx::Insets margin( 248 SetBorder(views::CreateEmptyBorder(insets));
249 is_horizontal ? gfx::Insets(cross_axis_margin_, main_axis_margin_)
250 : gfx::Insets(main_axis_margin_, cross_axis_margin_));
251 SetBorder(views::CreateEmptyBorder(insets + margin));
252 249
253 views::BoxLayout* layout = new views::BoxLayout(orientation, 0, 0, 0); 250 int horizontal_margin = main_axis_margin_;
251 int vertical_margin = cross_axis_margin_;
252 if (!is_horizontal)
253 std::swap(horizontal_margin, vertical_margin);
254 views::BoxLayout* layout =
255 new views::BoxLayout(orientation, horizontal_margin, vertical_margin, 0);
256
254 if (!ash::MaterialDesignController::IsShelfMaterial()) 257 if (!ash::MaterialDesignController::IsShelfMaterial())
255 layout->SetDefaultFlex(1); 258 layout->SetDefaultFlex(1);
256 layout->set_minimum_cross_axis_size(kTrayItemSize); 259 layout->set_minimum_cross_axis_size(kTrayItemSize);
257 views::View::SetLayoutManager(layout); 260 views::View::SetLayoutManager(layout);
258 261
259 PreferredSizeChanged(); 262 PreferredSizeChanged();
260 } 263 }
261 264
262 //////////////////////////////////////////////////////////////////////////////// 265 ////////////////////////////////////////////////////////////////////////////////
263 // TrayBackgroundView 266 // TrayBackgroundView
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 SetIsActive(false); 412 SetIsActive(false);
410 } 413 }
411 } 414 }
412 ActionableView::OnGestureEvent(event); 415 ActionableView::OnGestureEvent(event);
413 } 416 }
414 417
415 void TrayBackgroundView::SetContents(views::View* contents) { 418 void TrayBackgroundView::SetContents(views::View* contents) {
416 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); 419 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
417 AddChildView(contents); 420 AddChildView(contents);
418 } 421 }
422
419 void TrayBackgroundView::SetContentsBackground(bool draws_active) { 423 void TrayBackgroundView::SetContentsBackground(bool draws_active) {
420 background_ = new TrayBackground(this, draws_active); 424 background_ = new TrayBackground(this, draws_active);
421 tray_container_->set_background(background_); 425 tray_container_->set_background(background_);
422 } 426 }
423 427
424 void TrayBackgroundView::SetShelfAlignment(ShelfAlignment alignment) { 428 void TrayBackgroundView::SetShelfAlignment(ShelfAlignment alignment) {
425 shelf_alignment_ = alignment; 429 shelf_alignment_ = alignment;
426 tray_container_->SetAlignment(alignment); 430 tray_container_->SetAlignment(alignment);
427 } 431 }
428 432
(...skipping 20 matching lines...) Expand all
449 453
450 void TrayBackgroundView::HideTransformation() { 454 void TrayBackgroundView::HideTransformation() {
451 gfx::Transform transform; 455 gfx::Transform transform;
452 if (IsHorizontalAlignment(shelf_alignment_)) 456 if (IsHorizontalAlignment(shelf_alignment_))
453 transform.Translate(width(), 0.0f); 457 transform.Translate(width(), 0.0f);
454 else 458 else
455 transform.Translate(0.0f, height()); 459 transform.Translate(0.0f, height());
456 layer()->SetTransform(transform); 460 layer()->SetTransform(transform);
457 } 461 }
458 462
459 gfx::Rect TrayBackgroundView::GetBubbleAnchorRect(
460 views::Widget* anchor_widget,
461 TrayBubbleView::AnchorType anchor_type,
462 TrayBubbleView::AnchorAlignment anchor_alignment) const {
463 gfx::Rect rect;
464 if (anchor_widget && anchor_widget->IsVisible()) {
465 rect = anchor_widget->GetWindowBoundsInScreen();
466 if (anchor_type == TrayBubbleView::ANCHOR_TYPE_TRAY) {
467 if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) {
468 bool rtl = base::i18n::IsRTL();
469 rect.Inset(rtl ? kBubblePaddingHorizontalSide : 0,
470 kBubblePaddingHorizontalBottom,
471 rtl ? 0 : kBubblePaddingHorizontalSide, 0);
472 } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) {
473 rect.Inset(0, 0, kBubblePaddingVerticalSide + 4,
474 kBubblePaddingVerticalBottom);
475 } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) {
476 rect.Inset(kBubblePaddingVerticalSide, 0, 0,
477 kBubblePaddingVerticalBottom);
478 } else {
479 // TODO(bruthig) May need to handle other ANCHOR_ALIGNMENT_ values.
480 // ie. ANCHOR_ALIGNMENT_TOP
481 DCHECK(false) << "Unhandled anchor alignment.";
482 }
483 } else if (anchor_type == TrayBubbleView::ANCHOR_TYPE_BUBBLE) {
484 // Invert the offsets to align with the bubble below.
485 // Note that with the alternate shelf layout the tips are not shown and
486 // the offsets for left and right alignment do not need to be applied.
487 int vertical_alignment = 0;
488 int horizontal_alignment = kBubblePaddingVerticalBottom;
489 if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT)
490 rect.Inset(vertical_alignment, 0, 0, horizontal_alignment);
491 else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT)
492 rect.Inset(0, 0, vertical_alignment, horizontal_alignment);
493 } else {
494 DCHECK(false) << "Unhandled anchor type.";
495 }
496 } else {
497 WmWindow* target_root = anchor_widget
498 ? WmLookup::Get()
499 ->GetWindowForWidget(anchor_widget)
500 ->GetRootWindow()
501 : WmShell::Get()->GetPrimaryRootWindow();
502 rect = target_root->GetBounds();
503 if (anchor_type == TrayBubbleView::ANCHOR_TYPE_TRAY) {
504 if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) {
505 rect = gfx::Rect(
506 base::i18n::IsRTL()
507 ? kPaddingFromRightEdgeOfScreenBottomAlignment
508 : rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment,
509 rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 0, 0);
510 rect = target_root->ConvertRectToScreen(rect);
511 } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) {
512 rect = gfx::Rect(
513 kPaddingFromRightEdgeOfScreenBottomAlignment,
514 rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 1, 1);
515 rect = target_root->ConvertRectToScreen(rect);
516 } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) {
517 rect = gfx::Rect(
518 rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment,
519 rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 1, 1);
520 rect = target_root->ConvertRectToScreen(rect);
521 } else {
522 // TODO(bruthig) May need to handle other ANCHOR_ALIGNMENT_ values.
523 // ie. ANCHOR_ALIGNMENT_TOP
524 DCHECK(false) << "Unhandled anchor alignment.";
525 }
526 } else {
527 rect = gfx::Rect(
528 base::i18n::IsRTL()
529 ? kPaddingFromRightEdgeOfScreenBottomAlignment
530 : rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment,
531 rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 0, 0);
532 }
533 }
534 return rect;
535 }
536
537 TrayBubbleView::AnchorAlignment TrayBackgroundView::GetAnchorAlignment() const { 463 TrayBubbleView::AnchorAlignment TrayBackgroundView::GetAnchorAlignment() const {
538 if (shelf_alignment_ == SHELF_ALIGNMENT_LEFT) 464 if (shelf_alignment_ == SHELF_ALIGNMENT_LEFT)
539 return TrayBubbleView::ANCHOR_ALIGNMENT_LEFT; 465 return TrayBubbleView::ANCHOR_ALIGNMENT_LEFT;
540 if (shelf_alignment_ == SHELF_ALIGNMENT_RIGHT) 466 if (shelf_alignment_ == SHELF_ALIGNMENT_RIGHT)
541 return TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT; 467 return TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT;
542 return TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM; 468 return TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM;
543 } 469 }
544 470
545 void TrayBackgroundView::SetIsActive(bool is_active) { 471 void TrayBackgroundView::SetIsActive(bool is_active) {
546 if (is_active_ == is_active) 472 if (is_active_ == is_active)
(...skipping 19 matching lines...) Expand all
566 background_->set_alpha(alpha); 492 background_->set_alpha(alpha);
567 SchedulePaint(); 493 SchedulePaint();
568 } 494 }
569 } 495 }
570 496
571 void TrayBackgroundView::SetSeparatorVisibility(bool is_shown) { 497 void TrayBackgroundView::SetSeparatorVisibility(bool is_shown) {
572 is_separator_visible_ = is_shown; 498 is_separator_visible_ = is_shown;
573 SchedulePaint(); 499 SchedulePaint();
574 } 500 }
575 501
502 views::View* TrayBackgroundView::GetBubbleAnchor() const {
503 return tray_container_;
504 }
505
506 gfx::Insets TrayBackgroundView::GetBubbleAnchorInsets() const {
507 gfx::Insets anchor_insets = GetBubbleAnchor()->GetInsets();
508 gfx::Insets tray_bg_insets = GetInsets();
509 // TODO(estade): for reasons I don't understand, BubbleBorder distances the
510 // bubble by the arrow's "interior" thickness even when the paint type is
511 // PAINT_NONE.
512 const int kBigShadowArrowInteriorThickness = 9;
513 if (GetAnchorAlignment() == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) {
514 return gfx::Insets(kBigShadowArrowInteriorThickness - tray_bg_insets.top(),
515 anchor_insets.left(), -tray_bg_insets.bottom(),
516 anchor_insets.right());
517 } else {
518 return gfx::Insets(
519 anchor_insets.top(),
520 kBigShadowArrowInteriorThickness - tray_bg_insets.left(),
521 anchor_insets.bottom(),
522 kBigShadowArrowInteriorThickness - tray_bg_insets.right());
523 }
524 }
525
576 std::unique_ptr<views::InkDropMask> TrayBackgroundView::CreateInkDropMask() 526 std::unique_ptr<views::InkDropMask> TrayBackgroundView::CreateInkDropMask()
577 const { 527 const {
578 return base::MakeUnique<views::RoundRectInkDropMask>( 528 return base::MakeUnique<views::RoundRectInkDropMask>(
579 GetLocalBounds(), 529 GetLocalBounds(),
580 GetBackgroundBounds(GetContentsBounds(), shelf_alignment_), 530 GetBackgroundBounds(GetContentsBounds(), shelf_alignment_),
581 kTrayRoundedBorderRadius); 531 kTrayRoundedBorderRadius);
582 } 532 }
583 533
584 bool TrayBackgroundView::ShouldEnterPushedState(const ui::Event& event) { 534 bool TrayBackgroundView::ShouldEnterPushedState(const ui::Event& event) {
585 if (is_active_) 535 if (is_active_)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 paint.setAntiAlias(true); 582 paint.setAntiAlias(true);
633 583
634 const gfx::Rect bounds = horizontal_shelf ? gfx::Rect(x, y, width, height) 584 const gfx::Rect bounds = horizontal_shelf ? gfx::Rect(x, y, width, height)
635 : gfx::Rect(y, x, height, width); 585 : gfx::Rect(y, x, height, width);
636 gfx::RectF rect(gfx::ScaleRect(gfx::RectF(bounds), scale)); 586 gfx::RectF rect(gfx::ScaleRect(gfx::RectF(bounds), scale));
637 canvas->DrawLine(horizontal_shelf ? rect.top_right() : rect.bottom_left(), 587 canvas->DrawLine(horizontal_shelf ? rect.top_right() : rect.bottom_left(),
638 rect.bottom_right(), paint); 588 rect.bottom_right(), paint);
639 } 589 }
640 590
641 } // namespace ash 591 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/system/tray/tray_background_view.h ('k') | ash/common/system/tray/tray_constants.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698