| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:sky'; |
| |
| num lerpNum(num a, num b, double t) { |
| if (a == null && b == null) |
| return null; |
| if (a == null) |
| a = 0.0; |
| if (b == null) |
| b = 0.0; |
| return a + (b - a) * t; |
| } |
| |
| Color _scaleAlpha(Color a, double factor) { |
| return a.withAlpha((a.alpha * factor).round()); |
| } |
| |
| Color lerpColor(Color a, Color b, double t) { |
| if (a == null && b == null) |
| return null; |
| if (a == null) |
| return _scaleAlpha(b, t); |
| if (b == null) |
| return _scaleAlpha(a, 1.0 - t); |
| return new Color.fromARGB( |
| lerpNum(a.alpha, b.alpha, t).toInt(), |
| lerpNum(a.red, b.red, t).toInt(), |
| lerpNum(a.green, b.green, t).toInt(), |
| lerpNum(a.blue, b.blue, t).toInt() |
| ); |
| } |
| |
| Offset lerpOffset(Offset a, Offset b, double t) { |
| if (a == null && b == null) |
| return null; |
| if (a == null) |
| return b * t; |
| if (b == null) |
| return a * (1.0 - t); |
| return new Offset(lerpNum(a.dx, b.dx, t), lerpNum(a.dy, b.dy, t)); |
| } |
| |
| Rect lerpRect(Rect a, Rect b, double t) { |
| if (a == null && b == null) |
| return null; |
| if (a == null) |
| return new Rect.fromLTRB(b.left * t, b.top * t, b.right * t, b.bottom * t); |
| if (b == null) { |
| double k = 1.0 - t; |
| return new Rect.fromLTRB(b.left * k, b.top * k, b.right * k, b.bottom * k); |
| } |
| return new Rect.fromLTRB( |
| lerpNum(a.left, b.left, t), |
| lerpNum(a.top, b.top, t), |
| lerpNum(a.right, b.right, t), |
| lerpNum(a.bottom, b.bottom, t) |
| ); |
| } |