| 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/label_button.h" | 5 #include "ui/views/controls/button/label_button.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" |
| 7 #include "base/logging.h" | 8 #include "base/logging.h" |
| 8 #include "ui/gfx/animation/throb_animation.h" | 9 #include "ui/gfx/animation/throb_animation.h" |
| 9 #include "ui/gfx/canvas.h" | 10 #include "ui/gfx/canvas.h" |
| 10 #include "ui/gfx/font_list.h" | 11 #include "ui/gfx/font_list.h" |
| 11 #include "ui/gfx/sys_color_change_listener.h" | 12 #include "ui/gfx/sys_color_change_listener.h" |
| 12 #include "ui/native_theme/native_theme.h" | 13 #include "ui/native_theme/native_theme.h" |
| 13 #include "ui/views/background.h" | 14 #include "ui/views/background.h" |
| 14 #include "ui/views/controls/button/label_button_border.h" | 15 #include "ui/views/controls/button/label_button_border.h" |
| 15 #include "ui/views/painter.h" | 16 #include "ui/views/painter.h" |
| 16 #include "ui/views/window/dialog_delegate.h" | 17 #include "ui/views/window/dialog_delegate.h" |
| 17 | 18 |
| 18 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 19 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 19 #include "ui/views/linux_ui/linux_ui.h" | 20 #include "ui/views/linux_ui/linux_ui.h" |
| 20 #endif | 21 #endif |
| 21 | 22 |
| 22 namespace { | 23 namespace { |
| 23 | 24 |
| 24 // The default spacing between the icon and text. | 25 // The default spacing between the icon and text. |
| 25 const int kSpacing = 5; | 26 const int kSpacing = 5; |
| 26 | 27 |
| 27 #if !(defined(OS_LINUX) && !defined(OS_CHROMEOS)) | 28 #if !(defined(OS_LINUX) && !defined(OS_CHROMEOS)) |
| 28 // Default text and shadow colors for STYLE_BUTTON. | 29 // Default text and shadow colors for STYLE_BUTTON. |
| 29 const SkColor kStyleButtonTextColor = SK_ColorBLACK; | 30 const SkColor kStyleButtonTextColor = SK_ColorBLACK; |
| 30 const SkColor kStyleButtonShadowColor = SK_ColorWHITE; | 31 const SkColor kStyleButtonShadowColor = SK_ColorWHITE; |
| 31 #endif | 32 #endif |
| 32 | 33 |
| 34 const gfx::FontList& GetDefaultNormalFontList() { |
| 35 static base::LazyInstance<gfx::FontList>::Leaky font_list = |
| 36 LAZY_INSTANCE_INITIALIZER; |
| 37 return font_list.Get(); |
| 38 } |
| 39 |
| 40 const gfx::FontList& GetDefaultBoldFontList() { |
| 41 static base::LazyInstance<gfx::FontList>::Leaky font_list = |
| 42 LAZY_INSTANCE_INITIALIZER; |
| 43 if ((font_list.Get().GetFontStyle() & gfx::Font::BOLD) == 0) { |
| 44 font_list.Get() = font_list.Get(). |
| 45 DeriveWithStyle(font_list.Get().GetFontStyle() | gfx::Font::BOLD); |
| 46 DCHECK_NE(font_list.Get().GetFontStyle() & gfx::Font::BOLD, 0); |
| 47 } |
| 48 return font_list.Get(); |
| 49 } |
| 50 |
| 33 } // namespace | 51 } // namespace |
| 34 | 52 |
| 35 namespace views { | 53 namespace views { |
| 36 | 54 |
| 37 // static | 55 // static |
| 38 const int LabelButton::kHoverAnimationDurationMs = 170; | 56 const int LabelButton::kHoverAnimationDurationMs = 170; |
| 39 | 57 |
| 40 // static | 58 // static |
| 41 const char LabelButton::kViewClassName[] = "LabelButton"; | 59 const char LabelButton::kViewClassName[] = "LabelButton"; |
| 42 | 60 |
| 43 LabelButton::LabelButton(ButtonListener* listener, const base::string16& text) | 61 LabelButton::LabelButton(ButtonListener* listener, const base::string16& text) |
| 44 : CustomButton(listener), | 62 : CustomButton(listener), |
| 45 image_(new ImageView()), | 63 image_(new ImageView()), |
| 46 label_(new Label()), | 64 label_(new Label()), |
| 65 cached_normal_font_list_(GetDefaultNormalFontList()), |
| 66 cached_bold_font_list_(GetDefaultBoldFontList()), |
| 47 button_state_images_(), | 67 button_state_images_(), |
| 48 button_state_colors_(), | 68 button_state_colors_(), |
| 49 explicitly_set_colors_(), | 69 explicitly_set_colors_(), |
| 50 is_default_(false), | 70 is_default_(false), |
| 51 style_(STYLE_TEXTBUTTON), | 71 style_(STYLE_TEXTBUTTON), |
| 52 border_is_themed_border_(true), | 72 border_is_themed_border_(true), |
| 53 image_label_spacing_(kSpacing) { | 73 image_label_spacing_(kSpacing) { |
| 54 SetAnimationDuration(kHoverAnimationDurationMs); | 74 SetAnimationDuration(kHoverAnimationDurationMs); |
| 55 SetText(text); | 75 SetText(text); |
| 56 SetFontList(gfx::FontList()); | |
| 57 | 76 |
| 58 AddChildView(image_); | 77 AddChildView(image_); |
| 59 image_->set_interactive(false); | 78 image_->set_interactive(false); |
| 60 | 79 |
| 61 AddChildView(label_); | 80 AddChildView(label_); |
| 81 label_->SetFontList(cached_normal_font_list_); |
| 62 label_->SetAutoColorReadabilityEnabled(false); | 82 label_->SetAutoColorReadabilityEnabled(false); |
| 63 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 83 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 64 | 84 |
| 65 // Initialize the colors, border, and layout. | 85 // Initialize the colors, border, and layout. |
| 66 SetStyle(style_); | 86 SetStyle(style_); |
| 67 | 87 |
| 68 SetAccessibleName(text); | 88 SetAccessibleName(text); |
| 69 } | 89 } |
| 70 | 90 |
| 71 LabelButton::~LabelButton() {} | 91 LabelButton::~LabelButton() {} |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 GetExtraParams(params); | 509 GetExtraParams(params); |
| 490 return ui::NativeTheme::kHovered; | 510 return ui::NativeTheme::kHovered; |
| 491 } | 511 } |
| 492 | 512 |
| 493 void LabelButton::ResetCachedPreferredSize() { | 513 void LabelButton::ResetCachedPreferredSize() { |
| 494 cached_preferred_size_valid_ = false; | 514 cached_preferred_size_valid_ = false; |
| 495 cached_preferred_size_= gfx::Size(); | 515 cached_preferred_size_= gfx::Size(); |
| 496 } | 516 } |
| 497 | 517 |
| 498 } // namespace views | 518 } // namespace views |
| OLD | NEW |