Chromium Code Reviews| Index: chrome/browser/chromeos/status/status_area_button.cc |
| diff --git a/chrome/browser/chromeos/status/status_area_button.cc b/chrome/browser/chromeos/status/status_area_button.cc |
| index 3abf6dd864a52267233ac0ef338a69c145605a5b..69498966a0bec3d930059319584bdc197cb127a9 100644 |
| --- a/chrome/browser/chromeos/status/status_area_button.cc |
| +++ b/chrome/browser/chromeos/status/status_area_button.cc |
| @@ -1,10 +1,12 @@ |
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| #include "chrome/browser/chromeos/status/status_area_button.h" |
| +#include "content/common/notification_service.h" |
| #include "grit/theme_resources.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| #include "ui/gfx/canvas.h" |
| #include "ui/gfx/skbitmap_operations.h" |
| #include "views/border.h" |
| @@ -12,22 +14,40 @@ |
| namespace chromeos { |
| -// A 0.7 black to decorate status text. Same color is used for icon borders. |
| -static const SkColor kStatusTextHaloColor = SkColorSetARGB(0xB3, 0, 0, 0); |
| +// Colors for different text styles. |
| +static const SkColor kWhitePlainTextColor = 0x99ffffff; |
| +static const SkColor kWhiteHaloedTextColor = 0xb3ffffff; |
| +static const SkColor kWhiteHaloedHaloColor = 0xb3000000; |
| +static const SkColor kGrayEmbossedTextColor = 0xff4c4c4c; |
| +static const SkColor kGrayEmbossedShadowColor = 0x80ffffff; |
| + |
| +// Status area font is bigger. |
| +const int kFontSizeDelta = 1; |
| //////////////////////////////////////////////////////////////////////////////// |
| // StatusAreaButton |
| -StatusAreaButton::StatusAreaButton(views::ViewMenuDelegate* menu_delegate) |
| - : MenuButton(NULL, std::wstring(), menu_delegate, false), |
| - use_menu_button_paint_(false), active_(true) { |
| +StatusAreaButton::StatusAreaButton( |
| + StatusAreaHost* host, views::ViewMenuDelegate* menu_delegate) |
| + : MenuButton(NULL, std::wstring(), |
| + menu_delegate, false), |
|
sky
2011/05/02 14:26:27
indent to make clear part of MenuButton.
|
| + use_menu_button_paint_(false), |
| + active_(true), |
| + host_(host) { |
| + set_border(NULL); |
| + set_use_menu_button_paint(true); |
| + gfx::Font font = |
| + ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::BaseFont); |
| + font = font.DeriveFont(3, gfx::Font::BOLD); |
| + SetFont(font); |
| + SetShowMultipleIconStates(false); |
| + set_alignment(TextButton::ALIGN_CENTER); |
| set_border(NULL); |
| // Use an offset that is top aligned with toolbar. |
| - set_menu_offset(0, 2); |
| + set_menu_offset(0, 4); |
| - // Use a halo for status text as the icons. |
| - SetTextHaloColor(kStatusTextHaloColor); |
| + UpdateTextStyle(); |
| } |
| void StatusAreaButton::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { |
| @@ -45,6 +65,25 @@ void StatusAreaButton::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { |
| } |
| } |
| +void StatusAreaButton::SetText(const std::wstring& text) { |
| + // TextButtons normally remember the max text size, so the button's preferred |
| + // size will always be as large as the largest text ever put in it. |
| + // We clear that max text size, so we can adjust the size to fit the text. |
| + // The order is important. ClearMaxTextSize sets the size to that of the |
| + // current text, so it must be called after SetText. |
| + views::MenuButton::SetText(text); |
| + ClearMaxTextSize(); |
| + PreferredSizeChanged(); |
| +} |
| + |
| +bool StatusAreaButton::Activate() { |
| + if (active_) { |
| + return views::MenuButton::Activate(); |
| + } else { |
| + return true; |
| + } |
| +} |
| + |
| gfx::Size StatusAreaButton::GetPreferredSize() { |
| gfx::Insets insets = views::MenuButton::GetInsets(); |
| gfx::Size prefsize(icon_width() + insets.width(), |
| @@ -75,22 +114,25 @@ gfx::Insets StatusAreaButton::GetInsets() const { |
| return insets_; |
| } |
| -void StatusAreaButton::SetText(const std::wstring& text) { |
| - // TextButtons normally remember the max text size, so the button's preferred |
| - // size will always be as large as the largest text ever put in it. |
| - // We clear that max text size, so we can adjust the size to fit the text. |
| - // The order is important. ClearMaxTextSize sets the size to that of the |
| - // current text, so it must be called after SetText. |
| - views::MenuButton::SetText(text); |
| - ClearMaxTextSize(); |
| - PreferredSizeChanged(); |
| +void StatusAreaButton::OnThemeChanged() { |
| + UpdateTextStyle(); |
| } |
| -bool StatusAreaButton::Activate() { |
| - if (active_) { |
| - return views::MenuButton::Activate(); |
| - } else { |
| - return true; |
| +void StatusAreaButton::UpdateTextStyle() { |
| + ClearEmbellishing(); |
| + switch (host_->GetTextStyle()) { |
| + case StatusAreaHost::kWhitePlain: |
| + SetEnabledColor(kWhitePlainTextColor); |
| + break; |
| + case StatusAreaHost::kWhiteHaloed: |
| + SetEnabledColor(kWhiteHaloedTextColor); |
| + SetTextHaloColor(kWhiteHaloedHaloColor); |
| + break; |
| + case StatusAreaHost::kGrayEmbossed: |
| + SetEnabledColor(kGrayEmbossedTextColor); |
| + SetTextShadowColors(kGrayEmbossedShadowColor, kGrayEmbossedShadowColor); |
| + SetTextShadowOffset(0, 1); |
| + break; |
| } |
| } |