Chromium Code Reviews| Index: ash/common/system/tray/tray_background_view.cc |
| diff --git a/ash/common/system/tray/tray_background_view.cc b/ash/common/system/tray/tray_background_view.cc |
| index 727b1ae57d1dd317b82a6d566d01702d389ecdf5..3be8603db379ecbbedd3c9c73d45aab71e699264 100644 |
| --- a/ash/common/system/tray/tray_background_view.cc |
| +++ b/ash/common/system/tray/tray_background_view.cc |
| @@ -233,12 +233,15 @@ void TrayBackgroundView::TrayContainer::UpdateLayout() { |
| : gfx::Insets(kHitRegionPadding, 0, |
| kHitRegionPadding + kSeparatorWidth, 0) |
| : gfx::Insets(kBackgroundAdjustPadding)); |
| - const gfx::Insets margin( |
| - is_horizontal ? gfx::Insets(cross_axis_margin_, main_axis_margin_) |
| - : gfx::Insets(main_axis_margin_, cross_axis_margin_)); |
| - SetBorder(views::CreateEmptyBorder(insets + margin)); |
| + SetBorder(views::CreateEmptyBorder(insets)); |
| + |
| + int horizontal_margin = main_axis_margin_; |
| + int vertical_margin = cross_axis_margin_; |
| + if (!is_horizontal) |
| + std::swap(horizontal_margin, vertical_margin); |
| + views::BoxLayout* layout = |
| + new views::BoxLayout(orientation, horizontal_margin, vertical_margin, 0); |
| - views::BoxLayout* layout = new views::BoxLayout(orientation, 0, 0, 0); |
| if (!ash::MaterialDesignController::IsShelfMaterial()) |
| layout->SetDefaultFlex(1); |
| layout->set_minimum_cross_axis_size(kTrayItemSize); |
| @@ -389,6 +392,7 @@ void TrayBackgroundView::SetContents(views::View* contents) { |
| SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
| AddChildView(contents); |
| } |
| + |
| void TrayBackgroundView::SetContentsBackground() { |
| background_ = new TrayBackground(this); |
| tray_container_->set_background(background_); |
| @@ -429,84 +433,6 @@ void TrayBackgroundView::HideTransformation() { |
| layer()->SetTransform(transform); |
| } |
| -gfx::Rect TrayBackgroundView::GetBubbleAnchorRect( |
| - views::Widget* anchor_widget, |
| - TrayBubbleView::AnchorType anchor_type, |
| - TrayBubbleView::AnchorAlignment anchor_alignment) const { |
| - gfx::Rect rect; |
| - if (anchor_widget && anchor_widget->IsVisible()) { |
| - rect = anchor_widget->GetWindowBoundsInScreen(); |
| - if (anchor_type == TrayBubbleView::ANCHOR_TYPE_TRAY) { |
| - if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) { |
| - bool rtl = base::i18n::IsRTL(); |
| - rect.Inset(rtl ? kBubblePaddingHorizontalSide : 0, |
| - kBubblePaddingHorizontalBottom, |
| - rtl ? 0 : kBubblePaddingHorizontalSide, 0); |
| - } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) { |
| - rect.Inset(0, 0, kBubblePaddingVerticalSide + 4, |
| - kBubblePaddingVerticalBottom); |
| - } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) { |
| - rect.Inset(kBubblePaddingVerticalSide, 0, 0, |
| - kBubblePaddingVerticalBottom); |
| - } else { |
| - // TODO(bruthig) May need to handle other ANCHOR_ALIGNMENT_ values. |
| - // ie. ANCHOR_ALIGNMENT_TOP |
| - DCHECK(false) << "Unhandled anchor alignment."; |
| - } |
| - } else if (anchor_type == TrayBubbleView::ANCHOR_TYPE_BUBBLE) { |
| - // Invert the offsets to align with the bubble below. |
| - // Note that with the alternate shelf layout the tips are not shown and |
| - // the offsets for left and right alignment do not need to be applied. |
| - int vertical_alignment = 0; |
| - int horizontal_alignment = kBubblePaddingVerticalBottom; |
| - if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) |
| - rect.Inset(vertical_alignment, 0, 0, horizontal_alignment); |
| - else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) |
| - rect.Inset(0, 0, vertical_alignment, horizontal_alignment); |
| - } else { |
| - DCHECK(false) << "Unhandled anchor type."; |
| - } |
| - } else { |
| - WmWindow* target_root = anchor_widget |
| - ? WmLookup::Get() |
| - ->GetWindowForWidget(anchor_widget) |
| - ->GetRootWindow() |
| - : WmShell::Get()->GetPrimaryRootWindow(); |
| - rect = target_root->GetBounds(); |
| - if (anchor_type == TrayBubbleView::ANCHOR_TYPE_TRAY) { |
| - if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) { |
| - rect = gfx::Rect( |
| - base::i18n::IsRTL() |
| - ? kPaddingFromRightEdgeOfScreenBottomAlignment |
| - : rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment, |
| - rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 0, 0); |
| - rect = target_root->ConvertRectToScreen(rect); |
| - } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) { |
| - rect = gfx::Rect( |
| - kPaddingFromRightEdgeOfScreenBottomAlignment, |
| - rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 1, 1); |
| - rect = target_root->ConvertRectToScreen(rect); |
| - } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) { |
| - rect = gfx::Rect( |
| - rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment, |
| - rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 1, 1); |
| - rect = target_root->ConvertRectToScreen(rect); |
| - } else { |
| - // TODO(bruthig) May need to handle other ANCHOR_ALIGNMENT_ values. |
| - // ie. ANCHOR_ALIGNMENT_TOP |
| - DCHECK(false) << "Unhandled anchor alignment."; |
| - } |
| - } else { |
| - rect = gfx::Rect( |
| - base::i18n::IsRTL() |
| - ? kPaddingFromRightEdgeOfScreenBottomAlignment |
| - : rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment, |
| - rect.height() - kPaddingFromBottomOfScreenBottomAlignment, 0, 0); |
| - } |
| - } |
| - return rect; |
| -} |
| - |
| TrayBubbleView::AnchorAlignment TrayBackgroundView::GetAnchorAlignment() const { |
| if (shelf_alignment_ == SHELF_ALIGNMENT_LEFT) |
| return TrayBubbleView::ANCHOR_ALIGNMENT_LEFT; |
| @@ -541,6 +467,29 @@ void TrayBackgroundView::SetSeparatorVisibility(bool is_shown) { |
| SchedulePaint(); |
| } |
| +views::View* TrayBackgroundView::GetBubbleAnchor() const { |
| + return tray_container_; |
| +} |
| + |
| +gfx::Insets TrayBackgroundView::GetBubbleAnchorInsets() const { |
| + gfx::Insets anchor_insets = GetBubbleAnchor()->GetInsets(); |
| + gfx::Insets tray_bg_insets = GetInsets(); |
| + const bool bottom = |
| + GetAnchorAlignment() == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM; |
| + // TODO(estade): for reasons I don't understand, BubbleBorder distances the |
|
msw
2016/11/15 02:59:38
What's the action on this TODO? Is it worth keepin
Evan Stade
2016/11/15 17:01:29
I think the comment has value to explain what's go
|
| + // bubble by the arrow's "interior" thickness even when the paint type is |
| + // PAINT_NONE. |
| + const int kBigShadowArrowInteriorThickness = 9; |
| + return gfx::Insets( |
|
msw
2016/11/15 02:59:38
This may be more legible with if (bottom) return .
Evan Stade
2016/11/15 17:01:29
done (still not super legible though :)
|
| + bottom ? kBigShadowArrowInteriorThickness - tray_bg_insets.top() |
| + : anchor_insets.top(), |
| + bottom ? anchor_insets.left() |
| + : kBigShadowArrowInteriorThickness - tray_bg_insets.left(), |
| + bottom ? -tray_bg_insets.bottom() : anchor_insets.bottom(), |
| + bottom ? anchor_insets.right() |
| + : kBigShadowArrowInteriorThickness - tray_bg_insets.right()); |
| +} |
| + |
| void TrayBackgroundView::OnPaint(gfx::Canvas* canvas) { |
| ActionableView::OnPaint(canvas); |
| if (!MaterialDesignController::IsShelfMaterial() || |