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

Side by Side Diff: third_party/WebKit/Source/core/animation/CSSColorInterpolationType.cpp

Issue 2694383002: Don't animate caret-color: auto (Closed)
Patch Set: Fix composition test Created 3 years, 10 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "core/animation/CSSColorInterpolationType.h" 5 #include "core/animation/CSSColorInterpolationType.h"
6 6
7 #include "core/animation/ColorPropertyFunctions.h" 7 #include "core/animation/ColorPropertyFunctions.h"
8 #include "core/css/CSSColorValue.h" 8 #include "core/css/CSSColorValue.h"
9 #include "core/css/CSSIdentifierValue.h" 9 #include "core/css/CSSIdentifierValue.h"
10 #include "core/css/resolver/StyleResolverState.h" 10 #include "core/css/resolver/StyleResolverState.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 double green = toInterpolableNumber(list.get(Green))->value(); 114 double green = toInterpolableNumber(list.get(Green))->value();
115 double blue = toInterpolableNumber(list.get(Blue))->value(); 115 double blue = toInterpolableNumber(list.get(Blue))->value();
116 double alpha = toInterpolableNumber(list.get(Alpha))->value(); 116 double alpha = toInterpolableNumber(list.get(Alpha))->value();
117 117
118 if (double currentcolorFraction = 118 if (double currentcolorFraction =
119 toInterpolableNumber(list.get(Currentcolor))->value()) { 119 toInterpolableNumber(list.get(Currentcolor))->value()) {
120 auto currentColorGetter = isVisited 120 auto currentColorGetter = isVisited
121 ? ColorPropertyFunctions::getVisitedColor 121 ? ColorPropertyFunctions::getVisitedColor
122 : ColorPropertyFunctions::getUnvisitedColor; 122 : ColorPropertyFunctions::getUnvisitedColor;
123 StyleColor currentStyleColor = StyleColor::currentColor(); 123 StyleColor currentStyleColor = StyleColor::currentColor();
124 if (isTextDecoration) 124 if (isTextDecoration) {
125 currentStyleColor = 125 currentStyleColor =
126 currentColorGetter(CSSPropertyWebkitTextFillColor, *state.style()); 126 currentColorGetter(CSSPropertyWebkitTextFillColor, *state.style())
127 if (currentStyleColor.isCurrentColor()) 127 .access();
128 currentStyleColor = currentColorGetter(CSSPropertyColor, *state.style()); 128 }
129 if (currentStyleColor.isCurrentColor()) {
130 currentStyleColor =
131 currentColorGetter(CSSPropertyColor, *state.style()).access();
132 }
129 addPremultipliedColor(red, green, blue, alpha, currentcolorFraction, 133 addPremultipliedColor(red, green, blue, alpha, currentcolorFraction,
130 currentStyleColor.getColor()); 134 currentStyleColor.getColor());
131 } 135 }
132 const TextLinkColors& colors = state.document().textLinkColors(); 136 const TextLinkColors& colors = state.document().textLinkColors();
133 if (double webkitActivelinkFraction = 137 if (double webkitActivelinkFraction =
134 toInterpolableNumber(list.get(WebkitActivelink))->value()) 138 toInterpolableNumber(list.get(WebkitActivelink))->value())
135 addPremultipliedColor(red, green, blue, alpha, webkitActivelinkFraction, 139 addPremultipliedColor(red, green, blue, alpha, webkitActivelinkFraction,
136 colors.activeLinkColor()); 140 colors.activeLinkColor());
137 if (double webkitLinkFraction = 141 if (double webkitLinkFraction =
138 toInterpolableNumber(list.get(WebkitLink))->value()) 142 toInterpolableNumber(list.get(WebkitLink))->value())
(...skipping 10 matching lines...) Expand all
149 return Color::transparent; 153 return Color::transparent;
150 154
151 return makeRGBA(round(red / alpha), round(green / alpha), round(blue / alpha), 155 return makeRGBA(round(red / alpha), round(green / alpha), round(blue / alpha),
152 round(alpha)); 156 round(alpha));
153 } 157 }
154 158
155 class InheritedColorChecker : public InterpolationType::ConversionChecker { 159 class InheritedColorChecker : public InterpolationType::ConversionChecker {
156 public: 160 public:
157 static std::unique_ptr<InheritedColorChecker> create( 161 static std::unique_ptr<InheritedColorChecker> create(
158 CSSPropertyID property, 162 CSSPropertyID property,
159 const StyleColor& color) { 163 const OptionalStyleColor& color) {
160 return WTF::wrapUnique(new InheritedColorChecker(property, color)); 164 return WTF::wrapUnique(new InheritedColorChecker(property, color));
161 } 165 }
162 166
163 private: 167 private:
164 InheritedColorChecker(CSSPropertyID property, const StyleColor& color) 168 InheritedColorChecker(CSSPropertyID property, const OptionalStyleColor& color)
165 : m_property(property), m_color(color) {} 169 : m_property(property), m_color(color) {}
166 170
167 bool isValid(const InterpolationEnvironment& environment, 171 bool isValid(const InterpolationEnvironment& environment,
168 const InterpolationValue& underlying) const final { 172 const InterpolationValue& underlying) const final {
169 return m_color == ColorPropertyFunctions::getUnvisitedColor( 173 return m_color == ColorPropertyFunctions::getUnvisitedColor(
170 m_property, *environment.state().parentStyle()); 174 m_property, *environment.state().parentStyle());
171 } 175 }
172 176
173 const CSSPropertyID m_property; 177 const CSSPropertyID m_property;
174 const StyleColor m_color; 178 const OptionalStyleColor m_color;
175 }; 179 };
176 180
177 InterpolationValue CSSColorInterpolationType::maybeConvertNeutral( 181 InterpolationValue CSSColorInterpolationType::maybeConvertNeutral(
178 const InterpolationValue&, 182 const InterpolationValue&,
179 ConversionCheckers&) const { 183 ConversionCheckers&) const {
180 return convertStyleColorPair(StyleColor(Color::transparent), 184 return convertStyleColorPair(StyleColor(Color::transparent),
181 StyleColor(Color::transparent)); 185 StyleColor(Color::transparent));
182 } 186 }
183 187
184 InterpolationValue CSSColorInterpolationType::maybeConvertInitial( 188 InterpolationValue CSSColorInterpolationType::maybeConvertInitial(
185 const StyleResolverState&, 189 const StyleResolverState&,
186 ConversionCheckers& conversionCheckers) const { 190 ConversionCheckers& conversionCheckers) const {
187 StyleColor initialColor; 191 OptionalStyleColor initialColor =
188 if (ColorPropertyFunctions::getInitialColor(cssProperty(), initialColor)) 192 ColorPropertyFunctions::getInitialColor(cssProperty());
189 return convertStyleColorPair(initialColor, initialColor); 193 if (initialColor.isNull())
190 return nullptr; 194 return nullptr;
195 return convertStyleColorPair(initialColor.access(), initialColor.access());
191 } 196 }
192 197
193 InterpolationValue CSSColorInterpolationType::maybeConvertInherit( 198 InterpolationValue CSSColorInterpolationType::maybeConvertInherit(
194 const StyleResolverState& state, 199 const StyleResolverState& state,
195 ConversionCheckers& conversionCheckers) const { 200 ConversionCheckers& conversionCheckers) const {
196 if (!state.parentStyle()) 201 if (!state.parentStyle())
197 return nullptr; 202 return nullptr;
198 // Visited color can never explicitly inherit from parent visited color so 203 // Visited color can never explicitly inherit from parent visited color so
199 // only use the unvisited color. 204 // only use the unvisited color.
200 const StyleColor inheritedColor = ColorPropertyFunctions::getUnvisitedColor( 205 OptionalStyleColor inheritedColor = ColorPropertyFunctions::getUnvisitedColor(
201 cssProperty(), *state.parentStyle()); 206 cssProperty(), *state.parentStyle());
202 conversionCheckers.push_back( 207 conversionCheckers.push_back(
203 InheritedColorChecker::create(cssProperty(), inheritedColor)); 208 InheritedColorChecker::create(cssProperty(), inheritedColor));
204 return convertStyleColorPair(inheritedColor, inheritedColor); 209 return convertStyleColorPair(inheritedColor, inheritedColor);
205 } 210 }
206 211
207 enum InterpolableColorPairIndex : unsigned { 212 enum InterpolableColorPairIndex : unsigned {
208 Unvisited, 213 Unvisited,
209 Visited, 214 Visited,
210 InterpolableColorPairIndexCount, 215 InterpolableColorPairIndexCount,
(...skipping 14 matching lines...) Expand all
225 if (!interpolableColor) 230 if (!interpolableColor)
226 return nullptr; 231 return nullptr;
227 std::unique_ptr<InterpolableList> colorPair = 232 std::unique_ptr<InterpolableList> colorPair =
228 InterpolableList::create(InterpolableColorPairIndexCount); 233 InterpolableList::create(InterpolableColorPairIndexCount);
229 colorPair->set(Unvisited, interpolableColor->clone()); 234 colorPair->set(Unvisited, interpolableColor->clone());
230 colorPair->set(Visited, std::move(interpolableColor)); 235 colorPair->set(Visited, std::move(interpolableColor));
231 return InterpolationValue(std::move(colorPair)); 236 return InterpolationValue(std::move(colorPair));
232 } 237 }
233 238
234 InterpolationValue CSSColorInterpolationType::convertStyleColorPair( 239 InterpolationValue CSSColorInterpolationType::convertStyleColorPair(
235 const StyleColor& unvisitedColor, 240 const OptionalStyleColor& unvisitedColor,
236 const StyleColor& visitedColor) const { 241 const OptionalStyleColor& visitedColor) const {
242 if (unvisitedColor.isNull() || visitedColor.isNull()) {
243 return nullptr;
244 }
237 std::unique_ptr<InterpolableList> colorPair = 245 std::unique_ptr<InterpolableList> colorPair =
238 InterpolableList::create(InterpolableColorPairIndexCount); 246 InterpolableList::create(InterpolableColorPairIndexCount);
239 colorPair->set(Unvisited, createInterpolableColor(unvisitedColor)); 247 colorPair->set(Unvisited, createInterpolableColor(unvisitedColor.access()));
240 colorPair->set(Visited, createInterpolableColor(visitedColor)); 248 colorPair->set(Visited, createInterpolableColor(visitedColor.access()));
241 return InterpolationValue(std::move(colorPair)); 249 return InterpolationValue(std::move(colorPair));
242 } 250 }
243 251
244 InterpolationValue 252 InterpolationValue
245 CSSColorInterpolationType::maybeConvertStandardPropertyUnderlyingValue( 253 CSSColorInterpolationType::maybeConvertStandardPropertyUnderlyingValue(
246 const ComputedStyle& style) const { 254 const ComputedStyle& style) const {
247 return convertStyleColorPair( 255 return convertStyleColorPair(
248 ColorPropertyFunctions::getUnvisitedColor(cssProperty(), style), 256 ColorPropertyFunctions::getUnvisitedColor(cssProperty(), style),
249 ColorPropertyFunctions::getVisitedColor(cssProperty(), style)); 257 ColorPropertyFunctions::getVisitedColor(cssProperty(), style));
250 } 258 }
(...skipping 19 matching lines...) Expand all
270 const CSSValue* CSSColorInterpolationType::createCSSValue( 278 const CSSValue* CSSColorInterpolationType::createCSSValue(
271 const InterpolableValue& interpolableValue, 279 const InterpolableValue& interpolableValue,
272 const NonInterpolableValue*, 280 const NonInterpolableValue*,
273 const StyleResolverState& state) const { 281 const StyleResolverState& state) const {
274 const InterpolableList& colorPair = toInterpolableList(interpolableValue); 282 const InterpolableList& colorPair = toInterpolableList(interpolableValue);
275 Color color = resolveInterpolableColor(*colorPair.get(Unvisited), state); 283 Color color = resolveInterpolableColor(*colorPair.get(Unvisited), state);
276 return CSSColorValue::create(color.rgb()); 284 return CSSColorValue::create(color.rgb());
277 } 285 }
278 286
279 } // namespace blink 287 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698