OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/controls/button/custom_button.h" | 5 #include "ui/views/controls/button/custom_button.h" |
6 | 6 |
7 #include "ui/accessibility/ax_view_state.h" | 7 #include "ui/accessibility/ax_view_state.h" |
8 #include "ui/events/event.h" | 8 #include "ui/events/event.h" |
9 #include "ui/events/event_utils.h" | 9 #include "ui/events/event_utils.h" |
10 #include "ui/events/keycodes/keyboard_codes.h" | 10 #include "ui/events/keycodes/keyboard_codes.h" |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 SetState(ShouldEnterHoveredState() ? STATE_HOVERED : STATE_NORMAL); | 121 SetState(ShouldEnterHoveredState() ? STATE_HOVERED : STATE_NORMAL); |
122 else | 122 else |
123 SetState(STATE_DISABLED); | 123 SetState(STATE_DISABLED); |
124 } | 124 } |
125 | 125 |
126 const char* CustomButton::GetClassName() const { | 126 const char* CustomButton::GetClassName() const { |
127 return kViewClassName; | 127 return kViewClassName; |
128 } | 128 } |
129 | 129 |
130 bool CustomButton::OnMousePressed(const ui::MouseEvent& event) { | 130 bool CustomButton::OnMousePressed(const ui::MouseEvent& event) { |
131 if (state_ != STATE_DISABLED) { | 131 if (state_ == STATE_DISABLED) |
132 if (ShouldEnterPushedState(event) && HitTestPoint(event.location())) | 132 return true; |
133 SetState(STATE_PRESSED); | 133 if (ShouldEnterPushedState(event) && HitTestPoint(event.location())) |
134 if (request_focus_on_press_) | 134 SetState(STATE_PRESSED); |
135 RequestFocus(); | 135 if (request_focus_on_press_) |
136 if (IsTriggerableEvent(event) && notify_action_ == NOTIFY_ON_PRESS) { | 136 RequestFocus(); |
| 137 if (notify_action_ == NOTIFY_ON_PRESS) { |
| 138 if (IsTriggerableEvent(event)) { |
137 NotifyClick(event); | 139 NotifyClick(event); |
138 // NOTE: We may be deleted at this point (by the listener's notification | 140 // NOTE: We may be deleted at this point (by the listener's notification |
139 // handler). | 141 // handler). |
| 142 } else { |
| 143 NotifyReleasedWithoutClick(event); |
140 } | 144 } |
141 } | 145 } |
142 return true; | 146 return true; |
143 } | 147 } |
144 | 148 |
145 bool CustomButton::OnMouseDragged(const ui::MouseEvent& event) { | 149 bool CustomButton::OnMouseDragged(const ui::MouseEvent& event) { |
146 if (state_ != STATE_DISABLED) { | 150 if (state_ != STATE_DISABLED) { |
147 if (HitTestPoint(event.location())) | 151 if (HitTestPoint(event.location())) |
148 SetState(ShouldEnterPushedState(event) ? STATE_PRESSED : STATE_HOVERED); | 152 SetState(ShouldEnterPushedState(event) ? STATE_PRESSED : STATE_HOVERED); |
149 else | 153 else |
150 SetState(STATE_NORMAL); | 154 SetState(STATE_NORMAL); |
151 } | 155 } |
152 return true; | 156 return true; |
153 } | 157 } |
154 | 158 |
155 void CustomButton::OnMouseReleased(const ui::MouseEvent& event) { | 159 void CustomButton::OnMouseReleased(const ui::MouseEvent& event) { |
156 if (state_ == STATE_DISABLED) | 160 if (state_ == STATE_DISABLED) |
157 return; | 161 return; |
158 | |
159 if (!HitTestPoint(event.location())) { | 162 if (!HitTestPoint(event.location())) { |
160 SetState(STATE_NORMAL); | 163 SetState(STATE_NORMAL); |
161 return; | 164 } else { |
| 165 SetState(STATE_HOVERED); |
| 166 if (IsTriggerableEvent(event) && notify_action_ == NOTIFY_ON_RELEASE) { |
| 167 NotifyClick(event); |
| 168 // NOTE: We may be deleted at this point (by the listener's notification |
| 169 // handler). |
| 170 return; |
| 171 } |
162 } | 172 } |
163 | 173 if (notify_action_ == NOTIFY_ON_RELEASE) |
164 SetState(STATE_HOVERED); | 174 NotifyReleasedWithoutClick(event); |
165 if (IsTriggerableEvent(event) && notify_action_ == NOTIFY_ON_RELEASE) { | |
166 NotifyClick(event); | |
167 // NOTE: We may be deleted at this point (by the listener's notification | |
168 // handler). | |
169 } | |
170 } | 175 } |
171 | 176 |
172 void CustomButton::OnMouseCaptureLost() { | 177 void CustomButton::OnMouseCaptureLost() { |
173 // Starting a drag results in a MouseCaptureLost, we need to ignore it. | 178 // Starting a drag results in a MouseCaptureLost, we need to ignore it. |
174 if (state_ != STATE_DISABLED && !InDrag()) | 179 if (state_ != STATE_DISABLED && !InDrag()) |
175 SetState(STATE_NORMAL); | 180 SetState(STATE_NORMAL); |
176 } | 181 } |
177 | 182 |
178 void CustomButton::OnMouseEntered(const ui::MouseEvent& event) { | 183 void CustomButton::OnMouseEntered(const ui::MouseEvent& event) { |
179 if (state_ != STATE_DISABLED) | 184 if (state_ != STATE_DISABLED) |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 if (!details.is_add && state_ != STATE_DISABLED) | 374 if (!details.is_add && state_ != STATE_DISABLED) |
370 SetState(STATE_NORMAL); | 375 SetState(STATE_NORMAL); |
371 } | 376 } |
372 | 377 |
373 void CustomButton::OnBlur() { | 378 void CustomButton::OnBlur() { |
374 if (IsHotTracked()) | 379 if (IsHotTracked()) |
375 SetState(STATE_NORMAL); | 380 SetState(STATE_NORMAL); |
376 } | 381 } |
377 | 382 |
378 } // namespace views | 383 } // namespace views |
OLD | NEW |