diff --git a/src/CanvasPattern.cc b/src/CanvasPattern.cc index 1645d6db8..ce2c88502 100644 --- a/src/CanvasPattern.cc +++ b/src/CanvasPattern.cc @@ -64,6 +64,7 @@ Pattern::Pattern(const Napi::CallbackInfo& info) : ObjectWrap(info), en return; } _pattern = cairo_pattern_create_for_surface(surface); + _source = Napi::Persistent(obj); if (info[1].IsString()) { if ("no-repeat" == info[1].As().Utf8Value()) { @@ -127,3 +128,7 @@ repeat_type_t Pattern::get_repeat_type_for_cairo_pattern(cairo_pattern_t *patter Pattern::~Pattern() { if (_pattern) cairo_pattern_destroy(_pattern); } + +void Pattern::Finalize(Napi::Env env) { + _source.Reset(); +} diff --git a/src/CanvasPattern.h b/src/CanvasPattern.h index 1f768e03b..55a0119b9 100644 --- a/src/CanvasPattern.h +++ b/src/CanvasPattern.h @@ -26,8 +26,10 @@ class Pattern : public Napi::ObjectWrap { static repeat_type_t get_repeat_type_for_cairo_pattern(cairo_pattern_t *pattern); inline cairo_pattern_t *pattern(){ return _pattern; } ~Pattern(); + void Finalize(Napi::Env env); Napi::Env env; private: cairo_pattern_t *_pattern; + Napi::Reference _source; repeat_type_t _repeat = REPEAT; };