expressions update
diff --git a/player/index.html b/player/index.html
index 7a8076a..4a97732 100644
--- a/player/index.html
+++ b/player/index.html
@@ -71,7 +71,7 @@
var animData = {
container: document.getElementById('bodymovin'),
- renderer: 'svg',
+ renderer: 'canvas',
loop: false,
prerender: false,
autoplay: true,
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 1dd4e4f..8d302d2 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -212,9 +212,9 @@
this.firstFrame = Math.round(this.animationData.ip);
this.frameMult = this.animationData.fr / 1000;
/*
- this.firstFrame = 67;
- this.totalFrames = 1;
- this.animationData.tf = 1;
+ this.firstFrame = 187;
+ this.totalFrames = 2;
+ this.animationData.tf = 2;
//this.frameMult = 10000/1000;
//*/////
this.trigger('config_ready');
diff --git a/player/js/effects/SliderEffect.js b/player/js/effects/SliderEffect.js
new file mode 100644
index 0000000..d760076
--- /dev/null
+++ b/player/js/effects/SliderEffect.js
@@ -0,0 +1,24 @@
+function SliderEffect(data,elem, dynamicProperties){
+ this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);
+}
+function AngleEffect(data,elem, dynamicProperties){
+ this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);
+}
+function ColorEffect(data,elem, dynamicProperties){
+ this.p = PropertyFactory.getProp(elem,data.v,1,1/255,dynamicProperties);
+}
+function PointEffect(data,elem, dynamicProperties){
+ this.p = PropertyFactory.getProp(elem,data.v,1,0,dynamicProperties);
+}
+function CheckboxEffect(data,elem, dynamicProperties){
+ this.p = PropertyFactory.getProp(elem,data.v,1,0,dynamicProperties);
+}
+
+SliderEffect.prototype.proxyFunction = function(){
+ return this.p.v;
+}
+
+AngleEffect.prototype.proxyFunction = SliderEffect.prototype.proxyFunction;
+ColorEffect.prototype.proxyFunction = SliderEffect.prototype.proxyFunction;
+PointEffect.prototype.proxyFunction = SliderEffect.prototype.proxyFunction;
+CheckboxEffect.prototype.proxyFunction = SliderEffect.prototype.proxyFunction;
\ No newline at end of file
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index da2a90c..a14d91b 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -52,13 +52,13 @@
this.effect = this.effectsManager.getEffect.bind(this.effectsManager);
}
this.finalTransform = {
- op: PropertyFactory.getProp(this,this.data.ks.o,0,0.01,this.dynamicProperties),
mProp: PropertyFactory.getProp(this,this.data.ks,2,null,this.dynamicProperties),
matMdf: false,
opMdf: false,
mat: new Matrix(),
opacity: 1
};
+ this.finalTransform.op = this.finalTransform.mProp.o;
this.transform = this.finalTransform.mProp;
this.createElements();
if(this.data.hasMask){
diff --git a/player/js/elements/ShapeElement.js b/player/js/elements/ShapeElement.js
index 1b2a84a..ee452a0 100644
--- a/player/js/elements/ShapeElement.js
+++ b/player/js/elements/ShapeElement.js
@@ -130,6 +130,9 @@
}else if(arr[i].ty == 'el'){
ty = 6;
}
+ if(addedTrims.length){
+ arr[i].trimmed = true;
+ }
data[i].sh = PropertyFactory.getShapeProp(this,arr[i],ty,dynamicProperties, addedTrims, this.comp);
jLen = this.stylesList.length;
var element, hasStrokes = false, hasFills = false;
@@ -159,6 +162,9 @@
closed: false,
trimProp: PropertyFactory.getProp(this,arr[i],7,null,dynamicProperties)
};
+ data[i] = {
+ tr : trimOb.trimProp
+ };
addedTrims.push(trimOb);
ownTrims.push(trimOb);
}
diff --git a/player/js/elements/canvasElements/CVShapeElement.js b/player/js/elements/canvasElements/CVShapeElement.js
index 7afaed3..f696947 100644
--- a/player/js/elements/canvasElements/CVShapeElement.js
+++ b/player/js/elements/canvasElements/CVShapeElement.js
@@ -26,7 +26,7 @@
this.parent.createElements.call(this);
this.searchShapes(this.shapesData,this.viewData,this.dynamicProperties,[]);
- //this.mainShape = new CVShapeItemElement(this.data,this.dynamicProperties,this.globalData);
+ this.buildExpressionInterface();
};
CVShapeElement.prototype.searchShapes = function(arr,data,dynamicProperties,addedTrims){
var i, len = arr.length - 1;
@@ -96,6 +96,9 @@
}else if(arr[i].ty == 'el'){
ty = 6;
}
+ if(addedTrims.length){
+ arr[i].trimmed = true;
+ }
data[i].sh = PropertyFactory.getShapeProp(this,arr[i],ty,dynamicProperties, addedTrims);
jLen = this.stylesList.length;
var hasStrokes = false, hasFills = false;
@@ -414,4 +417,7 @@
this.stylesList.length = 0;
this.viewData.length = 0;
this.parent.destroy.call();
-};
\ No newline at end of file
+};
+for (var attr in ShapeInterface.prototype) {
+ if (ShapeInterface.prototype.hasOwnProperty(attr)) CVShapeElement.prototype[attr] = ShapeInterface.prototype[attr];
+}
\ No newline at end of file
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index af57664..4b3f7d0 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -338,6 +338,12 @@
}
return this.s.pv;
}
+ function opacityGetter(){
+ if(this.o.k){
+ this.o.getValue();
+ }
+ return this.o.pv;
+ }
function processKeys(){
if(this.elem.globalData.frameId === this.frameId){
return;
@@ -368,6 +374,7 @@
this.p = getProp(elem,data.p,1,0,this.dynamicProperties);
this.s = getProp(elem,data.s,1,0.01,this.dynamicProperties);
this.r = getProp(elem,data.r,0,degToRads,this.dynamicProperties);
+ this.o = getProp(elem,data.o,0,0.01,arr);
if(this.dynamicProperties.length){
arr.push(this);
}else{
@@ -377,6 +384,7 @@
Object.defineProperty(this, "anchorPoint", { get: anchorGetter});
Object.defineProperty(this, "rotation", { get: rotationGetter});
Object.defineProperty(this, "scale", { get: scaleGetter});
+ Object.defineProperty(this, "opacity", { get: opacityGetter});
}
}());
@@ -411,7 +419,7 @@
this.k = false;
this.mdf = false;
this.closed = type === 3 ? data.cl : data.closed;
- this.shapeData = data.ks;
+ this.numNodes = type === 3 ? data.pt.k.v : data.ks.k.v.length;
this.v = type === 3 ? data.pt.k : data.ks.k;
this.pv = this.v;
checkExpressions.bind(this)(elem,data);
@@ -508,6 +516,7 @@
o: new Array(4),
c: true
};
+ this.numNodes = 4;
this.d = data.d;
this.dynamicProperties = [];
data.closed = true;
@@ -630,6 +639,7 @@
o: new Array(8),
c: true
};
+ this.numNodes = 8;
this.elem = elem;
this.comp = elem.comp;
this.frameId = -1;
@@ -748,6 +758,9 @@
function processKeys(forceRender){
this.mdf = forceRender ? true : false;
+ if(this.prop.k){
+ this.prop.getValue();
+ }
var i = 0, len = this.trims.length;
this.pathStarted = false;
while(i<len) {
@@ -857,6 +870,7 @@
this.trims = [];
this.k = false;
this.mdf = false;
+ this.ty = 'tm';
////this.comp = elem.comp;
this.pathStarted = false;
this.segments = [
@@ -880,7 +894,7 @@
}
}
this.prop = prop;
- len = this.prop.shapeData.k.v.length - 1;
+ len = this.prop.numNodes - 1;
len += this.prop.closed ? 1:0;
this.lengths = new Array(len);
this.k = prop.k ? true : this.k;
@@ -889,6 +903,7 @@
this.addSegment = addSegment;
this.getSegmentsLength = getSegmentsLength;
if(!this.k){
+ this.prop.getValue();
this.getValue(true);
}
}
@@ -904,7 +919,7 @@
prop = new ShapeProperty(elem, data, type);
}
}else if(type === 5){
- prop = new RectShapeProperty(elem, data, arr);
+ prop = new RectShapeProperty(elem, data);
}else if(type === 6){
prop = new EllShapeProperty(elem, data);
}
diff --git a/player/js/utils/common.js b/player/js/utils/common.js
index f273591..6cc7055 100644
--- a/player/js/utils/common.js
+++ b/player/js/utils/common.js
@@ -1,4 +1,4 @@
-var subframeEnabled = false;
+var subframeEnabled = true;
var cachedColors = {};
var bm_rounder = Math.round;
var bm_rnd;
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index 448b870..73e3358 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -472,7 +472,7 @@
ind -= 1;
var ob = {
time: data.k[ind].t
- }
+ };
var arr;
if(ind === data.k.length - 1){
arr = data.k[ind-1].e;
@@ -490,7 +490,7 @@
if(!transform){
transform = elem.transform;
}
- if(!content){
+ if(!content && elem.content){
content = elem.content.bind(elem);
}
if(this.getPreValue){
@@ -503,7 +503,6 @@
if(typeof this.v === 'number'){
this.v *= this.mult;
}else{
- console.log(this);
var i, len = this.v.length;
for(i = 0; i < len; i += 1){
this.v[i] *= this.mult;
diff --git a/player/js/utils/expressions/ShapeInterface.js b/player/js/utils/expressions/ShapeInterface.js
index 3a15ca7..685e472 100644
--- a/player/js/utils/expressions/ShapeInterface.js
+++ b/player/js/utils/expressions/ShapeInterface.js
@@ -1,12 +1,12 @@
function ShapeInterface(){}
-ShapeInterface.prototype.fillInterface = function(shape,view) {
+ShapeInterface.prototype.fillInterface = function(view) {
var ob = {
get color(){
if(view.c.k){
view.c.getValue();
}
- return view.c.pv;
+ return [view.c.pv[0],view.c.pv[1],view.c.pv[2]];
},
get opacity(){
if(view.o.k){
@@ -24,7 +24,7 @@
if(view.c.k){
view.c.getValue();
}
- return view.c.pv;
+ return [view.c.pv[0],view.c.pv[1],view.c.pv[2]];
},
get opacity(){
if(view.o.k){
@@ -55,7 +55,7 @@
return ob;
};
-ShapeInterface.prototype.shapeInterface = function(shape,view) {
+ShapeInterface.prototype.shapeInterface = function(view) {
var ob = {
get shape(){
if(view.sh.k){
@@ -67,25 +67,140 @@
return ob;
};
+ShapeInterface.prototype.ellipseInterface = function(view) {
+ var ob = {
+ get size(){
+ if(view.sh.s.k){
+ view.sh.s.getValue();
+ }
+ return [view.sh.s.pv[0],view.sh.s.pv[1]];
+ },
+ get position(){
+ if(view.sh.p.k){
+ view.sh.p.getValue();
+ }
+ return [view.sh.p.pv[0],view.sh.p.pv[1]];
+ }
+ };
+ return ob;
+};
+
+ShapeInterface.prototype.rectangleInterface = function(view) {
+ var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
+ var ob = {
+ get size(){
+ if(prop.s.k){
+ prop.s.getValue();
+ }
+ return [prop.s.pv[0],prop.s.pv[1]];
+ },
+ get position(){
+ if(prop.p.k){
+ prop.p.getValue();
+ }
+ return [prop.p.pv[0],prop.p.pv[1]];
+ },
+ get roundness(){
+ if(prop.r.k){
+ prop.r.getValue();
+ }
+ return prop.r.pv;
+ }
+ };
+ return ob;
+};
+
+ShapeInterface.prototype.trimInterface = function(view) {
+ var ob = {
+ get start(){
+ if(view.tr.s.k){
+ view.tr.s.getValue();
+ }
+ return view.tr.s.pv;
+ },
+ get end(){
+ if(view.tr.e.k){
+ view.tr.e.getValue();
+ }
+ return view.tr.e.pv;
+ },
+ get offset(){
+ if(view.tr.o.k){
+ view.tr.o.getValue();
+ }
+ return view.tr.o.pv;
+ }
+ };
+ return ob;
+};
+
+ShapeInterface.prototype.transformInterface = function(view) {
+ var ob = {
+ get opacity(){
+ if(view.transform.mProps.o.k){
+ view.transform.mProps.o.getValue();
+ }
+ return view.transform.mProps.o.pv;
+ },
+ get position(){
+ if(view.transform.mProps.p.k){
+ view.transform.mProps.p.getValue();
+ }
+ return [view.transform.mProps.p.pv[0],view.transform.mProps.p.pv[1]];
+ },
+ get anchorPoint(){
+ if(view.transform.mProps.a.k){
+ view.transform.mProps.a.getValue();
+ }
+ return [view.transform.mProps.a.pv[0],view.transform.mProps.a.pv[1]];
+ },
+ get scale(){
+ if(view.transform.mProps.s.k){
+ view.transform.mProps.s.getValue();
+ }
+ return [view.transform.mProps.s.pv[0],view.transform.mProps.s.pv[1]];
+ },
+ get rotation(){
+ if(view.transform.mProps.r.k){
+ view.transform.mProps.r.getValue();
+ }
+ return view.transform.mProps.r.pv;
+ }
+ }
+ return ob;
+};
+
ShapeInterface.prototype.groupInterface = function(shapes,view,container){
var interfaceArr = [];
var i, len = shapes.length,interfaceOb;
for(i=0;i<len;i+=1){
- interfaceOb = {};
if(shapes[i].ty === 'gr'){
+ interfaceOb = {};
this.groupInterface(shapes[i].it,view[i].it,interfaceOb);
interfaceArr.push(interfaceOb);
}else if(shapes[i].ty === 'sh'){
- interfaceOb = this.shapeInterface(shapes[i],view[i]);
+ interfaceOb = this.shapeInterface(view[i]);
interfaceArr.push(interfaceOb);
}else if(shapes[i].ty === 'fl'){
- interfaceOb = this.fillInterface(shapes[i],view[i]);
+ interfaceOb = this.fillInterface(view[i]);
interfaceArr.push(interfaceOb);
}else if(shapes[i].ty === 'st'){
interfaceOb = this.strokeInterface(shapes[i],view[i]);
interfaceArr.push(interfaceOb);
- }else{
+ }else if(shapes[i].ty === 'el'){
+ interfaceOb = this.ellipseInterface(view[i]);
interfaceArr.push(interfaceOb);
+ }else if(shapes[i].ty === 'rc'){
+ interfaceOb = this.rectangleInterface(view[i]);
+ interfaceArr.push(interfaceOb);
+ }else if(shapes[i].ty === 'tr'){
+ container.transform = this.transformInterface(view[i]);
+ }else if(shapes[i].ty === 'tm'){
+ interfaceOb = this.trimInterface(view[i]);
+ interfaceArr.push(interfaceOb);
+ }else{
+ console.log(shapes[i].ty);
+ interfaceArr.push('');
}
}
container.content = function(nm){