Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Side by Side Diff: ui/views/controls/button/custom_button.h

Issue 2001843002: Use ink drop hover for focus states on toolbar buttons and location (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: layout Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #ifndef UI_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_ 5 #ifndef UI_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_
6 #define UI_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_ 6 #define UI_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_
7 7
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 19 matching lines...) Expand all
30 NOTIFY_ON_PRESS, 30 NOTIFY_ON_PRESS,
31 NOTIFY_ON_RELEASE, 31 NOTIFY_ON_RELEASE,
32 }; 32 };
33 33
34 // The menu button's class name. 34 // The menu button's class name.
35 static const char kViewClassName[]; 35 static const char kViewClassName[];
36 36
37 static const CustomButton* AsCustomButton(const View* view); 37 static const CustomButton* AsCustomButton(const View* view);
38 static CustomButton* AsCustomButton(View* view); 38 static CustomButton* AsCustomButton(View* view);
39 39
40 // Paint an MD-style focus ring on the given canvas at the given bounds.
41 static void PaintMdFocusRing(gfx::Canvas* canvas, View* view);
42
43 ~CustomButton() override; 40 ~CustomButton() override;
44 41
45 // Get/sets the current display state of the button. 42 // Get/sets the current display state of the button.
46 ButtonState state() const { return state_; } 43 ButtonState state() const { return state_; }
47 void SetState(ButtonState state); 44 void SetState(ButtonState state);
48 45
49 // Starts throbbing. See HoverAnimation for a description of cycles_til_stop. 46 // Starts throbbing. See HoverAnimation for a description of cycles_til_stop.
50 void StartThrobbing(int cycles_til_stop); 47 void StartThrobbing(int cycles_til_stop);
51 48
52 // Stops throbbing immediately. 49 // Stops throbbing immediately.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 ui::MenuSourceType source_type) override; 109 ui::MenuSourceType source_type) override;
113 void OnDragDone() override; 110 void OnDragDone() override;
114 void GetAccessibleState(ui::AXViewState* state) override; 111 void GetAccessibleState(ui::AXViewState* state) override;
115 void VisibilityChanged(View* starting_from, bool is_visible) override; 112 void VisibilityChanged(View* starting_from, bool is_visible) override;
116 std::unique_ptr<InkDropHover> CreateInkDropHover() const override; 113 std::unique_ptr<InkDropHover> CreateInkDropHover() const override;
117 SkColor GetInkDropBaseColor() const override; 114 SkColor GetInkDropBaseColor() const override;
118 115
119 // Overridden from gfx::AnimationDelegate: 116 // Overridden from gfx::AnimationDelegate:
120 void AnimationProgressed(const gfx::Animation* animation) override; 117 void AnimationProgressed(const gfx::Animation* animation) override;
121 118
122 InkDropDelegate* ink_drop_delegate() const { return ink_drop_delegate_; }
123
124 // Overridden from View: 119 // Overridden from View:
125 void Layout() override;
126 void ViewHierarchyChanged( 120 void ViewHierarchyChanged(
127 const ViewHierarchyChangedDetails& details) override; 121 const ViewHierarchyChangedDetails& details) override;
128 void OnFocus() override;
129 void OnBlur() override; 122 void OnBlur() override;
123 bool ShouldShowInkDropForFocus() const override;
130 124
131 protected: 125 protected:
132 // Construct the Button with a Listener. See comment for Button's ctor. 126 // Construct the Button with a Listener. See comment for Button's ctor.
133 explicit CustomButton(ButtonListener* listener); 127 explicit CustomButton(ButtonListener* listener);
134 128
135 // Invoked from SetState() when SetState() is passed a value that differs from 129 // Invoked from SetState() when SetState() is passed a value that differs from
136 // the current state. CustomButton's implementation of StateChanged() does 130 // the current state. CustomButton's implementation of StateChanged() does
137 // nothing; this method is provided for subclasses that wish to do something 131 // nothing; this method is provided for subclasses that wish to do something
138 // on state changes. 132 // on state changes.
139 virtual void StateChanged(); 133 virtual void StateChanged();
(...skipping 13 matching lines...) Expand all
153 void set_has_ink_drop_action_on_click(bool has_ink_drop_action_on_click) { 147 void set_has_ink_drop_action_on_click(bool has_ink_drop_action_on_click) {
154 has_ink_drop_action_on_click_ = has_ink_drop_action_on_click; 148 has_ink_drop_action_on_click_ = has_ink_drop_action_on_click;
155 } 149 }
156 150
157 // Returns true if the button should enter hovered state; that is, if the 151 // Returns true if the button should enter hovered state; that is, if the
158 // mouse is over the button, and no other window has capture (which would 152 // mouse is over the button, and no other window has capture (which would
159 // prevent the button from receiving MouseExited events and updating its 153 // prevent the button from receiving MouseExited events and updating its
160 // state). This does not take into account enabled state. 154 // state). This does not take into account enabled state.
161 bool ShouldEnterHoveredState(); 155 bool ShouldEnterHoveredState();
162 156
163 void set_ink_drop_delegate(InkDropDelegate* ink_drop_delegate) {
164 ink_drop_delegate_ = ink_drop_delegate;
165 }
166
167 // When called, creates and uses |md_focus_ring_| instead of a focus painter.
168 void UseMdFocusRing();
169
170 // Overridden from Button: 157 // Overridden from Button:
171 void NotifyClick(const ui::Event& event) override; 158 void NotifyClick(const ui::Event& event) override;
172 void OnClickCanceled(const ui::Event& event) override; 159 void OnClickCanceled(const ui::Event& event) override;
173 160
174 const gfx::ThrobAnimation& hover_animation() const { 161 const gfx::ThrobAnimation& hover_animation() const {
175 return hover_animation_; 162 return hover_animation_;
176 } 163 }
177 164
178 private: 165 private:
179 ButtonState state_; 166 ButtonState state_;
180 167
181 gfx::ThrobAnimation hover_animation_; 168 gfx::ThrobAnimation hover_animation_;
182 169
183 // Should we animate when the state changes? Defaults to true. 170 // Should we animate when the state changes? Defaults to true.
184 bool animate_on_state_change_; 171 bool animate_on_state_change_;
185 172
186 // Is the hover animation running because StartThrob was invoked? 173 // Is the hover animation running because StartThrob was invoked?
187 bool is_throbbing_; 174 bool is_throbbing_;
188 175
189 // Mouse event flags which can trigger button actions. 176 // Mouse event flags which can trigger button actions.
190 int triggerable_event_flags_; 177 int triggerable_event_flags_;
191 178
192 // See description above setter. 179 // See description above setter.
193 bool request_focus_on_press_; 180 bool request_focus_on_press_;
194 181
195 // Animation delegate for the ink drop ripple effect. It is owned by a
196 // descendant class and needs to be reset before an instance of the concrete
197 // CustomButton is destroyed.
198 InkDropDelegate* ink_drop_delegate_;
199
200 // The event on which the button should notify its listener. 182 // The event on which the button should notify its listener.
201 NotifyAction notify_action_; 183 NotifyAction notify_action_;
202 184
203 // True when a button click should trigger an animation action on 185 // True when a button click should trigger an animation action on
204 // |ink_drop_delegate_|. 186 // |ink_drop_delegate_|.
205 // TODO(bruthig): Use an InkDropAction enum and drop the flag. 187 // TODO(bruthig): Use an InkDropAction enum and drop the flag.
206 bool has_ink_drop_action_on_click_; 188 bool has_ink_drop_action_on_click_;
207 189
208 // The animation action to trigger on the |ink_drop_delegate_| when the button 190 // The animation action to trigger on ink_drop_delegate() when the button
209 // is clicked. 191 // is clicked.
210 InkDropState ink_drop_action_on_click_; 192 InkDropState ink_drop_action_on_click_;
211 193
212 // When true, the ink drop ripple and hover will be hidden prior to showing 194 // When true, the ink drop ripple and hover will be hidden prior to showing
213 // the context menu. 195 // the context menu.
214 bool hide_ink_drop_when_showing_context_menu_; 196 bool hide_ink_drop_when_showing_context_menu_;
215 197
216 // The color of the ripple and hover. 198 // The color of the ripple and hover.
217 SkColor ink_drop_base_color_; 199 SkColor ink_drop_base_color_;
218 200
219 // The MD-style focus ring. This is not done via a FocusPainter
220 // because it needs to paint to a layer so it can extend beyond the bounds of
221 // |this|.
222 views::View* md_focus_ring_;
223
224 DISALLOW_COPY_AND_ASSIGN(CustomButton); 201 DISALLOW_COPY_AND_ASSIGN(CustomButton);
225 }; 202 };
226 203
227 } // namespace views 204 } // namespace views
228 205
229 #endif // UI_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_ 206 #endif // UI_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_
OLDNEW
« no previous file with comments | « ui/views/controls/button/blue_button_unittest.cc ('k') | ui/views/controls/button/custom_button.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698