| 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
|
|
|