| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #include "Backend.h"
- #include <string>
- Backend::Backend(std::string name, int width, int height)
- : name(name)
- , width(width)
- , height(height)
- {}
- Backend::~Backend()
- {
- this->destroySurface();
- }
- void Backend::init(const Nan::FunctionCallbackInfo<v8::Value> &info) {
- int width = 0;
- int height = 0;
- if (info[0]->IsNumber()) width = Nan::To<uint32_t>(info[0]).FromMaybe(0);
- if (info[1]->IsNumber()) height = Nan::To<uint32_t>(info[1]).FromMaybe(0);
- Backend *backend = construct(width, height);
- backend->Wrap(info.This());
- info.GetReturnValue().Set(info.This());
- }
- void Backend::setCanvas(Canvas* _canvas)
- {
- this->canvas = _canvas;
- }
- cairo_surface_t* Backend::recreateSurface()
- {
- this->destroySurface();
- return this->createSurface();
- }
- DLL_PUBLIC cairo_surface_t* Backend::getSurface() {
- if (!surface) createSurface();
- return surface;
- }
- void Backend::destroySurface()
- {
- if(this->surface)
- {
- cairo_surface_destroy(this->surface);
- this->surface = NULL;
- }
- }
- std::string Backend::getName()
- {
- return name;
- }
- int Backend::getWidth()
- {
- return this->width;
- }
- void Backend::setWidth(int width_)
- {
- this->width = width_;
- this->recreateSurface();
- }
- int Backend::getHeight()
- {
- return this->height;
- }
- void Backend::setHeight(int height_)
- {
- this->height = height_;
- this->recreateSurface();
- }
- bool Backend::isSurfaceValid(){
- bool hadSurface = surface != NULL;
- bool isValid = true;
- cairo_status_t status = cairo_surface_status(getSurface());
- if (status != CAIRO_STATUS_SUCCESS) {
- error = cairo_status_to_string(status);
- isValid = false;
- }
- if (!hadSurface)
- destroySurface();
- return isValid;
- }
- BackendOperationNotAvailable::BackendOperationNotAvailable(Backend* backend,
- std::string operation_name)
- : backend(backend)
- , operation_name(operation_name)
- {
- msg = "operation " + operation_name +
- " not supported by backend " + backend->getName();
- };
- BackendOperationNotAvailable::~BackendOperationNotAvailable() throw() {};
- const char* BackendOperationNotAvailable::what() const throw()
- {
- return msg.c_str();
- };
|