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

Side by Side Diff: views/controls/button/text_button.cc

Issue 3058011: Add "pushed" as a state a TextButton can show (alongside "normal" and "hover"... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "views/controls/button/text_button.h" 5 #include "views/controls/button/text_button.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "app/throb_animation.h" 9 #include "app/throb_animation.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 alignment_(ALIGN_LEFT), 181 alignment_(ALIGN_LEFT),
182 icon_placement_(ICON_ON_LEFT), 182 icon_placement_(ICON_ON_LEFT),
183 font_(ResourceBundle::GetSharedInstance().GetFont( 183 font_(ResourceBundle::GetSharedInstance().GetFont(
184 ResourceBundle::BaseFont)), 184 ResourceBundle::BaseFont)),
185 color_(kEnabledColor), 185 color_(kEnabledColor),
186 color_enabled_(kEnabledColor), 186 color_enabled_(kEnabledColor),
187 color_disabled_(kDisabledColor), 187 color_disabled_(kDisabledColor),
188 color_highlight_(kHighlightColor), 188 color_highlight_(kHighlightColor),
189 color_hover_(kHoverColor), 189 color_hover_(kHoverColor),
190 has_hover_icon_(false), 190 has_hover_icon_(false),
191 has_pushed_icon_(false),
191 max_width_(0), 192 max_width_(0),
192 normal_has_border_(false), 193 normal_has_border_(false),
193 show_highlighted_(true), 194 show_multiple_states_(true),
194 prefix_type_(PREFIX_NONE) { 195 prefix_type_(PREFIX_NONE) {
195 SetText(text); 196 SetText(text);
196 set_border(new TextButtonBorder); 197 set_border(new TextButtonBorder);
197 SetAnimationDuration(kHoverAnimationDurationMs); 198 SetAnimationDuration(kHoverAnimationDurationMs);
198 } 199 }
199 200
200 TextButton::~TextButton() { 201 TextButton::~TextButton() {
201 } 202 }
202 203
203 void TextButton::SetText(const std::wstring& text) { 204 void TextButton::SetText(const std::wstring& text) {
204 text_ = text; 205 text_ = text;
205 UpdateTextSize(); 206 UpdateTextSize();
206 } 207 }
207 208
208 void TextButton::SetIcon(const SkBitmap& icon) { 209 void TextButton::SetIcon(const SkBitmap& icon) {
209 icon_ = icon; 210 icon_ = icon;
210 } 211 }
211 212
212 void TextButton::SetHoverIcon(const SkBitmap& icon) { 213 void TextButton::SetHoverIcon(const SkBitmap& icon) {
213 icon_hover_ = icon; 214 icon_hover_ = icon;
214 has_hover_icon_ = true; 215 has_hover_icon_ = true;
215 } 216 }
216 217
218 void TextButton::SetPushedIcon(const SkBitmap& icon) {
219 icon_pushed_ = icon;
220 has_pushed_icon_ = true;
221 }
222
217 void TextButton::SetFont(const gfx::Font& font) { 223 void TextButton::SetFont(const gfx::Font& font) {
218 font_ = font; 224 font_ = font;
219 UpdateTextSize(); 225 UpdateTextSize();
220 } 226 }
221 227
222 void TextButton::SetEnabledColor(SkColor color) { 228 void TextButton::SetEnabledColor(SkColor color) {
223 color_enabled_ = color; 229 color_enabled_ = color;
224 UpdateColor(); 230 UpdateColor();
225 } 231 }
226 232
(...skipping 11 matching lines...) Expand all
238 } 244 }
239 245
240 void TextButton::ClearMaxTextSize() { 246 void TextButton::ClearMaxTextSize() {
241 max_text_size_ = text_size_; 247 max_text_size_ = text_size_;
242 } 248 }
243 249
244 void TextButton::SetNormalHasBorder(bool normal_has_border) { 250 void TextButton::SetNormalHasBorder(bool normal_has_border) {
245 normal_has_border_ = normal_has_border; 251 normal_has_border_ = normal_has_border;
246 } 252 }
247 253
248 void TextButton::SetShowHighlighted(bool show_highlighted) { 254 void TextButton::SetShowMultipleStates(bool show_multiple_states) {
249 show_highlighted_ = show_highlighted; 255 show_multiple_states_ = show_multiple_states;
250 } 256 }
251 257
252 void TextButton::Paint(gfx::Canvas* canvas, bool for_drag) { 258 void TextButton::Paint(gfx::Canvas* canvas, bool for_drag) {
253 if (!for_drag) { 259 if (!for_drag) {
254 PaintBackground(canvas); 260 PaintBackground(canvas);
255 261
256 if (show_highlighted_ && hover_animation_->is_animating()) { 262 if (show_multiple_states_ && hover_animation_->is_animating()) {
257 // Draw the hover bitmap into an offscreen buffer, then blend it 263 // Draw the hover bitmap into an offscreen buffer, then blend it
258 // back into the current canvas. 264 // back into the current canvas.
259 canvas->SaveLayerAlpha( 265 canvas->SaveLayerAlpha(
260 static_cast<int>(hover_animation_->GetCurrentValue() * 255)); 266 static_cast<int>(hover_animation_->GetCurrentValue() * 255));
261 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255, 267 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255,
262 SkXfermode::kClear_Mode); 268 SkXfermode::kClear_Mode);
263 PaintBorder(canvas); 269 PaintBorder(canvas);
264 canvas->Restore(); 270 canvas->Restore();
265 } else if ((show_highlighted_ && 271 } else if ((show_multiple_states_ &&
266 (state_ == BS_HOT || state_ == BS_PUSHED)) || 272 (state_ == BS_HOT || state_ == BS_PUSHED)) ||
267 (state_ == BS_NORMAL && normal_has_border_)) { 273 (state_ == BS_NORMAL && normal_has_border_)) {
268 PaintBorder(canvas); 274 PaintBorder(canvas);
269 } 275 }
270 276
271 PaintFocusBorder(canvas); 277 PaintFocusBorder(canvas);
272 } 278 }
273 279
274 SkBitmap icon; 280 SkBitmap icon;
275 if (has_hover_icon_ && show_highlighted_ && 281 if (show_multiple_states_ && has_hover_icon_ && (state() == BS_HOT))
276 (state() == BS_HOT || state() == BS_PUSHED))
277 icon = icon_hover_; 282 icon = icon_hover_;
283 else if (show_multiple_states_ && has_pushed_icon_ && (state() == BS_PUSHED))
284 icon = icon_pushed_;
278 else 285 else
279 icon = icon_; 286 icon = icon_;
280 287
281 gfx::Insets insets = GetInsets(); 288 gfx::Insets insets = GetInsets();
282 int available_width = width() - insets.width(); 289 int available_width = width() - insets.width();
283 int available_height = height() - insets.height(); 290 int available_height = height() - insets.height();
284 // Use the actual text (not max) size to properly center the text. 291 // Use the actual text (not max) size to properly center the text.
285 int content_width = text_size_.width(); 292 int content_width = text_size_.width();
286 if (icon.width() > 0) { 293 if (icon.width() > 0) {
287 content_width += icon.width(); 294 content_width += icon.width();
(...skipping 30 matching lines...) Expand all
318 // doing this will mirror the text itself. Flipping the canvas will also 325 // doing this will mirror the text itself. Flipping the canvas will also
319 // make the icons look wrong because icons are almost always represented as 326 // make the icons look wrong because icons are almost always represented as
320 // direction insentisive bitmaps and such bitmaps should never be flipped 327 // direction insentisive bitmaps and such bitmaps should never be flipped
321 // horizontally. 328 // horizontally.
322 // 329 //
323 // Due to the above, we must perform the flipping manually for RTL UIs. 330 // Due to the above, we must perform the flipping manually for RTL UIs.
324 gfx::Rect text_bounds(text_x, text_y, text_width, text_size_.height()); 331 gfx::Rect text_bounds(text_x, text_y, text_width, text_size_.height());
325 text_bounds.set_x(MirroredLeftPointForRect(text_bounds)); 332 text_bounds.set_x(MirroredLeftPointForRect(text_bounds));
326 333
327 SkColor text_color; 334 SkColor text_color;
328 if (show_highlighted_ && (state() == BS_HOT || state() == BS_PUSHED)) 335 if (show_multiple_states_ && (state() == BS_HOT || state() == BS_PUSHED))
329 text_color = color_hover_; 336 text_color = color_hover_;
330 else 337 else
331 text_color = color_; 338 text_color = color_;
332 339
333 int draw_string_flags = gfx::CanvasSkia::DefaultCanvasTextAlignment() | 340 int draw_string_flags = gfx::CanvasSkia::DefaultCanvasTextAlignment() |
334 PrefixTypeToCanvasType(prefix_type_); 341 PrefixTypeToCanvasType(prefix_type_);
335 342
336 if (for_drag) { 343 if (for_drag) {
337 #if defined(OS_WIN) 344 #if defined(OS_WIN)
338 // TODO(erg): Either port DrawStringWithHalo to linux or find an 345 // TODO(erg): Either port DrawStringWithHalo to linux or find an
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 // changed by other functions like CustomButton::SetState(). 428 // changed by other functions like CustomButton::SetState().
422 UpdateColor(); 429 UpdateColor();
423 SchedulePaint(); 430 SchedulePaint();
424 } 431 }
425 432
426 void TextButton::Paint(gfx::Canvas* canvas) { 433 void TextButton::Paint(gfx::Canvas* canvas) {
427 Paint(canvas, false); 434 Paint(canvas, false);
428 } 435 }
429 436
430 } // namespace views 437 } // namespace views
OLDNEW
« views/controls/button/text_button.h ('K') | « views/controls/button/text_button.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698