| Index: ash/system/tray/system_tray_bubble.cc
|
| diff --git a/ash/system/tray/system_tray_bubble.cc b/ash/system/tray/system_tray_bubble.cc
|
| index 7d9aabdeee57bed3246561c7a994f6251d943cb0..2f83ab49de539a71120369ef81c322c9ab7b1235 100644
|
| --- a/ash/system/tray/system_tray_bubble.cc
|
| +++ b/ash/system/tray/system_tray_bubble.cc
|
| @@ -176,11 +176,14 @@ class SystemTrayBubbleBorder : public views::BubbleBorder {
|
| ARROW_TYPE_BOTTOM,
|
| };
|
|
|
| - SystemTrayBubbleBorder(views::View* owner, ArrowType arrow_type)
|
| + SystemTrayBubbleBorder(views::View* owner,
|
| + ArrowType arrow_type,
|
| + int arrow_offset)
|
| : views::BubbleBorder(views::BubbleBorder::BOTTOM_RIGHT,
|
| views::BubbleBorder::NO_SHADOW),
|
| owner_(owner),
|
| - arrow_type_(arrow_type) {
|
| + arrow_type_(arrow_type),
|
| + arrow_offset_(arrow_offset) {
|
| set_alignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
|
| }
|
|
|
| @@ -205,11 +208,12 @@ class SystemTrayBubbleBorder : public views::BubbleBorder {
|
|
|
| // Draw the arrow.
|
| if (arrow_type_ == ARROW_TYPE_BOTTOM) {
|
| - int left_base_x = base::i18n::IsRTL() ? kArrowWidth :
|
| - owner_->width() - kArrowPaddingFromRight - kArrowWidth;
|
| + int tip_x = base::i18n::IsRTL() ? arrow_offset_ :
|
| + owner_->width() - arrow_offset_;
|
| + int left_base_x = tip_x - kArrowWidth / 2;
|
| int left_base_y = y;
|
| - int tip_x = left_base_x + kArrowWidth / 2;
|
| int tip_y = left_base_y + kArrowHeight;
|
| +
|
| SkPath path;
|
| path.incReserve(4);
|
| path.moveTo(SkIntToScalar(left_base_x), SkIntToScalar(left_base_y));
|
| @@ -231,6 +235,7 @@ class SystemTrayBubbleBorder : public views::BubbleBorder {
|
|
|
| views::View* owner_;
|
| ArrowType arrow_type_;
|
| + const int arrow_offset_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SystemTrayBubbleBorder);
|
| };
|
| @@ -321,6 +326,16 @@ void SystemTrayBubbleView::OnMouseExited(const views::MouseEvent& event) {
|
| host_->RestartAutoCloseTimer();
|
| }
|
|
|
| +// SystemTrayBubble::InitParams
|
| +SystemTrayBubble::InitParams::InitParams(
|
| + SystemTrayBubble::AnchorType anchor_type)
|
| + : anchor(NULL),
|
| + anchor_type(anchor_type),
|
| + can_activate(false),
|
| + login_status(ash::user::LOGGED_IN_NONE),
|
| + arrow_offset(kArrowPaddingFromRight + kArrowWidth / 2) {
|
| +}
|
| +
|
| // SystemTrayBubble
|
|
|
| SystemTrayBubble::SystemTrayBubble(
|
| @@ -360,15 +375,13 @@ void SystemTrayBubble::UpdateView(
|
| bubble_widget_->GetContentsView()->Layout();
|
| }
|
|
|
| -void SystemTrayBubble::InitView(views::View* anchor,
|
| - AnchorType anchor_type,
|
| - bool can_activate,
|
| - ash::user::LoginStatus login_status) {
|
| +void SystemTrayBubble::InitView(const InitParams& init_params) {
|
| DCHECK(bubble_view_ == NULL);
|
| - anchor_type_ = anchor_type;
|
| - bubble_view_ = new SystemTrayBubbleView(anchor, this, can_activate);
|
| + anchor_type_ = init_params.anchor_type;
|
| + bubble_view_ = new SystemTrayBubbleView(
|
| + init_params.anchor, this, init_params.can_activate);
|
|
|
| - CreateItemViews(login_status);
|
| + CreateItemViews(init_params.login_status);
|
|
|
| DCHECK(bubble_widget_ == NULL);
|
| bubble_widget_ = views::BubbleDelegateView::CreateBubble(bubble_view_);
|
| @@ -381,8 +394,10 @@ void SystemTrayBubble::InitView(views::View* anchor,
|
| arrow_type = SystemTrayBubbleBorder::ARROW_TYPE_BOTTOM;
|
| else
|
| arrow_type = SystemTrayBubbleBorder::ARROW_TYPE_NONE;
|
| - bubble_view_->SetBubbleBorder(
|
| - new SystemTrayBubbleBorder(bubble_view_, arrow_type));
|
| +
|
| + SystemTrayBubbleBorder* bubble_border = new SystemTrayBubbleBorder(
|
| + bubble_view_, arrow_type, init_params.arrow_offset);
|
| + bubble_view_->SetBubbleBorder(bubble_border);
|
|
|
| bubble_widget_->AddObserver(this);
|
|
|
|
|