blob: 1f71851dccbf27b95b528d243ed95d70be5c2b9a [file] [log] [blame] [edit]
// Copyright 2014 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef CORE_FXCRT_CSS_CFX_CSS_H_
#define CORE_FXCRT_CSS_CFX_CSS_H_
#include <stdint.h>
#include <type_traits>
enum CFX_CSSVALUETYPE {
CFX_CSSVALUETYPE_Primitive = 1 << 0,
CFX_CSSVALUETYPE_List = 1 << 1,
CFX_CSSVALUETYPE_Shorthand = 1 << 2,
// Note the values below this comment must be > 0x0F so we can mask the above.
CFX_CSSVALUETYPE_MaybeNumber = 1 << 4,
CFX_CSSVALUETYPE_MaybeEnum = 1 << 5,
CFX_CSSVALUETYPE_MaybeString = 1 << 7,
CFX_CSSVALUETYPE_MaybeColor = 1 << 8
};
using CFX_CSSValueTypeMask = std::underlying_type<CFX_CSSVALUETYPE>::type;
#undef CSS_PROP____
#define CSS_PROP____(a, b, c, d) a,
enum class CFX_CSSProperty : uint8_t {
#include "core/fxcrt/css/properties.inc"
};
#undef CSS_PROP____
#undef CSS_PROP_VALUE____
#define CSS_PROP_VALUE____(a, b, c) a,
enum class CFX_CSSPropertyValue : uint8_t {
#include "core/fxcrt/css/property_values.inc"
};
#undef CSS_PROP_VALUE____
enum class CFX_CSSLengthUnit : uint8_t {
Auto,
None,
Normal,
Point,
Percent,
};
enum class CFX_CSSDisplay : uint8_t {
None,
ListItem,
Block,
Inline,
InlineBlock,
InlineTable,
};
enum class CFX_CSSFontStyle : uint8_t {
Normal,
Italic,
};
enum class CFX_CSSTextAlign : uint8_t {
Left,
Right,
Center,
Justify,
JustifyAll,
};
enum class CFX_CSSVerticalAlign : uint8_t {
Baseline,
Sub,
Super,
Top,
TextTop,
Middle,
Bottom,
TextBottom,
Number,
};
enum class CFX_CSSFontVariant : uint8_t {
Normal,
SmallCaps,
};
enum class CFX_CSSTEXTDECORATION : uint8_t {
kNone = 0,
kUnderline = 1 << 0,
kOverline = 1 << 1,
kLineThrough = 1 << 2,
kBlink = 1 << 3,
kDouble = 1 << 4,
};
class CFX_CSSLength {
public:
CFX_CSSLength() = default;
CFX_CSSLength(CFX_CSSLengthUnit eUnit, float fValue)
: m_unit(eUnit), m_fValue(fValue) {}
CFX_CSSLength& Set(CFX_CSSLengthUnit eUnit) {
m_unit = eUnit;
return *this;
}
CFX_CSSLength& Set(CFX_CSSLengthUnit eUnit, float fValue) {
m_unit = eUnit;
m_fValue = fValue;
return *this;
}
CFX_CSSLengthUnit GetUnit() const { return m_unit; }
float GetValue() const { return m_fValue; }
bool NonZero() const { return static_cast<int>(m_fValue) != 0; }
private:
CFX_CSSLengthUnit m_unit;
float m_fValue;
};
class CFX_CSSRect {
public:
CFX_CSSRect() = default;
CFX_CSSRect(CFX_CSSLengthUnit eUnit, float val)
: left(eUnit, val),
top(eUnit, val),
right(eUnit, val),
bottom(eUnit, val) {}
CFX_CSSRect& Set(CFX_CSSLengthUnit eUnit) {
left.Set(eUnit);
top.Set(eUnit);
right.Set(eUnit);
bottom.Set(eUnit);
return *this;
}
CFX_CSSRect& Set(CFX_CSSLengthUnit eUnit, float fValue) {
left.Set(eUnit, fValue);
top.Set(eUnit, fValue);
right.Set(eUnit, fValue);
bottom.Set(eUnit, fValue);
return *this;
}
CFX_CSSLength left;
CFX_CSSLength top;
CFX_CSSLength right;
CFX_CSSLength bottom;
};
#endif // CORE_FXCRT_CSS_CFX_CSS_H_