Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add API methods and support for styling of icons (Tray, MenuItem) under Mac OS X (Yosemite) Dark Mode #2775

Merged
merged 2 commits into from
Dec 11, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/api/menuitem/menuitem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ void MenuItem::Call(const std::string& method,
std::string icon;
arguments.GetString(0, &icon);
SetIcon(icon);
} else if (method == "SetIconIsTemplate") {
bool isTemplate;
arguments.GetBoolean(0, &isTemplate);
SetIconIsTemplate(isTemplate);
} else if (method == "SetTooltip") {
std::string tooltip;
arguments.GetString(0, &tooltip);
Expand Down
4 changes: 4 additions & 0 deletions src/api/menuitem/menuitem.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,15 @@ class MenuItem : public Base {
void SetChecked(bool checked);
void SetSubmenu(Menu* sub_menu);

// Template icon works only on Mac OS X
void SetIconIsTemplate(bool isTemplate);

#if defined(OS_MACOSX)
std::string type_;

NSMenuItem* menu_item_;
MenuItemDelegate* delegate_;
bool iconIsTemplate;

#elif defined(OS_WIN) || defined(OS_LINUX)
friend class MenuDelegate;
Expand Down
13 changes: 13 additions & 0 deletions src/api/menuitem/menuitem.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ function MenuItem(option) {
option.icon = nw.getAbsolutePath(option.icon);
}

if (option.hasOwnProperty('iconIsTemplate'))
option.iconIsTemplate = Boolean(option.iconIsTemplate);
else
option.iconIsTemplate = true;

if (option.hasOwnProperty('tooltip'))
option.tooltip = String(option.tooltip);

Expand Down Expand Up @@ -116,6 +121,14 @@ MenuItem.prototype.__defineSetter__('icon', function(val) {
this.handleSetter('icon', 'SetIcon', String, real_path);
});

MenuItem.prototype.__defineGetter__('iconIsTemplate', function() {
return this.handleGetter('iconIsTemplate');
});

MenuItem.prototype.__defineSetter__('iconIsTemplate', function(val) {
this.handleSetter('iconIsTemplate', 'SetIconIsTemplate', Boolean, val);
});

MenuItem.prototype.__defineGetter__('tooltip', function() {
return this.handleGetter('tooltip');
});
Expand Down
3 changes: 3 additions & 0 deletions src/api/menuitem/menuitem_gtk.cc
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@ void MenuItem::SetIcon(const std::string& icon) {
}
}

void MenuItem::SetIconIsTemplate(bool isTemplate) {
}

void MenuItem::SetTooltip(const std::string& tooltip) {
gtk_widget_set_tooltip_text(menu_item_, tooltip.c_str());
}
Expand Down
11 changes: 11 additions & 0 deletions src/api/menuitem/menuitem_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@
if (option.GetBoolean("enabled", &enabled))
SetEnabled(enabled);

bool isTemplate;
if (option.GetBoolean("iconIsTemplate", &isTemplate))
SetIconIsTemplate(isTemplate);

std::string icon;
if (option.GetString("icon", &icon) && !icon.empty())
SetIcon(icon);
Expand Down Expand Up @@ -131,13 +135,20 @@
if (!icon.empty()) {
NSImage* image = [[NSImage alloc]
initWithContentsOfFile:[NSString stringWithUTF8String:icon.c_str()]];
[image setTemplate:iconIsTemplate];
[menu_item_ setImage:image];
[image release];
} else {
[menu_item_ setImage:nil];
}
}

void MenuItem::SetIconIsTemplate(bool isTemplate) {
iconIsTemplate = isTemplate;
if ([menu_item_ image] != nil)
[[menu_item_ image] setTemplate:isTemplate];
}

void MenuItem::SetTooltip(const std::string& tooltip) {
[menu_item_ setToolTip:[NSString stringWithUTF8String:tooltip.c_str()]];
}
Expand Down
3 changes: 3 additions & 0 deletions src/api/menuitem/menuitem_views.cc
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ void MenuItem::SetIcon(const std::string& icon) {
package->GetImage(base::FilePath::FromUTF8Unsafe(icon), &icon_);
}

void MenuItem::SetIconIsTemplate(bool isTemplate) {
}

void MenuItem::SetTooltip(const std::string& tooltip) {
tooltip_ = base::UTF8ToUTF16(tooltip);
if (menu_)
Expand Down
8 changes: 8 additions & 0 deletions src/api/tray/tray.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ Tray::Tray(int id,
if (option.GetString("title", &title))
SetTitle(title);

bool areTemplates;
if (option.GetBoolean("iconsAreTemplates", &areTemplates))
SetIconsAreTemplates(areTemplates);

std::string icon;
if (option.GetString("icon", &icon) && !icon.empty())
SetIcon(icon);
Expand Down Expand Up @@ -74,6 +78,10 @@ void Tray::Call(const std::string& method,
std::string alticon;
arguments.GetString(0, &alticon);
SetAltIcon(alticon);
} else if (method == "SetIconsAreTemplates") {
bool areTemplates;
arguments.GetBoolean(0, &areTemplates);
SetIconsAreTemplates(areTemplates);
} else if (method == "SetTooltip") {
std::string tooltip;
arguments.GetString(0, &tooltip);
Expand Down
3 changes: 3 additions & 0 deletions src/api/tray/tray.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,13 @@ class Tray : public Base {
void Remove();
// Alternate icons only work with Macs
void SetAltIcon(const std::string& alticon_path);
// Template icons only work with Macs
void SetIconsAreTemplates(bool areTemplates);

#if defined(OS_MACOSX)
__block NSStatusItem* status_item_;
MacTrayObserver* status_observer_;
bool iconsAreTemplates;
#elif 0
GtkStatusIcon* status_item_;

Expand Down
13 changes: 13 additions & 0 deletions src/api/tray/tray.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ function Tray(option) {
option.alticon = nw.getAbsolutePath(option.alticon);
}

if (option.hasOwnProperty('iconsAreTemplates'))
option.iconsAreTemplates = Boolean(option.iconsAreTemplates);
else
option.iconsAreTemplates = true;

if (option.hasOwnProperty('tooltip'))
option.tooltip = String(option.tooltip);

Expand Down Expand Up @@ -103,6 +108,14 @@ Tray.prototype.__defineSetter__('alticon', function(val) {
this.handleSetter('alticon', 'SetAlticon', String, real_path);
});

Tray.prototype.__defineGetter__('iconsAreTemplates', function() {
return this.handleGetter('iconsAreTemplates');
});

Tray.prototype.__defineSetter__('iconsAreTemplates', function(val) {
this.handleSetter('iconsAreTemplates', 'SetIconsAreTemplates', Boolean, val);
});

Tray.prototype.__defineGetter__('tooltip', function() {
return this.handleGetter('tooltip');
});
Expand Down
3 changes: 3 additions & 0 deletions src/api/tray/tray_aura.cc
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,7 @@ void Tray::Remove() {
void Tray::SetAltIcon(const std::string& alticon_path) {
}

void Tray::SetIconsAreTemplates(bool areTemplates) {
}

} // namespace nwapi
3 changes: 3 additions & 0 deletions src/api/tray/tray_gtk.cc
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,7 @@ void Tray::OnPopupMenu(GtkWidget* widget, guint button, guint time) {
void Tray::SetAltIcon(const std::string& alticon_path) {
}

void Tray::SetIconsAreTemplates(bool areTemplates) {
}

} // namespace nwapi
12 changes: 12 additions & 0 deletions src/api/tray/tray_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ - (void)onClick:(id)sender {
if (!icon.empty()) {
NSImage* image = [[NSImage alloc]
initWithContentsOfFile:[NSString stringWithUTF8String:icon.c_str()]];
[image setTemplate:iconsAreTemplates];
[status_item_ setImage:image];
[image release];
} else {
Expand All @@ -83,13 +84,24 @@ - (void)onClick:(id)sender {
if (!alticon.empty()) {
NSImage* image = [[NSImage alloc]
initWithContentsOfFile:[NSString stringWithUTF8String:alticon.c_str()]];
[image setTemplate:iconsAreTemplates];
[status_item_ setAlternateImage:image];
[image release];
} else {
[status_item_ setAlternateImage:nil];
}
}

void Tray::SetIconsAreTemplates(bool areTemplates) {
iconsAreTemplates = areTemplates;
if ([status_item_ image] != nil) {
[[status_item_ image] setTemplate:areTemplates];
}
if ([status_item_ alternateImage] != nil) {
[[status_item_ alternateImage] setTemplate:areTemplates];
}
}

void Tray::SetTooltip(const std::string& tooltip) {
[status_item_ setToolTip:[NSString stringWithUTF8String:tooltip.c_str()]];
}
Expand Down