Bug 1286150 - Part 1: Simplify AddTransformTranslate and reuse AddCSSValuePixelPercentCalc. draft
authorBoris Chiou <boris.chiou@gmail.com>
Fri, 14 Oct 2016 15:22:45 +0800
changeset 432444 52e910adeac71f22750afcbd3895932d9707a826
parent 430701 944cb0fd05526894fcd90fbe7d1e625ee53cd73d
child 432445 858632584ef656f9d6be50d3bc6ce07a68a3b9ea
push id34315
push userbmo:boris.chiou@gmail.com
push dateWed, 02 Nov 2016 03:24:03 +0000
bugs1286150
milestone52.0a1
Bug 1286150 - Part 1: Simplify AddTransformTranslate and reuse AddCSSValuePixelPercentCalc. Two things in this patch: 1. Move AddCSSValuePixelPercentCalc to the position above AddTransformTranslate. 2. Simplify AddTransformTranslate, i.e. re-use the same switch case of AddCSSValuePixelPercentCalc. MozReview-Commit-ID: BMEpkOHDoaT
layout/style/StyleAnimationValue.cpp
--- a/layout/style/StyleAnimationValue.cpp
+++ b/layout/style/StyleAnimationValue.cpp
@@ -599,40 +599,69 @@ AddCSSValuePixel(double aCoeff1, const n
   MOZ_ASSERT(aValue1.GetUnit() == eCSSUnit_Pixel, "unexpected unit");
   MOZ_ASSERT(aValue2.GetUnit() == eCSSUnit_Pixel, "unexpected unit");
   aResult.SetFloatValue(RestrictValue(aValueRestrictions,
                                       aCoeff1 * aValue1.GetFloatValue() +
                                       aCoeff2 * aValue2.GetFloatValue()),
                         eCSSUnit_Pixel);
 }
 
+static bool
+AddCSSValuePixelPercentCalc(const uint32_t aValueRestrictions,
+                            const nsCSSUnit aCommonUnit,
+                            double aCoeff1, const nsCSSValue &aValue1,
+                            double aCoeff2, const nsCSSValue &aValue2,
+                            nsCSSValue &aResult)
+{
+  switch (aCommonUnit) {
+    case eCSSUnit_Pixel:
+      AddCSSValuePixel(aCoeff1, aValue1,
+                       aCoeff2, aValue2,
+                       aResult, aValueRestrictions);
+      break;
+    case eCSSUnit_Percent:
+      AddCSSValuePercent(aCoeff1, aValue1,
+                         aCoeff2, aValue2,
+                         aResult, aValueRestrictions);
+      break;
+    case eCSSUnit_Calc:
+      AddCSSValueCanonicalCalc(aCoeff1, aValue1,
+                               aCoeff2, aValue2,
+                               aResult);
+      break;
+    default:
+      return false;
+  }
+
+  return true;
+}
+
 static void
 AddTransformTranslate(double aCoeff1, const nsCSSValue &aValue1,
                       double aCoeff2, const nsCSSValue &aValue2,
                       nsCSSValue &aResult)
 {
+  // Only three possible units: eCSSUnit_Pixel, eCSSUnit_Percent, or
+  // eCSSUnit_Calc.
   MOZ_ASSERT(aValue1.GetUnit() == eCSSUnit_Percent ||
              aValue1.GetUnit() == eCSSUnit_Pixel ||
-            aValue1.IsCalcUnit(),
-            "unexpected unit");
+             aValue1.IsCalcUnit(),
+             "unexpected unit");
   MOZ_ASSERT(aValue2.GetUnit() == eCSSUnit_Percent ||
              aValue2.GetUnit() == eCSSUnit_Pixel ||
              aValue2.IsCalcUnit(),
              "unexpected unit");
-
-  if (aValue1.GetUnit() != aValue2.GetUnit() || aValue1.IsCalcUnit()) {
-    // different units; create a calc() expression
-    AddCSSValueCanonicalCalc(aCoeff1, aValue1, aCoeff2, aValue2, aResult);
-  } else if (aValue1.GetUnit() == eCSSUnit_Percent) {
-    // both percent
-    AddCSSValuePercent(aCoeff1, aValue1, aCoeff2, aValue2, aResult);
-  } else {
-    // both pixels
-    AddCSSValuePixel(aCoeff1, aValue1, aCoeff2, aValue2, aResult);
-  }
+  AddCSSValuePixelPercentCalc(0,
+                              (aValue1.GetUnit() != aValue2.GetUnit() ||
+                               aValue1.IsCalcUnit())
+                                ? eCSSUnit_Calc
+                                : aValue1.GetUnit(),
+                              aCoeff1, aValue1,
+                              aCoeff2, aValue2,
+                              aResult);
 }
 
 // CLASS METHODS
 // -------------
 
 static RGBAColorData
 ExtractColor(const nsCSSValue& aValue)
 {
@@ -1548,46 +1577,16 @@ AddCSSValueNumber(double aCoeff1, const 
   MOZ_ASSERT(aValue1.GetUnit() == eCSSUnit_Number, "unexpected unit");
   MOZ_ASSERT(aValue2.GetUnit() == eCSSUnit_Number, "unexpected unit");
   aResult.SetFloatValue(RestrictValue(aValueRestrictions,
                                       aCoeff1 * aValue1.GetFloatValue() +
                                       aCoeff2 * aValue2.GetFloatValue()),
                         eCSSUnit_Number);
 }
 
-static bool
-AddCSSValuePixelPercentCalc(const uint32_t aValueRestrictions,
-                            const nsCSSUnit aCommonUnit,
-                            double aCoeff1, const nsCSSValue &aValue1,
-                            double aCoeff2, const nsCSSValue &aValue2,
-                            nsCSSValue &aResult)
-{
-  switch (aCommonUnit) {
-    case eCSSUnit_Pixel:
-      AddCSSValuePixel(aCoeff1, aValue1,
-                       aCoeff2, aValue2,
-                       aResult, aValueRestrictions);
-      break;
-    case eCSSUnit_Percent:
-      AddCSSValuePercent(aCoeff1, aValue1,
-                         aCoeff2, aValue2,
-                         aResult, aValueRestrictions);
-      break;
-    case eCSSUnit_Calc:
-      AddCSSValueCanonicalCalc(aCoeff1, aValue1,
-                               aCoeff2, aValue2,
-                               aResult);
-      break;
-    default:
-      return false;
-  }
-
-  return true;
-}
-
 static inline float
 GetNumberOrPercent(const nsCSSValue &aValue)
 {
   nsCSSUnit unit = aValue.GetUnit();
   MOZ_ASSERT(unit == eCSSUnit_Number || unit == eCSSUnit_Percent,
              "unexpected unit");
   return (unit == eCSSUnit_Number) ?
     aValue.GetFloatValue() : aValue.GetPercentValue();