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

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

Issue 2537373005: [css-ui] Make caret-color animatable (Closed)
Patch Set: Apply suggested changes Created 4 years 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 currentColorGetter(CSSPropertyWebkitTextFillColor, *state.style(),
126 currentColorGetter(CSSPropertyWebkitTextFillColor, *state.style()); 126 currentStyleColor);
127 }
127 if (currentStyleColor.isCurrentColor()) 128 if (currentStyleColor.isCurrentColor())
128 currentStyleColor = currentColorGetter(CSSPropertyColor, *state.style()); 129 currentColorGetter(CSSPropertyColor, *state.style(), currentStyleColor);
129 addPremultipliedColor(red, green, blue, alpha, currentcolorFraction, 130 addPremultipliedColor(red, green, blue, alpha, currentcolorFraction,
130 currentStyleColor.getColor()); 131 currentStyleColor.getColor());
131 } 132 }
132 const TextLinkColors& colors = state.document().textLinkColors(); 133 const TextLinkColors& colors = state.document().textLinkColors();
133 if (double webkitActivelinkFraction = 134 if (double webkitActivelinkFraction =
134 toInterpolableNumber(list.get(WebkitActivelink))->value()) 135 toInterpolableNumber(list.get(WebkitActivelink))->value())
135 addPremultipliedColor(red, green, blue, alpha, webkitActivelinkFraction, 136 addPremultipliedColor(red, green, blue, alpha, webkitActivelinkFraction,
136 colors.activeLinkColor()); 137 colors.activeLinkColor());
137 if (double webkitLinkFraction = 138 if (double webkitLinkFraction =
138 toInterpolableNumber(list.get(WebkitLink))->value()) 139 toInterpolableNumber(list.get(WebkitLink))->value())
(...skipping 20 matching lines...) Expand all
159 const StyleColor& color) { 160 const StyleColor& color) {
160 return WTF::wrapUnique(new InheritedColorChecker(property, color)); 161 return WTF::wrapUnique(new InheritedColorChecker(property, color));
161 } 162 }
162 163
163 private: 164 private:
164 InheritedColorChecker(CSSPropertyID property, const StyleColor& color) 165 InheritedColorChecker(CSSPropertyID property, const StyleColor& color)
165 : m_property(property), m_color(color) {} 166 : m_property(property), m_color(color) {}
166 167
167 bool isValid(const InterpolationEnvironment& environment, 168 bool isValid(const InterpolationEnvironment& environment,
168 const InterpolationValue& underlying) const final { 169 const InterpolationValue& underlying) const final {
169 return m_color == ColorPropertyFunctions::getUnvisitedColor( 170 StyleColor unvisitedColor;
170 m_property, *environment.state().parentStyle()); 171 if (!ColorPropertyFunctions::getUnvisitedColor(
172 m_property, *environment.state().parentStyle(), unvisitedColor))
173 return false;
174 return m_color == unvisitedColor;
171 } 175 }
172 176
173 const CSSPropertyID m_property; 177 const CSSPropertyID m_property;
174 const StyleColor m_color; 178 const StyleColor 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 const StyleColor initialColor = 191 StyleColor initialColor;
188 ColorPropertyFunctions::getInitialColor(cssProperty()); 192 if (ColorPropertyFunctions::getInitialColor(cssProperty(), initialColor))
189 return convertStyleColorPair(initialColor, initialColor); 193 return convertStyleColorPair(initialColor, initialColor);
194 return nullptr;
190 } 195 }
191 196
192 InterpolationValue CSSColorInterpolationType::maybeConvertInherit( 197 InterpolationValue CSSColorInterpolationType::maybeConvertInherit(
193 const StyleResolverState& state, 198 const StyleResolverState& state,
194 ConversionCheckers& conversionCheckers) const { 199 ConversionCheckers& conversionCheckers) const {
195 if (!state.parentStyle()) 200 if (!state.parentStyle())
196 return nullptr; 201 return nullptr;
197 // Visited color can never explicitly inherit from parent visited color so 202 // Visited color can never explicitly inherit from parent visited color so
198 // only use the unvisited color. 203 // only use the unvisited color.
199 const StyleColor inheritedColor = ColorPropertyFunctions::getUnvisitedColor( 204 StyleColor inheritedColor;
200 cssProperty(), *state.parentStyle()); 205 if (!ColorPropertyFunctions::getUnvisitedColor(
206 cssProperty(), *state.parentStyle(), inheritedColor))
207 return nullptr;
201 conversionCheckers.push_back( 208 conversionCheckers.push_back(
202 InheritedColorChecker::create(cssProperty(), inheritedColor)); 209 InheritedColorChecker::create(cssProperty(), inheritedColor));
203 return convertStyleColorPair(inheritedColor, inheritedColor); 210 return convertStyleColorPair(inheritedColor, inheritedColor);
204 } 211 }
205 212
206 enum InterpolableColorPairIndex : unsigned { 213 enum InterpolableColorPairIndex : unsigned {
207 Unvisited, 214 Unvisited,
208 Visited, 215 Visited,
209 InterpolableColorPairIndexCount, 216 InterpolableColorPairIndexCount,
210 }; 217 };
(...skipping 22 matching lines...) Expand all
233 const StyleColor& visitedColor) const { 240 const StyleColor& visitedColor) const {
234 std::unique_ptr<InterpolableList> colorPair = 241 std::unique_ptr<InterpolableList> colorPair =
235 InterpolableList::create(InterpolableColorPairIndexCount); 242 InterpolableList::create(InterpolableColorPairIndexCount);
236 colorPair->set(Unvisited, createInterpolableColor(unvisitedColor)); 243 colorPair->set(Unvisited, createInterpolableColor(unvisitedColor));
237 colorPair->set(Visited, createInterpolableColor(visitedColor)); 244 colorPair->set(Visited, createInterpolableColor(visitedColor));
238 return InterpolationValue(std::move(colorPair)); 245 return InterpolationValue(std::move(colorPair));
239 } 246 }
240 247
241 InterpolationValue CSSColorInterpolationType::maybeConvertUnderlyingValue( 248 InterpolationValue CSSColorInterpolationType::maybeConvertUnderlyingValue(
242 const InterpolationEnvironment& environment) const { 249 const InterpolationEnvironment& environment) const {
243 return convertStyleColorPair( 250 StyleColor unvisitedColor;
244 ColorPropertyFunctions::getUnvisitedColor(cssProperty(), 251 if (!ColorPropertyFunctions::getUnvisitedColor(
245 *environment.state().style()), 252 cssProperty(), *environment.state().style(), unvisitedColor))
246 ColorPropertyFunctions::getVisitedColor(cssProperty(), 253 return nullptr;
247 *environment.state().style())); 254 StyleColor visitedColor;
255 if (!ColorPropertyFunctions::getVisitedColor(
256 cssProperty(), *environment.state().style(), visitedColor))
257 return nullptr;
alancutter (OOO until 2018) 2016/12/21 00:49:05 I see a problem here. If either the visited or unv
Manuel Rego 2016/12/21 13:14:38 Wow, it's clear this is getting more complex. :-)
258
259 return convertStyleColorPair(unvisitedColor, visitedColor);
248 } 260 }
249 261
250 void CSSColorInterpolationType::apply( 262 void CSSColorInterpolationType::apply(
251 const InterpolableValue& interpolableValue, 263 const InterpolableValue& interpolableValue,
252 const NonInterpolableValue*, 264 const NonInterpolableValue*,
253 InterpolationEnvironment& environment) const { 265 InterpolationEnvironment& environment) const {
254 const InterpolableList& colorPair = toInterpolableList(interpolableValue); 266 const InterpolableList& colorPair = toInterpolableList(interpolableValue);
255 DCHECK_EQ(colorPair.length(), InterpolableColorPairIndexCount); 267 DCHECK_EQ(colorPair.length(), InterpolableColorPairIndexCount);
256 ColorPropertyFunctions::setUnvisitedColor( 268 ColorPropertyFunctions::setUnvisitedColor(
257 cssProperty(), *environment.state().style(), 269 cssProperty(), *environment.state().style(),
258 resolveInterpolableColor( 270 resolveInterpolableColor(
259 *colorPair.get(Unvisited), environment.state(), false, 271 *colorPair.get(Unvisited), environment.state(), false,
260 cssProperty() == CSSPropertyTextDecorationColor)); 272 cssProperty() == CSSPropertyTextDecorationColor));
261 ColorPropertyFunctions::setVisitedColor( 273 ColorPropertyFunctions::setVisitedColor(
262 cssProperty(), *environment.state().style(), 274 cssProperty(), *environment.state().style(),
263 resolveInterpolableColor( 275 resolveInterpolableColor(
264 *colorPair.get(Visited), environment.state(), true, 276 *colorPair.get(Visited), environment.state(), true,
265 cssProperty() == CSSPropertyTextDecorationColor)); 277 cssProperty() == CSSPropertyTextDecorationColor));
266 } 278 }
267 279
268 } // namespace blink 280 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698