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

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

Issue 2833013: Tweaks for the merged menu: (Closed)
Patch Set: Created 10 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
« no previous file with comments | « views/controls/button/text_button.h ('k') | views/controls/menu/menu_config.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 16 matching lines...) Expand all
27 // static 27 // static
28 const SkColor TextButton::kHighlightColor = SkColorSetARGB(200, 255, 255, 255); 28 const SkColor TextButton::kHighlightColor = SkColorSetARGB(200, 255, 255, 255);
29 // static 29 // static
30 const SkColor TextButton::kDisabledColor = SkColorSetRGB(161, 161, 146); 30 const SkColor TextButton::kDisabledColor = SkColorSetRGB(161, 161, 146);
31 // static 31 // static
32 const SkColor TextButton::kHoverColor = TextButton::kEnabledColor; 32 const SkColor TextButton::kHoverColor = TextButton::kEnabledColor;
33 33
34 // How long the hover fade animation should last. 34 // How long the hover fade animation should last.
35 static const int kHoverAnimationDurationMs = 170; 35 static const int kHoverAnimationDurationMs = 170;
36 36
37 static int PrefixTypeToCanvasType(TextButton::PrefixType type) {
38 switch (type) {
39 case TextButton::PREFIX_HIDE:
40 return gfx::Canvas::HIDE_PREFIX;
41 case TextButton::PREFIX_SHOW:
42 return gfx::Canvas::SHOW_PREFIX;
43 case TextButton::PREFIX_NONE:
44 return 0;
45 default:
46 NOTREACHED();
47 return 0;
48 }
49 }
50
37 //////////////////////////////////////////////////////////////////////////////// 51 ////////////////////////////////////////////////////////////////////////////////
38 // 52 //
39 // TextButtonBorder - constructors, destructors, initialization 53 // TextButtonBorder - constructors, destructors, initialization
40 // 54 //
41 //////////////////////////////////////////////////////////////////////////////// 55 ////////////////////////////////////////////////////////////////////////////////
42 56
43 TextButtonBorder::TextButtonBorder() { 57 TextButtonBorder::TextButtonBorder() {
44 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 58 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
45 59
46 hot_set_.top_left = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_LEFT_H); 60 hot_set_.top_left = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_LEFT_H);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 font_(ResourceBundle::GetSharedInstance().GetFont( 183 font_(ResourceBundle::GetSharedInstance().GetFont(
170 ResourceBundle::BaseFont)), 184 ResourceBundle::BaseFont)),
171 color_(kEnabledColor), 185 color_(kEnabledColor),
172 color_enabled_(kEnabledColor), 186 color_enabled_(kEnabledColor),
173 color_disabled_(kDisabledColor), 187 color_disabled_(kDisabledColor),
174 color_highlight_(kHighlightColor), 188 color_highlight_(kHighlightColor),
175 color_hover_(kHoverColor), 189 color_hover_(kHoverColor),
176 has_hover_icon_(false), 190 has_hover_icon_(false),
177 max_width_(0), 191 max_width_(0),
178 normal_has_border_(false), 192 normal_has_border_(false),
179 show_highlighted_(true) { 193 show_highlighted_(true),
194 prefix_type_(PREFIX_NONE) {
180 SetText(text); 195 SetText(text);
181 set_border(new TextButtonBorder); 196 set_border(new TextButtonBorder);
182 SetAnimationDuration(kHoverAnimationDurationMs); 197 SetAnimationDuration(kHoverAnimationDurationMs);
183 } 198 }
184 199
185 TextButton::~TextButton() { 200 TextButton::~TextButton() {
186 } 201 }
187 202
188 void TextButton::SetText(const std::wstring& text) { 203 void TextButton::SetText(const std::wstring& text) {
189 text_ = text; 204 text_ = text;
190 // Update our new current and max text size 205 UpdateTextSize();
191 text_size_.SetSize(font_.GetStringWidth(text_), font_.height());
192 max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()),
193 std::max(max_text_size_.height(),
194 text_size_.height()));
195 } 206 }
196 207
197 void TextButton::SetIcon(const SkBitmap& icon) { 208 void TextButton::SetIcon(const SkBitmap& icon) {
198 icon_ = icon; 209 icon_ = icon;
199 } 210 }
200 211
201 void TextButton::SetHoverIcon(const SkBitmap& icon) { 212 void TextButton::SetHoverIcon(const SkBitmap& icon) {
202 icon_hover_ = icon; 213 icon_hover_ = icon;
203 has_hover_icon_ = true; 214 has_hover_icon_ = true;
204 } 215 }
205 216
206 void TextButton::SetFont(const gfx::Font& font) { 217 void TextButton::SetFont(const gfx::Font& font) {
207 font_ = font; 218 font_ = font;
219 UpdateTextSize();
208 } 220 }
209 221
210 void TextButton::SetEnabledColor(SkColor color) { 222 void TextButton::SetEnabledColor(SkColor color) {
211 color_enabled_ = color; 223 color_enabled_ = color;
212 UpdateColor(); 224 UpdateColor();
213 } 225 }
214 226
215 void TextButton::SetDisabledColor(SkColor color) { 227 void TextButton::SetDisabledColor(SkColor color) {
216 color_disabled_ = color; 228 color_disabled_ = color;
217 UpdateColor(); 229 UpdateColor();
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 // Due to the above, we must perform the flipping manually for RTL UIs. 323 // Due to the above, we must perform the flipping manually for RTL UIs.
312 gfx::Rect text_bounds(text_x, text_y, text_width, text_size_.height()); 324 gfx::Rect text_bounds(text_x, text_y, text_width, text_size_.height());
313 text_bounds.set_x(MirroredLeftPointForRect(text_bounds)); 325 text_bounds.set_x(MirroredLeftPointForRect(text_bounds));
314 326
315 SkColor text_color; 327 SkColor text_color;
316 if (show_highlighted_ && (state() == BS_HOT || state() == BS_PUSHED)) 328 if (show_highlighted_ && (state() == BS_HOT || state() == BS_PUSHED))
317 text_color = color_hover_; 329 text_color = color_hover_;
318 else 330 else
319 text_color = color_; 331 text_color = color_;
320 332
333 int draw_string_flags = gfx::Canvas::DefaultCanvasTextAlignment() |
334 PrefixTypeToCanvasType(prefix_type_);
335
321 if (for_drag) { 336 if (for_drag) {
322 #if defined(OS_WIN) 337 #if defined(OS_WIN)
323 // TODO(erg): Either port DrawStringWithHalo to linux or find an 338 // TODO(erg): Either port DrawStringWithHalo to linux or find an
324 // alternative here. 339 // alternative here.
325 canvas->DrawStringWithHalo(text_, font_, text_color, color_highlight_, 340 canvas->DrawStringWithHalo(text_, font_, text_color, color_highlight_,
326 text_bounds.x(), 341 text_bounds.x(),
327 text_bounds.y(), 342 text_bounds.y(),
328 text_bounds.width(), 343 text_bounds.width(),
329 text_bounds.height(), 344 text_bounds.height(),
330 gfx::Canvas::DefaultCanvasTextAlignment()); 345 draw_string_flags);
331 #else 346 #else
332 canvas->DrawStringInt(text_, 347 canvas->DrawStringInt(text_,
333 font_, 348 font_,
334 text_color, 349 text_color,
335 text_bounds.x(), 350 text_bounds.x(),
336 text_bounds.y(), 351 text_bounds.y(),
337 text_bounds.width(), 352 text_bounds.width(),
338 text_bounds.height()); 353 text_bounds.height(),
354 draw_string_flags);
339 #endif 355 #endif
340 } else { 356 } else {
341 canvas->DrawStringInt(text_, 357 canvas->DrawStringInt(text_,
342 font_, 358 font_,
343 text_color, 359 text_color,
344 text_bounds.x(), 360 text_bounds.x(),
345 text_bounds.y(), 361 text_bounds.y(),
346 text_bounds.width(), 362 text_bounds.width(),
347 text_bounds.height()); 363 text_bounds.height(),
364 draw_string_flags);
348 } 365 }
349 } 366 }
350 367
351 if (icon.width() > 0) { 368 if (icon.width() > 0) {
352 int icon_y = (available_height - icon.height()) / 2 + insets.top(); 369 int icon_y = (available_height - icon.height()) / 2 + insets.top();
353 370
354 // Mirroring the icon position if necessary. 371 // Mirroring the icon position if necessary.
355 gfx::Rect icon_bounds(icon_x, icon_y, icon.width(), icon.height()); 372 gfx::Rect icon_bounds(icon_x, icon_y, icon.width(), icon.height());
356 icon_bounds.set_x(MirroredLeftPointForRect(icon_bounds)); 373 icon_bounds.set_x(MirroredLeftPointForRect(icon_bounds));
357 canvas->DrawBitmapInt(icon, icon_bounds.x(), icon_bounds.y()); 374 canvas->DrawBitmapInt(icon, icon_bounds.x(), icon_bounds.y());
358 } 375 }
359 } 376 }
360 377
361 void TextButton::UpdateColor() { 378 void TextButton::UpdateColor() {
362 color_ = IsEnabled() ? color_enabled_ : color_disabled_; 379 color_ = IsEnabled() ? color_enabled_ : color_disabled_;
363 } 380 }
364 381
382 void TextButton::UpdateTextSize() {
383 int width = 0, height = 0;
384 gfx::Canvas::SizeStringInt(
385 text_, font_, &width, &height,
386 gfx::Canvas::NO_ELLIPSIS | PrefixTypeToCanvasType(prefix_type_));
387 text_size_.SetSize(width, font_.height());
388 max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()),
389 std::max(max_text_size_.height(),
390 text_size_.height()));
391 }
392
365 //////////////////////////////////////////////////////////////////////////////// 393 ////////////////////////////////////////////////////////////////////////////////
366 // TextButton, View overrides: 394 // TextButton, View overrides:
367 395
368 gfx::Size TextButton::GetPreferredSize() { 396 gfx::Size TextButton::GetPreferredSize() {
369 gfx::Insets insets = GetInsets(); 397 gfx::Insets insets = GetInsets();
370 398
371 // Use the max size to set the button boundaries. 399 // Use the max size to set the button boundaries.
372 gfx::Size prefsize(max_text_size_.width() + icon_.width() + insets.width(), 400 gfx::Size prefsize(max_text_size_.width() + icon_.width() + insets.width(),
373 std::max(max_text_size_.height(), icon_.height()) + 401 std::max(max_text_size_.height(), icon_.height()) +
374 insets.height()); 402 insets.height());
(...skipping 14 matching lines...) Expand all
389 void TextButton::SetEnabled(bool enabled) { 417 void TextButton::SetEnabled(bool enabled) {
390 if (enabled != IsEnabled()) { 418 if (enabled != IsEnabled()) {
391 CustomButton::SetEnabled(enabled); 419 CustomButton::SetEnabled(enabled);
392 } 420 }
393 // We should always call UpdateColor() since the state of the button might be 421 // We should always call UpdateColor() since the state of the button might be
394 // changed by other functions like CustomButton::SetState(). 422 // changed by other functions like CustomButton::SetState().
395 UpdateColor(); 423 UpdateColor();
396 SchedulePaint(); 424 SchedulePaint();
397 } 425 }
398 426
399 bool TextButton::OnMousePressed(const MouseEvent& e) {
400 if (request_focus_on_press())
401 RequestFocus();
402 return true;
403 }
404
405 void TextButton::Paint(gfx::Canvas* canvas) { 427 void TextButton::Paint(gfx::Canvas* canvas) {
406 Paint(canvas, false); 428 Paint(canvas, false);
407 } 429 }
408 430
409 } // namespace views 431 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/button/text_button.h ('k') | views/controls/menu/menu_config.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698