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

Side by Side Diff: Source/core/animation/css/CSSAnimatableValueFactory.cpp

Issue 157523002: Fix incorrect animation for some values of background-position. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@backgroundposition
Patch Set: Created 6 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
« no previous file with comments | « LayoutTests/fast/css/background-position-animate-expected.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 case Contain: 168 case Contain:
169 case Cover: 169 case Cover:
170 case SizeNone: 170 case SizeNone:
171 return AnimatableUnknown::create(CSSPrimitiveValue::create(fillSize.type )); 171 return AnimatableUnknown::create(CSSPrimitiveValue::create(fillSize.type ));
172 default: 172 default:
173 ASSERT_NOT_REACHED(); 173 ASSERT_NOT_REACHED();
174 return 0; 174 return 0;
175 } 175 }
176 } 176 }
177 177
178 inline static PassRefPtr<AnimatableValue> createFromBackgroundPosition(const Len gth& length, bool originIsSet, BackgroundEdgeOrigin origin, const RenderStyle& s tyle)
179 {
180 if (!originIsSet || origin == LeftEdge || origin == TopEdge)
181 return createFromLength(length, style);
182
183 return AnimatableLength::create(CSSCalcValue::createExpressionNode(
184 CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(100, CSSPri mitiveValue::CSS_PERCENTAGE), true),
185 CSSCalcValue::createExpressionNode(length, 1),
alancutter (OOO until 2018) 2014/02/11 00:23:22 The zoom argument should be style.effectiveZoom().
186 CalcSubtract));
187 }
188
178 template<CSSPropertyID property> 189 template<CSSPropertyID property>
179 inline static PassRefPtr<AnimatableValue> createFromFillLayers(const FillLayer* fillLayer, const RenderStyle& style) 190 inline static PassRefPtr<AnimatableValue> createFromFillLayers(const FillLayer* fillLayer, const RenderStyle& style)
180 { 191 {
181 ASSERT(fillLayer); 192 ASSERT(fillLayer);
182 Vector<RefPtr<AnimatableValue> > values; 193 Vector<RefPtr<AnimatableValue> > values;
183 while (fillLayer) { 194 while (fillLayer) {
184 if (property == CSSPropertyBackgroundImage || property == CSSPropertyWeb kitMaskImage) { 195 if (property == CSSPropertyBackgroundImage || property == CSSPropertyWeb kitMaskImage) {
185 if (!fillLayer->isImageSet()) 196 if (!fillLayer->isImageSet())
186 break; 197 break;
187 values.append(createFromStyleImage(fillLayer->image())); 198 values.append(createFromStyleImage(fillLayer->image()));
188 } else if (property == CSSPropertyBackgroundPositionX || property == CSS PropertyWebkitMaskPositionX) { 199 } else if (property == CSSPropertyBackgroundPositionX || property == CSS PropertyWebkitMaskPositionX) {
189 if (!fillLayer->isXPositionSet()) 200 if (!fillLayer->isXPositionSet())
190 break; 201 break;
191 values.append(createFromLength(fillLayer->xPosition(), style)); 202 values.append(createFromBackgroundPosition(fillLayer->xPosition(), f illLayer->isBackgroundXOriginSet(), fillLayer->backgroundXOrigin(), style));
192 } else if (property == CSSPropertyBackgroundPositionY || property == CSS PropertyWebkitMaskPositionY) { 203 } else if (property == CSSPropertyBackgroundPositionY || property == CSS PropertyWebkitMaskPositionY) {
193 if (!fillLayer->isYPositionSet()) 204 if (!fillLayer->isYPositionSet())
194 break; 205 break;
195 values.append(createFromLength(fillLayer->yPosition(), style)); 206 values.append(createFromBackgroundPosition(fillLayer->yPosition(), f illLayer->isBackgroundYOriginSet(), fillLayer->backgroundYOrigin(), style));
196 } else if (property == CSSPropertyBackgroundSize || property == CSSPrope rtyWebkitMaskSize) { 207 } else if (property == CSSPropertyBackgroundSize || property == CSSPrope rtyWebkitMaskSize) {
197 if (!fillLayer->isSizeSet()) 208 if (!fillLayer->isSizeSet())
198 break; 209 break;
199 values.append(createFromFillSize(fillLayer->size(), style)); 210 values.append(createFromFillSize(fillLayer->size(), style));
200 } else { 211 } else {
201 ASSERT_NOT_REACHED(); 212 ASSERT_NOT_REACHED();
202 } 213 }
203 fillLayer = fillLayer->next(); 214 fillLayer = fillLayer->next();
204 } 215 }
205 return AnimatableRepeatable::create(values); 216 return AnimatableRepeatable::create(values);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 case CSSPropertyZoom: 460 case CSSPropertyZoom:
450 return createFromDouble(style.zoom()); 461 return createFromDouble(style.zoom());
451 default: 462 default:
452 ASSERT_NOT_REACHED(); 463 ASSERT_NOT_REACHED();
453 // This return value is to avoid a release crash if possible. 464 // This return value is to avoid a release crash if possible.
454 return AnimatableUnknown::create(0); 465 return AnimatableUnknown::create(0);
455 } 466 }
456 } 467 }
457 468
458 } // namespace WebCore 469 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/fast/css/background-position-animate-expected.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698