// Copyright (c) 2015 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #include "atom/common/api/atom_api_native_image.h" #include "atom/common/native_mate_converters/image_converter.h" #include "native_mate/constructor.h" #include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" #include "atom/common/node_includes.h" namespace atom { namespace api { namespace { v8::Persistent template_; } // namespace NativeImage::NativeImage(const gfx::Image& image) : image_(image) {} NativeImage::~NativeImage() {} mate::ObjectTemplateBuilder NativeImage::GetObjectTemplateBuilder( v8::Isolate* isolate) { if (template_.IsEmpty()) template_.Reset(isolate, mate::ObjectTemplateBuilder(isolate) .SetMethod("toPng", &NativeImage::ToPNG) .Build()); return mate::ObjectTemplateBuilder( isolate, v8::Local::New(isolate, template_)); } v8::Handle NativeImage::ToPNG(v8::Isolate* isolate) { scoped_refptr png = image_.As1xPNGBytes(); return node::Buffer::New(isolate, reinterpret_cast(png->front()), png->size()); } // static mate::Handle NativeImage::Create(v8::Isolate* isolate, const gfx::Image& image) { return mate::CreateHandle(isolate, new NativeImage(image)); } } // namespace api } // namespace atom namespace { void Initialize(v8::Handle exports, v8::Handle unused, v8::Handle context, void* priv) { } } // namespace NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_common_native_image, Initialize)