Skip to content

Commit 1248903

Browse files
committed
only store BasicEnv on the canvas instance
1 parent 68ef737 commit 1248903

3 files changed

Lines changed: 22 additions & 18 deletions

File tree

src/Canvas.cc

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ Canvas::Initialize(Napi::Env& env, Napi::Object& exports) {
8383
*/
8484

8585
Canvas::Canvas(const Napi::CallbackInfo& info) : Napi::ObjectWrap<Canvas>(info), env(info.Env()) {
86+
Napi::Env env = info.Env();
8687
InstanceData* data = env.GetInstanceData<InstanceData>();
8788
ctor = Napi::Persistent(data->CanvasCtor.Value());
8889

@@ -149,11 +150,11 @@ Napi::Value
149150
Canvas::GetType(const Napi::CallbackInfo& info) {
150151
switch (type) {
151152
case CANVAS_TYPE_PDF:
152-
return Napi::String::New(env, "pdf");
153+
return Napi::String::New(info.Env(), "pdf");
153154
case CANVAS_TYPE_SVG:
154-
return Napi::String::New(env, "svg");
155+
return Napi::String::New(info.Env(), "svg");
155156
default:
156-
return Napi::String::New(env, "image");
157+
return Napi::String::New(info.Env(), "image");
157158
}
158159
}
159160

@@ -162,7 +163,7 @@ Canvas::GetType(const Napi::CallbackInfo& info) {
162163
*/
163164
Napi::Value
164165
Canvas::GetStride(const Napi::CallbackInfo& info) {
165-
return Napi::Number::New(env, cairo_image_surface_get_stride(ensureSurface()));
166+
return Napi::Number::New(info.Env(), cairo_image_surface_get_stride(ensureSurface()));
166167
}
167168

168169
/*
@@ -171,7 +172,7 @@ Canvas::GetStride(const Napi::CallbackInfo& info) {
171172

172173
Napi::Value
173174
Canvas::GetWidth(const Napi::CallbackInfo& info) {
174-
return Napi::Number::New(env, getWidth());
175+
return Napi::Number::New(info.Env(), getWidth());
175176
}
176177

177178
/*
@@ -194,7 +195,7 @@ Canvas::SetWidth(const Napi::CallbackInfo& info, const Napi::Value& value) {
194195

195196
Napi::Value
196197
Canvas::GetHeight(const Napi::CallbackInfo& info) {
197-
return Napi::Number::New(env, getHeight());
198+
return Napi::Number::New(info.Env(), getHeight());
198199
}
199200

200201
/*
@@ -374,6 +375,7 @@ static void setPdfMetadata(Canvas* canvas, Napi::Object opts) {
374375

375376
Napi::Value
376377
Canvas::ToBuffer(const Napi::CallbackInfo& info) {
378+
Napi::Env env = info.Env();
377379
cairo_status_t status;
378380

379381
// Vector canvases, sync only
@@ -432,7 +434,7 @@ Canvas::ToBuffer(const Napi::CallbackInfo& info) {
432434
}
433435
}
434436
} catch (cairo_status_t ex) {
435-
CairoError(ex).ThrowAsJavaScriptException();
437+
CairoError(env, ex).ThrowAsJavaScriptException();
436438
} catch (const char* ex) {
437439
Napi::Error::New(env, ex).ThrowAsJavaScriptException();
438440
}
@@ -449,7 +451,7 @@ Canvas::ToBuffer(const Napi::CallbackInfo& info) {
449451
closure = new PngClosure(this);
450452
parsePNGArgs(info[2], *closure);
451453
} catch (cairo_status_t ex) {
452-
CairoError(ex).ThrowAsJavaScriptException();
454+
CairoError(env, ex).ThrowAsJavaScriptException();
453455
return env.Undefined();
454456
} catch (const char* ex) {
455457
Napi::Error::New(env, ex).ThrowAsJavaScriptException();
@@ -483,7 +485,7 @@ Canvas::ToBuffer(const Napi::CallbackInfo& info) {
483485
return Napi::Buffer<uint8_t>::Copy(env, &closure.vec[0], closure.vec.size());
484486
}
485487
} catch (cairo_status_t ex) {
486-
CairoError(ex).ThrowAsJavaScriptException();
488+
CairoError(env, ex).ThrowAsJavaScriptException();
487489
return env.Undefined();
488490
}
489491
return env.Undefined();
@@ -516,7 +518,7 @@ Canvas::ToBuffer(const Napi::CallbackInfo& info) {
516518
static cairo_status_t
517519
streamPNG(void *c, const uint8_t *data, unsigned len) {
518520
PngClosure* closure = (PngClosure*) c;
519-
Napi::Env env = closure->canvas->env;
521+
Napi::Env env = closure->cb.Env();
520522
Napi::HandleScope scope(env);
521523
Napi::AsyncContext async(env, "canvas:StreamPNG");
522524
Napi::Value buf = Napi::Buffer<uint8_t>::Copy(env, data, len);
@@ -531,6 +533,7 @@ streamPNG(void *c, const uint8_t *data, unsigned len) {
531533

532534
void
533535
Canvas::StreamPNGSync(const Napi::CallbackInfo& info) {
536+
Napi::Env env = info.Env();
534537
if (!info[0].IsFunction()) {
535538
Napi::TypeError::New(env, "callback function required").ThrowAsJavaScriptException();
536539
return;
@@ -545,7 +548,7 @@ Canvas::StreamPNGSync(const Napi::CallbackInfo& info) {
545548

546549
if (!env.IsExceptionPending()) {
547550
if (status) {
548-
closure.cb.Call(env.Global(), { CairoError(status).Value() });
551+
closure.cb.Call(env.Global(), { CairoError(env, status).Value() });
549552
} else {
550553
closure.cb.Call(env.Global(), { env.Null(), env.Null(), Napi::Number::New(env, 0) });
551554
}
@@ -599,6 +602,7 @@ cairo_status_t canvas_write_to_pdf_stream(cairo_surface_t *surface, cairo_write_
599602

600603
void
601604
Canvas::StreamPDFSync(const Napi::CallbackInfo& info) {
605+
Napi::Env env = info.Env();
602606
if (!info[0].IsFunction()) {
603607
Napi::TypeError::New(env, "callback function required").ThrowAsJavaScriptException();
604608
return;
@@ -628,7 +632,7 @@ Canvas::StreamPDFSync(const Napi::CallbackInfo& info) {
628632

629633
if (!env.IsExceptionPending()) {
630634
if (status) {
631-
fn.Call(env.Global(), { CairoError(status).Value() });
635+
fn.Call(env.Global(), { CairoError(env, status).Value() });
632636
} else {
633637
fn.Call(env.Global(), { env.Null(), env.Null(), Napi::Number::New(env, 0) });
634638
}
@@ -649,7 +653,7 @@ static uint32_t getSafeBufSize(Canvas* canvas) {
649653
void
650654
Canvas::StreamJPEGSync(const Napi::CallbackInfo& info) {
651655
if (!info[1].IsFunction()) {
652-
Napi::TypeError::New(env, "callback function required").ThrowAsJavaScriptException();
656+
Napi::TypeError::New(info.Env(), "callback function required").ThrowAsJavaScriptException();
653657
return;
654658
}
655659

@@ -941,7 +945,7 @@ Canvas::getFormat() {
941945

942946
void
943947
Canvas::resurface(Napi::Object This, uint16_t width, uint16_t height) {
944-
Napi::HandleScope scope(env);
948+
Napi::HandleScope scope(This.Env());
945949
Napi::Value context;
946950

947951
if (type == CANVAS_TYPE_PDF) {
@@ -1021,6 +1025,6 @@ Canvas::createCairoContext() {
10211025
*/
10221026

10231027
Napi::Error
1024-
Canvas::CairoError(cairo_status_t status) {
1028+
Canvas::CairoError(Napi::Env env, cairo_status_t status) {
10251029
return Napi::Error::New(env, cairo_status_to_string(status));
10261030
}

src/Canvas.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class Canvas : public Napi::ObjectWrap<Canvas> {
8080
static void RegisterFont(const Napi::CallbackInfo& info);
8181
static void DeregisterAllFonts(const Napi::CallbackInfo& info);
8282
static Napi::Value ParseFont(const Napi::CallbackInfo& info);
83-
Napi::Error CairoError(cairo_status_t status);
83+
Napi::Error CairoError(Napi::Env env, cairo_status_t status);
8484
static void ToPngBufferAsync(Closure* closure);
8585
static void ToJpegBufferAsync(Closure* closure);
8686
static PangoWeight GetWeightFromCSSString(const char *weight);
@@ -110,7 +110,7 @@ class Canvas : public Napi::ObjectWrap<Canvas> {
110110
cairo_surface_t *ensureSurface();
111111
void destroySurface();
112112

113-
Napi::Env env;
113+
Napi::BasicEnv env;
114114
static int fontSerial;
115115

116116
private:

src/closure.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ EncodingWorker::OnWorkComplete(Napi::Env env, napi_status status) {
4141
Napi::HandleScope scope(env);
4242

4343
if (closure->status) {
44-
closure->cb.Call({ closure->canvas->CairoError(closure->status).Value() });
44+
closure->cb.Call({ closure->canvas->CairoError(env, closure->status).Value() });
4545
} else {
4646
Napi::Object buf = Napi::Buffer<uint8_t>::Copy(env, &closure->vec[0], closure->vec.size());
4747
closure->cb.Call({ env.Null(), buf });

0 commit comments

Comments
 (0)