// Copyright 2017 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.

#ifndef CSSUnitValues_h
#define CSSUnitValues_h

#include "core/css/cssom/CSSUnitValue.h"

namespace blink {

class CSSUnitValues {
  STATIC_ONLY(CSSUnitValues);

 public:
  // <length>
  static CSSUnitValue* number(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kNumber);
  }

  static CSSUnitValue* percent(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kPercentage);
  }

  static CSSUnitValue* em(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kEms);
  }

  static CSSUnitValue* ex(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kExs);
  }

  static CSSUnitValue* ch(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kChs);
  }

  static CSSUnitValue* rem(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kRems);
  }

  static CSSUnitValue* vw(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kViewportWidth);
  }

  static CSSUnitValue* vh(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kViewportHeight);
  }

  static CSSUnitValue* vmin(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kViewportMin);
  }

  static CSSUnitValue* vmax(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kViewportMax);
  }

  static CSSUnitValue* cm(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kCentimeters);
  }

  static CSSUnitValue* mm(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kMillimeters);
  }

  static CSSUnitValue* in(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kInches);
  }

  static CSSUnitValue* pt(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kPoints);
  }

  static CSSUnitValue* pc(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kPicas);
  }

  static CSSUnitValue* px(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kPixels);
  }

  // <angle>
  static CSSUnitValue* deg(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kDegrees);
  }

  static CSSUnitValue* grad(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kGradians);
  }

  static CSSUnitValue* rad(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kRadians);
  }

  static CSSUnitValue* turn(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kTurns);
  }

  // <time>
  static CSSUnitValue* s(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kSeconds);
  }

  static CSSUnitValue* ms(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kMilliseconds);
  }

  // <frequency>
  static CSSUnitValue* Hz(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kHertz);
  }

  static CSSUnitValue* kHz(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kKilohertz);
  }

  // <resolution>
  static CSSUnitValue* dpi(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kDotsPerInch);
  }

  static CSSUnitValue* dpcm(double value) {
    return CSSUnitValue::Create(
        value, CSSPrimitiveValue::UnitType::kDotsPerCentimeter);
  }

  static CSSUnitValue* dppx(double value) {
    return CSSUnitValue::Create(value,
                                CSSPrimitiveValue::UnitType::kDotsPerPixel);
  }

  // <flex>
  static CSSUnitValue* fr(double value) {
    return CSSUnitValue::Create(value, CSSPrimitiveValue::UnitType::kFraction);
  }
};

}  // namespace blink

#endif  // CSSUnitValues_h
