123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import {
- extendPrototype,
- } from '../functionExtensions';
- import DynamicPropertyContainer from '../helpers/dynamicProperties';
- import {
- createTypedArray,
- } from '../helpers/arrays';
- import PropertyFactory from '../PropertyFactory';
- function GradientProperty(elem, data, container) {
- this.data = data;
- this.c = createTypedArray('uint8c', data.p * 4);
- var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p * 4) : data.k.k.length - data.p * 4;
- this.o = createTypedArray('float32', cLength);
- this._cmdf = false;
- this._omdf = false;
- this._collapsable = this.checkCollapsable();
- this._hasOpacity = cLength;
- this.initDynamicPropertyContainer(container);
- this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);
- this.k = this.prop.k;
- this.getValue(true);
- }
- GradientProperty.prototype.comparePoints = function (values, points) {
- var i = 0;
- var len = this.o.length / 2;
- var diff;
- while (i < len) {
- diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);
- if (diff > 0.01) {
- return false;
- }
- i += 1;
- }
- return true;
- };
- GradientProperty.prototype.checkCollapsable = function () {
- if (this.o.length / 2 !== this.c.length / 4) {
- return false;
- }
- if (this.data.k.k[0].s) {
- var i = 0;
- var len = this.data.k.k.length;
- while (i < len) {
- if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {
- return false;
- }
- i += 1;
- }
- } else if (!this.comparePoints(this.data.k.k, this.data.p)) {
- return false;
- }
- return true;
- };
- GradientProperty.prototype.getValue = function (forceRender) {
- this.prop.getValue();
- this._mdf = false;
- this._cmdf = false;
- this._omdf = false;
- if (this.prop._mdf || forceRender) {
- var i;
- var len = this.data.p * 4;
- var mult;
- var val;
- for (i = 0; i < len; i += 1) {
- mult = i % 4 === 0 ? 100 : 255;
- val = Math.round(this.prop.v[i] * mult);
- if (this.c[i] !== val) {
- this.c[i] = val;
- this._cmdf = !forceRender;
- }
- }
- if (this.o.length) {
- len = this.prop.v.length;
- for (i = this.data.p * 4; i < len; i += 1) {
- mult = i % 2 === 0 ? 100 : 1;
- val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];
- if (this.o[i - this.data.p * 4] !== val) {
- this.o[i - this.data.p * 4] = val;
- this._omdf = !forceRender;
- }
- }
- }
- this._mdf = !forceRender;
- }
- };
- extendPrototype([DynamicPropertyContainer], GradientProperty);
- export default GradientProperty;
|