scaling comps on resizing
diff --git a/player/index.html b/player/index.html
index e4b8ea0..3c98412 100644
--- a/player/index.html
+++ b/player/index.html
@@ -10,8 +10,8 @@
}
#bodymovin{
background-color:#000;
- width:1820px;
- height:275px;
+ width:909px;
+ height:500px;
/*width:800px;
height:500px;*/
display:block;
@@ -111,20 +111,16 @@
var animData = {
container: document.getElementById('bodymovin'),
renderer: 'canvas',
- loop: true,
- prerender: false,
- autoplay: false,
+ loop: false,
+ autoplay: true,
autoloadSegments: true,
//animationData: anim2
- path: 'exports/bm/data.json'
+ path: 'exports/render/data.json'
};
var anim;
anim = bodymovin.loadAnimation(animData);
- setTimeout(function(){
- anim.play();
- },1000);
diff --git a/player/js/elements/canvasElements/CVCompElement.js b/player/js/elements/canvasElements/CVCompElement.js
index 3f392a9..a64a524 100644
--- a/player/js/elements/canvasElements/CVCompElement.js
+++ b/player/js/elements/canvasElements/CVCompElement.js
@@ -26,6 +26,7 @@
this.transformMat = new Matrix();
this.parentGlobalData = this.globalData;
var cv = document.createElement('canvas');
+ //document.body.appendChild(cv);
compGlobalData.canvasContext = cv.getContext('2d');
this.canvasContext = compGlobalData.canvasContext;
cv.width = this.data.w;
@@ -43,6 +44,28 @@
CVCompElement.prototype.ctxOpacity = CanvasRenderer.prototype.ctxOpacity;
CVCompElement.prototype.save = CanvasRenderer.prototype.save;
CVCompElement.prototype.restore = CanvasRenderer.prototype.restore;
+CVCompElement.prototype.reset = function(){
+ this.contextData.cArrPos = 0;
+ this.contextData.cTr.reset();
+ this.contextData.cO = 1;
+};
+CVCompElement.prototype.resize = function(transformCanvas){
+ var maxScale = Math.max(transformCanvas.sx,transformCanvas.sy);
+ this.canvas.width = this.data.w*maxScale;
+ this.canvas.height = this.data.h*maxScale;
+ this.transformCanvas = {
+ sc:maxScale,
+ w:this.data.w*maxScale,
+ h:this.data.h*maxScale,
+ props:[maxScale,0,0,0,0,maxScale,0,0,0,0,1,0,0,0,0,1]
+ }
+ var i,len = this.elements.length;
+ for( i = 0; i < len; i+=1 ){
+ if(this.elements[i].data.ty === 0){
+ this.elements[i].resize(transformCanvas);
+ }
+ }
+};
CVCompElement.prototype.prepareFrame = function(num){
this.globalData.frameId = this.parentGlobalData.frameId;
@@ -68,6 +91,7 @@
}
if(this.globalData.mdf){
this.canvasContext.clearRect(0, 0, this.data.w, this.data.h);
+ this.ctxTransform(this.transformCanvas.props);
}
};
@@ -80,18 +104,22 @@
for( i = len - 1; i >= 0; i -= 1 ){
this.elements[i].renderFrame();
}
- if(this.data.hasMask){
- this.globalData.renderer.restore(true);
- }
+ }
+ if(this.data.hasMask){
+ this.globalData.renderer.restore(true);
}
if(this.firstFrame){
this.firstFrame = false;
}
- this.parentGlobalData.renderer.save(true);
+ this.parentGlobalData.renderer.save();
this.parentGlobalData.renderer.ctxTransform(this.finalTransform.mat.props);
this.parentGlobalData.renderer.ctxOpacity(this.finalTransform.opacity);
- this.parentGlobalData.renderer.canvasContext.drawImage(this.canvas,0,0);
- this.parentGlobalData.renderer.restore(true);
+ this.parentGlobalData.renderer.canvasContext.drawImage(this.canvas,0,0,this.data.w,this.data.h);
+ this.parentGlobalData.renderer.restore();
+
+ if(this.globalData.mdf){
+ this.reset();
+ }
};
CVCompElement.prototype.setElements = function(elems){
diff --git a/player/js/renderers/CanvasRenderer.js b/player/js/renderers/CanvasRenderer.js
index d23d663..04d283e 100644
--- a/player/js/renderers/CanvasRenderer.js
+++ b/player/js/renderers/CanvasRenderer.js
@@ -224,7 +224,6 @@
this.transformCanvas = {};
this.transformCanvas.w = animData.w;
this.transformCanvas.h = animData.h;
- this.updateContainerSize();
this.globalData.fontManager = new FontManager();
this.globalData.fontManager.addChars(animData.chars);
this.globalData.fontManager.addFonts(animData.fonts,document);
@@ -262,6 +261,12 @@
this.transformCanvas.ty = 0;
}
this.transformCanvas.props = [this.transformCanvas.sx,0,0,0,0,this.transformCanvas.sy,0,0,0,0,1,0,this.transformCanvas.tx,this.transformCanvas.ty,0,1];
+ var i, len = this.elements.length;
+ for(i=0;i<len;i+=1){
+ if(this.elements[i].data.ty === 0){
+ this.elements[i].resize(this.transformCanvas);
+ }
+ }
};
CanvasRenderer.prototype.buildStage = function (container, layers, elements) {
@@ -278,6 +283,7 @@
this.buildStage(null, layerData.layers, elements[i].getElements());
}
}
+ this.updateContainerSize();
};
CanvasRenderer.prototype.buildItemHierarchy = function (data,element, layers, parentName,elements,resetHierarchyFlag) {
@@ -321,7 +327,7 @@
this.reset();
this.canvasContext.save();
//this.canvasContext.canvas.width = this.canvasContext.canvas.width;
- this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);
+ this.canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w*this.transformCanvas.sx, this.transformCanvas.h*this.transformCanvas.sy);
}else{
this.save();
}
diff --git a/player/js/utils/common.js b/player/js/utils/common.js
index bb37759..1c7b562 100644
--- a/player/js/utils/common.js
+++ b/player/js/utils/common.js
@@ -1,4 +1,4 @@
-var subframeEnabled = true;
+var subframeEnabled = false;
var expressionsPlugin;
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
var cachedColors = {};