| 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 WebCore { | 13 namespace WebCore { |
| 14 | 14 |
| 15 unsigned SizesAttributeParser::findEffectiveSize(const String& attribute, PassRe
fPtr<MediaValues> mediaValues) | 15 unsigned SizesAttributeParser::findEffectiveSize(const String& attribute, PassRe
fPtr<MediaValues> mediaValues, bool& viewportDependant) |
| 16 { | 16 { |
| 17 Vector<MediaQueryToken> tokens; | 17 Vector<MediaQueryToken> tokens; |
| 18 unsigned size; |
| 18 SizesAttributeParser parser(mediaValues); | 19 SizesAttributeParser parser(mediaValues); |
| 19 | 20 |
| 20 MediaQueryTokenizer::tokenize(attribute, tokens); | 21 MediaQueryTokenizer::tokenize(attribute, tokens); |
| 21 if (!parser.parse(tokens)) | 22 if (parser.parse(tokens)) |
| 22 return parser.effectiveSizeDefaultValue(); | 23 size = parser.effectiveSize(); |
| 23 return parser.effectiveSize(); | 24 else |
| 25 size = parser.effectiveSizeDefaultValue(); |
| 26 viewportDependant = parser.viewportDependant(); |
| 27 return size; |
| 24 } | 28 } |
| 25 | 29 |
| 26 bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start
Token, MediaQueryTokenIterator endToken, unsigned& result) | 30 bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start
Token, MediaQueryTokenIterator endToken, unsigned& result) |
| 27 { | 31 { |
| 28 if (startToken == endToken) | 32 if (startToken == endToken) |
| 29 return false; | 33 return false; |
| 30 MediaQueryTokenType type = startToken->type(); | 34 MediaQueryTokenType type = startToken->type(); |
| 31 if (type == DimensionToken) { | 35 if (type == DimensionToken) { |
| 32 int length; | 36 int length; |
| 33 if (!CSSPrimitiveValue::isLength(startToken->unitType())) | 37 if (!CSSPrimitiveValue::isLength(startToken->unitType())) |
| 34 return false; | 38 return false; |
| 39 m_viewportDependant = CSSPrimitiveValue::isViewportPercentageLength(star
tToken->unitType()); |
| 35 if ((m_mediaValues->computeLength(startToken->numericValue(), startToken
->unitType(), length)) && (length > 0)) { | 40 if ((m_mediaValues->computeLength(startToken->numericValue(), startToken
->unitType(), length)) && (length > 0)) { |
| 36 result = (unsigned)length; | 41 result = (unsigned)length; |
| 37 return true; | 42 return true; |
| 38 } | 43 } |
| 39 } else if (type == FunctionToken) { | 44 } else if (type == FunctionToken) { |
| 40 return SizesCalcParser::parse(startToken, endToken, m_mediaValues, resul
t); | 45 return SizesCalcParser::parse(startToken, endToken, m_mediaValues, resul
t, m_viewportDependant); |
| 41 } else if (type == NumberToken && !startToken->numericValue()) { | 46 } else if (type == NumberToken && !startToken->numericValue()) { |
| 42 result = 0; | 47 result = 0; |
| 43 return true; | 48 return true; |
| 44 } | 49 } |
| 45 | 50 |
| 46 return false; | 51 return false; |
| 47 } | 52 } |
| 48 | 53 |
| 49 static void reverseSkipIrrelevantTokens(MediaQueryTokenIterator& token, MediaQue
ryTokenIterator startToken) | 54 static void reverseSkipIrrelevantTokens(MediaQueryTokenIterator& token, MediaQue
ryTokenIterator startToken) |
| 50 { | 55 { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 131 |
| 127 unsigned SizesAttributeParser::effectiveSize() | 132 unsigned SizesAttributeParser::effectiveSize() |
| 128 { | 133 { |
| 129 if (m_lengthWasSet) | 134 if (m_lengthWasSet) |
| 130 return m_length; | 135 return m_length; |
| 131 return effectiveSizeDefaultValue(); | 136 return effectiveSizeDefaultValue(); |
| 132 } | 137 } |
| 133 | 138 |
| 134 unsigned SizesAttributeParser::effectiveSizeDefaultValue() | 139 unsigned SizesAttributeParser::effectiveSizeDefaultValue() |
| 135 { | 140 { |
| 136 // Returning the equivalent of "100%" | 141 // Returning the equivalent of "100vw" |
| 142 m_viewportDependant = true; |
| 137 return m_mediaValues->viewportWidth(); | 143 return m_mediaValues->viewportWidth(); |
| 138 } | 144 } |
| 139 | 145 |
| 140 } // namespace | 146 } // namespace |
| 141 | 147 |
| OLD | NEW |