OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | |
3 * | |
4 * Redistribution and use in source and binary forms, with or without | |
5 * modification, are permitted provided that the following conditions are | |
6 * met: | |
7 * | |
8 * * Redistributions of source code must retain the above copyright | |
9 * notice, this list of conditions and the following disclaimer. | |
10 * * Redistributions in binary form must reproduce the above | |
11 * copyright notice, this list of conditions and the following disclaimer | |
12 * in the documentation and/or other materials provided with the | |
13 * distribution. | |
14 * * Neither the name of Google Inc. nor the names of its | |
15 * contributors may be used to endorse or promote products derived from | |
16 * this software without specific prior written permission. | |
17 * | |
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
29 */ | |
30 | |
31 #ifndef GridTrackSize_h | |
32 #define GridTrackSize_h | |
33 | |
34 #include "core/layout/style/GridLength.h" | |
35 | |
36 namespace blink { | |
37 | |
38 enum GridTrackSizeType { | |
39 LengthTrackSizing, | |
40 MinMaxTrackSizing | |
41 }; | |
42 | |
43 class GridTrackSize { | |
44 public: | |
45 GridTrackSize(const GridLength& length) | |
46 : m_type(LengthTrackSizing) | |
47 , m_minTrackBreadth(length) | |
48 , m_maxTrackBreadth(length) | |
49 , m_minTrackBreadthIsMaxContent(false) | |
50 , m_maxTrackBreadthIsMaxContent(false) | |
51 { | |
52 cacheMinMaxTrackBreadthTypes(); | |
53 } | |
54 | |
55 GridTrackSize(const GridLength& minTrackBreadth, const GridLength& maxTrackB
readth) | |
56 : m_type(MinMaxTrackSizing) | |
57 , m_minTrackBreadth(minTrackBreadth) | |
58 , m_maxTrackBreadth(maxTrackBreadth) | |
59 , m_minTrackBreadthIsMaxContent(false) | |
60 , m_maxTrackBreadthIsMaxContent(false) | |
61 { | |
62 cacheMinMaxTrackBreadthTypes(); | |
63 } | |
64 | |
65 const GridLength& length() const | |
66 { | |
67 ASSERT(m_type == LengthTrackSizing); | |
68 ASSERT(m_minTrackBreadth == m_maxTrackBreadth); | |
69 const GridLength& minTrackBreadth = m_minTrackBreadth; | |
70 return minTrackBreadth; | |
71 } | |
72 | |
73 const GridLength& minTrackBreadth() const | |
74 { | |
75 if (m_minTrackBreadth.isLength() && m_minTrackBreadth.length().isAuto())
{ | |
76 DEFINE_STATIC_LOCAL(GridLength, minContent, (Length(MinContent))); | |
77 return minContent; | |
78 } | |
79 return m_minTrackBreadth; | |
80 } | |
81 | |
82 const GridLength& maxTrackBreadth() const | |
83 { | |
84 if (m_maxTrackBreadth.isLength() && m_maxTrackBreadth.length().isAuto())
{ | |
85 DEFINE_STATIC_LOCAL(GridLength, maxContent, (Length(MaxContent))); | |
86 return maxContent; | |
87 } | |
88 return m_maxTrackBreadth; | |
89 } | |
90 | |
91 GridTrackSizeType type() const { return m_type; } | |
92 | |
93 bool isContentSized() const { return m_minTrackBreadth.isContentSized() || m
_maxTrackBreadth.isContentSized(); } | |
94 | |
95 bool isPercentage() const { return m_type == LengthTrackSizing && length().i
sLength() && length().length().isPercent(); } | |
96 | |
97 bool operator==(const GridTrackSize& other) const | |
98 { | |
99 return m_type == other.m_type && m_minTrackBreadth == other.m_minTrackBr
eadth && m_maxTrackBreadth == other.m_maxTrackBreadth; | |
100 } | |
101 | |
102 void cacheMinMaxTrackBreadthTypes() | |
103 { | |
104 m_minTrackBreadthIsMinContent = minTrackBreadth().isLength() && minTrack
Breadth().length().isMinContent(); | |
105 m_minTrackBreadthIsMaxContent = minTrackBreadth().isLength() && minTrack
Breadth().length().isMaxContent(); | |
106 m_maxTrackBreadthIsMaxContent = maxTrackBreadth().isLength() && maxTrack
Breadth().length().isMaxContent(); | |
107 m_maxTrackBreadthIsMinContent = maxTrackBreadth().isLength() && maxTrack
Breadth().length().isMinContent(); | |
108 } | |
109 | |
110 bool hasMinOrMaxContentMinTrackBreadth() const { return m_minTrackBreadthIsM
axContent || m_minTrackBreadthIsMinContent; } | |
111 bool hasMaxContentMinTrackBreadth() const { return m_minTrackBreadthIsMaxCon
tent; } | |
112 bool hasMinContentMinTrackBreadth() const { return m_minTrackBreadthIsMinCon
tent; } | |
113 bool hasMinOrMaxContentMaxTrackBreadth() const { return m_maxTrackBreadthIsM
axContent || m_maxTrackBreadthIsMinContent; } | |
114 bool hasMaxContentMaxTrackBreadth() const { return m_maxTrackBreadthIsMaxCon
tent; } | |
115 bool hasMinContentMaxTrackBreadth() const { return m_maxTrackBreadthIsMinCon
tent; } | |
116 bool hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth() const {
return m_minTrackBreadthIsMinContent && hasMinOrMaxContentMaxTrackBreadth(); } | |
117 bool hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth() const { retu
rn m_minTrackBreadthIsMaxContent && m_maxTrackBreadthIsMaxContent; } | |
118 | |
119 private: | |
120 GridTrackSizeType m_type; | |
121 GridLength m_minTrackBreadth; | |
122 GridLength m_maxTrackBreadth; | |
123 bool m_minTrackBreadthIsMaxContent; | |
124 bool m_minTrackBreadthIsMinContent; | |
125 bool m_maxTrackBreadthIsMaxContent; | |
126 bool m_maxTrackBreadthIsMinContent; | |
127 }; | |
128 | |
129 } // namespace blink | |
130 | |
131 #endif // GridTrackSize_h | |
OLD | NEW |