atom_api_native_image.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // Copyright (c) 2015 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_COMMON_API_ATOM_API_NATIVE_IMAGE_H_
  5. #define ATOM_COMMON_API_ATOM_API_NATIVE_IMAGE_H_
  6. #include <map>
  7. #include <string>
  8. #include "base/values.h"
  9. #include "native_mate/dictionary.h"
  10. #include "native_mate/handle.h"
  11. #include "native_mate/wrappable.h"
  12. #include "ui/gfx/geometry/rect.h"
  13. #include "ui/gfx/image/image.h"
  14. #if defined(OS_WIN)
  15. #include "base/files/file_path.h"
  16. #include "base/win/scoped_gdi_object.h"
  17. #endif
  18. class GURL;
  19. namespace base {
  20. class FilePath;
  21. }
  22. namespace gfx {
  23. class Size;
  24. }
  25. namespace mate {
  26. class Arguments;
  27. }
  28. namespace atom {
  29. namespace api {
  30. class NativeImage : public mate::Wrappable<NativeImage> {
  31. public:
  32. static mate::Handle<NativeImage> CreateEmpty(v8::Isolate* isolate);
  33. static mate::Handle<NativeImage> Create(v8::Isolate* isolate,
  34. const gfx::Image& image);
  35. static mate::Handle<NativeImage> CreateFromPNG(v8::Isolate* isolate,
  36. const char* buffer,
  37. size_t length);
  38. static mate::Handle<NativeImage> CreateFromJPEG(v8::Isolate* isolate,
  39. const char* buffer,
  40. size_t length);
  41. static mate::Handle<NativeImage> CreateFromPath(v8::Isolate* isolate,
  42. const base::FilePath& path);
  43. static mate::Handle<NativeImage> CreateFromBuffer(
  44. mate::Arguments* args,
  45. v8::Local<v8::Value> buffer);
  46. static mate::Handle<NativeImage> CreateFromDataURL(v8::Isolate* isolate,
  47. const GURL& url);
  48. static mate::Handle<NativeImage> CreateFromNamedImage(
  49. mate::Arguments* args,
  50. const std::string& name);
  51. static void BuildPrototype(v8::Isolate* isolate,
  52. v8::Local<v8::FunctionTemplate> prototype);
  53. #if defined(OS_WIN)
  54. HICON GetHICON(int size);
  55. #endif
  56. const gfx::Image& image() const { return image_; }
  57. protected:
  58. NativeImage(v8::Isolate* isolate, const gfx::Image& image);
  59. #if defined(OS_WIN)
  60. NativeImage(v8::Isolate* isolate, const base::FilePath& hicon_path);
  61. #endif
  62. ~NativeImage() override;
  63. private:
  64. v8::Local<v8::Value> ToPNG(mate::Arguments* args);
  65. v8::Local<v8::Value> ToJPEG(v8::Isolate* isolate, int quality);
  66. v8::Local<v8::Value> ToBitmap(mate::Arguments* args);
  67. v8::Local<v8::Value> GetBitmap(mate::Arguments* args);
  68. v8::Local<v8::Value> GetNativeHandle(v8::Isolate* isolate,
  69. mate::Arguments* args);
  70. mate::Handle<NativeImage> Resize(v8::Isolate* isolate,
  71. const base::DictionaryValue& options);
  72. mate::Handle<NativeImage> Crop(v8::Isolate* isolate, const gfx::Rect& rect);
  73. std::string ToDataURL(mate::Arguments* args);
  74. bool IsEmpty();
  75. gfx::Size GetSize();
  76. float GetAspectRatio();
  77. void AddRepresentation(const mate::Dictionary& options);
  78. // Mark the image as template image.
  79. void SetTemplateImage(bool setAsTemplate);
  80. // Determine if the image is a template image.
  81. bool IsTemplateImage();
  82. #if defined(OS_WIN)
  83. base::FilePath hicon_path_;
  84. std::map<int, base::win::ScopedHICON> hicons_;
  85. #endif
  86. gfx::Image image_;
  87. DISALLOW_COPY_AND_ASSIGN(NativeImage);
  88. };
  89. } // namespace api
  90. } // namespace atom
  91. namespace mate {
  92. // A custom converter that allows converting path to NativeImage.
  93. template <>
  94. struct Converter<mate::Handle<atom::api::NativeImage>> {
  95. static v8::Local<v8::Value> ToV8(
  96. v8::Isolate* isolate,
  97. const mate::Handle<atom::api::NativeImage>& val);
  98. static bool FromV8(v8::Isolate* isolate,
  99. v8::Local<v8::Value> val,
  100. mate::Handle<atom::api::NativeImage>* out);
  101. };
  102. } // namespace mate
  103. #endif // ATOM_COMMON_API_ATOM_API_NATIVE_IMAGE_H_