| 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 "SizesAttributeParser.h" | 6 #include "SizesAttributeParser.h" |
| 7 | 7 |
| 8 #include "MediaTypeNames.h" | 8 #include "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 | 12 |
| 12 namespace WebCore { | 13 namespace WebCore { |
| 13 | 14 |
| 14 unsigned SizesAttributeParser::findEffectiveSize(const String& attribute, PassRe
fPtr<MediaValues> mediaValues) | 15 unsigned SizesAttributeParser::findEffectiveSize(const String& attribute, PassRe
fPtr<MediaValues> mediaValues) |
| 15 { | 16 { |
| 16 Vector<MediaQueryToken> tokens; | 17 Vector<MediaQueryToken> tokens; |
| 17 SizesAttributeParser parser(mediaValues); | 18 SizesAttributeParser parser(mediaValues); |
| 18 | 19 |
| 19 MediaQueryTokenizer::tokenize(attribute, tokens); | 20 MediaQueryTokenizer::tokenize(attribute, tokens); |
| 20 if (!parser.parse(tokens)) | 21 if (!parser.parse(tokens)) |
| 21 return parser.effectiveSizeDefaultValue(); | 22 return parser.effectiveSizeDefaultValue(); |
| 22 return parser.effectiveSize(); | 23 return parser.effectiveSize(); |
| 23 } | 24 } |
| 24 | 25 |
| 25 bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start
Token, MediaQueryTokenIterator endToken, unsigned& result) | 26 bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start
Token, MediaQueryTokenIterator endToken, unsigned& result) |
| 26 { | 27 { |
| 27 MediaQueryTokenType type = startToken->type(); | 28 MediaQueryTokenType type = startToken->type(); |
| 28 if (type == DimensionToken) { | 29 if (type == DimensionToken) { |
| 29 int length; | 30 int length; |
| 30 if (!CSSPrimitiveValue::isLength(startToken->unitType())) | 31 if (!CSSPrimitiveValue::isLength(startToken->unitType())) |
| 31 return false; | 32 return false; |
| 32 if ((m_mediaValues->computeLength(startToken->numericValue(), startToken
->unitType(), length)) && (length > 0)) { | 33 if ((m_mediaValues->computeLength(startToken->numericValue(), startToken
->unitType(), length)) && (length > 0)) { |
| 33 result = (unsigned)length; | 34 result = (unsigned)length; |
| 34 return true; | 35 return true; |
| 35 } | 36 } |
| 37 } else if (type == FunctionToken) { |
| 38 return SizesCalcParser::parse(startToken, endToken, m_mediaValues, resul
t); |
| 36 } | 39 } |
| 37 // FIXME - Handle calc() FunctionToken here! | 40 |
| 38 return false; | 41 return false; |
| 39 } | 42 } |
| 40 | 43 |
| 41 static void reverseSkipIrrelevantTokens(MediaQueryTokenIterator& token, MediaQue
ryTokenIterator startToken) | 44 static void reverseSkipIrrelevantTokens(MediaQueryTokenIterator& token, MediaQue
ryTokenIterator startToken) |
| 42 { | 45 { |
| 43 MediaQueryTokenIterator endToken = token; | 46 MediaQueryTokenIterator endToken = token; |
| 44 while (token != startToken && (token->type() == WhitespaceToken || token->ty
pe() == CommentToken || token->type() == EOFToken)) | 47 while (token != startToken && (token->type() == WhitespaceToken || token->ty
pe() == CommentToken || token->type() == EOFToken)) |
| 45 --token; | 48 --token; |
| 46 if (token != endToken) | 49 if (token != endToken) |
| 47 ++token; | 50 ++token; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 } | 126 } |
| 124 | 127 |
| 125 unsigned SizesAttributeParser::effectiveSizeDefaultValue() | 128 unsigned SizesAttributeParser::effectiveSizeDefaultValue() |
| 126 { | 129 { |
| 127 // Returning the equivalent of "100%" | 130 // Returning the equivalent of "100%" |
| 128 return m_mediaValues->viewportWidth(); | 131 return m_mediaValues->viewportWidth(); |
| 129 } | 132 } |
| 130 | 133 |
| 131 } // namespace | 134 } // namespace |
| 132 | 135 |
| OLD | NEW |