diff options
author | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-23 21:20:24 +0000 |
---|---|---|
committer | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-23 21:20:24 +0000 |
commit | ccfd691d2bd16c1db2324ec36db225630f551ee9 (patch) | |
tree | 113c53ab11e0782acb643eb6807729d3fcfb0a7c /ash/launcher | |
parent | 8d7aa0159fc1c19e0a82a3366e5354de356a2831 (diff) | |
download | chromium_src-ccfd691d2bd16c1db2324ec36db225630f551ee9.zip chromium_src-ccfd691d2bd16c1db2324ec36db225630f551ee9.tar.gz chromium_src-ccfd691d2bd16c1db2324ec36db225630f551ee9.tar.bz2 |
ash: Rename LauncherButton to ShelfButton.
* Move launcher_button.* from launcher/ to shelf/
* Rename to shelf_button.*
BUG=248353
TEST=None, no functional changes
R=jamescook@chromium.org,harrym@chromium.org
Review URL: https://codereview.chromium.org/83953003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236982 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/launcher')
-rw-r--r-- | ash/launcher/launcher_button.cc | 586 | ||||
-rw-r--r-- | ash/launcher/launcher_button.h | 159 | ||||
-rw-r--r-- | ash/launcher/launcher_unittest.cc | 14 |
3 files changed, 7 insertions, 752 deletions
diff --git a/ash/launcher/launcher_button.cc b/ash/launcher/launcher_button.cc deleted file mode 100644 index 469f4fc..0000000 --- a/ash/launcher/launcher_button.cc +++ /dev/null @@ -1,586 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/launcher/launcher_button.h" - -#include <algorithm> - -#include "ash/ash_switches.h" -#include "ash/shelf/shelf_button_host.h" -#include "ash/shelf/shelf_layout_manager.h" -#include "grit/ash_resources.h" -#include "skia/ext/image_operations.h" -#include "ui/base/accessibility/accessible_view_state.h" -#include "ui/base/resource/resource_bundle.h" -#include "ui/compositor/layer.h" -#include "ui/compositor/scoped_layer_animation_settings.h" -#include "ui/events/event_constants.h" -#include "ui/gfx/animation/animation_delegate.h" -#include "ui/gfx/animation/throb_animation.h" -#include "ui/gfx/canvas.h" -#include "ui/gfx/image/image.h" -#include "ui/gfx/image/image_skia_operations.h" -#include "ui/gfx/skbitmap_operations.h" -#include "ui/views/controls/image_view.h" - -namespace { - -// Size of the bar. This is along the opposite axis of the shelf. For example, -// if the shelf is aligned horizontally then this is the height of the bar. -const int kBarSize = 3; -const int kIconSize = 32; -const int kHopSpacing = 2; -const int kIconPad = 8; -const int kAlternateIconPad = 5; -const int kAlternateIconPadVertical = 6; -const int kHopUpMS = 0; -const int kHopDownMS = 200; -const int kAttentionThrobDurationMS = 800; - -bool ShouldHop(int state) { - return state & ash::internal::LauncherButton::STATE_HOVERED || - state & ash::internal::LauncherButton::STATE_ACTIVE || - state & ash::internal::LauncherButton::STATE_FOCUSED; -} - -// Simple AnimationDelegate that owns a single ThrobAnimation instance to -// keep all Draw Attention animations in sync. -class LauncherButtonAnimation : public gfx::AnimationDelegate { - public: - class Observer { - public: - virtual void AnimationProgressed() = 0; - - protected: - virtual ~Observer() {} - }; - - static LauncherButtonAnimation* GetInstance() { - static LauncherButtonAnimation* s_instance = new LauncherButtonAnimation(); - return s_instance; - } - - void AddObserver(Observer* observer) { - observers_.AddObserver(observer); - } - - void RemoveObserver(Observer* observer) { - observers_.RemoveObserver(observer); - if (!observers_.might_have_observers()) - animation_.Stop(); - } - - int GetAlpha() { - return GetThrobAnimation().CurrentValueBetween(0, 255); - } - - double GetAnimation() { - return GetThrobAnimation().GetCurrentValue(); - } - - private: - LauncherButtonAnimation() - : animation_(this) { - animation_.SetThrobDuration(kAttentionThrobDurationMS); - animation_.SetTweenType(gfx::Tween::SMOOTH_IN_OUT); - } - - virtual ~LauncherButtonAnimation() { - } - - gfx::ThrobAnimation& GetThrobAnimation() { - if (!animation_.is_animating()) { - animation_.Reset(); - animation_.StartThrobbing(-1 /*throb indefinitely*/); - } - return animation_; - } - - // gfx::AnimationDelegate - virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE { - if (animation != &animation_) - return; - if (!animation_.is_animating()) - return; - FOR_EACH_OBSERVER(Observer, observers_, AnimationProgressed()); - } - - gfx::ThrobAnimation animation_; - ObserverList<Observer> observers_; - - DISALLOW_COPY_AND_ASSIGN(LauncherButtonAnimation); -}; - -} // namespace - -namespace ash { -namespace internal { - -//////////////////////////////////////////////////////////////////////////////// -// LauncherButton::BarView - -class LauncherButton::BarView : public views::ImageView, - public LauncherButtonAnimation::Observer { - public: - BarView(LauncherButton* host) - : host_(host), - show_attention_(false) { - } - - virtual ~BarView() { - if (show_attention_) - LauncherButtonAnimation::GetInstance()->RemoveObserver(this); - } - - // View - virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE { - // Allow Mouse...() messages to go to the parent view. - return false; - } - - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { - if (show_attention_) { - int alpha = LauncherButtonAnimation::GetInstance()->GetAlpha(); - canvas->SaveLayerAlpha(alpha); - views::ImageView::OnPaint(canvas); - canvas->Restore(); - } else { - views::ImageView::OnPaint(canvas); - } - } - - // LauncherButtonAnimation::Observer - virtual void AnimationProgressed() OVERRIDE { - UpdateBounds(); - SchedulePaint(); - } - - void SetBarBoundsRect(const gfx::Rect& bounds) { - base_bounds_ = bounds; - UpdateBounds(); - } - - void ShowAttention(bool show) { - if (show_attention_ != show) { - show_attention_ = show; - if (show_attention_) - LauncherButtonAnimation::GetInstance()->AddObserver(this); - else - LauncherButtonAnimation::GetInstance()->RemoveObserver(this); - } - UpdateBounds(); - } - - private: - void UpdateBounds() { - gfx::Rect bounds = base_bounds_; - if (show_attention_) { - // Scale from .35 to 1.0 of the total width (which is wider than the - // visible width of the image, so the animation "rests" briefly at full - // visible width. - double animation = LauncherButtonAnimation::GetInstance()->GetAnimation(); - double scale = (.35 + .65 * animation); - if (host_->shelf_layout_manager()->GetAlignment() == - SHELF_ALIGNMENT_BOTTOM) { - bounds.set_width(base_bounds_.width() * scale); - int x_offset = (base_bounds_.width() - bounds.width()) / 2; - bounds.set_x(base_bounds_.x() + x_offset); - } else { - bounds.set_height(base_bounds_.height() * scale); - int y_offset = (base_bounds_.height() - bounds.height()) / 2; - bounds.set_y(base_bounds_.y() + y_offset); - } - } - SetBoundsRect(bounds); - } - - LauncherButton* host_; - bool show_attention_; - gfx::Rect base_bounds_; - - DISALLOW_COPY_AND_ASSIGN(BarView); -}; - -//////////////////////////////////////////////////////////////////////////////// -// LauncherButton::IconView - -LauncherButton::IconView::IconView() : icon_size_(kIconSize) { -} - -LauncherButton::IconView::~IconView() { -} - -bool LauncherButton::IconView::HitTestRect(const gfx::Rect& rect) const { - // Return false so that LauncherButton gets all the mouse events. - return false; -} - -//////////////////////////////////////////////////////////////////////////////// -// LauncherButton - -LauncherButton* LauncherButton::Create( - views::ButtonListener* listener, - ShelfButtonHost* host, - ShelfLayoutManager* shelf_layout_manager) { - LauncherButton* button = - new LauncherButton(listener, host, shelf_layout_manager); - button->Init(); - return button; -} - -LauncherButton::LauncherButton(views::ButtonListener* listener, - ShelfButtonHost* host, - ShelfLayoutManager* shelf_layout_manager) - : CustomButton(listener), - host_(host), - icon_view_(NULL), - bar_(new BarView(this)), - state_(STATE_NORMAL), - shelf_layout_manager_(shelf_layout_manager), - destroyed_flag_(NULL) { - set_accessibility_focusable(true); - - const gfx::ShadowValue kShadows[] = { - gfx::ShadowValue(gfx::Point(0, 2), 0, SkColorSetARGB(0x1A, 0, 0, 0)), - gfx::ShadowValue(gfx::Point(0, 3), 1, SkColorSetARGB(0x1A, 0, 0, 0)), - gfx::ShadowValue(gfx::Point(0, 0), 1, SkColorSetARGB(0x54, 0, 0, 0)), - }; - icon_shadows_.assign(kShadows, kShadows + arraysize(kShadows)); - - AddChildView(bar_); -} - -LauncherButton::~LauncherButton() { - if (destroyed_flag_) - *destroyed_flag_ = true; -} - -void LauncherButton::SetShadowedImage(const gfx::ImageSkia& image) { - icon_view_->SetImage(gfx::ImageSkiaOperations::CreateImageWithDropShadow( - image, icon_shadows_)); -} - -void LauncherButton::SetImage(const gfx::ImageSkia& image) { - if (image.isNull()) { - // TODO: need an empty image. - icon_view_->SetImage(image); - return; - } - - if (icon_view_->icon_size() == 0) { - SetShadowedImage(image); - return; - } - - // Resize the image maintaining our aspect ratio. - int pref = icon_view_->icon_size(); - float aspect_ratio = - static_cast<float>(image.width()) / static_cast<float>(image.height()); - int height = pref; - int width = static_cast<int>(aspect_ratio * height); - if (width > pref) { - width = pref; - height = static_cast<int>(width / aspect_ratio); - } - - if (width == image.width() && height == image.height()) { - SetShadowedImage(image); - return; - } - - SetShadowedImage(gfx::ImageSkiaOperations::CreateResizedImage(image, - skia::ImageOperations::RESIZE_BEST, gfx::Size(width, height))); -} - -const gfx::ImageSkia& LauncherButton::GetImage() const { - return icon_view_->GetImage(); -} - -void LauncherButton::AddState(State state) { - if (!(state_ & state)) { - if (!ash::switches::UseAlternateShelfLayout() && - (ShouldHop(state) || !ShouldHop(state_))) { - ui::ScopedLayerAnimationSettings scoped_setter( - icon_view_->layer()->GetAnimator()); - scoped_setter.SetTransitionDuration( - base::TimeDelta::FromMilliseconds(kHopUpMS)); - } - state_ |= state; - Layout(); - if (state & STATE_ATTENTION) - bar_->ShowAttention(true); - } -} - -void LauncherButton::ClearState(State state) { - if (state_ & state) { - if (!ash::switches::UseAlternateShelfLayout() && - (!ShouldHop(state) || ShouldHop(state_))) { - ui::ScopedLayerAnimationSettings scoped_setter( - icon_view_->layer()->GetAnimator()); - scoped_setter.SetTweenType(gfx::Tween::LINEAR); - scoped_setter.SetTransitionDuration( - base::TimeDelta::FromMilliseconds(kHopDownMS)); - } - state_ &= ~state; - Layout(); - if (state & STATE_ATTENTION) - bar_->ShowAttention(false); - } -} - -gfx::Rect LauncherButton::GetIconBounds() const { - return icon_view_->bounds(); -} - -void LauncherButton::ShowContextMenu(const gfx::Point& p, - ui::MenuSourceType source_type) { - if (!context_menu_controller()) - return; - - bool destroyed = false; - destroyed_flag_ = &destroyed; - - CustomButton::ShowContextMenu(p, source_type); - - if (!destroyed) { - destroyed_flag_ = NULL; - // The menu will not propagate mouse events while its shown. To address, - // the hover state gets cleared once the menu was shown (and this was not - // destroyed). - ClearState(STATE_HOVERED); - } -} - -bool LauncherButton::OnMousePressed(const ui::MouseEvent& event) { - CustomButton::OnMousePressed(event); - host_->PointerPressedOnButton(this, ShelfButtonHost::MOUSE, event); - return true; -} - -void LauncherButton::OnMouseReleased(const ui::MouseEvent& event) { - CustomButton::OnMouseReleased(event); - host_->PointerReleasedOnButton(this, ShelfButtonHost::MOUSE, false); -} - -void LauncherButton::OnMouseCaptureLost() { - ClearState(STATE_HOVERED); - host_->PointerReleasedOnButton(this, ShelfButtonHost::MOUSE, true); - CustomButton::OnMouseCaptureLost(); -} - -bool LauncherButton::OnMouseDragged(const ui::MouseEvent& event) { - CustomButton::OnMouseDragged(event); - host_->PointerDraggedOnButton(this, ShelfButtonHost::MOUSE, event); - return true; -} - -void LauncherButton::OnMouseMoved(const ui::MouseEvent& event) { - CustomButton::OnMouseMoved(event); - host_->MouseMovedOverButton(this); -} - -void LauncherButton::OnMouseEntered(const ui::MouseEvent& event) { - AddState(STATE_HOVERED); - CustomButton::OnMouseEntered(event); - host_->MouseEnteredButton(this); -} - -void LauncherButton::OnMouseExited(const ui::MouseEvent& event) { - ClearState(STATE_HOVERED); - CustomButton::OnMouseExited(event); - host_->MouseExitedButton(this); -} - -void LauncherButton::GetAccessibleState(ui::AccessibleViewState* state) { - state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; - state->name = host_->GetAccessibleName(this); -} - -void LauncherButton::Layout() { - const gfx::Rect button_bounds(GetContentsBounds()); - int icon_pad = kIconPad; - if (ash::switches::UseAlternateShelfLayout()) { - icon_pad = - shelf_layout_manager_->GetAlignment() != SHELF_ALIGNMENT_BOTTOM ? - kAlternateIconPadVertical : kAlternateIconPad; - } - int x_offset = shelf_layout_manager_->PrimaryAxisValue(0, icon_pad); - int y_offset = shelf_layout_manager_->PrimaryAxisValue(icon_pad, 0); - - int icon_width = std::min(kIconSize, - button_bounds.width() - x_offset); - int icon_height = std::min(kIconSize, - button_bounds.height() - y_offset); - - // If on the left or top 'invert' the inset so the constant gap is on - // the interior (towards the center of display) edge of the shelf. - if (SHELF_ALIGNMENT_LEFT == shelf_layout_manager_->GetAlignment()) - x_offset = button_bounds.width() - (kIconSize + icon_pad); - - if (SHELF_ALIGNMENT_TOP == shelf_layout_manager_->GetAlignment()) - y_offset = button_bounds.height() - (kIconSize + icon_pad); - - if (ShouldHop(state_) && !ash::switches::UseAlternateShelfLayout()) { - x_offset += shelf_layout_manager_->SelectValueForShelfAlignment( - 0, kHopSpacing, -kHopSpacing, 0); - y_offset += shelf_layout_manager_->SelectValueForShelfAlignment( - -kHopSpacing, 0, 0, kHopSpacing); - } - - // Center icon with respect to the secondary axis, and ensure - // that the icon doesn't occlude the bar highlight. - if (shelf_layout_manager_->IsHorizontalAlignment()) { - x_offset = std::max(0, button_bounds.width() - icon_width) / 2; - if (y_offset + icon_height + kBarSize > button_bounds.height()) - icon_height = button_bounds.height() - (y_offset + kBarSize); - } else { - y_offset = std::max(0, button_bounds.height() - icon_height) / 2; - if (x_offset + icon_width + kBarSize > button_bounds.width()) - icon_width = button_bounds.width() - (x_offset + kBarSize); - } - - icon_view_->SetBoundsRect(gfx::Rect( - button_bounds.x() + x_offset, - button_bounds.y() + y_offset, - icon_width, - icon_height)); - - // Icon size has been incorrect when running - // PanelLayoutManagerTest.PanelAlignmentSecondDisplay on valgrind bot, see - // http://crbug.com/234854. - DCHECK_LE(icon_width, kIconSize); - DCHECK_LE(icon_height, kIconSize); - - bar_->SetBarBoundsRect(button_bounds); - - UpdateState(); -} - -void LauncherButton::ChildPreferredSizeChanged(views::View* child) { - Layout(); -} - -void LauncherButton::OnFocus() { - AddState(STATE_FOCUSED); - CustomButton::OnFocus(); -} - -void LauncherButton::OnBlur() { - ClearState(STATE_FOCUSED); - CustomButton::OnBlur(); -} - -void LauncherButton::OnGestureEvent(ui::GestureEvent* event) { - switch (event->type()) { - case ui::ET_GESTURE_TAP_DOWN: - AddState(STATE_HOVERED); - return CustomButton::OnGestureEvent(event); - case ui::ET_GESTURE_END: - ClearState(STATE_HOVERED); - return CustomButton::OnGestureEvent(event); - case ui::ET_GESTURE_SCROLL_BEGIN: - host_->PointerPressedOnButton(this, ShelfButtonHost::TOUCH, *event); - event->SetHandled(); - return; - case ui::ET_GESTURE_SCROLL_UPDATE: - host_->PointerDraggedOnButton(this, ShelfButtonHost::TOUCH, *event); - event->SetHandled(); - return; - case ui::ET_GESTURE_SCROLL_END: - case ui::ET_SCROLL_FLING_START: - host_->PointerReleasedOnButton(this, ShelfButtonHost::TOUCH, false); - event->SetHandled(); - return; - default: - return CustomButton::OnGestureEvent(event); - } -} - -void LauncherButton::Init() { - icon_view_ = CreateIconView(); - - // TODO: refactor the layers so each button doesn't require 2. - icon_view_->SetPaintToLayer(true); - icon_view_->SetFillsBoundsOpaquely(false); - icon_view_->SetHorizontalAlignment(views::ImageView::CENTER); - icon_view_->SetVerticalAlignment(views::ImageView::LEADING); - - AddChildView(icon_view_); -} - -LauncherButton::IconView* LauncherButton::CreateIconView() { - return new IconView; -} - -bool LauncherButton::IsShelfHorizontal() const { - return shelf_layout_manager_->IsHorizontalAlignment(); -} - -void LauncherButton::UpdateState() { - UpdateBar(); - - icon_view_->SetHorizontalAlignment( - shelf_layout_manager_->PrimaryAxisValue(views::ImageView::CENTER, - views::ImageView::LEADING)); - icon_view_->SetVerticalAlignment( - shelf_layout_manager_->PrimaryAxisValue(views::ImageView::LEADING, - views::ImageView::CENTER)); - SchedulePaint(); -} - -void LauncherButton::UpdateBar() { - if (state_ & STATE_HIDDEN) { - bar_->SetVisible(false); - return; - } - - int bar_id = 0; - if (ash::switches::UseAlternateShelfLayout()) { - if (state_ & STATE_ACTIVE) - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_ACTIVE_ALTERNATE; - else if (state_ & STATE_RUNNING) - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_RUNNING_ALTERNATE; - } else { - if (state_ & (STATE_ACTIVE | STATE_ATTENTION)) - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_ACTIVE; - else if (state_ & (STATE_HOVERED | STATE_FOCUSED)) - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_HOVER; - else - bar_id = IDR_AURA_LAUNCHER_UNDERLINE_RUNNING; - } - - if (bar_id != 0) { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - const gfx::ImageSkia* image = rb.GetImageNamed(bar_id).ToImageSkia(); - if (shelf_layout_manager_->GetAlignment() == SHELF_ALIGNMENT_BOTTOM) { - bar_->SetImage(*image); - } else { - bar_->SetImage(gfx::ImageSkiaOperations::CreateRotatedImage(*image, - shelf_layout_manager_->SelectValueForShelfAlignment( - SkBitmapOperations::ROTATION_90_CW, - SkBitmapOperations::ROTATION_90_CW, - SkBitmapOperations::ROTATION_270_CW, - SkBitmapOperations::ROTATION_180_CW))); - } - bar_->SetHorizontalAlignment( - shelf_layout_manager_->SelectValueForShelfAlignment( - views::ImageView::CENTER, - views::ImageView::LEADING, - views::ImageView::TRAILING, - views::ImageView::CENTER)); - bar_->SetVerticalAlignment( - shelf_layout_manager_->SelectValueForShelfAlignment( - views::ImageView::TRAILING, - views::ImageView::CENTER, - views::ImageView::CENTER, - views::ImageView::LEADING)); - bar_->SchedulePaint(); - } - - bar_->SetVisible(bar_id != 0 && state_ != STATE_NORMAL); -} - -} // namespace internal -} // namespace ash diff --git a/ash/launcher/launcher_button.h b/ash/launcher/launcher_button.h deleted file mode 100644 index b148fed..0000000 --- a/ash/launcher/launcher_button.h +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_LAUNCHER_LAUNCHER_BUTTON_H_ -#define ASH_LAUNCHER_LAUNCHER_BUTTON_H_ - -#include "ash/ash_export.h" -#include "ui/gfx/shadow_value.h" -#include "ui/views/controls/button/custom_button.h" -#include "ui/views/controls/image_view.h" - -namespace ash { -namespace internal { - -class ShelfButtonHost; -class ShelfLayoutManager; - -// Button used for items on the launcher, except for the AppList. -class ASH_EXPORT LauncherButton : public views::CustomButton { - public: - // Used to indicate the current state of the button. - enum State { - // Nothing special. Usually represents an app shortcut item with no running - // instance. - STATE_NORMAL = 0, - // Button has mouse hovering on it. - STATE_HOVERED = 1 << 0, - // Underlying LauncherItem has a running instance. - STATE_RUNNING = 1 << 1, - // Underlying LauncherItem is active (i.e. has focus). - STATE_ACTIVE = 1 << 2, - // Underlying LauncherItem needs user's attention. - STATE_ATTENTION = 1 << 3, - STATE_FOCUSED = 1 << 4, - // Hide the status (temporarily for some animations). - STATE_HIDDEN = 1 << 5, - }; - - virtual ~LauncherButton(); - - // Called to create an instance of a LauncherButton. - static LauncherButton* Create(views::ButtonListener* listener, - ShelfButtonHost* host, - ShelfLayoutManager* shelf_layout_manager); - - // Sets the image to display for this entry. - void SetImage(const gfx::ImageSkia& image); - - // Retrieve the image to show proxy operations. - const gfx::ImageSkia& GetImage() const; - - // |state| is or'd into the current state. - void AddState(State state); - void ClearState(State state); - int state() const { return state_; } - const ShelfLayoutManager* shelf_layout_manager() const { - return shelf_layout_manager_; - } - - // Returns the bounds of the icon. - gfx::Rect GetIconBounds() const; - - // Overrides to views::CustomButton: - virtual void ShowContextMenu(const gfx::Point& p, - ui::MenuSourceType source_type) OVERRIDE; - - // View override - needed by unit test. - virtual void OnMouseCaptureLost() OVERRIDE; - - protected: - LauncherButton(views::ButtonListener* listener, - ShelfButtonHost* host, - ShelfLayoutManager* shelf_layout_manager); - - // Class that draws the icon part of a button, so it can be animated - // independently of the rest. This can be subclassed to provide a custom - // implementation, by overriding CreateIconView(). - class IconView : public views::ImageView { - public: - IconView(); - virtual ~IconView(); - - void set_icon_size(int icon_size) { icon_size_ = icon_size; } - int icon_size() const { return icon_size_; } - - // views::View overrides. - virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE; - - private: - // Set to non-zero to force icons to be resized to fit within a square, - // while maintaining original proportions. - int icon_size_; - - DISALLOW_COPY_AND_ASSIGN(IconView); - }; - - // View overrides: - virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; - virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; - virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; - virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE; - virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; - virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE; - virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; - virtual void Layout() OVERRIDE; - virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE; - virtual void OnFocus() OVERRIDE; - virtual void OnBlur() OVERRIDE; - - // ui::EventHandler overrides: - virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; - - // Sets the icon image with a shadow. - void SetShadowedImage(const gfx::ImageSkia& bitmap); - // Override for custom initialization. - virtual void Init(); - // Override to subclass IconView. - virtual IconView* CreateIconView(); - IconView* icon_view() const { return icon_view_; } - ShelfButtonHost* host() const { return host_; } - - private: - class BarView; - - // Returns true if the shelf is horizontal. If this returns false the shelf is - // vertical. - bool IsShelfHorizontal() const; - - // Updates the parts of the button to reflect the current |state_| and - // alignment. This may add or remove views, layout and paint. - void UpdateState(); - - // Updates the status bar (bitmap, orientation, visibility). - void UpdateBar(); - - ShelfButtonHost* host_; - IconView* icon_view_; - // Draws a bar underneath the image to represent the state of the application. - BarView* bar_; - // The current state of the application, multiple values of AppState are or'd - // together. - int state_; - - ShelfLayoutManager* shelf_layout_manager_; - - gfx::ShadowValues icon_shadows_; - - // If non-null the destuctor sets this to true. This is set while the menu is - // showing and used to detect if the menu was deleted while running. - bool* destroyed_flag_; - - DISALLOW_COPY_AND_ASSIGN(LauncherButton); -}; - -} // namespace internal -} // namespace ash - -#endif // ASH_LAUNCHER_LAUNCHER_BUTTON_H_ diff --git a/ash/launcher/launcher_unittest.cc b/ash/launcher/launcher_unittest.cc index 32dafb6..6359508 100644 --- a/ash/launcher/launcher_unittest.cc +++ b/ash/launcher/launcher_unittest.cc @@ -3,8 +3,8 @@ // found in the LICENSE file. #include "ash/launcher/launcher.h" -#include "ash/launcher/launcher_button.h" #include "ash/launcher/launcher_item_delegate_manager.h" +#include "ash/shelf/shelf_button.h" #include "ash/shelf/shelf_model.h" #include "ash/shelf/shelf_view.h" #include "ash/shelf/shelf_widget.h" @@ -27,7 +27,7 @@ typedef ash::test::AshTestBase LauncherTest; using ash::internal::ShelfView; -using ash::internal::LauncherButton; +using ash::internal::ShelfButton; namespace ash { @@ -101,8 +101,8 @@ TEST_F(LauncherTest, StatusReflection) { item.status = STATUS_RUNNING; int index = shelf_model()->Add(item); ASSERT_EQ(++button_count, test_api()->GetButtonCount()); - LauncherButton* button = test_api()->GetButton(index); - EXPECT_EQ(LauncherButton::STATE_RUNNING, button->state()); + ShelfButton* button = test_api()->GetButton(index); + EXPECT_EQ(ShelfButton::STATE_RUNNING, button->state()); // Remove it. shelf_model()->RemoveItemAt(index); @@ -127,10 +127,10 @@ TEST_F(LauncherTest, checkHoverAfterMenu) { delegate.Pass()); ASSERT_EQ(++button_count, test_api()->GetButtonCount()); - LauncherButton* button = test_api()->GetButton(index); - button->AddState(LauncherButton::STATE_HOVERED); + ShelfButton* button = test_api()->GetButton(index); + button->AddState(ShelfButton::STATE_HOVERED); button->ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); - EXPECT_FALSE(button->state() & LauncherButton::STATE_HOVERED); + EXPECT_FALSE(button->state() & ShelfButton::STATE_HOVERED); // Remove it. shelf_model()->RemoveItemAt(index); |