| Index: packages/charted/lib/core/interpolators/interpolators.dart
|
| diff --git a/packages/charted/lib/core/interpolators/interpolators.dart b/packages/charted/lib/core/interpolators/interpolators.dart
|
| index 0de80eeb9684d42a19d94761d3ab79454d481942..56dc9df7fc6ef8f275fcdca0e55b5e58d394ff8c 100644
|
| --- a/packages/charted/lib/core/interpolators/interpolators.dart
|
| +++ b/packages/charted/lib/core/interpolators/interpolators.dart
|
| @@ -19,7 +19,7 @@ typedef Interpolator InterpolatorGenerator(a, b);
|
| /// List of registered interpolators - [createInterpolatorFromRegistry]
|
| /// iterates through this list from backwards and the first non-null
|
| /// interpolate function is returned to the caller.
|
| -List<InterpolatorGenerator> _interpolators = [ createInterpolatorByType ];
|
| +List<InterpolatorGenerator> _interpolators = [createInterpolatorByType];
|
|
|
| /// Returns a default interpolator between values [a] and [b]. Unless
|
| /// more interpolators are added, one of the internal implementations are
|
| @@ -33,18 +33,21 @@ Interpolator createInterpolatorFromRegistry(a, b) {
|
| }
|
|
|
| /// Creates an interpolator based on the type of [a] and [b].
|
| -///
|
| +///
|
| /// Usage note: Use this method only when type of [a] and [b] are not known.
|
| /// When used, this function will prevent tree shaking of all built-in
|
| /// interpolators.
|
| -Interpolator createInterpolatorByType(a, b) =>
|
| - (a is List && b is List) ? createListInterpolator(a, b) :
|
| - (a is Map && b is Map) ? createMapInterpolator(a, b) :
|
| - (a is String && b is String) ? createStringInterpolator(a, b) :
|
| - (a is num && b is num) ? createNumberInterpolator(a, b) :
|
| - (a is Color && b is Color) ? createRgbColorInterpolator(a, b) :
|
| - (t) => (t <= 0.5) ? a : b;
|
| -
|
| +Interpolator createInterpolatorByType(a, b) => (a is List && b is List)
|
| + ? createListInterpolator(a, b)
|
| + : (a is Map && b is Map)
|
| + ? createMapInterpolator(a, b)
|
| + : (a is String && b is String)
|
| + ? createStringInterpolator(a, b)
|
| + : (a is num && b is num)
|
| + ? createNumberInterpolator(a, b)
|
| + : (a is Color && b is Color)
|
| + ? createRgbColorInterpolator(a, b)
|
| + : (t) => (t <= 0.5) ? a : b;
|
|
|
| //
|
| // Implementations of InterpolatorGenerator
|
| @@ -62,7 +65,6 @@ Interpolator createRoundedNumberInterpolator(num a, num b) {
|
| return (t) => (a + b * t).round();
|
| }
|
|
|
| -
|
| /// Generate an interpolator between two strings [a] and [b].
|
| ///
|
| /// The interpolator will interpolate all the number pairs in both strings
|
| @@ -87,9 +89,8 @@ Interpolator createStringInterpolator(String a, String b) {
|
| return createHslColorInterpolator(
|
| new Color.fromHslString(a), new Color.fromHslString(b));
|
| }
|
| -
|
| - var numberRegEx =
|
| - new RegExp(r'[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?'),
|
| +
|
| + var numberRegEx = new RegExp(r'[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?'),
|
| numMatchesInA = numberRegEx.allMatches(a),
|
| numMatchesInB = numberRegEx.allMatches(b),
|
| stringParts = [],
|
| @@ -111,13 +112,13 @@ Interpolator createStringInterpolator(String a, String b) {
|
| int numberLength = math.min(numberPartsInA.length, numberPartsInB.length);
|
| int maxLength = math.max(numberPartsInA.length, numberPartsInB.length);
|
| for (var i = 0; i < numberLength; i++) {
|
| - interpolators.add(createNumberInterpolator(num.parse(numberPartsInA[i]),
|
| - num.parse(numberPartsInB[i])));
|
| + interpolators.add(createNumberInterpolator(
|
| + num.parse(numberPartsInA[i]), num.parse(numberPartsInB[i])));
|
| }
|
| if (numberPartsInA.length < numberPartsInB.length) {
|
| for (var i = numberLength; i < maxLength; i++) {
|
| - interpolators.add(createNumberInterpolator(num.parse(numberPartsInB[i]),
|
| - num.parse(numberPartsInB[i])));
|
| + interpolators.add(createNumberInterpolator(
|
| + num.parse(numberPartsInB[i]), num.parse(numberPartsInB[i])));
|
| }
|
| }
|
|
|
| @@ -136,29 +137,19 @@ Interpolator createStringInterpolator(String a, String b) {
|
| /// Generate an interpolator for RGB values.
|
| Interpolator createRgbColorInterpolator(Color a, Color b) {
|
| if (a == null || b == null) return (t) => b;
|
| - var ar = a.r,
|
| - ag = a.g,
|
| - ab = a.b,
|
| - br = b.r - ar,
|
| - bg = b.g - ag,
|
| - bb = b.b - ab;
|
| -
|
| - return (t) => new Color.fromRgba((ar + br * t).round(),
|
| - (ag + bg * t).round(), (ab + bb * t).round(), 1.0).toRgbaString();
|
| + var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
|
| +
|
| + return (t) => new Color.fromRgba((ar + br * t).round(), (ag + bg * t).round(),
|
| + (ab + bb * t).round(), 1.0).toRgbaString();
|
| }
|
|
|
| /// Generate an interpolator using HSL color system converted to Hex string.
|
| Interpolator createHslColorInterpolator(Color a, Color b) {
|
| if (a == null || b == null) return (t) => b;
|
| - var ah = a.h,
|
| - as = a.s,
|
| - al = a.l,
|
| - bh = b.h - ah,
|
| - bs = b.s - as,
|
| - bl = b.l - al;
|
| -
|
| - return (t) => new Color.fromHsla((ah + bh * t).round(),
|
| - (as + bs * t).round(), (al + bl * t).round(), 1.0).toHslaString();
|
| + var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
|
| +
|
| + return (t) => new Color.fromHsla((ah + bh * t).round(), (as + bs * t).round(),
|
| + (al + bl * t).round(), 1.0).toHslaString();
|
| }
|
|
|
| /// Generates an interpolator to interpolate each element between lists
|
| @@ -218,25 +209,21 @@ Interpolator createTransformInterpolator(String a, String b) {
|
| var numRegExStr = r'[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?',
|
| numberRegEx = new RegExp(numRegExStr),
|
| translateRegEx =
|
| - new RegExp(r'translate\(' + '$numRegExStr,$numRegExStr' + r'\)'),
|
| + new RegExp(r'translate\(' + '$numRegExStr,$numRegExStr' + r'\)'),
|
| scaleRegEx =
|
| - new RegExp(r'scale\(' + numRegExStr + r',' + numRegExStr + r'\)'),
|
| + new RegExp(r'scale\(' + numRegExStr + r',' + numRegExStr + r'\)'),
|
| rotateRegEx = new RegExp(r'rotate\(' + numRegExStr + r'(deg)?\)'),
|
| skewRegEx = new RegExp(r'skewX\(' + numRegExStr + r'(deg)?\)'),
|
| -
|
| translateA = translateRegEx.firstMatch(a),
|
| scaleA = scaleRegEx.firstMatch(a),
|
| rotateA = rotateRegEx.firstMatch(a),
|
| skewA = skewRegEx.firstMatch(a),
|
| -
|
| translateB = translateRegEx.firstMatch(b),
|
| scaleB = scaleRegEx.firstMatch(b),
|
| rotateB = rotateRegEx.firstMatch(b),
|
| skewB = skewRegEx.firstMatch(b);
|
|
|
| - var numSetA = [],
|
| - numSetB = [],
|
| - tempStr, match;
|
| + var numSetA = [], numSetB = [], tempStr, match;
|
|
|
| // translate
|
| if (translateA != null) {
|
| @@ -246,7 +233,7 @@ Interpolator createTransformInterpolator(String a, String b) {
|
| numSetA.add(num.parse(m.group(0)));
|
| }
|
| } else {
|
| - numSetA.addAll(const[0, 0]);
|
| + numSetA.addAll(const [0, 0]);
|
| }
|
|
|
| if (translateB != null) {
|
| @@ -256,7 +243,7 @@ Interpolator createTransformInterpolator(String a, String b) {
|
| numSetB.add(num.parse(m.group(0)));
|
| }
|
| } else {
|
| - numSetB.addAll(const[0, 0]);
|
| + numSetB.addAll(const [0, 0]);
|
| }
|
|
|
| // scale
|
| @@ -267,7 +254,7 @@ Interpolator createTransformInterpolator(String a, String b) {
|
| numSetA.add(num.parse(m.group(0)));
|
| }
|
| } else {
|
| - numSetA.addAll(const[1, 1]);
|
| + numSetA.addAll(const [1, 1]);
|
| }
|
|
|
| if (scaleB != null) {
|
| @@ -277,7 +264,7 @@ Interpolator createTransformInterpolator(String a, String b) {
|
| numSetB.add(num.parse(m.group(0)));
|
| }
|
| } else {
|
| - numSetB.addAll(const[1, 1]);
|
| + numSetB.addAll(const [1, 1]);
|
| }
|
|
|
| // rotate
|
| @@ -324,11 +311,10 @@ Interpolator createTransformInterpolator(String a, String b) {
|
| }
|
|
|
| return (t) {
|
| - return
|
| - 'translate(${createNumberInterpolator(numSetA[0], numSetB[0])(t)},'
|
| - '${createNumberInterpolator(numSetA[1], numSetB[1])(t)})'
|
| + return 'translate(${createNumberInterpolator(numSetA[0], numSetB[0])(t)},'
|
| + '${createNumberInterpolator(numSetA[1], numSetB[1])(t)})'
|
| 'scale(${createNumberInterpolator(numSetA[2], numSetB[2])(t)},'
|
| - '${createNumberInterpolator(numSetA[3], numSetB[3])(t)})'
|
| + '${createNumberInterpolator(numSetA[3], numSetB[3])(t)})'
|
| 'rotate(${createNumberInterpolator(numSetA[4], numSetB[4])(t)})'
|
| 'skewX(${createNumberInterpolator(numSetA[5], numSetB[5])(t)})';
|
| };
|
| @@ -340,12 +326,9 @@ Interpolator createZoomInterpolator(List a, List b) {
|
| if (a == null || b == null) return (t) => b;
|
| assert(a.length == b.length && a.length == 3);
|
|
|
| - var sqrt2 = math.SQRT2,
|
| - param2 = 2,
|
| - param4 = 4;
|
| + var sqrt2 = math.SQRT2, param2 = 2, param4 = 4;
|
|
|
| - var ux0 = a[0], uy0 = a[1], w0 = a[2],
|
| - ux1 = b[0], uy1 = b[1], w1 = b[2];
|
| + var ux0 = a[0], uy0 = a[1], w0 = a[2], ux1 = b[0], uy1 = b[1], w1 = b[2];
|
|
|
| var dx = ux1 - ux0,
|
| dy = uy1 - uy0,
|
| @@ -364,18 +347,10 @@ Interpolator createZoomInterpolator(List a, List b) {
|
| // General case.
|
| var coshr0 = cosh(r0),
|
| u = w0 / (param2 * d1) * (coshr0 * tanh(sqrt2 * s + r0) - sinh(r0));
|
| - return [
|
| - ux0 + u * dx,
|
| - uy0 + u * dy,
|
| - w0 * coshr0 / cosh(sqrt2 * s + r0)
|
| - ];
|
| + return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(sqrt2 * s + r0)];
|
| }
|
| // Special case for u0 ~= u1.
|
| - return [
|
| - ux0 + t * dx,
|
| - uy0 + t * dy,
|
| - w0 * math.exp(sqrt2 * s)
|
| - ];
|
| + return [ux0 + t * dx, uy0 + t * dy, w0 * math.exp(sqrt2 * s)];
|
| };
|
| }
|
|
|
|
|