@ng-web-apis/canvas
Version:
A library for declarative use of Canvas API with Angular
37 lines • 5.51 kB
JavaScript
import { inject, Injectable, NgZone } from '@angular/core';
import { WA_ANIMATION_FRAME } from '@ng-web-apis/common';
import { CANVAS_2D_CONTEXT } from '../tokens/canvas-2d-context';
import { CANVAS_PROPERTIES } from '../tokens/canvas-properties';
import * as i0 from "@angular/core";
class WaDrawService {
subscription;
constructor() {
const parent = inject(CANVAS_PROPERTIES, { skipSelf: true });
const properties = inject(CANVAS_PROPERTIES);
const context = inject(CANVAS_2D_CONTEXT);
const animationFrame$ = inject(WA_ANIMATION_FRAME);
const ngZone = inject(NgZone);
this.subscription = ngZone.runOutsideAngular(() => animationFrame$.subscribe(() => {
context.save();
parent.forEach((property) => property.call(context));
properties.forEach((property) => property.call(context));
this.call(context);
context.restore();
}));
}
call = () => { };
ngOnDestroy() {
this.subscription.unsubscribe();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaDrawService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaDrawService });
}
export { WaDrawService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaDrawService, decorators: [{
type: Injectable
}], ctorParameters: function () { return []; } });
/**
* @deprecated: use {@link WaDrawService}
*/
export const DrawService = WaDrawService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9jYW52YXMvc3JjL3NlcnZpY2VzL2RyYXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFJdkQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0FBRzlELE1BQ2EsYUFBYTtJQUNMLFlBQVksQ0FBZTtJQUU1QztRQUNJLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDOUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3JELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLElBQUksR0FBdUIsR0FBUyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRTFDLFdBQVc7UUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7d0dBekJRLGFBQWE7NEdBQWIsYUFBYTs7U0FBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVU7O0FBNkJYOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dBX0FOSU1BVElPTl9GUkFNRX0gZnJvbSAnQG5nLXdlYi1hcGlzL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHR5cGUge0NhbnZhc01ldGhvZH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYW52YXMtbWV0aG9kJztcbmltcG9ydCB7Q0FOVkFTXzJEX0NPTlRFWFR9IGZyb20gJy4uL3Rva2Vucy9jYW52YXMtMmQtY29udGV4dCc7XG5pbXBvcnQge0NBTlZBU19QUk9QRVJUSUVTfSBmcm9tICcuLi90b2tlbnMvY2FudmFzLXByb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0NvbnRleHQyZFByb2Nlc3Nvcn0gZnJvbSAnLi4vdHlwZXMvY29udGV4dC1wcm9jZXNzb3InO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV2FEcmF3U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQ2FudmFzTWV0aG9kIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGluamVjdChDQU5WQVNfUFJPUEVSVElFUywge3NraXBTZWxmOiB0cnVlfSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBpbmplY3QoQ0FOVkFTX1BST1BFUlRJRVMpO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gaW5qZWN0KENBTlZBU18yRF9DT05URVhUKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uRnJhbWUkID0gaW5qZWN0KFdBX0FOSU1BVElPTl9GUkFNRSk7XG4gICAgICAgIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQuZm9yRWFjaCgocHJvcGVydHkpID0+IHByb3BlcnR5LmNhbGwoY29udGV4dCkpO1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHByb3BlcnR5LmNhbGwoY29udGV4dCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsOiBDb250ZXh0MmRQcm9jZXNzb3IgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQ6IHVzZSB7QGxpbmsgV2FEcmF3U2VydmljZX1cbiAqL1xuZXhwb3J0IGNvbnN0IERyYXdTZXJ2aWNlID0gV2FEcmF3U2VydmljZTtcbiJdfQ==