@leafer-in/film 2.3.1 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/film.cjs CHANGED
@@ -901,9 +901,16 @@ exports.Film = __decorate([ draw.useModule(PaintFilm), draw.registerUI() ], expo
901
901
 
902
902
  draw.Plugin.add("flim");
903
903
 
904
- draw.PaintImage.film = function(paint) {
904
+ draw.PaintImage.film = function(paint, oldPaint) {
905
905
  paint.film = true;
906
906
  paint.nowIndex = 0;
907
+ if (draw.isObject(oldPaint)) {
908
+ paint.nowIndex = oldPaint.nowIndex;
909
+ paint.pauseIndex = oldPaint.pauseIndex;
910
+ paint.speed = oldPaint.speed;
911
+ paint.paused = oldPaint.paused;
912
+ paint.loop = oldPaint.loop;
913
+ }
907
914
  };
908
915
 
909
916
  draw.Creator.film = function(options) {
package/dist/film.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Platform, isUndefined, ImageData, isArray, dataProcessor, useModule, registerUI, Image, Plugin, PaintImage, Creator, LeaferFilm, Resource, FileHelper } from "@leafer-ui/draw";
1
+ import { Platform, isUndefined, ImageData, isArray, dataProcessor, useModule, registerUI, Image, Plugin, PaintImage, isObject, Creator, LeaferFilm, Resource, FileHelper } from "@leafer-ui/draw";
2
2
 
3
3
  function __decorate(decorators, target, key, desc) {
4
4
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -899,9 +899,16 @@ Film = __decorate([ useModule(PaintFilm), registerUI() ], Film);
899
899
 
900
900
  Plugin.add("flim");
901
901
 
902
- PaintImage.film = function(paint) {
902
+ PaintImage.film = function(paint, oldPaint) {
903
903
  paint.film = true;
904
904
  paint.nowIndex = 0;
905
+ if (isObject(oldPaint)) {
906
+ paint.nowIndex = oldPaint.nowIndex;
907
+ paint.pauseIndex = oldPaint.pauseIndex;
908
+ paint.speed = oldPaint.speed;
909
+ paint.paused = oldPaint.paused;
910
+ paint.loop = oldPaint.loop;
911
+ }
905
912
  };
906
913
 
907
914
  Creator.film = function(options) {
@@ -1,2 +1,2 @@
1
- import{Platform as e,isUndefined as t,ImageData as r,isArray as i,dataProcessor as a,useModule as n,registerUI as o,Image as s,Plugin as d,PaintImage as l,Creator as h,LeaferFilm as f,Resource as c,FileHelper as u}from"@leafer-ui/draw";function m(e,t,r,i){var a,n=arguments.length,o=n<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(o=(n<3?a(o):n>3?a(t,r,o):a(t,r))||o);return n>3&&o&&Object.defineProperty(t,r,o),o}function g(e,t,r,i){return new(r||(r=Promise))(function(a,n){function o(e){try{d(i.next(e))}catch(e){n(e)}}function s(e){try{d(i.throw(e))}catch(e){n(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(o,s)}d((i=i.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class p{constructor(){this.frames=[],this.decodedIndex=-1}static register(e,t,r){p.decoderMap[e]={Decoder:t,force:r}}static canUse(e){return g(this,void 0,void 0,function*(){const{supportMap:r}=this;let i=r[e];return t(i)?"undefined"!=typeof ImageDecoder&&(i=yield ImageDecoder.isTypeSupported(e),r[e]=i):i})}createAtlas(){const{width:t,height:r,total:i}=this;if(t*r*i<=p.maxAtlasSize){const a=Math.ceil(Math.sqrt(i*r/t)),n=Math.ceil(i/a);this.atlasGrid={x:a,y:n},this.atlas=e.origin.createCanvas(t*a,r*n),this.atlasContext=this.atlas.getContext("2d")}}decodeHeader(e,t){return g(this,void 0,void 0,function*(){this.decoder=new ImageDecoder({data:e,type:t}),yield this.decoder.tracks.ready;const r=yield this.decodeFrame(0),{displayWidth:i,displayHeight:a}=r.image,{selectedTrack:n}=this.decoder.tracks;this.width=i,this.height=a,this.total=n.frameCount,this.loop=n.repetitionCount,this.createAtlas(),this.atlas&&this.mergeFrame(0)})}decodeFrame(e){return g(this,void 0,void 0,function*(){const{frames:t}=this,r=t[e];if(r&&!r.decoding)return r;for(let t=this.decodedIndex+1;t<=e;t++)yield this.decodeOneFrame(t),this.decodedIndex=t;return t[e]})}decodeOneFrame(e){return g(this,void 0,void 0,function*(){return new Promise(t=>{this.decoder.decode({frameIndex:e}).then(r=>{const{image:i}=r,a={image:i,duration:i.duration/1e3/1e3};this.frames[e]=a,this.atlas&&this.mergeFrame(e),t(a)})})})}mergeFrame(e,t=!0){const r=this.frames[e],{atlasGrid:i,width:a,height:n}=this;r.x=e%i.x*a,r.y=Math.floor(e/i.x)*n,this.atlasContext.drawImage(r.image,r.x,r.y),t?this.destoryFrameImage(r):delete r.image}render(e,r,i,a,n,o,s,d,l){let{nowIndex:h,paused:f,speed:c,pauseIndex:u,loop:m,frameTimer:g}=s;t(h)&&(h=0);const{frames:p}=this,v=p[h];if(this.renderFrame(v,e,r,i,a,n)){if(g)return;if(!t(u)&&h===u)return void(s.paused=!0);let e=h+1;if(e>=this.total){if(this.loop&&isFinite(this.loop)){if(m=(m||0)+1,m>this.loop)return;s.loop=m}e=0}if(e<this.total&&!p[e]&&(p[e]={duration:0,decoding:!0},this.decodeFrame(e).finally(()=>{this.decodedIndex===this.total-1&&this.destroyDecoder()})),f)return;s.frameTimer=setTimeout(()=>{s.nowIndex=e,delete s.frameTimer,o.forceRender()},v.duration*(c||1)*1e3)}else this.renderFrame(p[h-1],e,r,i,a,n),o.forceRender()}renderFrame(e,t,r,i,a,n){const o=e&&!e.decoding,{atlas:s}=this;return o&&(s?t.drawImage(s,e.x,e.y,this.width,this.height,r,i,a,n):t.drawImage(e.image,r,i,a,n)),o}destoryFrame(e,t=!0){const{frames:r}=this,i=r[e];i&&(this.destoryFrameImage(i),t&&delete r[e])}destoryFrameImage(e){const{image:t}=e;t&&t.close&&t.close(),delete e.image}destroyDecoder(){this.decoder&&(this.decoder.close(),this.decoder=null)}close(){this.atlas&&(this.atlas=this.atlasContext=null),this.frames.forEach((e,t)=>this.destoryFrame(t,!1)),this.frames.length=0,this.destroyDecoder()}}p.decoderMap={},p.supportMap={},p.maxAtlasSize=e.image.maxPatternSize;var v,w={};function y(e,t,r,i){for(var a=e[t++],n=1<<a,o=n+1,s=o+1,d=a+1,l=(1<<d)-1,h=0,f=0,c=0,u=e[t++],m=new Int32Array(4096),g=null;;){for(;h<16&&0!==u;)f|=e[t++]<<h,h+=8,1===u?u=e[t++]:--u;if(h<d)break;var p=f&l;if(f>>=d,h-=d,p!==n){if(p===o)break;for(var v=p<s?p:g,w=0,y=v;y>n;)y=m[y]>>8,++w;var x=y;if(c+w+(v!==p?1:0)>i)return void console.log("Warning, gif stream longer than expected.");r[c++]=x;var I=c+=w;for(v!==p&&(r[c++]=x),y=v;w--;)y=m[y],r[--I]=255&y,y>>=8;null!==g&&s<4096&&(m[s++]=g<<8|x,s>=l+1&&d<12&&(++d,l=l<<1|1)),g=p}else s=o+1,l=(1<<(d=a+1))-1,g=null}return c!==i&&console.log("Warning, gif stream shorter than expected."),r}try{w.GifWriter=function(e,t,r,i){var a=0,n=void 0===(i=void 0===i?{}:i).loop?null:i.loop,o=void 0===i.palette?null:i.palette;if(t<=0||r<=0||t>65535||r>65535)throw new Error("Width/Height invalid.");function s(e){var t=e.length;if(t<2||t>256||t&t-1)throw new Error("Invalid code/color length, must be power of 2 and 2 .. 256.");return t}e[a++]=71,e[a++]=73,e[a++]=70,e[a++]=56,e[a++]=57,e[a++]=97;var d=0,l=0;if(null!==o){for(var h=s(o);h>>=1;)++d;if(h=1<<d,--d,void 0!==i.background){if((l=i.background)>=h)throw new Error("Background index out of range.");if(0===l)throw new Error("Background index explicitly passed as 0.")}}if(e[a++]=255&t,e[a++]=t>>8&255,e[a++]=255&r,e[a++]=r>>8&255,e[a++]=(null!==o?128:0)|d,e[a++]=l,e[a++]=0,null!==o)for(var f=0,c=o.length;f<c;++f){var u=o[f];e[a++]=u>>16&255,e[a++]=u>>8&255,e[a++]=255&u}if(null!==n){if(n<0||n>65535)throw new Error("Loop count invalid.");e[a++]=33,e[a++]=255,e[a++]=11,e[a++]=78,e[a++]=69,e[a++]=84,e[a++]=83,e[a++]=67,e[a++]=65,e[a++]=80,e[a++]=69,e[a++]=50,e[a++]=46,e[a++]=48,e[a++]=3,e[a++]=1,e[a++]=255&n,e[a++]=n>>8&255,e[a++]=0}var m=!1;this.addFrame=function(t,r,i,n,d,l){if(!0===m&&(--a,m=!1),l=void 0===l?{}:l,t<0||r<0||t>65535||r>65535)throw new Error("x/y invalid.");if(i<=0||n<=0||i>65535||n>65535)throw new Error("Width/Height invalid.");if(d.length<i*n)throw new Error("Not enough pixels for the frame size.");var h=!0,f=l.palette;if(null==f&&(h=!1,f=o),null==f)throw new Error("Must supply either a local or global palette.");for(var c=s(f),u=0;c>>=1;)++u;c=1<<u;var g=void 0===l.delay?0:l.delay,p=void 0===l.disposal?0:l.disposal;if(p<0||p>3)throw new Error("Disposal out of range.");var v=!1,w=0;if(void 0!==l.transparent&&null!==l.transparent&&(v=!0,(w=l.transparent)<0||w>=c))throw new Error("Transparent color index.");if((0!==p||v||0!==g)&&(e[a++]=33,e[a++]=249,e[a++]=4,e[a++]=p<<2|(!0===v?1:0),e[a++]=255&g,e[a++]=g>>8&255,e[a++]=w,e[a++]=0),e[a++]=44,e[a++]=255&t,e[a++]=t>>8&255,e[a++]=255&r,e[a++]=r>>8&255,e[a++]=255&i,e[a++]=i>>8&255,e[a++]=255&n,e[a++]=n>>8&255,e[a++]=!0===h?128|u-1:0,!0===h)for(var y=0,x=f.length;y<x;++y){var I=f[y];e[a++]=I>>16&255,e[a++]=I>>8&255,e[a++]=255&I}return a=function(e,t,r,i){e[t++]=r;var a=t++,n=1<<r,o=n-1,s=n+1,d=s+1,l=r+1,h=0,f=0;function c(r){for(;h>=r;)e[t++]=255&f,f>>=8,h-=8,t===a+256&&(e[a]=255,a=t++)}function u(e){f|=e<<h,h+=l,c(8)}var m=i[0]&o,g={};u(n);for(var p=1,v=i.length;p<v;++p){var w=i[p]&o,y=m<<8|w,x=g[y];if(void 0===x){for(f|=m<<h,h+=l;h>=8;)e[t++]=255&f,f>>=8,h-=8,t===a+256&&(e[a]=255,a=t++);4096===d?(u(n),d=s+1,l=r+1,g={}):(d>=1<<l&&++l,g[y]=d++),m=w}else m=x}return u(m),u(s),c(1),a+1===t?e[a]=0:(e[a]=t-a-1,e[t++]=0),t}(e,a,u<2?2:u,d),a},this.end=function(){return!1===m&&(e[a++]=59,m=!0),a},this.getOutputBuffer=function(){return e},this.setOutputBuffer=function(t){e=t},this.getOutputBufferPosition=function(){return a},this.setOutputBufferPosition=function(e){a=e}},v=w.GifReader=function(e){var t=0;if(71!==e[t++]||73!==e[t++]||70!==e[t++]||56!==e[t++]||56!=(e[t++]+1&253)||97!==e[t++])throw new Error("Invalid GIF 87a/89a header.");var r=e[t++]|e[t++]<<8,i=e[t++]|e[t++]<<8,a=e[t++],n=a>>7,o=1<<1+(7&a);e[t++],e[t++];var s=null,d=null;n&&(s=t,d=o,t+=3*o);var l=!0,h=[],f=0,c=null,u=0,m=null;for(this.width=r,this.height=i;l&&t<e.length;)switch(e[t++]){case 33:switch(e[t++]){case 255:if(11!==e[t]||78==e[t+1]&&69==e[t+2]&&84==e[t+3]&&83==e[t+4]&&67==e[t+5]&&65==e[t+6]&&80==e[t+7]&&69==e[t+8]&&50==e[t+9]&&46==e[t+10]&&48==e[t+11]&&3==e[t+12]&&1==e[t+13]&&0==e[t+16])t+=14,m=e[t++]|e[t++]<<8,t++;else for(t+=12;;){if(!((E=e[t++])>=0))throw Error("Invalid block size");if(0===E)break;t+=E}break;case 249:if(4!==e[t++]||0!==e[t+4])throw new Error("Invalid graphics extension block.");var g=e[t++];f=e[t++]|e[t++]<<8,c=e[t++],1&g||(c=null),u=g>>2&7,t++;break;case 254:for(;;){if(!((E=e[t++])>=0))throw Error("Invalid block size");if(0===E)break;t+=E}break;default:throw new Error("Unknown graphic control label: 0x"+e[t-1].toString(16))}break;case 44:var p=e[t++]|e[t++]<<8,v=e[t++]|e[t++]<<8,w=e[t++]|e[t++]<<8,x=e[t++]|e[t++]<<8,I=e[t++],b=I>>6&1,F=1<<1+(7&I),C=s,k=d,D=!1;I>>7&&(D=!0,C=t,k=F,t+=3*F);var O=t;for(t++;;){var E;if(!((E=e[t++])>=0))throw Error("Invalid block size");if(0===E)break;t+=E}h.push({x:p,y:v,width:w,height:x,has_local_palette:D,palette_offset:C,palette_size:k,data_offset:O,data_length:t-O,transparent_index:c,interlaced:!!b,delay:f,disposal:u});break;case 59:l=!1;break;default:throw new Error("Unknown gif block: 0x"+e[t-1].toString(16))}this.numFrames=function(){return h.length},this.loopCount=function(){return m},this.frameInfo=function(e){if(e<0||e>=h.length)throw new Error("Frame index out of range.");return h[e]},this.decodeAndBlitFrameBGRA=function(t,i){var a=this.frameInfo(t),n=a.width*a.height,o=new Uint8Array(n);y(e,a.data_offset,o,n);var s=a.palette_offset,d=a.transparent_index;null===d&&(d=256);var l=a.width,h=r-l,f=l,c=4*(a.y*r+a.x),u=4*((a.y+a.height)*r+a.x),m=c,g=4*h;!0===a.interlaced&&(g+=4*r*7);for(var p=8,v=0,w=o.length;v<w;++v){var x=o[v];if(0===f&&(f=l,(m+=g)>=u&&(g=4*h+4*r*(p-1),m=c+(l+h)*(p<<1),p>>=1)),x===d)m+=4;else{var I=e[s+3*x],b=e[s+3*x+1],F=e[s+3*x+2];i[m++]=F,i[m++]=b,i[m++]=I,i[m++]=255}--f}},this.decodeAndBlitFrameRGBA=function(t,i){var a=this.frameInfo(t),n=a.width*a.height,o=new Uint8Array(n);y(e,a.data_offset,o,n);var s=a.palette_offset,d=a.transparent_index;null===d&&(d=256);var l=a.width,h=r-l,f=l,c=4*(a.y*r+a.x),u=4*((a.y+a.height)*r+a.x),m=c,g=4*h;!0===a.interlaced&&(g+=4*r*7);for(var p=8,v=0,w=o.length;v<w;++v){var x=o[v];if(0===f&&(f=l,(m+=g)>=u&&(g=4*h+4*r*(p-1),m=c+(l+h)*(p<<1),p>>=1)),x===d)m+=4;else{var I=e[s+3*x],b=e[s+3*x+1],F=e[s+3*x+2];i[m++]=I,i[m++]=b,i[m++]=F,i[m++]=255}--f}}}}catch(e){}class x extends r{get __urlType(){return"film"}}class I{get playerOptions(){const{fill:e}=(this.element||this).__;return i(e)&&e.find(e=>"film"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&e.paused&&(delete e.paused,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0)}stop(){const{playerOptions:e}=this;e&&(delete e.frameTime,e.nowIndex=0,this.pause())}seekFrame(e){const{playerOptions:t}=this;t&&(t.nowIndex=e,(this.element||this).forceRender())}}let b=class extends s{get __tag(){return"Film"}};m([a(x)],b.prototype,"__",void 0),b=m([n(I),o()],b),d.add("flim"),l.film=function(e){e.film=!0,e.nowIndex=0},h.film=function(e){return new f(e)},c.loadFilm=function(e,t){return new Promise((r,i)=>{const a={url:e};t&&(a.format=t);const n=h.film(a);c.set(e,n),n.load(()=>r(n),e=>i(e))})},f.prototype.render=function(e,t,r,i,a,n,o,s,d){this.view.render(e,t,r,i,a,n,o,s,d)},p.register("gif",class extends p{constructor(){super(...arguments),this.restoreImageData=null}decodeHeader(t){return g(this,void 0,void 0,function*(){const r=this.decoder=new v(new Uint8Array(t)),{width:i,height:a}=r;this.width=i,this.height=a,this.total=r.numFrames(),this.loop=r.loopCount()||0,this.bufferCanvas=e.origin.createCanvas(i,a),this.bufferContext=this.bufferCanvas.getContext("2d"),this.decodeBuffer=new Uint8ClampedArray(i*a*4),this.sharedImageData=this.bufferContext.createImageData(i,a),this.createAtlas(),yield this.decodeFrame(0)})}decodeOneFrame(t){return g(this,void 0,void 0,function*(){const{decoder:r,decodeBuffer:i,bufferCanvas:a,bufferContext:n,sharedImageData:o}=this,s=r.frameInfo(t);let d;if(3===s.disposal&&(this.restoreImageData=n.getImageData(0,0,this.width,this.height)),r.decodeAndBlitFrameRGBA(t,i),o.data.set(i),n.putImageData(o,0,0),this.atlas)d=a;else{d=e.origin.createCanvas(this.width,this.height);d.getContext("2d").drawImage(a,0,0)}const l={image:d,duration:(s.delay||10)/100};return this.frames[t]=l,this.atlas&&this.mergeFrame(t,!1),this.applyDisposal(s),l})}applyDisposal(e){const{bufferContext:t,restoreImageData:r}=this,i=e.disposal;2===i?t.clearRect(e.x,e.y,e.width,e.height):3===i&&r&&(t.putImageData(r,0,0),this.restoreImageData=null)}destoryFrameImage(e){if(!e.image)return;const t=e.image;t.width=0,t.height=0,delete e.image}destroyDecoder(){this.bufferCanvas&&(this.bufferCanvas.width=0,this.bufferCanvas.height=0,this.decoder=null,this.bufferCanvas=null,this.bufferContext=null,this.decodeBuffer=null,this.sharedImageData=null,this.restoreImageData=null)}}),e.origin.loadFilm=function(t,r,i){return g(this,void 0,void 0,function*(){const r=yield e.origin.loadContent(t,"arrayBuffer");let a=function(e){if(!e)return"";if(e.startsWith("data:")){const t=e.slice(5,e.indexOf(",")),r=t.indexOf("/"),i=t.indexOf(";");return r>-1?t.slice(r+1,i>-1?i:void 0).toLowerCase():""}let t=e.length;const r=e.indexOf("?"),i=e.indexOf("#");r>-1&&r<t&&(t=r),i>-1&&i<t&&(t=i);const a=e.lastIndexOf(".",t);return a>e.lastIndexOf("/",t)?e.slice(a+1,t).toLowerCase():""}(t);a||(i&&(a=i.config.format),a||(a="gif"));const n=u.mimeType(a),o=yield p.canUse(n);let s;const d=p.decoderMap[a];if(s=!d||o&&!d.force?p:d.Decoder,!s)throw new Error("no decoder: "+n);const l=new s;return yield l.decodeHeader(r,n),l})};export{b as Film,x as FilmData,p as FilmDecoder,I as PaintFilm};
1
+ import{Platform as e,isUndefined as t,ImageData as r,isArray as i,dataProcessor as a,useModule as n,registerUI as o,Image as s,Plugin as d,PaintImage as l,isObject as h,Creator as f,LeaferFilm as c,Resource as u,FileHelper as p}from"@leafer-ui/draw";function m(e,t,r,i){var a,n=arguments.length,o=n<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(o=(n<3?a(o):n>3?a(t,r,o):a(t,r))||o);return n>3&&o&&Object.defineProperty(t,r,o),o}function g(e,t,r,i){return new(r||(r=Promise))(function(a,n){function o(e){try{d(i.next(e))}catch(e){n(e)}}function s(e){try{d(i.throw(e))}catch(e){n(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(o,s)}d((i=i.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class v{constructor(){this.frames=[],this.decodedIndex=-1}static register(e,t,r){v.decoderMap[e]={Decoder:t,force:r}}static canUse(e){return g(this,void 0,void 0,function*(){const{supportMap:r}=this;let i=r[e];return t(i)?"undefined"!=typeof ImageDecoder&&(i=yield ImageDecoder.isTypeSupported(e),r[e]=i):i})}createAtlas(){const{width:t,height:r,total:i}=this;if(t*r*i<=v.maxAtlasSize){const a=Math.ceil(Math.sqrt(i*r/t)),n=Math.ceil(i/a);this.atlasGrid={x:a,y:n},this.atlas=e.origin.createCanvas(t*a,r*n),this.atlasContext=this.atlas.getContext("2d")}}decodeHeader(e,t){return g(this,void 0,void 0,function*(){this.decoder=new ImageDecoder({data:e,type:t}),yield this.decoder.tracks.ready;const r=yield this.decodeFrame(0),{displayWidth:i,displayHeight:a}=r.image,{selectedTrack:n}=this.decoder.tracks;this.width=i,this.height=a,this.total=n.frameCount,this.loop=n.repetitionCount,this.createAtlas(),this.atlas&&this.mergeFrame(0)})}decodeFrame(e){return g(this,void 0,void 0,function*(){const{frames:t}=this,r=t[e];if(r&&!r.decoding)return r;for(let t=this.decodedIndex+1;t<=e;t++)yield this.decodeOneFrame(t),this.decodedIndex=t;return t[e]})}decodeOneFrame(e){return g(this,void 0,void 0,function*(){return new Promise(t=>{this.decoder.decode({frameIndex:e}).then(r=>{const{image:i}=r,a={image:i,duration:i.duration/1e3/1e3};this.frames[e]=a,this.atlas&&this.mergeFrame(e),t(a)})})})}mergeFrame(e,t=!0){const r=this.frames[e],{atlasGrid:i,width:a,height:n}=this;r.x=e%i.x*a,r.y=Math.floor(e/i.x)*n,this.atlasContext.drawImage(r.image,r.x,r.y),t?this.destoryFrameImage(r):delete r.image}render(e,r,i,a,n,o,s,d,l){let{nowIndex:h,paused:f,speed:c,pauseIndex:u,loop:p,frameTimer:m}=s;t(h)&&(h=0);const{frames:g}=this,v=g[h];if(this.renderFrame(v,e,r,i,a,n)){if(m)return;if(!t(u)&&h===u)return void(s.paused=!0);let e=h+1;if(e>=this.total){if(this.loop&&isFinite(this.loop)){if(p=(p||0)+1,p>this.loop)return;s.loop=p}e=0}if(e<this.total&&!g[e]&&(g[e]={duration:0,decoding:!0},this.decodeFrame(e).finally(()=>{this.decodedIndex===this.total-1&&this.destroyDecoder()})),f)return;s.frameTimer=setTimeout(()=>{s.nowIndex=e,delete s.frameTimer,o.forceRender()},v.duration*(c||1)*1e3)}else this.renderFrame(g[h-1],e,r,i,a,n),o.forceRender()}renderFrame(e,t,r,i,a,n){const o=e&&!e.decoding,{atlas:s}=this;return o&&(s?t.drawImage(s,e.x,e.y,this.width,this.height,r,i,a,n):t.drawImage(e.image,r,i,a,n)),o}destoryFrame(e,t=!0){const{frames:r}=this,i=r[e];i&&(this.destoryFrameImage(i),t&&delete r[e])}destoryFrameImage(e){const{image:t}=e;t&&t.close&&t.close(),delete e.image}destroyDecoder(){this.decoder&&(this.decoder.close(),this.decoder=null)}close(){this.atlas&&(this.atlas=this.atlasContext=null),this.frames.forEach((e,t)=>this.destoryFrame(t,!1)),this.frames.length=0,this.destroyDecoder()}}v.decoderMap={},v.supportMap={},v.maxAtlasSize=e.image.maxPatternSize;var w,y={};function x(e,t,r,i){for(var a=e[t++],n=1<<a,o=n+1,s=o+1,d=a+1,l=(1<<d)-1,h=0,f=0,c=0,u=e[t++],p=new Int32Array(4096),m=null;;){for(;h<16&&0!==u;)f|=e[t++]<<h,h+=8,1===u?u=e[t++]:--u;if(h<d)break;var g=f&l;if(f>>=d,h-=d,g!==n){if(g===o)break;for(var v=g<s?g:m,w=0,y=v;y>n;)y=p[y]>>8,++w;var x=y;if(c+w+(v!==g?1:0)>i)return void console.log("Warning, gif stream longer than expected.");r[c++]=x;var I=c+=w;for(v!==g&&(r[c++]=x),y=v;w--;)y=p[y],r[--I]=255&y,y>>=8;null!==m&&s<4096&&(p[s++]=m<<8|x,s>=l+1&&d<12&&(++d,l=l<<1|1)),m=g}else s=o+1,l=(1<<(d=a+1))-1,m=null}return c!==i&&console.log("Warning, gif stream shorter than expected."),r}try{y.GifWriter=function(e,t,r,i){var a=0,n=void 0===(i=void 0===i?{}:i).loop?null:i.loop,o=void 0===i.palette?null:i.palette;if(t<=0||r<=0||t>65535||r>65535)throw new Error("Width/Height invalid.");function s(e){var t=e.length;if(t<2||t>256||t&t-1)throw new Error("Invalid code/color length, must be power of 2 and 2 .. 256.");return t}e[a++]=71,e[a++]=73,e[a++]=70,e[a++]=56,e[a++]=57,e[a++]=97;var d=0,l=0;if(null!==o){for(var h=s(o);h>>=1;)++d;if(h=1<<d,--d,void 0!==i.background){if((l=i.background)>=h)throw new Error("Background index out of range.");if(0===l)throw new Error("Background index explicitly passed as 0.")}}if(e[a++]=255&t,e[a++]=t>>8&255,e[a++]=255&r,e[a++]=r>>8&255,e[a++]=(null!==o?128:0)|d,e[a++]=l,e[a++]=0,null!==o)for(var f=0,c=o.length;f<c;++f){var u=o[f];e[a++]=u>>16&255,e[a++]=u>>8&255,e[a++]=255&u}if(null!==n){if(n<0||n>65535)throw new Error("Loop count invalid.");e[a++]=33,e[a++]=255,e[a++]=11,e[a++]=78,e[a++]=69,e[a++]=84,e[a++]=83,e[a++]=67,e[a++]=65,e[a++]=80,e[a++]=69,e[a++]=50,e[a++]=46,e[a++]=48,e[a++]=3,e[a++]=1,e[a++]=255&n,e[a++]=n>>8&255,e[a++]=0}var p=!1;this.addFrame=function(t,r,i,n,d,l){if(!0===p&&(--a,p=!1),l=void 0===l?{}:l,t<0||r<0||t>65535||r>65535)throw new Error("x/y invalid.");if(i<=0||n<=0||i>65535||n>65535)throw new Error("Width/Height invalid.");if(d.length<i*n)throw new Error("Not enough pixels for the frame size.");var h=!0,f=l.palette;if(null==f&&(h=!1,f=o),null==f)throw new Error("Must supply either a local or global palette.");for(var c=s(f),u=0;c>>=1;)++u;c=1<<u;var m=void 0===l.delay?0:l.delay,g=void 0===l.disposal?0:l.disposal;if(g<0||g>3)throw new Error("Disposal out of range.");var v=!1,w=0;if(void 0!==l.transparent&&null!==l.transparent&&(v=!0,(w=l.transparent)<0||w>=c))throw new Error("Transparent color index.");if((0!==g||v||0!==m)&&(e[a++]=33,e[a++]=249,e[a++]=4,e[a++]=g<<2|(!0===v?1:0),e[a++]=255&m,e[a++]=m>>8&255,e[a++]=w,e[a++]=0),e[a++]=44,e[a++]=255&t,e[a++]=t>>8&255,e[a++]=255&r,e[a++]=r>>8&255,e[a++]=255&i,e[a++]=i>>8&255,e[a++]=255&n,e[a++]=n>>8&255,e[a++]=!0===h?128|u-1:0,!0===h)for(var y=0,x=f.length;y<x;++y){var I=f[y];e[a++]=I>>16&255,e[a++]=I>>8&255,e[a++]=255&I}return a=function(e,t,r,i){e[t++]=r;var a=t++,n=1<<r,o=n-1,s=n+1,d=s+1,l=r+1,h=0,f=0;function c(r){for(;h>=r;)e[t++]=255&f,f>>=8,h-=8,t===a+256&&(e[a]=255,a=t++)}function u(e){f|=e<<h,h+=l,c(8)}var p=i[0]&o,m={};u(n);for(var g=1,v=i.length;g<v;++g){var w=i[g]&o,y=p<<8|w,x=m[y];if(void 0===x){for(f|=p<<h,h+=l;h>=8;)e[t++]=255&f,f>>=8,h-=8,t===a+256&&(e[a]=255,a=t++);4096===d?(u(n),d=s+1,l=r+1,m={}):(d>=1<<l&&++l,m[y]=d++),p=w}else p=x}return u(p),u(s),c(1),a+1===t?e[a]=0:(e[a]=t-a-1,e[t++]=0),t}(e,a,u<2?2:u,d),a},this.end=function(){return!1===p&&(e[a++]=59,p=!0),a},this.getOutputBuffer=function(){return e},this.setOutputBuffer=function(t){e=t},this.getOutputBufferPosition=function(){return a},this.setOutputBufferPosition=function(e){a=e}},w=y.GifReader=function(e){var t=0;if(71!==e[t++]||73!==e[t++]||70!==e[t++]||56!==e[t++]||56!=(e[t++]+1&253)||97!==e[t++])throw new Error("Invalid GIF 87a/89a header.");var r=e[t++]|e[t++]<<8,i=e[t++]|e[t++]<<8,a=e[t++],n=a>>7,o=1<<1+(7&a);e[t++],e[t++];var s=null,d=null;n&&(s=t,d=o,t+=3*o);var l=!0,h=[],f=0,c=null,u=0,p=null;for(this.width=r,this.height=i;l&&t<e.length;)switch(e[t++]){case 33:switch(e[t++]){case 255:if(11!==e[t]||78==e[t+1]&&69==e[t+2]&&84==e[t+3]&&83==e[t+4]&&67==e[t+5]&&65==e[t+6]&&80==e[t+7]&&69==e[t+8]&&50==e[t+9]&&46==e[t+10]&&48==e[t+11]&&3==e[t+12]&&1==e[t+13]&&0==e[t+16])t+=14,p=e[t++]|e[t++]<<8,t++;else for(t+=12;;){if(!((E=e[t++])>=0))throw Error("Invalid block size");if(0===E)break;t+=E}break;case 249:if(4!==e[t++]||0!==e[t+4])throw new Error("Invalid graphics extension block.");var m=e[t++];f=e[t++]|e[t++]<<8,c=e[t++],1&m||(c=null),u=m>>2&7,t++;break;case 254:for(;;){if(!((E=e[t++])>=0))throw Error("Invalid block size");if(0===E)break;t+=E}break;default:throw new Error("Unknown graphic control label: 0x"+e[t-1].toString(16))}break;case 44:var g=e[t++]|e[t++]<<8,v=e[t++]|e[t++]<<8,w=e[t++]|e[t++]<<8,y=e[t++]|e[t++]<<8,I=e[t++],b=I>>6&1,F=1<<1+(7&I),C=s,k=d,D=!1;I>>7&&(D=!0,C=t,k=F,t+=3*F);var O=t;for(t++;;){var E;if(!((E=e[t++])>=0))throw Error("Invalid block size");if(0===E)break;t+=E}h.push({x:g,y:v,width:w,height:y,has_local_palette:D,palette_offset:C,palette_size:k,data_offset:O,data_length:t-O,transparent_index:c,interlaced:!!b,delay:f,disposal:u});break;case 59:l=!1;break;default:throw new Error("Unknown gif block: 0x"+e[t-1].toString(16))}this.numFrames=function(){return h.length},this.loopCount=function(){return p},this.frameInfo=function(e){if(e<0||e>=h.length)throw new Error("Frame index out of range.");return h[e]},this.decodeAndBlitFrameBGRA=function(t,i){var a=this.frameInfo(t),n=a.width*a.height,o=new Uint8Array(n);x(e,a.data_offset,o,n);var s=a.palette_offset,d=a.transparent_index;null===d&&(d=256);var l=a.width,h=r-l,f=l,c=4*(a.y*r+a.x),u=4*((a.y+a.height)*r+a.x),p=c,m=4*h;!0===a.interlaced&&(m+=4*r*7);for(var g=8,v=0,w=o.length;v<w;++v){var y=o[v];if(0===f&&(f=l,(p+=m)>=u&&(m=4*h+4*r*(g-1),p=c+(l+h)*(g<<1),g>>=1)),y===d)p+=4;else{var I=e[s+3*y],b=e[s+3*y+1],F=e[s+3*y+2];i[p++]=F,i[p++]=b,i[p++]=I,i[p++]=255}--f}},this.decodeAndBlitFrameRGBA=function(t,i){var a=this.frameInfo(t),n=a.width*a.height,o=new Uint8Array(n);x(e,a.data_offset,o,n);var s=a.palette_offset,d=a.transparent_index;null===d&&(d=256);var l=a.width,h=r-l,f=l,c=4*(a.y*r+a.x),u=4*((a.y+a.height)*r+a.x),p=c,m=4*h;!0===a.interlaced&&(m+=4*r*7);for(var g=8,v=0,w=o.length;v<w;++v){var y=o[v];if(0===f&&(f=l,(p+=m)>=u&&(m=4*h+4*r*(g-1),p=c+(l+h)*(g<<1),g>>=1)),y===d)p+=4;else{var I=e[s+3*y],b=e[s+3*y+1],F=e[s+3*y+2];i[p++]=I,i[p++]=b,i[p++]=F,i[p++]=255}--f}}}}catch(e){}class I extends r{get __urlType(){return"film"}}class b{get playerOptions(){const{fill:e}=(this.element||this).__;return i(e)&&e.find(e=>"film"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&e.paused&&(delete e.paused,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0)}stop(){const{playerOptions:e}=this;e&&(delete e.frameTime,e.nowIndex=0,this.pause())}seekFrame(e){const{playerOptions:t}=this;t&&(t.nowIndex=e,(this.element||this).forceRender())}}let F=class extends s{get __tag(){return"Film"}};m([a(I)],F.prototype,"__",void 0),F=m([n(b),o()],F),d.add("flim"),l.film=function(e,t){e.film=!0,e.nowIndex=0,h(t)&&(e.nowIndex=t.nowIndex,e.pauseIndex=t.pauseIndex,e.speed=t.speed,e.paused=t.paused,e.loop=t.loop)},f.film=function(e){return new c(e)},u.loadFilm=function(e,t){return new Promise((r,i)=>{const a={url:e};t&&(a.format=t);const n=f.film(a);u.set(e,n),n.load(()=>r(n),e=>i(e))})},c.prototype.render=function(e,t,r,i,a,n,o,s,d){this.view.render(e,t,r,i,a,n,o,s,d)},v.register("gif",class extends v{constructor(){super(...arguments),this.restoreImageData=null}decodeHeader(t){return g(this,void 0,void 0,function*(){const r=this.decoder=new w(new Uint8Array(t)),{width:i,height:a}=r;this.width=i,this.height=a,this.total=r.numFrames(),this.loop=r.loopCount()||0,this.bufferCanvas=e.origin.createCanvas(i,a),this.bufferContext=this.bufferCanvas.getContext("2d"),this.decodeBuffer=new Uint8ClampedArray(i*a*4),this.sharedImageData=this.bufferContext.createImageData(i,a),this.createAtlas(),yield this.decodeFrame(0)})}decodeOneFrame(t){return g(this,void 0,void 0,function*(){const{decoder:r,decodeBuffer:i,bufferCanvas:a,bufferContext:n,sharedImageData:o}=this,s=r.frameInfo(t);let d;if(3===s.disposal&&(this.restoreImageData=n.getImageData(0,0,this.width,this.height)),r.decodeAndBlitFrameRGBA(t,i),o.data.set(i),n.putImageData(o,0,0),this.atlas)d=a;else{d=e.origin.createCanvas(this.width,this.height);d.getContext("2d").drawImage(a,0,0)}const l={image:d,duration:(s.delay||10)/100};return this.frames[t]=l,this.atlas&&this.mergeFrame(t,!1),this.applyDisposal(s),l})}applyDisposal(e){const{bufferContext:t,restoreImageData:r}=this,i=e.disposal;2===i?t.clearRect(e.x,e.y,e.width,e.height):3===i&&r&&(t.putImageData(r,0,0),this.restoreImageData=null)}destoryFrameImage(e){if(!e.image)return;const t=e.image;t.width=0,t.height=0,delete e.image}destroyDecoder(){this.bufferCanvas&&(this.bufferCanvas.width=0,this.bufferCanvas.height=0,this.decoder=null,this.bufferCanvas=null,this.bufferContext=null,this.decodeBuffer=null,this.sharedImageData=null,this.restoreImageData=null)}}),e.origin.loadFilm=function(t,r,i){return g(this,void 0,void 0,function*(){const r=yield e.origin.loadContent(t,"arrayBuffer");let a=function(e){if(!e)return"";if(e.startsWith("data:")){const t=e.slice(5,e.indexOf(",")),r=t.indexOf("/"),i=t.indexOf(";");return r>-1?t.slice(r+1,i>-1?i:void 0).toLowerCase():""}let t=e.length;const r=e.indexOf("?"),i=e.indexOf("#");r>-1&&r<t&&(t=r),i>-1&&i<t&&(t=i);const a=e.lastIndexOf(".",t);return a>e.lastIndexOf("/",t)?e.slice(a+1,t).toLowerCase():""}(t);a||(i&&(a=i.config.format),a||(a="gif"));const n=p.mimeType(a),o=yield v.canUse(n);let s;const d=v.decoderMap[a];if(s=!d||o&&!d.force?v:d.Decoder,!s)throw new Error("no decoder: "+n);const l=new s;return yield l.decodeHeader(r,n),l})};export{F as Film,I as FilmData,v as FilmDecoder,b as PaintFilm};
2
2
  //# sourceMappingURL=film.esm.min.js.map