Index: views/controls/button/custom_button.cc |
=================================================================== |
--- views/controls/button/custom_button.cc (revision 56775) |
+++ views/controls/button/custom_button.cc (working copy) |
@@ -6,6 +6,7 @@ |
#include "app/throb_animation.h" |
#include "base/keyboard_codes.h" |
+#include "views/screen.h" |
namespace views { |
@@ -71,8 +72,13 @@ |
} |
void CustomButton::SetEnabled(bool enabled) { |
- if (enabled ? (state_ == BS_DISABLED) : (state_ != BS_DISABLED)) |
- SetState(enabled ? BS_NORMAL : BS_DISABLED); |
+ if (enabled ? (state_ != BS_DISABLED) : (state_ == BS_DISABLED)) |
+ return; |
+ |
+ if (enabled) |
+ SetState(IsMouseHovered() ? BS_HOT : BS_NORMAL); |
+ else |
+ SetState(BS_DISABLED); |
} |
bool CustomButton::IsEnabled() const { |
@@ -83,6 +89,17 @@ |
return (state_ != BS_DISABLED) && View::IsFocusable(); |
} |
+bool CustomButton::IsMouseHovered() const { |
+ // If we haven't yet been placed in an onscreen view hierarchy, we can't be |
+ // hovered. |
+ if (!GetWidget()) |
+ return false; |
+ |
+ gfx::Point cursor_pos(Screen::GetCursorScreenPoint()); |
+ ConvertPointToView(NULL, this, &cursor_pos); |
+ return HitTest(cursor_pos); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// CustomButton, protected: |