Chromium Code Reviews| Index: third_party/WebKit/Source/core/css/cssom/CSSUnitValue.cpp |
| diff --git a/third_party/WebKit/Source/core/css/cssom/CSSUnitValue.cpp b/third_party/WebKit/Source/core/css/cssom/CSSUnitValue.cpp |
| index f6fe21abf3ca36728fc02bac027292f500861315..347c60a8db7488c2c4a7385f20f43fa31515be5b 100644 |
| --- a/third_party/WebKit/Source/core/css/cssom/CSSUnitValue.cpp |
| +++ b/third_party/WebKit/Source/core/css/cssom/CSSUnitValue.cpp |
| @@ -5,6 +5,7 @@ |
| #include "core/css/cssom/CSSUnitValue.h" |
| #include "bindings/core/v8/ExceptionState.h" |
| +#include "core/css/CSSHelper.h" |
| #include "platform/wtf/MathExtras.h" |
| namespace blink { |
| @@ -85,12 +86,124 @@ CSSUnitValue* CSSUnitValue::to(CSSPrimitiveValue::UnitType unit) const { |
| return Create(value_, unit_); |
| // TODO(meade): Implement other types. |
|
Bugs Nash
2017/06/28 23:50:27
how many more types need to be implemented? is it
meade_UTC10
2017/06/29 06:44:09
Done.
|
| + if (CSSPrimitiveValue::IsLength(unit_) && CSSPrimitiveValue::IsLength(unit)) { |
| + // Only some kinds of lengths can be converted |
|
Bugs Nash
2017/06/28 23:50:27
perhaps 'relative types of lengths cannot be conve
meade_UTC10
2017/06/29 06:44:09
Done.
|
| + if (CSSPrimitiveValue::IsRelativeUnit(unit_) || |
| + CSSPrimitiveValue::IsRelativeUnit(unit)) |
| + return nullptr; |
| + return Create(ConvertFixedLength(unit), unit); |
| + } |
| if (CSSPrimitiveValue::IsAngle(unit_) && CSSPrimitiveValue::IsAngle(unit)) |
| return Create(ConvertAngle(unit), unit); |
| return nullptr; |
| } |
| +double CSSUnitValue::ConvertFixedLength( |
| + CSSPrimitiveValue::UnitType unit) const { |
| + switch (unit_) { |
| + case CSSPrimitiveValue::UnitType::kPixels: |
| + switch (unit) { |
| + case CSSPrimitiveValue::UnitType::kCentimeters: |
| + return value_ / kCssPixelsPerCentimeter; |
| + case CSSPrimitiveValue::UnitType::kMillimeters: |
| + return value_ / kCssPixelsPerMillimeter; |
| + case CSSPrimitiveValue::UnitType::kInches: |
| + return value_ / kCssPixelsPerInch; |
| + case CSSPrimitiveValue::UnitType::kPoints: |
| + return value_ / kCssPixelsPerPoint; |
| + case CSSPrimitiveValue::UnitType::kPicas: |
| + return value_ / kCssPixelsPerPica; |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| + case CSSPrimitiveValue::UnitType::kCentimeters: |
| + switch (unit) { |
| + case CSSPrimitiveValue::UnitType::kPixels: |
| + return value_ * kCssPixelsPerCentimeter; |
| + case CSSPrimitiveValue::UnitType::kMillimeters: |
| + return value_ * 10; |
| + case CSSPrimitiveValue::UnitType::kInches: |
| + return value_ * (kCssPixelsPerCentimeter / kCssPixelsPerInch); |
|
Bugs Nash
2017/06/28 23:50:27
why do the pixels consts need to be used when conv
meade_UTC10
2017/06/29 06:44:09
It was a convenient way to do conversions without
|
| + case CSSPrimitiveValue::UnitType::kPoints: |
| + return value_ * (kCssPixelsPerCentimeter / kCssPixelsPerPoint); |
| + case CSSPrimitiveValue::UnitType::kPicas: |
| + return value_ * (kCssPixelsPerCentimeter / kCssPixelsPerPica); |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| + case CSSPrimitiveValue::UnitType::kMillimeters: |
| + switch (unit) { |
| + case CSSPrimitiveValue::UnitType::kPixels: |
| + return value_ * kCssPixelsPerMillimeter; |
| + case CSSPrimitiveValue::UnitType::kCentimeters: |
| + return value_ / 10; |
| + case CSSPrimitiveValue::UnitType::kInches: |
| + return value_ * (kCssPixelsPerMillimeter / kCssPixelsPerInch); |
| + case CSSPrimitiveValue::UnitType::kPoints: |
| + return value_ * (kCssPixelsPerMillimeter / kCssPixelsPerPoint); |
| + case CSSPrimitiveValue::UnitType::kPicas: |
| + return value_ * (kCssPixelsPerMillimeter / kCssPixelsPerPica); |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| + case CSSPrimitiveValue::UnitType::kInches: |
| + switch (unit) { |
| + case CSSPrimitiveValue::UnitType::kPixels: |
| + return value_ * kCssPixelsPerInch; |
| + case CSSPrimitiveValue::UnitType::kMillimeters: |
| + return value_ * (kCssPixelsPerInch / kCssPixelsPerMillimeter); |
| + case CSSPrimitiveValue::UnitType::kCentimeters: |
| + return value_ * (kCssPixelsPerInch / kCssPixelsPerCentimeter); |
| + case CSSPrimitiveValue::UnitType::kPoints: |
| + return value_ * (kCssPixelsPerInch / kCssPixelsPerPoint); |
| + case CSSPrimitiveValue::UnitType::kPicas: |
| + return value_ * (kCssPixelsPerInch / kCssPixelsPerPica); |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| + case CSSPrimitiveValue::UnitType::kPoints: |
| + switch (unit) { |
| + case CSSPrimitiveValue::UnitType::kPixels: |
| + return value_ * kCssPixelsPerPoint; |
| + case CSSPrimitiveValue::UnitType::kMillimeters: |
| + return value_ * (kCssPixelsPerPoint / kCssPixelsPerMillimeter); |
| + case CSSPrimitiveValue::UnitType::kCentimeters: |
| + return value_ * (kCssPixelsPerPoint / kCssPixelsPerCentimeter); |
| + case CSSPrimitiveValue::UnitType::kInches: |
| + return value_ * (kCssPixelsPerPoint / kCssPixelsPerInch); |
| + case CSSPrimitiveValue::UnitType::kPicas: |
| + return value_ * (kCssPixelsPerPoint / kCssPixelsPerPica); |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| + case CSSPrimitiveValue::UnitType::kPicas: |
| + switch (unit) { |
| + case CSSPrimitiveValue::UnitType::kPixels: |
| + return value_ * kCssPixelsPerPica; |
| + case CSSPrimitiveValue::UnitType::kMillimeters: |
| + return value_ * (kCssPixelsPerPica / kCssPixelsPerMillimeter); |
| + case CSSPrimitiveValue::UnitType::kCentimeters: |
| + return value_ * (kCssPixelsPerPica / kCssPixelsPerCentimeter); |
| + case CSSPrimitiveValue::UnitType::kInches: |
| + return value_ * (kCssPixelsPerPica / kCssPixelsPerInch); |
| + case CSSPrimitiveValue::UnitType::kPoints: |
| + return value_ * (kCssPixelsPerPica / kCssPixelsPerPoint); |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| + default: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| +} |
| + |
| double CSSUnitValue::ConvertAngle(CSSPrimitiveValue::UnitType unit) const { |
| switch (unit_) { |
| case CSSPrimitiveValue::UnitType::kDegrees: |