From 509ce0d5cb80d7ec46357c56536665f24e253839 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 12 Feb 2015 12:24:18 +0800 Subject: [PATCH] mac: Don't rely on NSImage to read file It doesn't work with asar. --- atom/common/api/atom_api_native_image.cc | 18 ++++++++++---- atom/common/api/atom_api_native_image.h | 5 ++++ atom/common/api/atom_api_native_image_mac.mm | 26 ++------------------ 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/atom/common/api/atom_api_native_image.cc b/atom/common/api/atom_api_native_image.cc index 32b8823fc88..821417d524c 100644 --- a/atom/common/api/atom_api_native_image.cc +++ b/atom/common/api/atom_api_native_image.cc @@ -28,7 +28,6 @@ namespace api { namespace { -#if !defined(OS_MACOSX) struct ScaleFactorPair { const char* name; float scale; @@ -102,7 +101,13 @@ bool PopulateImageSkiaRepsFromPath(gfx::ImageSkia* image, pair.scale); return succeed; } -#endif // !defined(OS_MACOSX) + +#if defined(OS_MACOSX) +bool IsTemplateImage(const base::FilePath& path) { + return (MatchPattern(path.value(), "*Template.*") || + MatchPattern(path.value(), "*Template@*x.*")); +} +#endif v8::Persistent template_; @@ -175,15 +180,18 @@ mate::Handle NativeImage::CreateFromJPEG( return Create(isolate, image); } -#if !defined(OS_MACOSX) // static mate::Handle NativeImage::CreateFromPath( v8::Isolate* isolate, const base::FilePath& path) { gfx::ImageSkia image_skia; PopulateImageSkiaRepsFromPath(&image_skia, path); - return Create(isolate, gfx::Image(image_skia)); + gfx::Image image(image_skia); +#if defined(OS_MACOSX) + if (IsTemplateImage(path)) + MakeTemplateImage(&image); +#endif + return Create(isolate, image); } -#endif // !defined(OS_MACOSX) } // namespace api diff --git a/atom/common/api/atom_api_native_image.h b/atom/common/api/atom_api_native_image.h index e4417611aed..615ac0762fb 100644 --- a/atom/common/api/atom_api_native_image.h +++ b/atom/common/api/atom_api_native_image.h @@ -46,6 +46,11 @@ class NativeImage : public mate::Wrappable { v8::Isolate* isolate) override; private: +#if defined(OS_MACOSX) + // Mark the image as template image if possible. + static void MakeTemplateImage(gfx::Image* image); +#endif + v8::Handle ToPNG(v8::Isolate* isolate); v8::Handle ToJPEG(v8::Isolate* isolate, int quality); bool IsEmpty(); diff --git a/atom/common/api/atom_api_native_image_mac.mm b/atom/common/api/atom_api_native_image_mac.mm index f4d7e7d496a..67d16d2e820 100644 --- a/atom/common/api/atom_api_native_image_mac.mm +++ b/atom/common/api/atom_api_native_image_mac.mm @@ -6,35 +6,13 @@ #import -#include "base/files/file_path.h" -#include "base/mac/foundation_util.h" -#include "base/mac/scoped_nsobject.h" -#include "base/strings/string_util.h" -#include "base/strings/sys_string_conversions.h" -#include "ui/gfx/image/image.h" -#include "ui/gfx/image/image_skia.h" - namespace atom { namespace api { -namespace { - -bool IsTemplateImage(const base::FilePath& path) { - return (MatchPattern(path.value(), "*Template.*") || - MatchPattern(path.value(), "*Template@*x.*")); -} - -} // namespace - // static -mate::Handle NativeImage::CreateFromPath( - v8::Isolate* isolate, const base::FilePath& path) { - base::scoped_nsobject image([[NSImage alloc] - initByReferencingFile:base::mac::FilePathToNSString(path)]); - if (IsTemplateImage(path)) - [image setTemplate:YES]; - return Create(isolate, gfx::Image(image.release())); +void NativeImage::MakeTemplateImage(gfx::Image* image) { + [image->AsNSImage() setTemplate:YES]; } } // namespace api