Chromium Code Reviews| Index: chrome/browser/chromeos/status/network_menu.cc |
| =================================================================== |
| --- chrome/browser/chromeos/status/network_menu.cc (revision 76240) |
| +++ chrome/browser/chromeos/status/network_menu.cc (working copy) |
| @@ -80,6 +80,15 @@ |
| }; |
| */ |
| +// static |
| +const int NetworkMenu::kNumAnimatingImages = 10; |
| + |
| +// static |
| +SkBitmap NetworkMenu::kAnimatingImages[kNumAnimatingImages]; |
| + |
| +// static |
| +SkBitmap NetworkMenu::kAnimatingImagesBlack[kNumAnimatingImages]; |
| + |
| NetworkMenu::NetworkMenu() |
| : min_width_(-1) { |
| use_settings_ui_ = !CommandLine::ForCurrentProcess()->HasSwitch( |
| @@ -355,11 +364,11 @@ |
| } |
| // static |
|
stevenjb
2011/02/28 23:02:37
nit: Because we rely on IconForFoo returning non-N
Charlie Lee
2011/02/28 23:54:13
Done.
|
| -SkBitmap NetworkMenu::IconForNetworkStrength(const WifiNetwork* wifi, |
| - bool black) { |
| +const SkBitmap* NetworkMenu::IconForNetworkStrength(const WifiNetwork* wifi, |
| + bool black) { |
| DCHECK(wifi); |
| if (wifi->strength() == 0) { |
| - return *ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : |
| IDR_STATUSBAR_NETWORK_BARS0); |
| } |
| @@ -367,17 +376,17 @@ |
| nextafter(static_cast<float>(kNumBarsImages), 0)); |
| index = std::max(std::min(index, kNumBarsImages - 1), 0); |
| const int* images = black ? kBarsImagesBlack : kBarsImages; |
| - return *ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); |
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); |
| } |
| // static |
| -SkBitmap NetworkMenu::IconForNetworkStrength(const CellularNetwork* cellular, |
| - bool black) { |
| +const SkBitmap* NetworkMenu::IconForNetworkStrength( |
| + const CellularNetwork* cellular, bool black) { |
| DCHECK(cellular); |
| // If no data, then we show 0 bars. |
| if (cellular->strength() == 0 || |
| cellular->data_left() == CellularNetwork::DATA_NONE) { |
| - return *ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : |
| IDR_STATUSBAR_NETWORK_BARS0); |
| } |
| @@ -385,30 +394,43 @@ |
| nextafter(static_cast<float>(kNumBarsImages), 0)); |
| index = std::max(std::min(index, kNumBarsImages - 1), 0); |
| const int* images = black ? kBarsImagesBlack : kBarsImages; |
| - return *ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); |
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); |
| } |
| // static |
| -SkBitmap NetworkMenu::IconForNetworkConnecting(double animation_value, |
| - bool black) { |
| +const SkBitmap* NetworkMenu::IconForNetworkConnecting(double animation_value, |
| + bool black) { |
| // Draw animation of bars icon fading in and out. |
| // We are fading between 0 bars and a third of the opacity of 4 bars. |
| // Use the current value of the animation to calculate the alpha value |
| // of how transparent the icon is. |
| - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| - return SkBitmapOperations::CreateBlendedBitmap( |
| - *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : |
| - IDR_STATUSBAR_NETWORK_BARS0), |
| - *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS4_BLACK : |
| - IDR_STATUSBAR_NETWORK_BARS4), |
| - animation_value / 3); |
| + |
| + int index = static_cast<int>(animation_value * |
| + nextafter(static_cast<float>(kNumAnimatingImages), 0)); |
| + index = std::max(std::min(index, kNumAnimatingImages - 1), 0); |
| + |
| + SkBitmap* images = black ? kAnimatingImagesBlack : kAnimatingImages; |
| + // Lazily cache images. |
| + if (images[index].empty()) { |
| + // Divide index (0-9) by 9 (assume kNumAnimatingImages==10) to get (0.0-1.0) |
| + // Then we take a third of that for the alpha value. |
| + double alpha = static_cast<double>(index) / (kNumAnimatingImages - 1) / 3; |
|
stevenjb
2011/02/28 23:02:37
nit: parens are helpful around multiple / operator
Charlie Lee
2011/02/28 23:54:13
Done.
|
| + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
|
stevenjb
2011/02/28 23:02:37
nit: const&
Charlie Lee
2011/02/28 23:54:13
Can't. GetBitmapNamed is not a const function.
On
|
| + images[index] = SkBitmapOperations::CreateBlendedBitmap( |
| + *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : |
| + IDR_STATUSBAR_NETWORK_BARS0), |
| + *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS4_BLACK : |
| + IDR_STATUSBAR_NETWORK_BARS4), |
| + alpha); |
| + } |
| + return &images[index]; |
| } |
| // static |
| -SkBitmap NetworkMenu::BadgeForNetworkTechnology( |
| +const SkBitmap* NetworkMenu::BadgeForNetworkTechnology( |
| const CellularNetwork* cellular) { |
| if (!cellular) |
| - return SkBitmap(); |
| + return NULL; |
| int id = -1; |
| switch (cellular->network_technology()) { |
| @@ -471,21 +493,25 @@ |
| break; |
| } |
| if (id == -1) |
| - return SkBitmap(); |
| + return NULL; |
| else |
| - return *ResourceBundle::GetSharedInstance().GetBitmapNamed(id); |
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed(id); |
| } |
| // static |
| -SkBitmap NetworkMenu::IconForDisplay(SkBitmap icon, SkBitmap badge) { |
| +SkBitmap NetworkMenu::IconForDisplay(const SkBitmap* icon, |
| + const SkBitmap* badge) { |
| + DCHECK(icon); |
| + if (badge == NULL) |
| + return *icon; |
| + |
| // Draw badge at (14,14). |
| static const int kBadgeX = 14; |
| static const int kBadgeY = 14; |
| - gfx::CanvasSkia canvas(icon.width(), icon.height(), false); |
| - canvas.DrawBitmapInt(icon, 0, 0); |
| - if (!badge.empty()) |
| - canvas.DrawBitmapInt(badge, kBadgeX, kBadgeY); |
| + gfx::CanvasSkia canvas(icon->width(), icon->height(), false); |
| + canvas.DrawBitmapInt(*icon, 0, 0); |
| + canvas.DrawBitmapInt(*badge, kBadgeX, kBadgeY); |
| return canvas.ExtractBitmap(); |
| } |
| @@ -546,9 +572,9 @@ |
| } else { |
| label = l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); |
| } |
| - SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK); |
| - SkBitmap badge = ethernet_connecting || ethernet_connected ? |
| - SkBitmap() : *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); |
| + const SkBitmap* icon = rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK); |
| + const SkBitmap* badge = ethernet_connecting || ethernet_connected ? |
| + NULL : rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); |
| int flag = FLAG_ETHERNET; |
| if (ethernet_connecting || ethernet_connected) |
| flag |= FLAG_ASSOCIATED; |
| @@ -584,9 +610,9 @@ |
| } |
| } |
| - SkBitmap icon = IconForNetworkStrength(wifi_networks[i], true); |
| - SkBitmap badge = wifi_networks[i]->encrypted() ? |
| - *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : SkBitmap(); |
| + const SkBitmap* icon = IconForNetworkStrength(wifi_networks[i], true); |
| + const SkBitmap* badge = wifi_networks[i]->encrypted() ? |
| + rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : NULL; |
| int flag = FLAG_WIFI; |
| if (!wifi_networks[i]->connectable()) |
| flag |= FLAG_DISABLED; |
| @@ -644,8 +670,8 @@ |
| } |
| } |
| - SkBitmap icon = IconForNetworkStrength(cell_networks[i], true); |
| - SkBitmap badge = BadgeForNetworkTechnology(cell_networks[i]); |
| + const SkBitmap* icon = IconForNetworkStrength(cell_networks[i], true); |
| + const SkBitmap* badge = BadgeForNetworkTechnology(cell_networks[i]); |
| int flag = FLAG_CELLULAR; |
| if (!cell_networks[i]->connectable()) |
| flag |= FLAG_DISABLED; |
| @@ -692,8 +718,7 @@ |
| menu_items_.push_back(MenuItem( |
| ui::MenuModel::TYPE_COMMAND, |
| l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_OTHER_NETWORKS), |
| - IconForDisplay(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0_BLACK), |
| - SkBitmap()), |
| + *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0_BLACK), |
| std::string(), FLAG_OTHER_NETWORK)); |
| } |