OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 namespace WebCore { | 36 namespace WebCore { |
37 | 37 |
38 enum GridTrackSizeType { | 38 enum GridTrackSizeType { |
39 LengthTrackSizing, | 39 LengthTrackSizing, |
40 MinMaxTrackSizing | 40 MinMaxTrackSizing |
41 }; | 41 }; |
42 | 42 |
43 class GridTrackSize { | 43 class GridTrackSize { |
44 public: | 44 public: |
45 GridTrackSize(LengthType type = Undefined) | 45 GridTrackSize() |
| 46 : m_type(LengthTrackSizing) |
| 47 , m_minTrackBreadth(Undefined) |
| 48 , m_maxTrackBreadth(Undefined) |
| 49 , m_minTrackBreadthIsMinOrMaxContent(false) |
| 50 , m_minTrackBreadthIsMaxContent(false) |
| 51 , m_maxTrackBreadthIsMinOrMaxContent(false) |
| 52 , m_maxTrackBreadthIsMaxContent(false) |
| 53 { |
| 54 // Someone has to set a valid lenght type through setLength or |
| 55 // setMinMax before using the object. |
| 56 } |
| 57 |
| 58 GridTrackSize(LengthType type) |
46 : m_type(LengthTrackSizing) | 59 : m_type(LengthTrackSizing) |
47 , m_minTrackBreadth(type) | 60 , m_minTrackBreadth(type) |
48 , m_maxTrackBreadth(type) | 61 , m_maxTrackBreadth(type) |
| 62 , m_minTrackBreadthIsMinOrMaxContent(false) |
| 63 , m_minTrackBreadthIsMaxContent(false) |
| 64 , m_maxTrackBreadthIsMinOrMaxContent(false) |
| 65 , m_maxTrackBreadthIsMaxContent(false) |
49 { | 66 { |
| 67 ASSERT(type != Undefined); |
| 68 |
| 69 cacheMinMaxTrackBreadthTypes(); |
50 } | 70 } |
51 | 71 |
52 const GridLength& length() const | 72 const GridLength& length() const |
53 { | 73 { |
54 ASSERT(m_type == LengthTrackSizing); | 74 ASSERT(m_type == LengthTrackSizing); |
55 ASSERT(m_minTrackBreadth == m_maxTrackBreadth); | 75 ASSERT(m_minTrackBreadth == m_maxTrackBreadth); |
56 const GridLength& minTrackBreadth = m_minTrackBreadth; | 76 const GridLength& minTrackBreadth = m_minTrackBreadth; |
57 ASSERT(!minTrackBreadth.isLength() || !minTrackBreadth.length().isUndefi
ned()); | 77 ASSERT(!minTrackBreadth.isLength() || !minTrackBreadth.length().isUndefi
ned()); |
58 return minTrackBreadth; | 78 return minTrackBreadth; |
59 } | 79 } |
60 | 80 |
61 void setLength(const GridLength& length) | 81 void setLength(const GridLength& length) |
62 { | 82 { |
63 m_type = LengthTrackSizing; | 83 m_type = LengthTrackSizing; |
64 m_minTrackBreadth = length; | 84 m_minTrackBreadth = length; |
65 m_maxTrackBreadth = length; | 85 m_maxTrackBreadth = length; |
| 86 |
| 87 cacheMinMaxTrackBreadthTypes(); |
66 } | 88 } |
67 | 89 |
68 const GridLength& minTrackBreadth() const | 90 const GridLength& minTrackBreadth() const |
69 { | 91 { |
70 ASSERT(!m_minTrackBreadth.isLength() || !m_minTrackBreadth.length().isUn
defined()); | 92 ASSERT(!m_minTrackBreadth.isLength() || !m_minTrackBreadth.length().isUn
defined()); |
71 if (m_minTrackBreadth.isLength() && m_minTrackBreadth.length().isAuto())
{ | 93 if (m_minTrackBreadth.isLength() && m_minTrackBreadth.length().isAuto())
{ |
72 DEFINE_STATIC_LOCAL(GridLength, minContent, (MinContent)); | 94 DEFINE_STATIC_LOCAL(GridLength, minContent, (MinContent)); |
73 return minContent; | 95 return minContent; |
74 } | 96 } |
75 return m_minTrackBreadth; | 97 return m_minTrackBreadth; |
76 } | 98 } |
77 | 99 |
78 const GridLength& maxTrackBreadth() const | 100 const GridLength& maxTrackBreadth() const |
79 { | 101 { |
80 ASSERT(!m_maxTrackBreadth.isLength() || !m_maxTrackBreadth.length().isUn
defined()); | 102 ASSERT(!m_maxTrackBreadth.isLength() || !m_maxTrackBreadth.length().isUn
defined()); |
81 if (m_maxTrackBreadth.isLength() && m_maxTrackBreadth.length().isAuto())
{ | 103 if (m_maxTrackBreadth.isLength() && m_maxTrackBreadth.length().isAuto())
{ |
82 DEFINE_STATIC_LOCAL(GridLength, maxContent, (MaxContent)); | 104 DEFINE_STATIC_LOCAL(GridLength, maxContent, (MaxContent)); |
83 return maxContent; | 105 return maxContent; |
84 } | 106 } |
85 return m_maxTrackBreadth; | 107 return m_maxTrackBreadth; |
86 } | 108 } |
87 | 109 |
88 void setMinMax(const GridLength& minTrackBreadth, const GridLength& maxTrack
Breadth) | 110 void setMinMax(const GridLength& minTrackBreadth, const GridLength& maxTrack
Breadth) |
89 { | 111 { |
90 m_type = MinMaxTrackSizing; | 112 m_type = MinMaxTrackSizing; |
91 m_minTrackBreadth = minTrackBreadth; | 113 m_minTrackBreadth = minTrackBreadth; |
92 m_maxTrackBreadth = maxTrackBreadth; | 114 m_maxTrackBreadth = maxTrackBreadth; |
| 115 |
| 116 cacheMinMaxTrackBreadthTypes(); |
93 } | 117 } |
94 | 118 |
95 GridTrackSizeType type() const { return m_type; } | 119 GridTrackSizeType type() const { return m_type; } |
96 | 120 |
97 bool isContentSized() const { return m_minTrackBreadth.isContentSized() || m
_maxTrackBreadth.isContentSized(); } | 121 bool isContentSized() const { return m_minTrackBreadth.isContentSized() || m
_maxTrackBreadth.isContentSized(); } |
98 | 122 |
99 bool operator==(const GridTrackSize& other) const | 123 bool operator==(const GridTrackSize& other) const |
100 { | 124 { |
101 return m_type == other.m_type && m_minTrackBreadth == other.m_minTrackBr
eadth && m_maxTrackBreadth == other.m_maxTrackBreadth; | 125 return m_type == other.m_type && m_minTrackBreadth == other.m_minTrackBr
eadth && m_maxTrackBreadth == other.m_maxTrackBreadth; |
102 } | 126 } |
103 | 127 |
104 bool hasMinOrMaxContentMinTrackBreadth() const { return minTrackBreadth().is
Length() && (minTrackBreadth().length().isMinContent() || minTrackBreadth().leng
th().isMaxContent()); } | 128 void cacheMinMaxTrackBreadthTypes() |
105 bool hasMaxContentMinTrackBreadth() const { return minTrackBreadth().isLengt
h() && minTrackBreadth().length().isMaxContent(); } | 129 { |
106 bool hasMinOrMaxContentMaxTrackBreadth() const { return maxTrackBreadth().is
Length() && (maxTrackBreadth().length().isMinContent() || maxTrackBreadth().leng
th().isMaxContent()); } | 130 m_minTrackBreadthIsMaxContent = minTrackBreadth().isLength() && minTrack
Breadth().length().isMaxContent(); |
107 bool hasMaxContentMaxTrackBreadth() const { return maxTrackBreadth().isLengt
h() && maxTrackBreadth().length().isMaxContent(); } | 131 m_minTrackBreadthIsMinOrMaxContent = m_minTrackBreadthIsMaxContent || (m
inTrackBreadth().isLength() && minTrackBreadth().length().isMinContent()); |
| 132 m_maxTrackBreadthIsMaxContent = maxTrackBreadth().isLength() && maxTrack
Breadth().length().isMaxContent(); |
| 133 m_maxTrackBreadthIsMinOrMaxContent = m_maxTrackBreadthIsMaxContent || (m
axTrackBreadth().isLength() && maxTrackBreadth().length().isMinContent()); |
| 134 } |
| 135 |
| 136 bool hasMinOrMaxContentMinTrackBreadth() const { return m_minTrackBreadthIsM
inOrMaxContent; } |
| 137 bool hasMaxContentMinTrackBreadth() const { return m_minTrackBreadthIsMaxCon
tent; } |
| 138 bool hasMinOrMaxContentMaxTrackBreadth() const { return m_maxTrackBreadthIsM
inOrMaxContent; } |
| 139 bool hasMaxContentMaxTrackBreadth() const { return m_maxTrackBreadthIsMaxCon
tent; } |
108 | 140 |
109 private: | 141 private: |
110 GridTrackSizeType m_type; | 142 GridTrackSizeType m_type; |
111 GridLength m_minTrackBreadth; | 143 GridLength m_minTrackBreadth; |
112 GridLength m_maxTrackBreadth; | 144 GridLength m_maxTrackBreadth; |
| 145 bool m_minTrackBreadthIsMinOrMaxContent; |
| 146 bool m_minTrackBreadthIsMaxContent; |
| 147 bool m_maxTrackBreadthIsMinOrMaxContent; |
| 148 bool m_maxTrackBreadthIsMaxContent; |
113 }; | 149 }; |
114 | 150 |
115 } // namespace WebCore | 151 } // namespace WebCore |
116 | 152 |
117 #endif // GridTrackSize_h | 153 #endif // GridTrackSize_h |
OLD | NEW |