Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(501)

Side by Side Diff: sky/engine/core/css/MediaQueryEvaluator.cpp

Issue 848483003: Simplify media query handling for stylesheets. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * CSS Media Query Evaluator 2 * CSS Media Query Evaluator
3 * 3 *
4 * Copyright (C) 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>. 4 * Copyright (C) 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>.
5 * Copyright (C) 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2013 Intel Corporation. All rights reserved. 6 * Copyright (C) 2013 Intel Corporation. All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions 9 * modification, are permitted provided that the following conditions
10 * are met: 10 * are met:
(...skipping 23 matching lines...) Expand all
34 #include "gen/sky/core/MediaFeatureNames.h" 34 #include "gen/sky/core/MediaFeatureNames.h"
35 #include "gen/sky/core/MediaFeatures.h" 35 #include "gen/sky/core/MediaFeatures.h"
36 #include "gen/sky/core/MediaTypeNames.h" 36 #include "gen/sky/core/MediaTypeNames.h"
37 #include "gen/sky/platform/RuntimeEnabledFeatures.h" 37 #include "gen/sky/platform/RuntimeEnabledFeatures.h"
38 #include "sky/engine/core/css/CSSAspectRatioValue.h" 38 #include "sky/engine/core/css/CSSAspectRatioValue.h"
39 #include "sky/engine/core/css/CSSHelper.h" 39 #include "sky/engine/core/css/CSSHelper.h"
40 #include "sky/engine/core/css/CSSPrimitiveValue.h" 40 #include "sky/engine/core/css/CSSPrimitiveValue.h"
41 #include "sky/engine/core/css/CSSToLengthConversionData.h" 41 #include "sky/engine/core/css/CSSToLengthConversionData.h"
42 #include "sky/engine/core/css/MediaList.h" 42 #include "sky/engine/core/css/MediaList.h"
43 #include "sky/engine/core/css/MediaQuery.h" 43 #include "sky/engine/core/css/MediaQuery.h"
44 #include "sky/engine/core/css/MediaQueryExp.h"
44 #include "sky/engine/core/css/MediaValuesDynamic.h" 45 #include "sky/engine/core/css/MediaValuesDynamic.h"
45 #include "sky/engine/core/css/PointerProperties.h" 46 #include "sky/engine/core/css/PointerProperties.h"
46 #include "sky/engine/core/css/resolver/MediaQueryResult.h"
47 #include "sky/engine/core/dom/NodeRenderStyle.h" 47 #include "sky/engine/core/dom/NodeRenderStyle.h"
48 #include "sky/engine/core/frame/FrameHost.h" 48 #include "sky/engine/core/frame/FrameHost.h"
49 #include "sky/engine/core/frame/FrameView.h" 49 #include "sky/engine/core/frame/FrameView.h"
50 #include "sky/engine/core/frame/LocalFrame.h" 50 #include "sky/engine/core/frame/LocalFrame.h"
51 #include "sky/engine/core/frame/Settings.h" 51 #include "sky/engine/core/frame/Settings.h"
52 #include "sky/engine/core/frame/UseCounter.h" 52 #include "sky/engine/core/frame/UseCounter.h"
53 #include "sky/engine/core/rendering/RenderView.h" 53 #include "sky/engine/core/rendering/RenderView.h"
54 #include "sky/engine/core/rendering/style/RenderStyle.h" 54 #include "sky/engine/core/rendering/style/RenderStyle.h"
55 #include "sky/engine/platform/PlatformScreen.h" 55 #include "sky/engine/platform/PlatformScreen.h"
56 #include "sky/engine/platform/geometry/FloatRect.h" 56 #include "sky/engine/platform/geometry/FloatRect.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 return mediaTypeToMatch.isEmpty() 109 return mediaTypeToMatch.isEmpty()
110 || equalIgnoringCase(mediaTypeToMatch, MediaTypeNames::all) 110 || equalIgnoringCase(mediaTypeToMatch, MediaTypeNames::all)
111 || equalIgnoringCase(mediaTypeToMatch, mediaType()); 111 || equalIgnoringCase(mediaTypeToMatch, mediaType());
112 } 112 }
113 113
114 static bool applyRestrictor(MediaQuery::Restrictor r, bool value) 114 static bool applyRestrictor(MediaQuery::Restrictor r, bool value)
115 { 115 {
116 return r == MediaQuery::Not ? !value : value; 116 return r == MediaQuery::Not ? !value : value;
117 } 117 }
118 118
119 bool MediaQueryEvaluator::eval(const MediaQuery* query, MediaQueryResultList* vi ewportDependentMediaQueryResults) const 119 bool MediaQueryEvaluator::eval(const MediaQuery* query) const
120 { 120 {
121 if (!mediaTypeMatch(query->mediaType())) 121 if (!mediaTypeMatch(query->mediaType()))
122 return applyRestrictor(query->restrictor(), false); 122 return applyRestrictor(query->restrictor(), false);
123 123
124 const ExpressionHeapVector& expressions = query->expressions(); 124 const ExpressionHeapVector& expressions = query->expressions();
125 // Iterate through expressions, stop if any of them eval to false (AND seman tics). 125 // Iterate through expressions, stop if any of them eval to false (AND seman tics).
126 size_t i = 0; 126 size_t i = 0;
127 for (; i < expressions.size(); ++i) { 127 for (; i < expressions.size(); ++i) {
128 bool exprResult = eval(expressions.at(i).get()); 128 if (!eval(expressions.at(i).get()))
129 if (viewportDependentMediaQueryResults && expressions.at(i)->isViewportD ependent())
130 viewportDependentMediaQueryResults->append(adoptRef(new MediaQueryRe sult(*expressions.at(i), exprResult)));
131 if (!exprResult)
132 break; 129 break;
133 } 130 }
134 131
135 // Assume true if we are at the end of the list, otherwise assume false. 132 // Assume true if we are at the end of the list, otherwise assume false.
136 return applyRestrictor(query->restrictor(), expressions.size() == i); 133 return applyRestrictor(query->restrictor(), expressions.size() == i);
137 } 134 }
138 135
139 bool MediaQueryEvaluator::eval(const MediaQuerySet* querySet, MediaQueryResultLi st* viewportDependentMediaQueryResults) const 136 bool MediaQueryEvaluator::eval(const MediaQuerySet* querySet) const
140 { 137 {
141 if (!querySet) 138 if (!querySet)
142 return true; 139 return true;
143 140
144 const Vector<OwnPtr<MediaQuery> >& queries = querySet->queryVector(); 141 const Vector<OwnPtr<MediaQuery> >& queries = querySet->queryVector();
145 if (!queries.size()) 142 if (!queries.size())
146 return true; // Empty query list evaluates to true. 143 return true; // Empty query list evaluates to true.
147 144
148 // Iterate over queries, stop if any of them eval to true (OR semantics). 145 // Iterate over queries, stop if any of them eval to true (OR semantics).
149 bool result = false; 146 bool result = false;
150 for (size_t i = 0; i < queries.size() && !result; ++i) 147 for (size_t i = 0; i < queries.size() && !result; ++i)
151 result = eval(queries[i].get(), viewportDependentMediaQueryResults); 148 result = eval(queries[i].get());
152 149
153 return result; 150 return result;
154 } 151 }
155 152
156 template<typename T> 153 template<typename T>
157 bool compareValue(T a, T b, MediaFeaturePrefix op) 154 bool compareValue(T a, T b, MediaFeaturePrefix op)
158 { 155 {
159 switch (op) { 156 switch (op) {
160 case MinPrefix: 157 case MinPrefix:
161 return a >= b; 158 return a >= b;
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 // Call the media feature evaluation function. Assume no prefix and let 638 // Call the media feature evaluation function. Assume no prefix and let
642 // trampoline functions override the prefix if prefix is used. 639 // trampoline functions override the prefix if prefix is used.
643 EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl()); 640 EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl());
644 if (func) 641 if (func)
645 return func(expr->expValue(), NoPrefix, *m_mediaValues); 642 return func(expr->expValue(), NoPrefix, *m_mediaValues);
646 643
647 return false; 644 return false;
648 } 645 }
649 646
650 } // namespace 647 } // namespace
OLDNEW
« no previous file with comments | « sky/engine/core/css/MediaQueryEvaluator.h ('k') | sky/engine/core/css/resolver/MediaQueryResult.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698