aboutsummaryrefslogtreecommitdiff
path: root/core/fxcrt/css/cfx_css.h
blob: 1f71851dccbf27b95b528d243ed95d70be5c2b9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// 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_