Index: third_party/WebKit/Source/core/css/cssom/CalcDictionaryHelper.h |
diff --git a/third_party/WebKit/Source/core/css/cssom/CalcDictionaryHelper.h b/third_party/WebKit/Source/core/css/cssom/CalcDictionaryHelper.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c673e738928d8895949f559406e43dace12f3fcc |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/css/cssom/CalcDictionaryHelper.h |
@@ -0,0 +1,128 @@ |
+// Copyright 2016 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. |
+ |
+#include "core/css/CSSPrimitiveValue.h" |
+#include "core/css/cssom/CalcDictionary.h" |
+ |
+namespace blink { |
+ |
+class CalcDictionaryHelper { |
+ STATIC_ONLY(CalcDictionaryHelper); |
+public: |
+ static void setUsingCSSPrimitiveValueUnit(CalcDictionary* calcDictionary, CSSPrimitiveValue::UnitType unit, double value) |
+ { |
+#define caseMacro(primitiveName, camelName) \ |
+ case CSSPrimitiveValue::UnitType::primitiveName: \ |
+ calcDictionary->set##camelName(value); \ |
+ break; |
+ |
+ switch (unit) { |
+ caseMacro(Pixels, Px) |
+ caseMacro(Percentage, Percent) |
+ caseMacro(Ems, Em) |
+ caseMacro(Exs, Ex) |
+ caseMacro(Chs, Ch) |
+ caseMacro(Rems, Rem) |
+ caseMacro(ViewportWidth, Vw) |
+ caseMacro(ViewportHeight, Vh) |
+ caseMacro(ViewportMin, Vmin) |
+ caseMacro(ViewportMax, Vmax) |
+ caseMacro(Centimeters, Cm) |
+ caseMacro(Millimeters, Mm) |
+ caseMacro(Inches, In) |
+ caseMacro(Picas, Pc) |
+ caseMacro(Points, Pt) |
+ default: |
+ break; |
+ } |
+ |
+#undef caseMacro |
+ } |
+ |
+ static void multiply(CalcDictionary* calcDictionary, double value) |
+ { |
+#define multiplyMacro(name, camelName) \ |
+ if (calcDictionary->has##camelName()) { \ |
+ calcDictionary->set##camelName(calcDictionary->name() * value); \ |
+ } |
+ |
+ multiplyMacro(px, Px) |
+ multiplyMacro(percent, Percent) |
+ multiplyMacro(em, Em) |
+ multiplyMacro(ex, Ex) |
+ multiplyMacro(ch, Ch) |
+ multiplyMacro(rem, Rem) |
+ multiplyMacro(vw, Vw) |
+ multiplyMacro(vh, Vh) |
+ multiplyMacro(vmin, Vmin) |
+ multiplyMacro(vmax, Vmax) |
+ multiplyMacro(cm, Cm) |
+ multiplyMacro(mm, Mm) |
+ multiplyMacro(in, In) |
+ multiplyMacro(pc, Pc) |
+ multiplyMacro(pt, Pt) |
+ |
+#undef multiplyMacro |
+ } |
+ |
+ static void add(CalcDictionary* leftAndResult, const CalcDictionary* right) |
+ { |
+#define addMacro(name, camelName) \ |
+ if (right->has##camelName()) { \ |
+ if (leftAndResult->has##camelName()) \ |
+ leftAndResult->set##camelName(leftAndResult->name() + right->name()); \ |
+ else \ |
+ leftAndResult->set##camelName(right->name()); \ |
+ } |
+ |
+ addMacro(px, Px) |
+ addMacro(percent, Percent) |
+ addMacro(em, Em) |
+ addMacro(ex, Ex) |
+ addMacro(ch, Ch) |
+ addMacro(rem, Rem) |
+ addMacro(vw, Vw) |
+ addMacro(vh, Vh) |
+ addMacro(vmin, Vmin) |
+ addMacro(vmax, Vmax) |
+ addMacro(cm, Cm) |
+ addMacro(mm, Mm) |
+ addMacro(in, In) |
+ addMacro(pc, Pc) |
+ addMacro(pt, Pt) |
+ |
+#undef addMacro |
+ } |
+ |
+ static void subtract(CalcDictionary* leftAndResult, const CalcDictionary* right) |
+ { |
+#define subtractMacro(name, camelName) \ |
+ if (right->has##camelName()) { \ |
+ if (leftAndResult->has##camelName()) \ |
+ leftAndResult->set##camelName(leftAndResult->name() - right->name()); \ |
+ else \ |
+ leftAndResult->set##camelName(-right->name()); \ |
+ } |
+ |
+ subtractMacro(px, Px) |
+ subtractMacro(percent, Percent) |
+ subtractMacro(em, Em) |
+ subtractMacro(ex, Ex) |
+ subtractMacro(ch, Ch) |
+ subtractMacro(rem, Rem) |
+ subtractMacro(vw, Vw) |
+ subtractMacro(vh, Vh) |
+ subtractMacro(vmin, Vmin) |
+ subtractMacro(vmax, Vmax) |
+ subtractMacro(cm, Cm) |
+ subtractMacro(mm, Mm) |
+ subtractMacro(in, In) |
+ subtractMacro(pc, Pc) |
+ subtractMacro(pt, Pt) |
+ |
+#undef subtractMacro |
+ } |
+}; |
+ |
+} // namespace blink |