From 3a16484d7dd530b0b618cd079ac54d68b1428554 Mon Sep 17 00:00:00 2001 From: Ben Gotow Date: Tue, 17 Nov 2015 15:36:52 -0800 Subject: [PATCH] fix(tray): Retina tray icon with template image for dark menu bar mode --- ...as-unread@2x.png => ic-systemtray-nylas.png} | Bin .../assets/darwin/ic-systemtray-nylas@1x.png | Bin 18081 -> 0 bytes .../system-tray/lib/tray-store.es6 | 10 ++++++++-- src/canvas-utils.coffee | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) rename internal_packages/system-tray/assets/darwin/{ic-systemtray-nylas-unread@2x.png => ic-systemtray-nylas.png} (100%) delete mode 100644 internal_packages/system-tray/assets/darwin/ic-systemtray-nylas@1x.png diff --git a/internal_packages/system-tray/assets/darwin/ic-systemtray-nylas-unread@2x.png b/internal_packages/system-tray/assets/darwin/ic-systemtray-nylas.png similarity index 100% rename from internal_packages/system-tray/assets/darwin/ic-systemtray-nylas-unread@2x.png rename to internal_packages/system-tray/assets/darwin/ic-systemtray-nylas.png diff --git a/internal_packages/system-tray/assets/darwin/ic-systemtray-nylas@1x.png b/internal_packages/system-tray/assets/darwin/ic-systemtray-nylas@1x.png deleted file mode 100644 index be245b720b09bcf7b9d94ab6b41de170b76406b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18081 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 Q&=;^WvokF;*}Ut20C2no?f?J) diff --git a/internal_packages/system-tray/lib/tray-store.es6 b/internal_packages/system-tray/lib/tray-store.es6 index 064359ca3..fb5e55a13 100644 --- a/internal_packages/system-tray/lib/tray-store.es6 +++ b/internal_packages/system-tray/lib/tray-store.es6 @@ -75,11 +75,17 @@ class TrayStore extends NylasStore { const imgHandlers = { 'darwin': ()=> { const img = new Image(); - // This is synchronous because it's a data url + // toDataUrl always returns the @1x image data, so the assets/darwin/ + // contains an "@2x" image /without/ the @2x extension img.src = this._baseIcon.toDataUrl(); const count = this._unreadCount || ''; const canvas = canvasWithSystemTrayIconAndText(img, count.toString()); - return NativeImage.createFromDataUrl(canvas.toDataURL()); + const pngData = NativeImage.createFromDataUrl(canvas.toDataURL()).toPng(); + + // creating from a buffer allows us to specify that the image is @2x + const out2x = NativeImage.createFromBuffer(pngData, 2); + out2x.setTemplateImage(true); + return out2x; }, 'default': ()=> { return unreadCount > 0 ? this._unreadIcon : this._baseIcon; diff --git a/src/canvas-utils.coffee b/src/canvas-utils.coffee index 9fffd855e..4a6363cf5 100644 --- a/src/canvas-utils.coffee +++ b/src/canvas-utils.coffee @@ -82,7 +82,7 @@ CanvasUtils = canvas = SystemTrayCanvas w = img.width h = img.height - font = '14px Nylas-Pro, sans-serif' + font = '26px Nylas-Pro, sans-serif' textWidth = if text.length > 0 then CanvasUtils.measureTextInCanvas(text, font) + 2 else 0 canvas.width = w + textWidth