From 8b8edd20ccac9fc8b68be870224f6c13856c65ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Thu, 13 Dec 2018 15:00:40 +0100 Subject: [PATCH 1/2] [Backends] Don't return `cairo_surface_t` objects in `createSurface()` --- src/Canvas.cc | 2 -- src/backend/Backend.cc | 4 ++-- src/backend/Backend.h | 8 +++++--- src/backend/ImageBackend.cc | 8 +++----- src/backend/ImageBackend.h | 4 ++-- src/backend/PdfBackend.cc | 8 +++----- src/backend/PdfBackend.h | 4 ++-- src/backend/SvgBackend.cc | 8 ++++---- src/backend/SvgBackend.h | 4 ++-- 9 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/Canvas.cc b/src/Canvas.cc index 8b2825a43..dcd5a226a 100644 --- a/src/Canvas.cc +++ b/src/Canvas.cc @@ -852,8 +852,6 @@ Canvas::resurface(Local canvas) { Nan::HandleScope scope; Local context; - backend()->recreateSurface(); - // Reset context context = canvas->Get(Nan::New("context").ToLocalChecked()); if (!context->IsUndefined()) { diff --git a/src/backend/Backend.cc b/src/backend/Backend.cc index 34ef541f5..5891b69aa 100644 --- a/src/backend/Backend.cc +++ b/src/backend/Backend.cc @@ -32,11 +32,11 @@ void Backend::setCanvas(Canvas* _canvas) } -cairo_surface_t* Backend::recreateSurface() +void Backend::recreateSurface() { this->destroySurface(); - return this->createSurface(); + this->createSurface(); } DLL_PUBLIC cairo_surface_t* Backend::getSurface() { diff --git a/src/backend/Backend.h b/src/backend/Backend.h index 75ae37aad..993c9d948 100644 --- a/src/backend/Backend.h +++ b/src/backend/Backend.h @@ -29,6 +29,11 @@ class Backend : public Nan::ObjectWrap Canvas* canvas; Backend(string name, int width, int height); + + virtual void createSurface() = 0; + virtual void destroySurface(); + virtual void recreateSurface(); + static void init(const Nan::FunctionCallbackInfo &info); static Backend *construct(int width, int height){ return nullptr; } @@ -37,9 +42,6 @@ class Backend : public Nan::ObjectWrap void setCanvas(Canvas* canvas); - virtual cairo_surface_t* createSurface() = 0; - virtual cairo_surface_t* recreateSurface(); - DLL_PUBLIC cairo_surface_t* getSurface(); void destroySurface(); diff --git a/src/backend/ImageBackend.cc b/src/backend/ImageBackend.cc index b9d169af8..bd6cda85f 100644 --- a/src/backend/ImageBackend.cc +++ b/src/backend/ImageBackend.cc @@ -39,17 +39,15 @@ int32_t ImageBackend::approxBytesPerPixel() { } } -cairo_surface_t* ImageBackend::createSurface() +void ImageBackend::createSurface() { assert(!this->surface); this->surface = cairo_image_surface_create(this->format, width, height); assert(this->surface); Nan::AdjustExternalMemory(approxBytesPerPixel() * width * height); - - return this->surface; } -cairo_surface_t* ImageBackend::recreateSurface() +void ImageBackend::recreateSurface() { // Re-surface if (this->surface) { @@ -59,7 +57,7 @@ cairo_surface_t* ImageBackend::recreateSurface() Nan::AdjustExternalMemory(-approxBytesPerPixel() * old_width * old_height); } - return createSurface(); + createSurface(); } cairo_format_t ImageBackend::getFormat() { diff --git a/src/backend/ImageBackend.h b/src/backend/ImageBackend.h index c245565e0..5d2d3c500 100644 --- a/src/backend/ImageBackend.h +++ b/src/backend/ImageBackend.h @@ -10,8 +10,8 @@ using namespace std; class ImageBackend : public Backend { private: - cairo_surface_t* createSurface(); - cairo_surface_t* recreateSurface(); + void createSurface(); + void recreateSurface(); cairo_format_t format = DEFAULT_FORMAT; public: diff --git a/src/backend/PdfBackend.cc b/src/backend/PdfBackend.cc index df409799a..0ba5a61fd 100644 --- a/src/backend/PdfBackend.cc +++ b/src/backend/PdfBackend.cc @@ -25,16 +25,14 @@ Backend *PdfBackend::construct(int width, int height){ return new PdfBackend(width, height); } -cairo_surface_t* PdfBackend::createSurface() { +void PdfBackend::createSurface() { if (!_closure) _closure = new PdfSvgClosure(canvas); + surface = cairo_pdf_surface_create_for_stream(toBuffer, _closure, width, height); - return surface; } -cairo_surface_t* PdfBackend::recreateSurface() { +void PdfBackend::recreateSurface() { cairo_pdf_surface_set_size(surface, width, height); - - return surface; } diff --git a/src/backend/PdfBackend.h b/src/backend/PdfBackend.h index 2c597a703..1858692f7 100644 --- a/src/backend/PdfBackend.h +++ b/src/backend/PdfBackend.h @@ -11,8 +11,8 @@ using namespace std; class PdfBackend : public Backend { private: - cairo_surface_t* createSurface(); - cairo_surface_t* recreateSurface(); + void createSurface(); + void recreateSurface(); public: PdfSvgClosure* _closure = NULL; diff --git a/src/backend/SvgBackend.cc b/src/backend/SvgBackend.cc index eaec46e83..afe8c7402 100644 --- a/src/backend/SvgBackend.cc +++ b/src/backend/SvgBackend.cc @@ -25,18 +25,18 @@ Backend *SvgBackend::construct(int width, int height){ return new SvgBackend(width, height); } -cairo_surface_t* SvgBackend::createSurface() { +void SvgBackend::createSurface() { if (!_closure) _closure = new PdfSvgClosure(canvas); + surface = cairo_svg_surface_create_for_stream(toBuffer, _closure, width, height); - return surface; } -cairo_surface_t* SvgBackend::recreateSurface() { +void SvgBackend::recreateSurface() { cairo_surface_finish(surface); delete _closure; cairo_surface_destroy(surface); - return createSurface(); + createSurface(); } diff --git a/src/backend/SvgBackend.h b/src/backend/SvgBackend.h index b703a3b94..7f5e86a9c 100644 --- a/src/backend/SvgBackend.h +++ b/src/backend/SvgBackend.h @@ -11,8 +11,8 @@ using namespace std; class SvgBackend : public Backend { private: - cairo_surface_t* createSurface(); - cairo_surface_t* recreateSurface(); + void createSurface(); + void recreateSurface(); public: PdfSvgClosure* _closure = NULL; From c014caa8f19a6b3f3bddcfde25e78eab6d73e84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Sat, 17 Oct 2020 19:26:43 +0200 Subject: [PATCH 2/2] Update `devDependencies` to fix linting errors --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 78b31f82b..cde80c41f 100644 --- a/package.json +++ b/package.json @@ -53,13 +53,14 @@ "simple-get": "^3.0.3" }, "devDependencies": { - "@types/node": "^10.12.18", + "@types/node": "^14.11.10", "assert-rejects": "^1.0.0", - "dtslint": "^0.5.3", + "dtslint": "^4.0.4", "express": "^4.16.3", "mocha": "^5.2.0", "pixelmatch": "^4.0.2", - "standard": "^12.0.1" + "standard": "^12.0.1", + "typescript": "^4.0.3" }, "engines": { "node": ">=6"