Skip to content

Commit 509ce0d

Browse files
committed
mac: Don't rely on NSImage to read file
It doesn't work with asar.
1 parent 903ff0b commit 509ce0d

File tree

3 files changed

+20
-29
lines changed

3 files changed

+20
-29
lines changed

atom/common/api/atom_api_native_image.cc

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ namespace api {
2828

2929
namespace {
3030

31-
#if !defined(OS_MACOSX)
3231
struct ScaleFactorPair {
3332
const char* name;
3433
float scale;
@@ -102,7 +101,13 @@ bool PopulateImageSkiaRepsFromPath(gfx::ImageSkia* image,
102101
pair.scale);
103102
return succeed;
104103
}
105-
#endif // !defined(OS_MACOSX)
104+
105+
#if defined(OS_MACOSX)
106+
bool IsTemplateImage(const base::FilePath& path) {
107+
return (MatchPattern(path.value(), "*Template.*") ||
108+
MatchPattern(path.value(), "*Template@*x.*"));
109+
}
110+
#endif
106111

107112
v8::Persistent<v8::ObjectTemplate> template_;
108113

@@ -175,15 +180,18 @@ mate::Handle<NativeImage> NativeImage::CreateFromJPEG(
175180
return Create(isolate, image);
176181
}
177182

178-
#if !defined(OS_MACOSX)
179183
// static
180184
mate::Handle<NativeImage> NativeImage::CreateFromPath(
181185
v8::Isolate* isolate, const base::FilePath& path) {
182186
gfx::ImageSkia image_skia;
183187
PopulateImageSkiaRepsFromPath(&image_skia, path);
184-
return Create(isolate, gfx::Image(image_skia));
188+
gfx::Image image(image_skia);
189+
#if defined(OS_MACOSX)
190+
if (IsTemplateImage(path))
191+
MakeTemplateImage(&image);
192+
#endif
193+
return Create(isolate, image);
185194
}
186-
#endif // !defined(OS_MACOSX)
187195

188196
} // namespace api
189197

atom/common/api/atom_api_native_image.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ class NativeImage : public mate::Wrappable {
4646
v8::Isolate* isolate) override;
4747

4848
private:
49+
#if defined(OS_MACOSX)
50+
// Mark the image as template image if possible.
51+
static void MakeTemplateImage(gfx::Image* image);
52+
#endif
53+
4954
v8::Handle<v8::Value> ToPNG(v8::Isolate* isolate);
5055
v8::Handle<v8::Value> ToJPEG(v8::Isolate* isolate, int quality);
5156
bool IsEmpty();

atom/common/api/atom_api_native_image_mac.mm

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,13 @@
66

77
#import <Cocoa/Cocoa.h>
88

9-
#include "base/files/file_path.h"
10-
#include "base/mac/foundation_util.h"
11-
#include "base/mac/scoped_nsobject.h"
12-
#include "base/strings/string_util.h"
13-
#include "base/strings/sys_string_conversions.h"
14-
#include "ui/gfx/image/image.h"
15-
#include "ui/gfx/image/image_skia.h"
16-
179
namespace atom {
1810

1911
namespace api {
2012

21-
namespace {
22-
23-
bool IsTemplateImage(const base::FilePath& path) {
24-
return (MatchPattern(path.value(), "*Template.*") ||
25-
MatchPattern(path.value(), "*Template@*x.*"));
26-
}
27-
28-
} // namespace
29-
3013
// static
31-
mate::Handle<NativeImage> NativeImage::CreateFromPath(
32-
v8::Isolate* isolate, const base::FilePath& path) {
33-
base::scoped_nsobject<NSImage> image([[NSImage alloc]
34-
initByReferencingFile:base::mac::FilePathToNSString(path)]);
35-
if (IsTemplateImage(path))
36-
[image setTemplate:YES];
37-
return Create(isolate, gfx::Image(image.release()));
14+
void NativeImage::MakeTemplateImage(gfx::Image* image) {
15+
[image->AsNSImage() setTemplate:YES];
3816
}
3917

4018
} // namespace api

0 commit comments

Comments
 (0)