summaryrefslogtreecommitdiffstats
path: root/chrome/views/controls/button/custom_button.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/views/controls/button/custom_button.cc')
-rw-r--r--chrome/views/controls/button/custom_button.cc236
1 files changed, 0 insertions, 236 deletions
diff --git a/chrome/views/controls/button/custom_button.cc b/chrome/views/controls/button/custom_button.cc
deleted file mode 100644
index 3e9d33d..0000000
--- a/chrome/views/controls/button/custom_button.cc
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/views/controls/button/custom_button.h"
-
-#include "app/throb_animation.h"
-#include "base/keyboard_codes.h"
-
-namespace views {
-
-// How long the hover animation takes if uninterrupted.
-static const int kHoverFadeDurationMs = 150;
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, public:
-
-CustomButton::~CustomButton() {
-}
-
-void CustomButton::SetState(ButtonState state) {
- if (state != state_) {
- if (animate_on_state_change_ || !hover_animation_->IsAnimating()) {
- animate_on_state_change_ = true;
- if (state_ == BS_NORMAL && state == BS_HOT) {
- // Button is hovered from a normal state, start hover animation.
- hover_animation_->Show();
- } else if (state_ == BS_HOT && state == BS_NORMAL) {
- // Button is returning to a normal state from hover, start hover
- // fade animation.
- hover_animation_->Hide();
- } else {
- hover_animation_->Stop();
- }
- }
-
- state_ = state;
- SchedulePaint();
- }
-}
-
-void CustomButton::StartThrobbing(int cycles_til_stop) {
- animate_on_state_change_ = false;
- hover_animation_->StartThrobbing(cycles_til_stop);
-}
-
-void CustomButton::SetAnimationDuration(int duration) {
- hover_animation_->SetSlideDuration(duration);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, View overrides:
-
-void CustomButton::SetEnabled(bool enabled) {
- if (enabled && state_ == BS_DISABLED) {
- SetState(BS_NORMAL);
- } else if (!enabled && state_ != BS_DISABLED) {
- SetState(BS_DISABLED);
- }
-}
-
-bool CustomButton::IsEnabled() const {
- return state_ != BS_DISABLED;
-}
-
-bool CustomButton::IsFocusable() const {
- return (state_ != BS_DISABLED) && View::IsFocusable();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, protected:
-
-CustomButton::CustomButton(ButtonListener* listener)
- : Button(listener),
- state_(BS_NORMAL),
- animate_on_state_change_(true),
- triggerable_event_flags_(MouseEvent::EF_LEFT_BUTTON_DOWN) {
- hover_animation_.reset(new ThrobAnimation(this));
- hover_animation_->SetSlideDuration(kHoverFadeDurationMs);
-}
-
-bool CustomButton::IsTriggerableEvent(const MouseEvent& e) {
- return (triggerable_event_flags_ & e.GetFlags()) != 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, View overrides (protected):
-
-bool CustomButton::AcceleratorPressed(const Accelerator& accelerator) {
- if (enabled_) {
- SetState(BS_NORMAL);
- NotifyClick(0);
- return true;
- }
- return false;
-}
-
-bool CustomButton::OnMousePressed(const MouseEvent& e) {
- if (state_ != BS_DISABLED) {
- if (IsTriggerableEvent(e) && HitTest(e.location()))
- SetState(BS_PUSHED);
- RequestFocus();
- }
- return true;
-}
-
-bool CustomButton::OnMouseDragged(const MouseEvent& e) {
- if (state_ != BS_DISABLED) {
- if (!HitTest(e.location()))
- SetState(BS_NORMAL);
- else if (IsTriggerableEvent(e))
- SetState(BS_PUSHED);
- else
- SetState(BS_HOT);
- }
- return true;
-}
-
-void CustomButton::OnMouseReleased(const MouseEvent& e, bool canceled) {
- if (InDrag()) {
- // Starting a drag results in a MouseReleased, we need to ignore it.
- return;
- }
-
- if (state_ != BS_DISABLED) {
- if (canceled || !HitTest(e.location())) {
- SetState(BS_NORMAL);
- } else {
- SetState(BS_HOT);
- if (IsTriggerableEvent(e)) {
- NotifyClick(e.GetFlags());
- // We may be deleted at this point (by the listener's notification
- // handler) so no more doing anything, just return.
- return;
- }
- }
- }
-}
-
-void CustomButton::OnMouseEntered(const MouseEvent& e) {
- if (state_ != BS_DISABLED)
- SetState(BS_HOT);
-}
-
-void CustomButton::OnMouseMoved(const MouseEvent& e) {
- if (state_ != BS_DISABLED) {
- if (HitTest(e.location())) {
- SetState(BS_HOT);
- } else {
- SetState(BS_NORMAL);
- }
- }
-}
-
-void CustomButton::OnMouseExited(const MouseEvent& e) {
- // Starting a drag results in a MouseExited, we need to ignore it.
- if (state_ != BS_DISABLED && !InDrag())
- SetState(BS_NORMAL);
-}
-
-bool CustomButton::OnKeyPressed(const KeyEvent& e) {
- if (state_ != BS_DISABLED) {
- // Space sets button state to pushed. Enter clicks the button. This matches
- // the Windows native behavior of buttons, where Space clicks the button
- // on KeyRelease and Enter clicks the button on KeyPressed.
- if (e.GetCharacter() == base::VKEY_SPACE) {
- SetState(BS_PUSHED);
- return true;
- } else if (e.GetCharacter() == base::VKEY_RETURN) {
- SetState(BS_NORMAL);
- NotifyClick(0);
- return true;
- }
- }
- return false;
-}
-
-bool CustomButton::OnKeyReleased(const KeyEvent& e) {
- if (state_ != BS_DISABLED) {
- if (e.GetCharacter() == base::VKEY_SPACE) {
- SetState(BS_NORMAL);
- NotifyClick(0);
- return true;
- }
- }
- return false;
-}
-
-void CustomButton::OnDragDone() {
- SetState(BS_NORMAL);
-}
-
-void CustomButton::ShowContextMenu(int x, int y, bool is_mouse_gesture) {
- if (GetContextMenuController()) {
- // We're about to show the context menu. Showing the context menu likely
- // means we won't get a mouse exited and reset state. Reset it now to be
- // sure.
- if (state_ != BS_DISABLED)
- SetState(BS_NORMAL);
- View::ShowContextMenu(x, y, is_mouse_gesture);
- }
-}
-
-void CustomButton::ViewHierarchyChanged(bool is_add, View *parent,
- View *child) {
- if (!is_add && state_ != BS_DISABLED)
- SetState(BS_NORMAL);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, AnimationDelegate implementation:
-
-void CustomButton::AnimationProgressed(const Animation* animation) {
- SchedulePaint();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, private:
-
-void CustomButton::SetHighlighted(bool highlighted) {
- if (highlighted && state_ != BS_DISABLED) {
- SetState(BS_HOT);
- } else if (!highlighted && state_ != BS_DISABLED) {
- SetState(BS_NORMAL);
- }
-}
-
-bool CustomButton::IsHighlighted() const {
- return state_ == BS_HOT;
-}
-
-bool CustomButton::IsPushed() const {
- return state_ == BS_PUSHED;
-}
-
-} // namespace views