From 3a0c8fc76078d9476c7808ede6650d4e7d72a773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Tue, 24 Jul 2018 03:21:15 +0200 Subject: [PATCH] style: Avoid getting zero normalized vector of rotate3d for animations. If we have a rotate axis whose length is extremely large, we will get an infinite value, and its normalized vector is a zero vector, instead of an unit vector, i.e. (x/inf, y/inf, z/inf) == (0, 0, 0). The solution is: we scale the vector, so the length becomes a finite value, and we could get a valid unit vector. Therefore, we use a different normalization method, robust_normalize(). Bug: 1467277 Reviewed-by: hiro --- components/style/values/generics/transform.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/style/values/generics/transform.rs b/components/style/values/generics/transform.rs index cd321945f60..a0cbc57d6b4 100644 --- a/components/style/values/generics/transform.rs +++ b/components/style/values/generics/transform.rs @@ -569,7 +569,7 @@ pub fn get_normalized_vector_and_angle( // rotation to not be applied, so we use identity matrix (i.e. rotate3d(0, 0, 1, 0)). (0., 0., 1., T::zero()) } else { - let vector = vector.normalize(); + let vector = vector.robust_normalize(); (vector.x, vector.y, vector.z, angle) } }