Use gfx::Image instead of gfx::ImageSkia in API

The gfx::Image can use NSImage directly as underlying format, so we
don't have to decode images ourselves on Mac, and we will also be able
to make use of template images.
This commit is contained in:
Cheng Zhao 2015-01-02 18:43:56 -08:00
parent 3d7da455bc
commit ab83b21fa6
10 changed files with 35 additions and 40 deletions

View file

@ -12,6 +12,7 @@
#include "atom/common/native_mate_converters/string16_converter.h" #include "atom/common/native_mate_converters/string16_converter.h"
#include "native_mate/constructor.h" #include "native_mate/constructor.h"
#include "native_mate/dictionary.h" #include "native_mate/dictionary.h"
#include "ui/gfx/image/image.h"
#include "atom/common/node_includes.h" #include "atom/common/node_includes.h"
@ -19,7 +20,7 @@ namespace atom {
namespace api { namespace api {
Tray::Tray(const gfx::ImageSkia& image) Tray::Tray(const gfx::Image& image)
: tray_icon_(TrayIcon::Create()) { : tray_icon_(TrayIcon::Create()) {
tray_icon_->SetImage(image); tray_icon_->SetImage(image);
tray_icon_->AddObserver(this); tray_icon_->AddObserver(this);
@ -29,7 +30,7 @@ Tray::~Tray() {
} }
// static // static
mate::Wrappable* Tray::New(const gfx::ImageSkia& image) { mate::Wrappable* Tray::New(const gfx::Image& image) {
return new Tray(image); return new Tray(image);
} }
@ -57,13 +58,13 @@ void Tray::Destroy() {
tray_icon_.reset(); tray_icon_.reset();
} }
void Tray::SetImage(mate::Arguments* args, const gfx::ImageSkia& image) { void Tray::SetImage(mate::Arguments* args, const gfx::Image& image) {
if (!CheckTrayLife(args)) if (!CheckTrayLife(args))
return; return;
tray_icon_->SetImage(image); tray_icon_->SetImage(image);
} }
void Tray::SetPressedImage(mate::Arguments* args, const gfx::ImageSkia& image) { void Tray::SetPressedImage(mate::Arguments* args, const gfx::Image& image) {
if (!CheckTrayLife(args)) if (!CheckTrayLife(args))
return; return;
tray_icon_->SetPressedImage(image); tray_icon_->SetPressedImage(image);
@ -92,7 +93,7 @@ void Tray::DisplayBalloon(mate::Arguments* args,
if (!CheckTrayLife(args)) if (!CheckTrayLife(args))
return; return;
gfx::ImageSkia icon; gfx::Image icon;
options.Get("icon", &icon); options.Get("icon", &icon);
base::string16 title, content; base::string16 title, content;
if (!options.Get("title", &title) || if (!options.Get("title", &title) ||

View file

@ -12,7 +12,7 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
namespace gfx { namespace gfx {
class ImageSkia; class Image;
} }
namespace mate { namespace mate {
@ -31,13 +31,13 @@ class Menu;
class Tray : public mate::EventEmitter, class Tray : public mate::EventEmitter,
public TrayIconObserver { public TrayIconObserver {
public: public:
static mate::Wrappable* New(const gfx::ImageSkia& image); static mate::Wrappable* New(const gfx::Image& image);
static void BuildPrototype(v8::Isolate* isolate, static void BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype); v8::Handle<v8::ObjectTemplate> prototype);
protected: protected:
explicit Tray(const gfx::ImageSkia& image); explicit Tray(const gfx::Image& image);
virtual ~Tray(); virtual ~Tray();
// TrayIconObserver: // TrayIconObserver:
@ -48,8 +48,8 @@ class Tray : public mate::EventEmitter,
void OnBalloonClosed() override; void OnBalloonClosed() override;
void Destroy(); void Destroy();
void SetImage(mate::Arguments* args, const gfx::ImageSkia& image); void SetImage(mate::Arguments* args, const gfx::Image& image);
void SetPressedImage(mate::Arguments* args, const gfx::ImageSkia& image); void SetPressedImage(mate::Arguments* args, const gfx::Image& image);
void SetToolTip(mate::Arguments* args, const std::string& tool_tip); void SetToolTip(mate::Arguments* args, const std::string& tool_tip);
void SetTitle(mate::Arguments* args, const std::string& title); void SetTitle(mate::Arguments* args, const std::string& title);
void SetHighlightMode(mate::Arguments* args, bool highlight); void SetHighlightMode(mate::Arguments* args, bool highlight);

View file

@ -12,7 +12,7 @@ TrayIcon::TrayIcon() {
TrayIcon::~TrayIcon() { TrayIcon::~TrayIcon() {
} }
void TrayIcon::SetPressedImage(const gfx::ImageSkia& image) { void TrayIcon::SetPressedImage(const gfx::Image& image) {
} }
void TrayIcon::SetTitle(const std::string& title) { void TrayIcon::SetTitle(const std::string& title) {
@ -21,7 +21,7 @@ void TrayIcon::SetTitle(const std::string& title) {
void TrayIcon::SetHighlightMode(bool highlight) { void TrayIcon::SetHighlightMode(bool highlight) {
} }
void TrayIcon::DisplayBalloon(const gfx::ImageSkia& icon, void TrayIcon::DisplayBalloon(const gfx::Image& icon,
const base::string16& title, const base::string16& title,
const base::string16& contents) { const base::string16& contents) {
} }

View file

@ -20,10 +20,10 @@ class TrayIcon {
virtual ~TrayIcon(); virtual ~TrayIcon();
// Sets the image associated with this status icon. // Sets the image associated with this status icon.
virtual void SetImage(const gfx::ImageSkia& image) = 0; virtual void SetImage(const gfx::Image& image) = 0;
// Sets the image associated with this status icon when pressed. // Sets the image associated with this status icon when pressed.
virtual void SetPressedImage(const gfx::ImageSkia& image); virtual void SetPressedImage(const gfx::Image& image);
// Sets the hover text for this status icon. This is also used as the label // Sets the hover text for this status icon. This is also used as the label
// for the menu item which is created as a replacement for the status icon // for the menu item which is created as a replacement for the status icon
@ -41,7 +41,7 @@ class TrayIcon {
// Displays a notification balloon with the specified contents. // Displays a notification balloon with the specified contents.
// Depending on the platform it might not appear by the icon tray. // Depending on the platform it might not appear by the icon tray.
virtual void DisplayBalloon(const gfx::ImageSkia& icon, virtual void DisplayBalloon(const gfx::Image& icon,
const base::string16& title, const base::string16& title,
const base::string16& contents); const base::string16& contents);

View file

@ -22,8 +22,8 @@ class TrayIconCocoa : public TrayIcon {
TrayIconCocoa(); TrayIconCocoa();
virtual ~TrayIconCocoa(); virtual ~TrayIconCocoa();
virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE; virtual void SetImage(const gfx::Image& image) OVERRIDE;
virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE; virtual void SetPressedImage(const gfx::Image& image) OVERRIDE;
virtual void SetToolTip(const std::string& tool_tip) OVERRIDE; virtual void SetToolTip(const std::string& tool_tip) OVERRIDE;
virtual void SetTitle(const std::string& title) OVERRIDE; virtual void SetTitle(const std::string& title) OVERRIDE;
virtual void SetHighlightMode(bool highlight) OVERRIDE; virtual void SetHighlightMode(bool highlight) OVERRIDE;

View file

@ -53,20 +53,14 @@ TrayIconCocoa::~TrayIconCocoa() {
[[NSStatusBar systemStatusBar] removeStatusItem:item_]; [[NSStatusBar systemStatusBar] removeStatusItem:item_];
} }
void TrayIconCocoa::SetImage(const gfx::ImageSkia& image) { void TrayIconCocoa::SetImage(const gfx::Image& image) {
if (!image.isNull()) { if (!image.IsEmpty())
gfx::Image neutral(image); [item_ setImage:image.ToNSImage()];
if (!neutral.IsEmpty())
[item_ setImage:neutral.ToNSImage()];
}
} }
void TrayIconCocoa::SetPressedImage(const gfx::ImageSkia& image) { void TrayIconCocoa::SetPressedImage(const gfx::Image& image) {
if (!image.isNull()) { if (!image.IsEmpty())
gfx::Image neutral(image); [item_ setAlternateImage:image.ToNSImage()];
if (!neutral.IsEmpty())
[item_ setAlternateImage:neutral.ToNSImage()];
}
} }
void TrayIconCocoa::SetToolTip(const std::string& tool_tip) { void TrayIconCocoa::SetToolTip(const std::string& tool_tip) {

View file

@ -17,9 +17,9 @@ TrayIconGtk::TrayIconGtk() {
TrayIconGtk::~TrayIconGtk() { TrayIconGtk::~TrayIconGtk() {
} }
void TrayIconGtk::SetImage(const gfx::ImageSkia& image) { void TrayIconGtk::SetImage(const gfx::Image& image) {
if (icon_) { if (icon_) {
icon_->SetImage(image); icon_->SetImage(image.AsImageSkia());
return; return;
} }

View file

@ -23,7 +23,7 @@ class TrayIconGtk : public TrayIcon,
virtual ~TrayIconGtk(); virtual ~TrayIconGtk();
// TrayIcon: // TrayIcon:
virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE; virtual void SetImage(const gfx::Image& image) OVERRIDE;
virtual void SetToolTip(const std::string& tool_tip) OVERRIDE; virtual void SetToolTip(const std::string& tool_tip) OVERRIDE;
virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) OVERRIDE; virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) OVERRIDE;

View file

@ -90,19 +90,19 @@ void NotifyIcon::ResetIcon() {
LOG(WARNING) << "Unable to re-create status tray icon."; LOG(WARNING) << "Unable to re-create status tray icon.";
} }
void NotifyIcon::SetImage(const gfx::ImageSkia& image) { void NotifyIcon::SetImage(const gfx::Image& image) {
// Create the icon. // Create the icon.
NOTIFYICONDATA icon_data; NOTIFYICONDATA icon_data;
InitIconData(&icon_data); InitIconData(&icon_data);
icon_data.uFlags = NIF_ICON; icon_data.uFlags = NIF_ICON;
icon_.Set(IconUtil::CreateHICONFromSkBitmap(*image.bitmap())); icon_.Set(IconUtil::CreateHICONFromSkBitmap(image.AsBitmap()));
icon_data.hIcon = icon_.Get(); icon_data.hIcon = icon_.Get();
BOOL result = Shell_NotifyIcon(NIM_MODIFY, &icon_data); BOOL result = Shell_NotifyIcon(NIM_MODIFY, &icon_data);
if (!result) if (!result)
LOG(WARNING) << "Error setting status tray icon image"; LOG(WARNING) << "Error setting status tray icon image";
} }
void NotifyIcon::SetPressedImage(const gfx::ImageSkia& image) { void NotifyIcon::SetPressedImage(const gfx::Image& image) {
// Ignore pressed images, since the standard on Windows is to not highlight // Ignore pressed images, since the standard on Windows is to not highlight
// pressed status icons. // pressed status icons.
} }
@ -118,7 +118,7 @@ void NotifyIcon::SetToolTip(const std::string& tool_tip) {
LOG(WARNING) << "Unable to set tooltip for status tray icon"; LOG(WARNING) << "Unable to set tooltip for status tray icon";
} }
void NotifyIcon::DisplayBalloon(const gfx::ImageSkia& icon, void NotifyIcon::DisplayBalloon(const gfx::Image& icon,
const base::string16& title, const base::string16& title,
const base::string16& contents) { const base::string16& contents) {
NOTIFYICONDATA icon_data; NOTIFYICONDATA icon_data;
@ -131,7 +131,7 @@ void NotifyIcon::DisplayBalloon(const gfx::ImageSkia& icon,
base::win::Version win_version = base::win::GetVersion(); base::win::Version win_version = base::win::GetVersion();
if (!icon.isNull() && win_version != base::win::VERSION_PRE_XP) { if (!icon.isNull() && win_version != base::win::VERSION_PRE_XP) {
balloon_icon_.Set(IconUtil::CreateHICONFromSkBitmap(*icon.bitmap())); balloon_icon_.Set(IconUtil::CreateHICONFromSkBitmap(icon.AsBitmap()));
icon_data.hBalloonIcon = balloon_icon_.Get(); icon_data.hBalloonIcon = balloon_icon_.Get();
icon_data.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; icon_data.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON;
} }

View file

@ -43,10 +43,10 @@ class NotifyIcon : public TrayIcon {
UINT message_id() const { return message_id_; } UINT message_id() const { return message_id_; }
// Overridden from TrayIcon: // Overridden from TrayIcon:
void SetImage(const gfx::ImageSkia& image) override; void SetImage(const gfx::Image& image) override;
void SetPressedImage(const gfx::ImageSkia& image) override; void SetPressedImage(const gfx::Image& image) override;
void SetToolTip(const std::string& tool_tip) override; void SetToolTip(const std::string& tool_tip) override;
void DisplayBalloon(const gfx::ImageSkia& icon, void DisplayBalloon(const gfx::Image& icon,
const base::string16& title, const base::string16& title,
const base::string16& contents) override; const base::string16& contents) override;
void SetContextMenu(ui::SimpleMenuModel* menu_model) override; void SetContextMenu(ui::SimpleMenuModel* menu_model) override;