UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

2 lines 2.03 kB
import{_defineProperty as e}from"../../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.min.mjs";import{classRegistry as t}from"../ClassRegistry.min.mjs";import{createCanvasElement as n}from"../util/misc/dom.min.mjs";import{FabricImage as r}from"../shapes/Image.min.mjs";import{BaseFilter as i}from"./BaseFilter.min.mjs";import{fragmentSource as a,vertexSource as o}from"./shaders/blendImage.min.mjs";var s=class extends i{getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return a[this.mode]}getVertexSource(){return o}applyToWebGL(e){let t=e.context,n=this.createTexture(e.filterBackend,this.image);this.bindAdditionalTexture(t,n,t.TEXTURE1),super.applyToWebGL(e),this.unbindAdditionalTexture(t,t.TEXTURE1)}createTexture(e,t){return e.getCachedTexture(t.cacheKey,t.getElement())}calculateMatrix(){let e=this.image,{width:t,height:n}=e.getElement();return[1/e.scaleX,0,0,0,1/e.scaleY,0,-e.left/t,-e.top/n,1]}applyTo2d({imageData:{data:e,width:t,height:r},filterBackend:{resources:i}}){let a=this.image;i.blendImage||(i.blendImage=n());let o=i.blendImage,s=o.getContext(`2d`);o.width!==t||o.height!==r?(o.width=t,o.height=r):s.clearRect(0,0,t,r),s.setTransform(a.scaleX,0,0,a.scaleY,a.left,a.top),s.drawImage(a.getElement(),0,0,t,r);let c=s.getImageData(0,0,t,r).data;for(let t=0;t<e.length;t+=4){let n=e[t],r=e[t+1],i=e[t+2],a=e[t+3],o=c[t],s=c[t+1],l=c[t+2],u=c[t+3];switch(this.mode){case`multiply`:e[t]=n*o/255,e[t+1]=r*s/255,e[t+2]=i*l/255,e[t+3]=a*u/255;break;case`mask`:e[t+3]=u}}}sendUniformData(e,t){let n=this.calculateMatrix();e.uniform1i(t.uImage,1),e.uniformMatrix3fv(t.uTransformMatrix,!1,n)}toObject(){return{...super.toObject(),image:this.image&&this.image.toObject()}}static async fromObject({type:e,image:t,...n},i){return r.fromObject(t,i).then(e=>new this({...n,image:e}))}};e(s,`type`,`BlendImage`),e(s,`defaults`,{mode:`multiply`,alpha:1}),e(s,`uniformLocations`,[`uTransformMatrix`,`uImage`]),t.setClass(s);export{s as BlendImage}; //# sourceMappingURL=BlendImage.min.mjs.map