diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-23 09:52:55 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-23 09:52:55 +0000 |
commit | e5cefa0306bf61d671529028adecdb7c68bfb05d (patch) | |
tree | 50d1e5d46d436f7cd1f2830eca7dff62bb6a9640 /chrome/browser/chromeos/status | |
parent | dcddcdb0c4f20965aebedf3eade99df81f4414ec (diff) | |
download | chromium_src-e5cefa0306bf61d671529028adecdb7c68bfb05d.zip chromium_src-e5cefa0306bf61d671529028adecdb7c68bfb05d.tar.gz chromium_src-e5cefa0306bf61d671529028adecdb7c68bfb05d.tar.bz2 |
Fix badge icon logic.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/652094
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39705 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/status')
-rw-r--r-- | chrome/browser/chromeos/status/network_menu_button.cc | 90 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/network_menu_button.h | 13 |
2 files changed, 65 insertions, 38 deletions
diff --git a/chrome/browser/chromeos/status/network_menu_button.cc b/chrome/browser/chromeos/status/network_menu_button.cc index 34e1ae6..8ed86c9 100644 --- a/chrome/browser/chromeos/status/network_menu_button.cc +++ b/chrome/browser/chromeos/status/network_menu_button.cc @@ -57,7 +57,7 @@ string16 NetworkMenuButton::GetLabelAt(int index) const { } const gfx::Font* NetworkMenuButton::GetLabelFontAt(int index) const { - return (menu_items_[index].flags & FLAG_BOLD) ? + return (menu_items_[index].flags & FLAG_ASSOCIATED) ? &ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::BoldFont) : NULL; } @@ -167,31 +167,7 @@ void NetworkMenuButton::AnimationProgressed(const Animation* animation) { // NetworkMenuButton, StatusAreaButton implementation: void NetworkMenuButton::DrawIcon(gfx::Canvas* canvas) { - // Draw the network icon 4 pixels down to center it. - // Because the status icon is 24x24 but the images are 24x16. - static const int kIconVerticalPadding = 4; - canvas->DrawBitmapInt(icon(), 0, kIconVerticalPadding); - - // Draw badge at (14,14) if there is one. - static const int x = 14; - static const int y = 14; - NetworkLibrary* cros = NetworkLibrary::Get(); - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - if (cros->EnsureLoaded()) { - if (!cros->Connected()) { - canvas->DrawBitmapInt( - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED), x, y); - } else if (cros->cellular_connecting() || cros->cellular_connected()) { - // TODO(chocobo): Check cellular network 3g/edge. - canvas->DrawBitmapInt( - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G), x, y); -// canvas->DrawBitmapInt( -// *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE), x, y); - } - } else { - canvas->DrawBitmapInt( - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_WARNING), x, y); - } + canvas->DrawBitmapInt(IconForDisplay(icon(), badge()), 0, 0); } // Override the DrawIcon method to draw the wifi icon. @@ -311,8 +287,20 @@ void NetworkMenuButton::NetworkChanged(NetworkLibrary* cros) { else SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); } + + if (!cros->Connected() && !cros->Connecting()) { + SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED)); + } else if (!cros->ethernet_connected() && !cros->wifi_connected() && + (cros->cellular_connecting() || cros->cellular_connected())) { + // TODO(chocobo): Check cellular network 3g/edge. + SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G)); +// SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE)); + } else { + SetBadge(SkBitmap()); + } } else { SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); + SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_WARNING)); } SchedulePaint(); @@ -333,6 +321,10 @@ void NetworkMenuButton::NetworkTraffic(NetworkLibrary* cros, int traffic_type) { */ } +void NetworkMenuButton::SetBadge(const SkBitmap& badge) { + badge_ = badge; +} + // static SkBitmap NetworkMenuButton::IconForNetworkStrength(int strength, bool black) { // Compose wifi icon by superimposing various icons. @@ -347,6 +339,26 @@ SkBitmap NetworkMenuButton::IconForNetworkStrength(int strength, bool black) { return *ResourceBundle::GetSharedInstance().GetBitmapNamed(base + index); } +// static +SkBitmap NetworkMenuButton::IconForDisplay(SkBitmap icon, SkBitmap badge) { + // Icons are 24x24. + static const int kIconWidth = 24; + static const int kIconHeight = 24; + // Draw the network icon 4 pixels down to center it. + // Because the status icon is 24x24 but the images are 24x16. + static const int kIconX = 0; + static const int kIconY = 4; + // Draw badge at (14,14). + static const int kBadgeX = 14; + static const int kBadgeY = 14; + + gfx::Canvas canvas(kIconWidth, kIconHeight, false); + canvas.DrawBitmapInt(icon, kIconX, kIconY); + if (!badge.empty()) + canvas.DrawBitmapInt(badge, kBadgeX, kBadgeY); + return canvas.ExtractBitmap(); +} + //////////////////////////////////////////////////////////////////////////////// // NetworkMenuButton, views::ViewMenuDelegate implementation: @@ -368,24 +380,25 @@ void NetworkMenuButton::InitMenuItems() { // Ethernet string16 label = l10n_util::GetStringUTF16( IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); - SkBitmap icon = cros->ethernet_connecting() || cros->ethernet_connected() ? - *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK) : - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); + SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK); + SkBitmap badge = cros->ethernet_connecting() || cros->ethernet_connected() ? + SkBitmap() : *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); int flag = (cros->ethernet_connecting() || cros->ethernet_connected()) ? - FLAG_ETHERNET & FLAG_BOLD : FLAG_ETHERNET; + FLAG_ETHERNET | FLAG_ASSOCIATED : FLAG_ETHERNET; menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - icon, WifiNetwork(), CellularNetwork(), flag)); + IconForDisplay(icon, badge), WifiNetwork(), CellularNetwork(), flag)); // Wifi const WifiNetworkVector& wifi_networks = cros->wifi_networks(); // Wifi networks ssids. for (size_t i = 0; i < wifi_networks.size(); ++i) { label = ASCIIToUTF16(wifi_networks[i].ssid); + SkBitmap icon = IconForNetworkStrength(wifi_networks[i].strength, true); flag = (wifi_networks[i].ssid == cros->wifi_ssid()) ? - FLAG_WIFI & FLAG_BOLD : FLAG_WIFI; + FLAG_WIFI | FLAG_ASSOCIATED : FLAG_WIFI; menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - IconForNetworkStrength(wifi_networks[i].strength, true), - wifi_networks[i], CellularNetwork(), flag)); + IconForDisplay(icon, SkBitmap()), wifi_networks[i], CellularNetwork(), + flag)); } // Cellular @@ -393,11 +406,14 @@ void NetworkMenuButton::InitMenuItems() { // Cellular networks ssids. for (size_t i = 0; i < cell_networks.size(); ++i) { label = ASCIIToUTF16(cell_networks[i].name); + SkBitmap icon = IconForNetworkStrength(cell_networks[i].strength, true); + // TODO(chocobo): Check cellular network 3g/edge. + SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G); +// SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE); flag = (cell_networks[i].name == cros->cellular_name()) ? - FLAG_CELLULAR & FLAG_BOLD : FLAG_CELLULAR; + FLAG_CELLULAR | FLAG_ASSOCIATED : FLAG_CELLULAR; menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - IconForNetworkStrength(cell_networks[i].strength, true), - WifiNetwork(), cell_networks[i], flag)); + IconForDisplay(icon, badge), WifiNetwork(), cell_networks[i], flag)); } // No networks available message. diff --git a/chrome/browser/chromeos/status/network_menu_button.h b/chrome/browser/chromeos/status/network_menu_button.h index 072cb5f..c206818 100644 --- a/chrome/browser/chromeos/status/network_menu_button.h +++ b/chrome/browser/chromeos/status/network_menu_button.h @@ -93,6 +93,10 @@ class NetworkMenuButton : public StatusAreaButton, virtual void NetworkChanged(NetworkLibrary* obj); virtual void NetworkTraffic(NetworkLibrary* cros, int traffic_type); + // Sets the badge icon. + void SetBadge(const SkBitmap& badge); + SkBitmap badge() const { return badge_; } + protected: // StatusAreaButton implementation. virtual void DrawIcon(gfx::Canvas* canvas); @@ -104,7 +108,7 @@ class NetworkMenuButton : public StatusAreaButton, FLAG_TOGGLE_WIFI = 1 << 2, FLAG_TOGGLE_CELLULAR = 1 << 3, FLAG_TOGGLE_OFFLINE = 1 << 4, - FLAG_BOLD = 1 << 5, + FLAG_ASSOCIATED = 1 << 5, FLAG_ETHERNET = 1 << 6, FLAG_WIFI = 1 << 7, FLAG_CELLULAR = 1 << 8, @@ -139,6 +143,10 @@ class NetworkMenuButton : public StatusAreaButton, // on a light background or a white icon for display on a dark background. static SkBitmap IconForNetworkStrength(int strength, bool black); + // This method will convert the |icon| bitmap to the correct size for display. + // If the |badge| icon is not empty, it will draw that on top of the icon. + static SkBitmap IconForDisplay(SkBitmap icon, SkBitmap badge); + // views::ViewMenuDelegate implementation. virtual void RunMenu(views::View* source, const gfx::Point& pt); @@ -163,6 +171,9 @@ class NetworkMenuButton : public StatusAreaButton, // The network menu. views::Menu2 network_menu_; + // A badge icon displayed on top of the icon. + SkBitmap badge_; + // The throb animation that does the wifi connecting animation. ThrobAnimation animation_connecting_; |