50 lines
922 B
JavaScript
50 lines
922 B
JavaScript
|
const PIXI = 'undefined' !== typeof window ? require('pixi.js') : undefined;
|
||
|
|
||
|
import {compose} from '@avocado/core';
|
||
|
import {Vector} from '@avocado/math';
|
||
|
|
||
|
import {Image} from './image';
|
||
|
import {Renderable} from './renderable';
|
||
|
|
||
|
const decorate = compose(
|
||
|
Vector.Mixin('size', 'width', 'height', {
|
||
|
default: [0, 0],
|
||
|
}),
|
||
|
);
|
||
|
|
||
|
export class Canvas extends decorate(Renderable) {
|
||
|
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.renderTexture = PIXI.RenderTexture.create(1, 1);
|
||
|
}
|
||
|
|
||
|
destroy() {
|
||
|
this.renderTexture.destroy();
|
||
|
}
|
||
|
|
||
|
get internal() {
|
||
|
return this.renderTexture;
|
||
|
}
|
||
|
|
||
|
renderWith(renderable, renderer) {
|
||
|
renderer.render(renderable, this);
|
||
|
}
|
||
|
|
||
|
get size() {
|
||
|
return super.size;
|
||
|
}
|
||
|
|
||
|
set size(size) {
|
||
|
this.renderTexture.resize(size[0], size[1]);
|
||
|
super.size = size;
|
||
|
}
|
||
|
|
||
|
toImage() {
|
||
|
const image = new Image();
|
||
|
image.texture = this.renderTexture.clone();
|
||
|
return image;
|
||
|
}
|
||
|
|
||
|
}
|