xref: /aosp_15_r20/external/pdfium/core/fxcrt/css/cfx_cssnumbervalue.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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(Unit unit,float value)11 CFX_CSSNumberValue::CFX_CSSNumberValue(Unit unit, float value)
12     : CFX_CSSValue(PrimitiveType::kNumber), unit_(unit), value_(value) {
13   if (unit_ == Unit::kNumber && fabs(value_) < 0.001f)
14     value_ = 0.0f;
15 }
16 
17 CFX_CSSNumberValue::~CFX_CSSNumberValue() = default;
18 
Apply(float percentBase) const19 float CFX_CSSNumberValue::Apply(float percentBase) const {
20   switch (unit_) {
21     case Unit::kPixels:
22     case Unit::kNumber:
23       return value_ * 72 / 96;
24     case Unit::kEMS:
25     case Unit::kEXS:
26       return value_ * percentBase;
27     case Unit::kPercent:
28       return value_ * percentBase / 100.0f;
29     case Unit::kCentiMeters:
30       return value_ * 28.3464f;
31     case Unit::kMilliMeters:
32       return value_ * 2.8346f;
33     case Unit::kInches:
34       return value_ * 72.0f;
35     case Unit::kPicas:
36       return value_ / 12.0f;
37     case Unit::kPoints:
38       return value_;
39   }
40   return value_;
41 }
42