1 // Copyright 2017 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #include "core/fxcrt/css/cfx_cssnumbervalue.h" 8 9 #include <math.h> 10 CFX_CSSNumberValue(CFX_CSSNumber number)11CFX_CSSNumberValue::CFX_CSSNumberValue(CFX_CSSNumber number) 12 : CFX_CSSValue(PrimitiveType::kNumber), number_(number) { 13 if (number_.unit == CFX_CSSNumber::Unit::kNumber && 14 fabs(number_.value) < 0.001f) { 15 number_.value = 0.0f; 16 } 17 } 18 19 CFX_CSSNumberValue::~CFX_CSSNumberValue() = default; 20 Apply(float percentBase) const21float CFX_CSSNumberValue::Apply(float percentBase) const { 22 switch (number_.unit) { 23 case CFX_CSSNumber::Unit::kPixels: 24 case CFX_CSSNumber::Unit::kNumber: 25 return number_.value * 72 / 96; 26 case CFX_CSSNumber::Unit::kEMS: 27 case CFX_CSSNumber::Unit::kEXS: 28 return number_.value * percentBase; 29 case CFX_CSSNumber::Unit::kPercent: 30 return number_.value * percentBase / 100.0f; 31 case CFX_CSSNumber::Unit::kCentiMeters: 32 return number_.value * 28.3464f; 33 case CFX_CSSNumber::Unit::kMilliMeters: 34 return number_.value * 2.8346f; 35 case CFX_CSSNumber::Unit::kInches: 36 return number_.value * 72.0f; 37 case CFX_CSSNumber::Unit::kPicas: 38 return number_.value / 12.0f; 39 case CFX_CSSNumber::Unit::kPoints: 40 return number_.value; 41 } 42 } 43