OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "core/css/CSSPrimitiveValue.h" |
| 6 #include "core/css/cssom/CalcDictionary.h" |
| 7 |
| 8 namespace blink { |
| 9 |
| 10 class CalcDictionaryHelper { |
| 11 STATIC_ONLY(CalcDictionaryHelper); |
| 12 public: |
| 13 static void setUsingCSSPrimitiveValueUnit(CalcDictionary* calcDictionary, CS
SPrimitiveValue::UnitType unit, double value) |
| 14 { |
| 15 #define caseMacro(primitiveName, camelName) \ |
| 16 case CSSPrimitiveValue::UnitType::primitiveName: \ |
| 17 calcDictionary->set##camelName(value); \ |
| 18 break; |
| 19 |
| 20 switch (unit) { |
| 21 caseMacro(Pixels, Px) |
| 22 caseMacro(Percentage, Percent) |
| 23 caseMacro(Ems, Em) |
| 24 caseMacro(Exs, Ex) |
| 25 caseMacro(Chs, Ch) |
| 26 caseMacro(Rems, Rem) |
| 27 caseMacro(ViewportWidth, Vw) |
| 28 caseMacro(ViewportHeight, Vh) |
| 29 caseMacro(ViewportMin, Vmin) |
| 30 caseMacro(ViewportMax, Vmax) |
| 31 caseMacro(Centimeters, Cm) |
| 32 caseMacro(Millimeters, Mm) |
| 33 caseMacro(Inches, In) |
| 34 caseMacro(Picas, Pc) |
| 35 caseMacro(Points, Pt) |
| 36 default: |
| 37 break; |
| 38 } |
| 39 |
| 40 #undef caseMacro |
| 41 } |
| 42 |
| 43 static void multiply(CalcDictionary* calcDictionary, double value) |
| 44 { |
| 45 #define multiplyMacro(name, camelName) \ |
| 46 if (calcDictionary->has##camelName()) { \ |
| 47 calcDictionary->set##camelName(calcDictionary->name() * value); \ |
| 48 } |
| 49 |
| 50 multiplyMacro(px, Px) |
| 51 multiplyMacro(percent, Percent) |
| 52 multiplyMacro(em, Em) |
| 53 multiplyMacro(ex, Ex) |
| 54 multiplyMacro(ch, Ch) |
| 55 multiplyMacro(rem, Rem) |
| 56 multiplyMacro(vw, Vw) |
| 57 multiplyMacro(vh, Vh) |
| 58 multiplyMacro(vmin, Vmin) |
| 59 multiplyMacro(vmax, Vmax) |
| 60 multiplyMacro(cm, Cm) |
| 61 multiplyMacro(mm, Mm) |
| 62 multiplyMacro(in, In) |
| 63 multiplyMacro(pc, Pc) |
| 64 multiplyMacro(pt, Pt) |
| 65 |
| 66 #undef multiplyMacro |
| 67 } |
| 68 |
| 69 static void add(CalcDictionary* leftAndResult, const CalcDictionary* right) |
| 70 { |
| 71 #define addMacro(name, camelName) \ |
| 72 if (right->has##camelName()) { \ |
| 73 if (leftAndResult->has##camelName()) \ |
| 74 leftAndResult->set##camelName(leftAndResult->name() + right->nam
e()); \ |
| 75 else \ |
| 76 leftAndResult->set##camelName(right->name()); \ |
| 77 } |
| 78 |
| 79 addMacro(px, Px) |
| 80 addMacro(percent, Percent) |
| 81 addMacro(em, Em) |
| 82 addMacro(ex, Ex) |
| 83 addMacro(ch, Ch) |
| 84 addMacro(rem, Rem) |
| 85 addMacro(vw, Vw) |
| 86 addMacro(vh, Vh) |
| 87 addMacro(vmin, Vmin) |
| 88 addMacro(vmax, Vmax) |
| 89 addMacro(cm, Cm) |
| 90 addMacro(mm, Mm) |
| 91 addMacro(in, In) |
| 92 addMacro(pc, Pc) |
| 93 addMacro(pt, Pt) |
| 94 |
| 95 #undef addMacro |
| 96 } |
| 97 |
| 98 static void subtract(CalcDictionary* leftAndResult, const CalcDictionary* ri
ght) |
| 99 { |
| 100 #define subtractMacro(name, camelName) \ |
| 101 if (right->has##camelName()) { \ |
| 102 if (leftAndResult->has##camelName()) \ |
| 103 leftAndResult->set##camelName(leftAndResult->name() - right->nam
e()); \ |
| 104 else \ |
| 105 leftAndResult->set##camelName(-right->name()); \ |
| 106 } |
| 107 |
| 108 subtractMacro(px, Px) |
| 109 subtractMacro(percent, Percent) |
| 110 subtractMacro(em, Em) |
| 111 subtractMacro(ex, Ex) |
| 112 subtractMacro(ch, Ch) |
| 113 subtractMacro(rem, Rem) |
| 114 subtractMacro(vw, Vw) |
| 115 subtractMacro(vh, Vh) |
| 116 subtractMacro(vmin, Vmin) |
| 117 subtractMacro(vmax, Vmax) |
| 118 subtractMacro(cm, Cm) |
| 119 subtractMacro(mm, Mm) |
| 120 subtractMacro(in, In) |
| 121 subtractMacro(pc, Pc) |
| 122 subtractMacro(pt, Pt) |
| 123 |
| 124 #undef subtractMacro |
| 125 } |
| 126 }; |
| 127 |
| 128 } // namespace blink |
OLD | NEW |