| Index: ash/launcher/launcher_button.cc
|
| diff --git a/ash/launcher/launcher_button.cc b/ash/launcher/launcher_button.cc
|
| index be5e381db4a3846f0cb6657d1af3f7471fb0c13c..77546f8e3e194808203984291bda204467ab1ff6 100644
|
| --- a/ash/launcher/launcher_button.cc
|
| +++ b/ash/launcher/launcher_button.cc
|
| @@ -7,6 +7,7 @@
|
| #include <algorithm>
|
|
|
| #include "ash/launcher/launcher_button_host.h"
|
| +#include "ash/wm/shelf_layout_manager.h"
|
| #include "grit/ash_resources.h"
|
| #include "skia/ext/image_operations.h"
|
| #include "ui/base/accessibility/accessible_view_state.h"
|
| @@ -112,20 +113,25 @@ bool LauncherButton::IconView::HitTestRect(const gfx::Rect& rect) const {
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // LauncherButton
|
|
|
| -LauncherButton* LauncherButton::Create(views::ButtonListener* listener,
|
| - LauncherButtonHost* host) {
|
| - LauncherButton* button = new LauncherButton(listener, host);
|
| +LauncherButton* LauncherButton::Create(
|
| + views::ButtonListener* listener,
|
| + LauncherButtonHost* host,
|
| + ShelfLayoutManager* shelf_layout_manager) {
|
| + LauncherButton* button =
|
| + new LauncherButton(listener, host, shelf_layout_manager);
|
| button->Init();
|
| return button;
|
| }
|
|
|
| LauncherButton::LauncherButton(views::ButtonListener* listener,
|
| - LauncherButtonHost* host)
|
| + LauncherButtonHost* host,
|
| + ShelfLayoutManager* shelf_layout_manager)
|
| : CustomButton(listener),
|
| host_(host),
|
| icon_view_(NULL),
|
| bar_(new BarView),
|
| - state_(STATE_NORMAL) {
|
| + state_(STATE_NORMAL),
|
| + shelf_layout_manager_(shelf_layout_manager) {
|
| set_accessibility_focusable(true);
|
|
|
| const gfx::ShadowValue kShadows[] = {
|
| @@ -269,7 +275,7 @@ void LauncherButton::Layout() {
|
| int x_offset = 0, y_offset = 0;
|
| gfx::Rect icon_bounds;
|
|
|
| - if (host_->GetShelfAlignment() == SHELF_ALIGNMENT_BOTTOM) {
|
| + if (shelf_layout_manager_->GetAlignment() == SHELF_ALIGNMENT_BOTTOM) {
|
| icon_bounds.SetRect(
|
| button_bounds.x(), button_bounds.y() + kIconPad,
|
| button_bounds.width(), kIconSize);
|
| @@ -283,7 +289,7 @@ void LauncherButton::Layout() {
|
| x_offset += kHopSpacing;
|
| }
|
|
|
| - if (host_->GetShelfAlignment() == SHELF_ALIGNMENT_LEFT)
|
| + if (shelf_layout_manager_->GetAlignment() == SHELF_ALIGNMENT_LEFT)
|
| x_offset = -x_offset;
|
| icon_bounds.Offset(x_offset, y_offset);
|
| icon_view_->SetBoundsRect(icon_bounds);
|
| @@ -347,7 +353,7 @@ LauncherButton::IconView* LauncherButton::CreateIconView() {
|
| }
|
|
|
| bool LauncherButton::IsShelfHorizontal() const {
|
| - return host_->GetShelfAlignment() == SHELF_ALIGNMENT_BOTTOM;
|
| + return shelf_layout_manager_->IsHorizontalAlignment();
|
| }
|
|
|
| void LauncherButton::UpdateState() {
|
| @@ -355,28 +361,39 @@ void LauncherButton::UpdateState() {
|
| bar_->SetVisible(false);
|
| } else {
|
| int bar_id;
|
| - if (IsShelfHorizontal()) {
|
| - if (state_ & STATE_ACTIVE)
|
| - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_ACTIVE;
|
| - else if (state_ & (STATE_HOVERED | STATE_FOCUSED | STATE_ATTENTION))
|
| - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_HOVER;
|
| - else
|
| - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_RUNNING;
|
| + if (state_ & STATE_ACTIVE) {
|
| + bar_id = shelf_layout_manager_->SelectValueForShelfAlignment(
|
| + IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_ACTIVE,
|
| + IDR_AURA_LAUNCHER_UNDERLINE_LEFT_ACTIVE,
|
| + IDR_AURA_LAUNCHER_UNDERLINE_RIGHT_ACTIVE);
|
| + } else if (state_ & (STATE_HOVERED | STATE_FOCUSED | STATE_ATTENTION)) {
|
| + bar_id = shelf_layout_manager_->SelectValueForShelfAlignment(
|
| + IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_HOVER,
|
| + IDR_AURA_LAUNCHER_UNDERLINE_LEFT_HOVER,
|
| + IDR_AURA_LAUNCHER_UNDERLINE_RIGHT_HOVER);
|
| } else {
|
| - if (state_ & STATE_ACTIVE)
|
| - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_LEFT_ACTIVE;
|
| - else if (state_ & (STATE_HOVERED | STATE_FOCUSED | STATE_ATTENTION))
|
| - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_LEFT_HOVER;
|
| - else
|
| - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_LEFT_RUNNING;
|
| + bar_id = shelf_layout_manager_->SelectValueForShelfAlignment(
|
| + IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_RUNNING,
|
| + IDR_AURA_LAUNCHER_UNDERLINE_LEFT_RUNNING,
|
| + IDR_AURA_LAUNCHER_UNDERLINE_RIGHT_RUNNING);
|
| }
|
| -
|
| ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| bar_->SetImage(rb.GetImageNamed(bar_id).ToImageSkia());
|
| bar_->SetVisible(true);
|
| }
|
| -
|
| - switch (host_->GetShelfAlignment()) {
|
| + bool rtl = base::i18n::IsRTL();
|
| + bar_->SetHorizontalAlignment(
|
| + shelf_layout_manager_->SelectValueForShelfAlignment(
|
| + views::ImageView::CENTER,
|
| + rtl ? views::ImageView::TRAILING : views::ImageView::LEADING,
|
| + rtl ? views::ImageView::LEADING : views::ImageView::TRAILING));
|
| + bar_->SetVerticalAlignment(
|
| + shelf_layout_manager_->SelectValueForShelfAlignment(
|
| + views::ImageView::TRAILING,
|
| + views::ImageView::CENTER,
|
| + views::ImageView::CENTER));
|
| +
|
| + switch (shelf_layout_manager_->GetAlignment()) {
|
| case SHELF_ALIGNMENT_BOTTOM:
|
| bar_->SetHorizontalAlignment(views::ImageView::CENTER);
|
| bar_->SetVerticalAlignment(views::ImageView::TRAILING);
|
| @@ -395,7 +412,10 @@ void LauncherButton::UpdateState() {
|
| break;
|
| }
|
|
|
| + // Force bar to layout as alignment may have changed but not bounds.
|
| + bar_->Layout();
|
| Layout();
|
| + bar_->SchedulePaint();
|
| SchedulePaint();
|
| }
|
|
|
|
|