| Index: ui/chromeos/network/network_icon.cc
|
| diff --git a/ui/chromeos/network/network_icon.cc b/ui/chromeos/network/network_icon.cc
|
| index 591ee14a453b6bfe93b01c961bda86d8660215d5..6f1926244f92c39bb3669fc9e0244dfc03998219 100644
|
| --- a/ui/chromeos/network/network_icon.cc
|
| +++ b/ui/chromeos/network/network_icon.cc
|
| @@ -17,13 +17,18 @@
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| #include "ui/base/webui/web_ui_util.h"
|
| +#include "ui/chromeos/material_design_icon_controller.h"
|
| #include "ui/chromeos/network/network_icon_animation.h"
|
| #include "ui/chromeos/network/network_icon_animation_observer.h"
|
| #include "ui/gfx/canvas.h"
|
| +#include "ui/gfx/color_palette.h"
|
| +#include "ui/gfx/geometry/insets.h"
|
| #include "ui/gfx/geometry/rect.h"
|
| #include "ui/gfx/geometry/size_conversions.h"
|
| +#include "ui/gfx/image/canvas_image_source.h"
|
| #include "ui/gfx/image/image_skia_operations.h"
|
| #include "ui/gfx/image/image_skia_source.h"
|
| +#include "ui/gfx/skia_util.h"
|
|
|
| using chromeos::DeviceState;
|
| using chromeos::NetworkConnectionHandler;
|
| @@ -173,12 +178,22 @@ const double kConnectingImageAlpha = 0.5;
|
| // Images for strength bars for wired networks.
|
| const int kNumBarsImages = 5;
|
|
|
| -// Imagaes for strength arcs for wireless networks.
|
| +// Images for strength arcs for wireless networks.
|
| const int kNumArcsImages = 5;
|
|
|
| // Number of discrete images to use for alpha fade animation
|
| const int kNumFadeImages = 10;
|
|
|
| +SkColor GetBaseColorForIconType(IconType icon_type) {
|
| + // TODO(estade): use kTrayIconColor and kMenuIconColor.
|
| + return icon_type == ICON_TYPE_TRAY ? SK_ColorWHITE : gfx::kChromeIconGrey;
|
| +}
|
| +
|
| +gfx::Size GetSizeForIconType(IconType icon_type) {
|
| + // TODO(estade): use kTrayIconSize and kMenuIconSize.
|
| + return icon_type == ICON_TYPE_TRAY ? gfx::Size(16, 16) : gfx::Size(20, 20);
|
| +}
|
| +
|
| //------------------------------------------------------------------------------
|
| // Classes for generating scaled images.
|
|
|
| @@ -257,6 +272,68 @@ class NetworkIconImageSource : public gfx::ImageSkiaSource {
|
| DISALLOW_COPY_AND_ASSIGN(NetworkIconImageSource);
|
| };
|
|
|
| +// Depicts a given signal strength using arcs (for WiFi connections).
|
| +class ArcsImageSource : public gfx::CanvasImageSource {
|
| + public:
|
| + ArcsImageSource(IconType icon_type, float signal_strength)
|
| + : CanvasImageSource(GetSizeForIconType(icon_type), false),
|
| + icon_type_(icon_type),
|
| + signal_strength_(signal_strength) {
|
| + DCHECK_GE(signal_strength, 0);
|
| + DCHECK_LT(signal_strength, kNumArcsImages);
|
| + }
|
| + ~ArcsImageSource() override {}
|
| +
|
| + // gfx::CanvasImageSource:
|
| + void Draw(gfx::Canvas* canvas) override {
|
| + gfx::RectF oval_bounds((gfx::Rect(size())));
|
| + // Padding between top of arc and top of canvas.
|
| + const int kIconInset = 2;
|
| + oval_bounds.Inset(gfx::Insets(kIconInset));
|
| + // Double the width and height. The new midpoint should be the former
|
| + // bottom center.
|
| + oval_bounds.Inset(-oval_bounds.width() / 2, 0, -oval_bounds.width() / 2,
|
| + -oval_bounds.height());
|
| +
|
| + const SkScalar kAngleAboveHorizontal = 51.f;
|
| + const SkScalar kStartAngle = 180.f + kAngleAboveHorizontal;
|
| + const SkScalar kSweepAngle = 180.f - 2 * kAngleAboveHorizontal;
|
| +
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + paint.setStyle(SkPaint::kFill_Style);
|
| + const SkColor base_color = GetBaseColorForIconType(icon_type_);
|
| + // Background. Skip drawing for full signal.
|
| + if (signal_strength_ != kNumArcsImages - 1) {
|
| + // TODO(estade): share this alpha with other things in ash (battery,
|
| + // etc.).
|
| + paint.setColor(SkColorSetA(base_color, 0x4D));
|
| + canvas->sk_canvas()->drawArc(gfx::RectFToSkRect(oval_bounds), kStartAngle,
|
| + kSweepAngle, true, paint);
|
| + }
|
| + // Foreground (signal strength).
|
| + if (signal_strength_ != 0) {
|
| + paint.setColor(base_color);
|
| + // Percent of the height of the background wedge that we draw the
|
| + // foreground wedge, indexed by signal strength.
|
| + static const float kWedgeHeightPercentages[] = {0.f, 0.375f, 0.5833f,
|
| + 0.75f, 1.f};
|
| + const float wedge_percent = kWedgeHeightPercentages[signal_strength_];
|
| + oval_bounds.Inset(
|
| + gfx::InsetsF((oval_bounds.height() / 2) * (1.f - wedge_percent)));
|
| + canvas->sk_canvas()->drawArc(gfx::RectFToSkRect(oval_bounds), kStartAngle,
|
| + kSweepAngle, true, paint);
|
| + }
|
| + }
|
| +
|
| + private:
|
| + IconType icon_type_;
|
| + // On a scale of 0 to kNumArcsImages - 1, how connected we are.
|
| + int signal_strength_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ArcsImageSource);
|
| +};
|
| +
|
| //------------------------------------------------------------------------------
|
| // Utilities for extracting icon images.
|
|
|
| @@ -275,15 +352,13 @@ int NumImagesForType(ImageType type) {
|
| gfx::ImageSkia* BaseImageForType(ImageType image_type, IconType icon_type) {
|
| gfx::ImageSkia* image;
|
| if (image_type == BARS) {
|
| - image = ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| - IconTypeIsDark(icon_type) ?
|
| - IDR_AURA_UBER_TRAY_NETWORK_BARS_DARK :
|
| - IDR_AURA_UBER_TRAY_NETWORK_BARS_LIGHT);
|
| + image = ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| + IconTypeIsDark(icon_type) ? IDR_AURA_UBER_TRAY_NETWORK_BARS_DARK
|
| + : IDR_AURA_UBER_TRAY_NETWORK_BARS_LIGHT);
|
| } else {
|
| - image = ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| - IconTypeIsDark(icon_type) ?
|
| - IDR_AURA_UBER_TRAY_NETWORK_ARCS_DARK :
|
| - IDR_AURA_UBER_TRAY_NETWORK_ARCS_LIGHT);
|
| + image = ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| + IconTypeIsDark(icon_type) ? IDR_AURA_UBER_TRAY_NETWORK_ARCS_DARK
|
| + : IDR_AURA_UBER_TRAY_NETWORK_ARCS_LIGHT);
|
| }
|
| return image;
|
| }
|
| @@ -299,6 +374,12 @@ ImageType ImageTypeForNetworkType(const std::string& type) {
|
| gfx::ImageSkia GetImageForIndex(ImageType image_type,
|
| IconType icon_type,
|
| int index) {
|
| + if (md_icon_controller::UseMaterialDesignNetworkIcons() &&
|
| + image_type == ARCS) {
|
| + ArcsImageSource* source = new ArcsImageSource(icon_type, index);
|
| + return gfx::ImageSkia(source, source->size());
|
| + }
|
| +
|
| int num_images = NumImagesForType(image_type);
|
| if (index < 0 || index >= num_images)
|
| return gfx::ImageSkia();
|
| @@ -309,8 +390,8 @@ gfx::ImageSkia GetImageForIndex(ImageType image_type,
|
| gfx::Rect(0, index * height, width, height));
|
| }
|
|
|
| -const gfx::ImageSkia GetConnectedImage(IconType icon_type,
|
| - const std::string& network_type) {
|
| +gfx::ImageSkia GetConnectedImage(IconType icon_type,
|
| + const std::string& network_type) {
|
| if (network_type == shill::kTypeVPN) {
|
| return *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| IDR_AURA_UBER_TRAY_NETWORK_VPN);
|
| @@ -476,8 +557,8 @@ gfx::ImageSkia GetIcon(const NetworkState* network,
|
| return *rb.GetImageSkiaNamed(IDR_AURA_UBER_TRAY_NETWORK_WIRED);
|
| } else if (network->Matches(NetworkTypePattern::Wireless())) {
|
| DCHECK(strength_index > 0);
|
| - return GetImageForIndex(
|
| - ImageTypeForNetworkType(network->type()), icon_type, strength_index);
|
| + return GetImageForIndex(ImageTypeForNetworkType(network->type()), icon_type,
|
| + strength_index);
|
| } else if (network->Matches(NetworkTypePattern::VPN())) {
|
| return *rb.GetImageSkiaNamed(IDR_AURA_UBER_TRAY_NETWORK_VPN);
|
| } else {
|
|
|