blob: ca191a6c39d23e3016a53c91816407ad70c83c40 [file] [edit]
import * as evg from 'evg'
export const description = "Screen clip";
export const help = `This scene resets the canvas clipper or sets the canvas clipper to the scene area.
The clipper is always axis-aligned in output frame, so when skew/rotation are present, the axis-aligned bounding box of the transformed clipper will be used.
Clippers are handled through a stack, resetting the clipper pops the stack and restores previous clipper.
If a clipper is already defined when setting the clipper, the clipper set is the intersection of the two clippers.
`;
export const options = [
{name:"reset", value: false, desc: "if set, reset clipper otherwise set it to scene position and size", dirty: UPDATE_SIZE},
{name:"stack", value: true, desc: "if false, clipper is set/reset independently of the clipper stack (no intersection, no push/pop of the stack)", dirty: UPDATE_SIZE},
{}
];
export function load() { return {
update: function() {
if (this.update_flag) {
this.clip = {};
this.clip.x = 0;
this.clip.y = 0;
this.clip.w = this.width;
this.clip.h = this.height;
}
return this.reset ? 1 : 2;
},
fullscreen: function() { return -1; },
identity: function() { return false; },
draw: function(canvas)
{
canvas_set_clipper(this.reset ? null : this.clip, this.stack);
}
}; }