OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "core/css/parser/SizesAttributeParser.h" | 6 #include "core/css/parser/SizesAttributeParser.h" |
7 | 7 |
8 #include "core/MediaTypeNames.h" | 8 #include "core/MediaTypeNames.h" |
9 #include "core/css/MediaQueryEvaluator.h" | 9 #include "core/css/MediaQueryEvaluator.h" |
10 #include "core/css/parser/MediaQueryTokenizer.h" | 10 #include "core/css/parser/MediaQueryTokenizer.h" |
11 #include "core/css/parser/SizesCalcParser.h" | 11 #include "core/css/parser/SizesCalcParser.h" |
12 | 12 |
13 namespace blink { | 13 namespace blink { |
14 | 14 |
15 unsigned SizesAttributeParser::findEffectiveSize(const String& attribute, PassRe fPtr<MediaValues> mediaValues) | 15 SizesAttributeParser::SizesAttributeParser(PassRefPtr<MediaValues> mediaValues, const String& attribute) |
16 : m_mediaValues(mediaValues) | |
17 , m_length(0) | |
18 , m_lengthWasSet(false) | |
19 , m_viewportDependant(false) | |
16 { | 20 { |
17 Vector<MediaQueryToken> tokens; | 21 MediaQueryTokenizer::tokenize(attribute, m_tokens); |
18 SizesAttributeParser parser(mediaValues); | 22 m_isValid = parse(m_tokens); |
23 } | |
19 | 24 |
20 MediaQueryTokenizer::tokenize(attribute, tokens); | 25 unsigned SizesAttributeParser::length() |
21 if (!parser.parse(tokens)) | 26 { |
22 return parser.effectiveSizeDefaultValue(); | 27 if (m_isValid) |
23 return parser.effectiveSize(); | 28 return effectiveSize(); |
29 return effectiveSizeDefaultValue(); | |
24 } | 30 } |
25 | 31 |
26 bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start Token, MediaQueryTokenIterator endToken, unsigned& result) | 32 bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start Token, MediaQueryTokenIterator endToken, unsigned& result) |
27 { | 33 { |
28 if (startToken == endToken) | 34 if (startToken == endToken) |
29 return false; | 35 return false; |
30 MediaQueryTokenType type = startToken->type(); | 36 MediaQueryTokenType type = startToken->type(); |
31 if (type == DimensionToken) { | 37 if (type == DimensionToken) { |
32 int length; | 38 int length; |
33 if (!CSSPrimitiveValue::isLength(startToken->unitType())) | 39 if (!CSSPrimitiveValue::isLength(startToken->unitType())) |
34 return false; | 40 return false; |
41 m_viewportDependant = CSSPrimitiveValue::isViewportPercentageLength(star tToken->unitType()); | |
esprehn
2014/08/01 14:06:44
Does this need to be m_viewportDependant || CSSPri
| |
35 if ((m_mediaValues->computeLength(startToken->numericValue(), startToken ->unitType(), length)) && (length > 0)) { | 42 if ((m_mediaValues->computeLength(startToken->numericValue(), startToken ->unitType(), length)) && (length > 0)) { |
36 result = (unsigned)length; | 43 result = (unsigned)length; |
37 return true; | 44 return true; |
38 } | 45 } |
39 } else if (type == FunctionToken) { | 46 } else if (type == FunctionToken) { |
40 return SizesCalcParser::parse(startToken, endToken, m_mediaValues, resul t); | 47 SizesCalcParser calcParser(startToken, endToken, m_mediaValues); |
48 if (!calcParser.isValid()) | |
49 return false; | |
50 m_viewportDependant = m_viewportDependant || calcParser.viewportDependan t(); | |
51 result = calcParser.result(); | |
52 return true; | |
41 } else if (type == NumberToken && !startToken->numericValue()) { | 53 } else if (type == NumberToken && !startToken->numericValue()) { |
42 result = 0; | 54 result = 0; |
43 return true; | 55 return true; |
44 } | 56 } |
45 | 57 |
46 return false; | 58 return false; |
47 } | 59 } |
48 | 60 |
49 static void reverseSkipIrrelevantTokens(MediaQueryTokenIterator& token, MediaQue ryTokenIterator startToken) | 61 static void reverseSkipIrrelevantTokens(MediaQueryTokenIterator& token, MediaQue ryTokenIterator startToken) |
50 { | 62 { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 | 138 |
127 unsigned SizesAttributeParser::effectiveSize() | 139 unsigned SizesAttributeParser::effectiveSize() |
128 { | 140 { |
129 if (m_lengthWasSet) | 141 if (m_lengthWasSet) |
130 return m_length; | 142 return m_length; |
131 return effectiveSizeDefaultValue(); | 143 return effectiveSizeDefaultValue(); |
132 } | 144 } |
133 | 145 |
134 unsigned SizesAttributeParser::effectiveSizeDefaultValue() | 146 unsigned SizesAttributeParser::effectiveSizeDefaultValue() |
135 { | 147 { |
136 // Returning the equivalent of "100%" | 148 // Returning the equivalent of "100vw" |
149 m_viewportDependant = true; | |
137 return m_mediaValues->viewportWidth(); | 150 return m_mediaValues->viewportWidth(); |
138 } | 151 } |
139 | 152 |
140 } // namespace | 153 } // namespace |
141 | 154 |
OLD | NEW |