Changeset 201715 in webkit
- Timestamp:
- Jun 6, 2016 10:56:33 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 9 deleted
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r201714 r201715 1 2016-06-06 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r201706. 4 https://bugs.webkit.org/show_bug.cgi?id=158427 5 6 This change broke the Yosemite build and its LayoutTest is 7 failing on Mac and iOS testers (Requested by ryanhaddad on 8 #webkit). 9 10 Reverted changeset: 11 12 "Add experimental support for spring based CSS animations" 13 https://bugs.webkit.org/show_bug.cgi?id=158403 14 http://trac.webkit.org/changeset/201706 15 1 16 2016-06-03 Oliver Hunt <oliver@apple.com> 2 17 -
trunk/Source/WebCore/ChangeLog
r201709 r201715 1 2016-06-06 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r201706. 4 https://bugs.webkit.org/show_bug.cgi?id=158427 5 6 This change broke the Yosemite build and its LayoutTest is 7 failing on Mac and iOS testers (Requested by ryanhaddad on 8 #webkit). 9 10 Reverted changeset: 11 12 "Add experimental support for spring based CSS animations" 13 https://bugs.webkit.org/show_bug.cgi?id=158403 14 http://trac.webkit.org/changeset/201706 15 1 16 2016-06-06 Javier Fernandez <jfernandez@igalia.com> 2 17 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r201706 r201715 2765 2765 7C7941E41C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C7941E21C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm */; }; 2766 2766 7C7941E51C56C29300A4C58E /* DataDetectorsCoreSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7941E31C56C29300A4C58E /* DataDetectorsCoreSoftLink.h */; }; 2767 7C83DE861D04CC5D00FEBCF3 /* SpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */; };2768 2767 7C91A38F1B498ABE003F9EFA /* JSNodeOrString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C91A38D1B498ABE003F9EFA /* JSNodeOrString.cpp */; }; 2769 2768 7C91A3901B498ABE003F9EFA /* JSNodeOrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C91A38E1B498ABE003F9EFA /* JSNodeOrString.h */; }; … … 10432 10431 7C7941E21C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataDetectorsCoreSoftLink.mm; sourceTree = "<group>"; }; 10433 10432 7C7941E31C56C29300A4C58E /* DataDetectorsCoreSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataDetectorsCoreSoftLink.h; sourceTree = "<group>"; }; 10434 7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpringSolver.h; sourceTree = "<group>"; };10435 10433 7C91A38D1B498ABE003F9EFA /* JSNodeOrString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNodeOrString.cpp; sourceTree = "<group>"; }; 10436 10434 7C91A38E1B498ABE003F9EFA /* JSNodeOrString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNodeOrString.h; sourceTree = "<group>"; }; … … 22067 22065 CD641EB21818F5ED00EE4C41 /* SourceBufferPrivate.h */, 22068 22066 CDC8B5AC1804AE5D0016E685 /* SourceBufferPrivateClient.h */, 22069 7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */,22070 22067 B23540F00D00782E002382FA /* StringTruncator.cpp */, 22071 22068 B23540F10D00782E002382FA /* StringTruncator.h */, … … 27844 27841 BC14028B0E83680800319717 /* ScrollbarThemeComposite.h in Headers */, 27845 27842 44C991860F3D1EBE00586670 /* ScrollbarThemeIOS.h in Headers */, 27846 7C83DE861D04CC5D00FEBCF3 /* SpringSolver.h in Headers */,27847 27843 BC8B853E0E7C7F1100AB6984 /* ScrollbarThemeMac.h in Headers */, 27848 27844 0FE71406142170B800DB33BA /* ScrollbarThemeMock.h in Headers */, -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r201706 r201715 1499 1499 switch (timingFunction->type()) { 1500 1500 case TimingFunction::CubicBezierFunction: { 1501 auto& function = *static_cast<const CubicBezierTimingFunction*>(timingFunction);1502 if ( function.timingFunctionPreset() != CubicBezierTimingFunction::Custom) {1501 const CubicBezierTimingFunction* bezierTimingFunction = static_cast<const CubicBezierTimingFunction*>(timingFunction); 1502 if (bezierTimingFunction->timingFunctionPreset() != CubicBezierTimingFunction::Custom) { 1503 1503 CSSValueID valueId = CSSValueInvalid; 1504 switch ( function.timingFunctionPreset()) {1504 switch (bezierTimingFunction->timingFunctionPreset()) { 1505 1505 case CubicBezierTimingFunction::Ease: 1506 1506 valueId = CSSValueEase; … … 1513 1513 break; 1514 1514 default: 1515 ASSERT( function.timingFunctionPreset() == CubicBezierTimingFunction::EaseInOut);1515 ASSERT(bezierTimingFunction->timingFunctionPreset() == CubicBezierTimingFunction::EaseInOut); 1516 1516 valueId = CSSValueEaseInOut; 1517 1517 break; … … 1519 1519 return CSSValuePool::singleton().createIdentifierValue(valueId); 1520 1520 } 1521 return CSSCubicBezierTimingFunctionValue::create( function.x1(), function.y1(), function.x2(), function.y2());1521 return CSSCubicBezierTimingFunctionValue::create(bezierTimingFunction->x1(), bezierTimingFunction->y1(), bezierTimingFunction->x2(), bezierTimingFunction->y2()); 1522 1522 } 1523 1523 case TimingFunction::StepsFunction: { 1524 auto& function = *static_cast<const StepsTimingFunction*>(timingFunction); 1525 return CSSStepsTimingFunctionValue::create(function.numberOfSteps(), function.stepAtStart()); 1526 } 1527 case TimingFunction::SpringFunction: { 1528 auto& function = *static_cast<const SpringTimingFunction*>(timingFunction); 1529 return CSSSpringTimingFunctionValue::create(function.mass(), function.stiffness(), function.damping(), function.initialVelocity()); 1524 const StepsTimingFunction* stepsTimingFunction = static_cast<const StepsTimingFunction*>(timingFunction); 1525 return CSSStepsTimingFunctionValue::create(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart()); 1530 1526 } 1531 1527 default: -
trunk/Source/WebCore/css/CSSParser.cpp
r201706 r201715 271 271 textAutosizingEnabled = settings->textAutosizingEnabled(); 272 272 #endif 273 springTimingFunctionEnabled = settings->springTimingFunctionEnabled();274 273 } 275 274 … … 293 292 && a.needsSiteSpecificQuirks == b.needsSiteSpecificQuirks 294 293 && a.enforcesCSSMIMETypeInNoQuirksMode == b.enforcesCSSMIMETypeInNoQuirksMode 295 && a.useLegacyBackgroundSizeShorthandBehavior == b.useLegacyBackgroundSizeShorthandBehavior 296 && a.springTimingFunctionEnabled == b.springTimingFunctionEnabled; 294 && a.useLegacyBackgroundSizeShorthandBehavior == b.useLegacyBackgroundSizeShorthandBehavior; 297 295 } 298 296 … … 5160 5158 } 5161 5159 5162 bool CSSParser::isSpringTimingFunctionEnabled() const 5163 { 5164 return m_context.springTimingFunctionEnabled; 5165 } 5166 5167 Optional<double> CSSParser::parseCubicBezierTimingFunctionValue(CSSParserValueList& args) 5160 bool CSSParser::parseCubicBezierTimingFunctionValue(CSSParserValueList& args, double& result) 5168 5161 { 5169 5162 ValueWithCalculation argumentWithCalculation(*args.current()); 5170 5163 if (!validateUnit(argumentWithCalculation, FNumber)) 5171 return Nullopt;5172 Optional<double>result = parsedDouble(argumentWithCalculation);5164 return false; 5165 result = parsedDouble(argumentWithCalculation); 5173 5166 CSSParserValue* nextValue = args.next(); 5174 5167 if (!nextValue) { 5175 5168 // The last number in the function has no comma after it, so we're done. 5176 return result;5169 return true; 5177 5170 } 5178 5171 if (!isComma(nextValue)) 5179 return Nullopt;5172 return false; 5180 5173 args.next(); 5181 return result; 5182 } 5183 5184 Optional<double> CSSParser::parseSpringTimingFunctionValue(CSSParserValueList& args) 5185 { 5186 ValueWithCalculation argumentWithCalculation(*args.current()); 5187 if (!validateUnit(argumentWithCalculation, FNumber)) 5188 return Nullopt; 5189 Optional<double> result = parsedDouble(argumentWithCalculation); 5190 args.next(); 5191 return result; 5174 return true; 5192 5175 } 5193 5176 … … 5237 5220 5238 5221 if (equalLettersIgnoringASCIICase(value.function->name, "cubic-bezier(")) { 5239 // For cubic bezier, 4 values must be specified (comma-separated).5222 // For cubic bezier, 4 values must be specified. 5240 5223 if (!args || args->size() != 7) 5241 5224 return nullptr; 5242 5225 5243 5226 // There are two points specified. The x values must be between 0 and 1 but the y values can exceed this range. 5244 5245 auto x1 = parseCubicBezierTimingFunctionValue(*args); 5246 if (! x1)5227 double x1, y1, x2, y2; 5228 5229 if (!parseCubicBezierTimingFunctionValue(*args, x1)) 5247 5230 return nullptr; 5248 if (x1 .value() < 0 || x1.value()> 1)5231 if (x1 < 0 || x1 > 1) 5249 5232 return nullptr; 5250 5251 auto y1 = parseCubicBezierTimingFunctionValue(*args); 5252 if (!y1) 5233 if (!parseCubicBezierTimingFunctionValue(*args, y1)) 5253 5234 return nullptr; 5254 5255 auto x2 = parseCubicBezierTimingFunctionValue(*args); 5256 if (!x2) 5235 if (!parseCubicBezierTimingFunctionValue(*args, x2)) 5257 5236 return nullptr; 5258 if (x2 .value() < 0 || x2.value()> 1)5237 if (x2 < 0 || x2 > 1) 5259 5238 return nullptr; 5260 5261 auto y2 = parseCubicBezierTimingFunctionValue(*args); 5262 if (!y2) 5239 if (!parseCubicBezierTimingFunctionValue(*args, y2)) 5263 5240 return nullptr; 5264 5241 5265 return CSSCubicBezierTimingFunctionValue::create(x1.value(), y1.value(), x2.value(), y2.value()); 5266 } 5267 5268 if (isSpringTimingFunctionEnabled() && equalLettersIgnoringASCIICase(value.function->name, "spring(")) { 5269 // For a spring, 4 values must be specified (space-separated). 5270 if (!args || args->size() != 4) 5271 return nullptr; 5272 5273 // Mass must be greater than 0. 5274 auto mass = parseSpringTimingFunctionValue(*args); 5275 if (!mass) 5276 return nullptr; 5277 if (mass.value() <= 0) 5278 return nullptr; 5279 5280 // Stiffness must be greater than 0. 5281 auto stiffness = parseSpringTimingFunctionValue(*args); 5282 if (!stiffness) 5283 return nullptr; 5284 if (stiffness.value() <= 0) 5285 return nullptr; 5286 5287 // Damping coefficient must be greater than or equal to 0. 5288 auto damping = parseSpringTimingFunctionValue(*args); 5289 if (!damping) 5290 return nullptr; 5291 if (damping.value() < 0) 5292 return nullptr; 5293 5294 // Initial velocity may have any value. 5295 auto initialVelocity = parseSpringTimingFunctionValue(*args); 5296 if (!initialVelocity) 5297 return nullptr; 5298 5299 return CSSSpringTimingFunctionValue::create(mass.value(), stiffness.value(), damping.value(), initialVelocity.value()); 5242 return CSSCubicBezierTimingFunctionValue::create(x1, y1, x2, y2); 5300 5243 } 5301 5244 -
trunk/Source/WebCore/css/CSSParser.h
r201706 r201715 215 215 216 216 bool parseTransformOriginShorthand(RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSValue>&); 217 Optional<double> parseCubicBezierTimingFunctionValue(CSSParserValueList&); 218 Optional<double> parseSpringTimingFunctionValue(CSSParserValueList&); 217 bool parseCubicBezierTimingFunctionValue(CSSParserValueList& args, double& result); 219 218 bool parseAnimationProperty(CSSPropertyID, RefPtr<CSSValue>&, AnimationParseContext&); 220 219 bool parseTransitionShorthand(CSSPropertyID, bool important); 221 220 bool parseAnimationShorthand(CSSPropertyID, bool important); 222 223 bool isSpringTimingFunctionEnabled() const;224 221 225 222 RefPtr<CSSPrimitiveValue> parseColumnWidth(); -
trunk/Source/WebCore/css/CSSParserMode.h
r201706 r201715 74 74 bool enforcesCSSMIMETypeInNoQuirksMode { true }; 75 75 bool useLegacyBackgroundSizeShorthandBehavior { false }; 76 bool springTimingFunctionEnabled { false };77 76 }; 78 77 -
trunk/Source/WebCore/css/CSSTimingFunctionValue.cpp
r201706 r201715 1 1 /* 2 * Copyright (C) 2007, 2013 , 2016Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 27 27 #include "CSSTimingFunctionValue.h" 28 28 29 #include <wtf/text/ StringBuilder.h>29 #include <wtf/text/WTFString.h> 30 30 31 31 namespace WebCore { … … 33 33 String CSSCubicBezierTimingFunctionValue::customCSSText() const 34 34 { 35 StringBuilder builder; 36 builder.appendLiteral("cubic-bezier("); 37 builder.appendNumber(m_x1); 38 builder.appendLiteral(", "); 39 builder.appendNumber(m_y1); 40 builder.appendLiteral(", "); 41 builder.appendNumber(m_x2); 42 builder.appendLiteral(", "); 43 builder.appendNumber(m_y2); 44 builder.append(')'); 45 return builder.toString(); 35 return "cubic-bezier(" 36 + String::number(m_x1) + ", " 37 + String::number(m_y1) + ", " 38 + String::number(m_x2) + ", " 39 + String::number(m_y2) + ')'; 46 40 } 47 41 … … 51 45 } 52 46 47 53 48 String CSSStepsTimingFunctionValue::customCSSText() const 54 49 { 55 StringBuilder builder; 56 builder.appendLiteral("steps("); 57 builder.appendNumber(m_steps); 58 if (m_stepAtStart) 59 builder.appendLiteral(", start)"); 60 else 61 builder.appendLiteral(", end)"); 62 return builder.toString(); 50 return "steps(" + String::number(m_steps) + ", " + (m_stepAtStart ? "start" : "end") + ')'; 63 51 } 64 52 … … 68 56 } 69 57 70 String CSSSpringTimingFunctionValue::customCSSText() const71 {72 StringBuilder builder;73 builder.appendLiteral("spring(");74 builder.appendNumber(m_mass);75 builder.append(' ');76 builder.appendNumber(m_stiffness);77 builder.append(' ');78 builder.appendNumber(m_damping);79 builder.append(' ');80 builder.appendNumber(m_initialVelocity);81 builder.append(')');82 return builder.toString();83 }84 85 bool CSSSpringTimingFunctionValue::equals(const CSSSpringTimingFunctionValue& other) const86 {87 return m_mass == other.m_mass && m_stiffness == other.m_stiffness && m_damping == other.m_damping && m_initialVelocity == other.m_initialVelocity;88 }89 90 91 58 } // namespace WebCore -
trunk/Source/WebCore/css/CSSTimingFunctionValue.h
r201706 r201715 1 1 /* 2 * Copyright (C) 2007, 2008, 2012 , 2016Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2008, 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 90 90 }; 91 91 92 class CSSSpringTimingFunctionValue : public CSSValue {93 public:94 static Ref<CSSSpringTimingFunctionValue> create(double mass, double stiffness, double damping, double initialVelocity)95 {96 return adoptRef(*new CSSSpringTimingFunctionValue(mass, stiffness, damping, initialVelocity));97 }98 99 double mass() const { return m_mass; }100 double stiffness() const { return m_stiffness; }101 double damping() const { return m_damping; }102 double initialVelocity() const { return m_initialVelocity; }103 104 String customCSSText() const;105 106 bool equals(const CSSSpringTimingFunctionValue&) const;107 108 private:109 CSSSpringTimingFunctionValue(double mass, double stiffness, double damping, double initialVelocity)110 : CSSValue(SpringTimingFunctionClass)111 , m_mass(mass)112 , m_stiffness(stiffness)113 , m_damping(damping)114 , m_initialVelocity(initialVelocity)115 {116 }117 118 double m_mass;119 double m_stiffness;120 double m_damping;121 double m_initialVelocity;122 };123 124 92 } // namespace WebCore 125 93 126 94 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSCubicBezierTimingFunctionValue, isCubicBezierTimingFunctionValue()) 127 95 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSStepsTimingFunctionValue, isStepsTimingFunctionValue()) 128 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSSpringTimingFunctionValue, isSpringTimingFunctionValue())129 96 130 97 #endif // CSSTimingFunctionValue_h -
trunk/Source/WebCore/css/CSSToStyleMap.cpp
r201706 r201715 511 511 auto& stepsTimingFunction = downcast<CSSStepsTimingFunctionValue>(value); 512 512 animation.setTimingFunction(StepsTimingFunction::create(stepsTimingFunction.numberOfSteps(), stepsTimingFunction.stepAtStart())); 513 } else if (is<CSSSpringTimingFunctionValue>(value)) {514 auto& springTimingFunction = downcast<CSSSpringTimingFunctionValue>(value);515 animation.setTimingFunction(SpringTimingFunction::create(springTimingFunction.mass(), springTimingFunction.stiffness(), springTimingFunction.damping(), springTimingFunction.initialVelocity()));516 513 } 517 514 } -
trunk/Source/WebCore/css/CSSValue.cpp
r201706 r201715 227 227 case StepsTimingFunctionClass: 228 228 return compareCSSValues<CSSStepsTimingFunctionValue>(*this, other); 229 case SpringTimingFunctionClass:230 return compareCSSValues<CSSSpringTimingFunctionValue>(*this, other);231 229 case UnicodeRangeClass: 232 230 return compareCSSValues<CSSUnicodeRangeValue>(*this, other); … … 335 333 case StepsTimingFunctionClass: 336 334 return downcast<CSSStepsTimingFunctionValue>(*this).customCSSText(); 337 case SpringTimingFunctionClass:338 return downcast<CSSSpringTimingFunctionValue>(*this).customCSSText();339 335 case UnicodeRangeClass: 340 336 return downcast<CSSUnicodeRangeValue>(*this).customCSSText(); … … 461 457 case StepsTimingFunctionClass: 462 458 delete downcast<CSSStepsTimingFunctionValue>(this); 463 return;464 case SpringTimingFunctionClass:465 delete downcast<CSSSpringTimingFunctionValue>(this);466 459 return; 467 460 case UnicodeRangeClass: -
trunk/Source/WebCore/css/CSSValue.h
r201706 r201715 105 105 bool isCubicBezierTimingFunctionValue() const { return m_classType == CubicBezierTimingFunctionClass; } 106 106 bool isStepsTimingFunctionValue() const { return m_classType == StepsTimingFunctionClass; } 107 bool isSpringTimingFunctionValue() const { return m_classType == SpringTimingFunctionClass; }108 107 bool isWebKitCSSTransformValue() const { return m_classType == WebKitCSSTransformClass; } 109 108 bool isLineBoxContainValue() const { return m_classType == LineBoxContainClass; } … … 163 162 CubicBezierTimingFunctionClass, 164 163 StepsTimingFunctionClass, 165 SpringTimingFunctionClass,166 164 167 165 // Other class types. -
trunk/Source/WebCore/page/Settings.in
r201706 r201715 268 268 269 269 shouldConvertInvalidURLsToBlank initial=true 270 271 springTimingFunctionEnabled initial=false -
trunk/Source/WebCore/page/animation/AnimationBase.cpp
r201706 r201715 42 42 #include "RenderStyle.h" 43 43 #include "RenderView.h" 44 #include "SpringSolver.h"45 44 #include "UnitBezier.h" 46 45 #include <algorithm> … … 70 69 return std::min(1.0, (floor(numSteps * t) + 1) / numSteps); 71 70 return floor(numSteps * t) / numSteps; 72 }73 74 static inline double solveSpringFunction(double mass, double stiffness, double damping, double initialVelocity, double t, double duration)75 {76 SpringSolver solver(mass, stiffness, damping, initialVelocity);77 return solver.solve(t * duration);78 71 } 79 72 … … 656 649 switch (timingFunction->type()) { 657 650 case TimingFunction::CubicBezierFunction: { 658 auto& function = *static_cast<const CubicBezierTimingFunction*>(timingFunction);659 return solveCubicBezierFunction(function .x1(), function.y1(), function.x2(), function.y2(), fractionalTime, m_animation->duration());651 const CubicBezierTimingFunction* function = static_cast<const CubicBezierTimingFunction*>(timingFunction); 652 return solveCubicBezierFunction(function->x1(), function->y1(), function->x2(), function->y2(), fractionalTime, m_animation->duration()); 660 653 } 661 654 case TimingFunction::StepsFunction: { 662 auto& function = *static_cast<const StepsTimingFunction*>(timingFunction); 663 return solveStepsFunction(function.numberOfSteps(), function.stepAtStart(), fractionalTime); 664 } 665 case TimingFunction::SpringFunction: { 666 auto& function = *static_cast<const SpringTimingFunction*>(timingFunction); 667 return solveSpringFunction(function.mass(), function.stiffness(), function.damping(), function.initialVelocity(), fractionalTime, m_animation->duration()); 655 const StepsTimingFunction* stepsTimingFunction = static_cast<const StepsTimingFunction*>(timingFunction); 656 return solveStepsFunction(stepsTimingFunction->numberOfSteps(), stepsTimingFunction->stepAtStart(), fractionalTime); 668 657 } 669 658 case TimingFunction::LinearFunction: -
trunk/Source/WebCore/platform/animation/TimingFunction.cpp
r201706 r201715 38 38 break; 39 39 case TimingFunction::CubicBezierFunction: { 40 auto& function = static_cast<const CubicBezierTimingFunction&>(timingFunction);41 ts << "cubic-bezier(" << function.x1() << ", " << function.y1() << ", " << function.x2() << ", " << function.y2() << ")";40 const CubicBezierTimingFunction& cubicBezierFunction = static_cast<const CubicBezierTimingFunction&>(timingFunction); 41 ts << "cubic-bezier(" << cubicBezierFunction.x1() << ", " << cubicBezierFunction.y1() << ", " << cubicBezierFunction.x2() << ", " << cubicBezierFunction.y2() << ")"; 42 42 break; 43 43 } 44 44 case TimingFunction::StepsFunction: { 45 auto& function = static_cast<const StepsTimingFunction&>(timingFunction); 46 ts << "steps(" << function.numberOfSteps() << ", " << (function.stepAtStart() ? "start" : "end") << ")"; 47 break; 48 } 49 case TimingFunction::SpringFunction: { 50 auto& function = static_cast<const SpringTimingFunction&>(timingFunction); 51 ts << "spring(" << function.mass() << " " << function.stiffness() << " " << function.damping() << " " << function.initialVelocity() << ")"; 45 const StepsTimingFunction& stepsFunction = static_cast<const StepsTimingFunction&>(timingFunction); 46 ts << "steps(" << stepsFunction.numberOfSteps() << ", " << (stepsFunction.stepAtStart() ? "start" : "end") << ")"; 52 47 break; 53 48 } -
trunk/Source/WebCore/platform/animation/TimingFunction.h
r201706 r201715 37 37 38 38 enum TimingFunctionType { 39 LinearFunction, CubicBezierFunction, StepsFunction , SpringFunction39 LinearFunction, CubicBezierFunction, StepsFunction 40 40 }; 41 41 … … 47 47 bool isCubicBezierTimingFunction() const { return m_type == CubicBezierFunction; } 48 48 bool isStepsTimingFunction() const { return m_type == StepsFunction; } 49 bool isSpringTimingFunction() const { return m_type == SpringFunction; }50 49 51 50 virtual bool operator==(const TimingFunction& other) = 0; … … 60 59 }; 61 60 62 class LinearTimingFunction final: public TimingFunction {61 class LinearTimingFunction : public TimingFunction { 63 62 public: 64 63 static PassRefPtr<LinearTimingFunction> create() … … 86 85 }; 87 86 88 class CubicBezierTimingFunction final: public TimingFunction {87 class CubicBezierTimingFunction : public TimingFunction { 89 88 public: 90 89 enum TimingFunctionPreset { … … 187 186 }; 188 187 189 class StepsTimingFunction final: public TimingFunction {188 class StepsTimingFunction : public TimingFunction { 190 189 public: 191 190 … … 233 232 }; 234 233 235 class SpringTimingFunction final : public TimingFunction {236 public:237 static Ref<SpringTimingFunction> create(double mass, double stiffness, double damping, double initialVelocity)238 {239 return adoptRef(*new SpringTimingFunction(mass, stiffness, damping, initialVelocity));240 }241 242 static Ref<SpringTimingFunction> create()243 {244 // This create() function should only be used by the argument decoders, and it is expected that245 // real values will be filled in using setValues().246 return create(0, 0, 0, 0);247 }248 249 bool operator==(const TimingFunction& other) override250 {251 if (other.isSpringTimingFunction()) {252 const SpringTimingFunction& otherString = *static_cast<const SpringTimingFunction*>(&other);253 254 return m_mass == otherString.m_mass && m_stiffness == otherString.m_stiffness && m_damping == otherString.m_damping && m_initialVelocity == otherString.m_initialVelocity;255 }256 return false;257 }258 259 double mass() const { return m_mass; }260 double stiffness() const { return m_stiffness; }261 double damping() const { return m_damping; }262 double initialVelocity() const { return m_initialVelocity; }263 264 void setValues(double mass, double stiffness, double damping, double initialVelocity)265 {266 m_mass = mass;267 m_stiffness = stiffness;268 m_damping = damping;269 m_initialVelocity = initialVelocity;270 }271 272 private:273 explicit SpringTimingFunction(double mass, double stiffness, double damping, double initialVelocity)274 : TimingFunction(SpringFunction)275 , m_mass(mass)276 , m_stiffness(stiffness)277 , m_damping(damping)278 , m_initialVelocity(initialVelocity)279 {280 }281 282 PassRefPtr<TimingFunction> clone() const override283 {284 return adoptRef(new SpringTimingFunction(m_mass, m_stiffness, m_damping, m_initialVelocity));285 }286 287 double m_mass;288 double m_stiffness;289 double m_damping;290 double m_initialVelocity;291 };292 293 234 class TextStream; 294 235 WEBCORE_EXPORT TextStream& operator<<(TextStream&, const TimingFunction&); -
trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
r201706 r201715 2744 2744 valuesOK = setAnimationKeyframes(valueList, animation, caAnimation.get()); 2745 2745 } else { 2746 if (animation->timingFunction()->isSpringTimingFunction()) 2747 caAnimation = createSpringAnimation(animation, propertyIdToString(valueList.property()), additive); 2748 else 2749 caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive); 2746 caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive); 2750 2747 valuesOK = setAnimationEndpoints(valueList, animation, caAnimation.get()); 2751 2748 } … … 2771 2768 validMatrices = setTransformAnimationKeyframes(valueList, animation, caAnimation.get(), animationIndex, transformOp, isMatrixAnimation, boxSize); 2772 2769 } else { 2773 if (animation->timingFunction()->isSpringTimingFunction()) 2774 caAnimation = createSpringAnimation(animation, propertyIdToString(valueList.property()), additive); 2775 else 2776 caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive); 2770 caAnimation = createBasicAnimation(animation, propertyIdToString(valueList.property()), additive); 2777 2771 validMatrices = setTransformAnimationEndpoints(valueList, animation, caAnimation.get(), animationIndex, transformOp, isMatrixAnimation, boxSize); 2778 2772 } … … 2908 2902 } 2909 2903 2910 PassRefPtr<PlatformCAAnimation> 2904 PassRefPtr<PlatformCAAnimation>GraphicsLayerCA::createKeyframeAnimation(const Animation* anim, const String& keyPath, bool additive) 2911 2905 { 2912 2906 RefPtr<PlatformCAAnimation> keyframeAnim = createPlatformCAAnimation(PlatformCAAnimation::Keyframe, keyPath); 2913 2907 setupAnimation(keyframeAnim.get(), anim, additive); 2914 2908 return keyframeAnim; 2915 }2916 2917 RefPtr<PlatformCAAnimation> GraphicsLayerCA::createSpringAnimation(const Animation* anim, const String& keyPath, bool additive)2918 {2919 auto basicAnim = createPlatformCAAnimation(PlatformCAAnimation::Spring, keyPath);2920 setupAnimation(basicAnim.get(), anim, additive);2921 return basicAnim;2922 2909 } 2923 2910 -
trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
r201706 r201715 243 243 PassRefPtr<PlatformCAAnimation> createBasicAnimation(const Animation*, const String& keyPath, bool additive); 244 244 PassRefPtr<PlatformCAAnimation> createKeyframeAnimation(const Animation*, const String&, bool additive); 245 RefPtr<PlatformCAAnimation> createSpringAnimation(const Animation*, const String&, bool additive);246 245 void setupAnimation(PlatformCAAnimation*, const Animation*, bool additive); 247 246 -
trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.cpp
r201706 r201715 36 36 case PlatformCAAnimation::Basic: ts << "basic"; break; 37 37 case PlatformCAAnimation::Keyframe: ts << "keyframe"; break; 38 case PlatformCAAnimation::Spring: ts << "spring"; break;39 38 } 40 39 return ts; … … 71 70 } 72 71 73 bool PlatformCAAnimation::isBasicAnimation() const74 {75 return animationType() == Basic || animationType() == Spring;76 }77 78 72 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h
r201706 r201715 42 42 class PlatformCAAnimation : public RefCounted<PlatformCAAnimation> { 43 43 public: 44 enum AnimationType { Basic, Keyframe , Spring};44 enum AnimationType { Basic, Keyframe }; 45 45 enum FillModeType { NoFillMode, Forwards, Backwards, Both }; 46 46 enum ValueFunctionType { NoValueFunction, RotateX, RotateY, RotateZ, ScaleX, ScaleY, ScaleZ, Scale, TranslateX, TranslateY, TranslateZ, Translate }; … … 124 124 setBeginTime(t); 125 125 } 126 127 bool isBasicAnimation() const;128 126 129 127 protected: -
trunk/Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm
r201706 r201715 162 162 : PlatformCAAnimation(type) 163 163 { 164 switch (type) { 165 case Basic: 164 if (type == Basic) 166 165 m_animation = [CABasicAnimation animationWithKeyPath:keyPath]; 167 break; 168 case Keyframe: 166 else 169 167 m_animation = [CAKeyframeAnimation animationWithKeyPath:keyPath]; 170 break;171 case Spring:172 m_animation = [CASpringAnimation animationWithKeyPath:keyPath];173 break;174 }175 168 } 176 169 177 170 PlatformCAAnimationCocoa::PlatformCAAnimationCocoa(PlatformAnimationRef animation) 178 171 { 179 if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CABasicAnimation class]]) { 180 if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CASpringAnimation class]]) 181 setType(Spring); 182 else 183 setType(Basic); 184 } else if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CAKeyframeAnimation class]]) 172 if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CABasicAnimation class]]) 173 setType(Basic); 174 else if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CAKeyframeAnimation class]]) 185 175 setType(Keyframe); 186 176 else { 187 ASSERT _NOT_REACHED();177 ASSERT(0); 188 178 return; 189 179 } … … 316 306 void PlatformCAAnimationCocoa::setTimingFunction(const TimingFunction* value, bool reverse) 317 307 { 318 switch (animationType()) { 319 case Basic: 320 case Keyframe: 321 [m_animation setTimingFunction:toCAMediaTimingFunction(value, reverse)]; 322 break; 323 case Spring: 324 if (value->isSpringTimingFunction()) { 325 // FIXME: Handle reverse. 326 auto& function = *static_cast<const SpringTimingFunction*>(value); 327 CASpringAnimation *springAnimation = (CASpringAnimation *)m_animation.get(); 328 springAnimation.mass = function.mass(); 329 springAnimation.stiffness = function.stiffness(); 330 springAnimation.damping = function.damping(); 331 springAnimation.initialVelocity = function.initialVelocity(); 332 } 333 break; 334 } 308 [m_animation setTimingFunction:toCAMediaTimingFunction(value, reverse)]; 335 309 } 336 310 … … 373 347 void PlatformCAAnimationCocoa::setFromValue(float value) 374 348 { 375 if ( !isBasicAnimation())349 if (animationType() != Basic) 376 350 return; 377 351 [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:[NSNumber numberWithDouble:value]]; … … 380 354 void PlatformCAAnimationCocoa::setFromValue(const WebCore::TransformationMatrix& value) 381 355 { 382 if ( !isBasicAnimation())356 if (animationType() != Basic) 383 357 return; 384 358 … … 388 362 void PlatformCAAnimationCocoa::setFromValue(const FloatPoint3D& value) 389 363 { 390 if ( !isBasicAnimation())364 if (animationType() != Basic) 391 365 return; 392 366 … … 401 375 void PlatformCAAnimationCocoa::setFromValue(const WebCore::Color& value) 402 376 { 403 if ( !isBasicAnimation())377 if (animationType() != Basic) 404 378 return; 405 379 … … 421 395 void PlatformCAAnimationCocoa::copyFromValueFrom(const PlatformCAAnimation& value) 422 396 { 423 if ( !isBasicAnimation() || !value.isBasicAnimation())397 if (animationType() != Basic || value.animationType() != Basic) 424 398 return; 425 399 … … 430 404 void PlatformCAAnimationCocoa::setToValue(float value) 431 405 { 432 if ( !isBasicAnimation())406 if (animationType() != Basic) 433 407 return; 434 408 [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:[NSNumber numberWithDouble:value]]; … … 437 411 void PlatformCAAnimationCocoa::setToValue(const WebCore::TransformationMatrix& value) 438 412 { 439 if ( !isBasicAnimation())413 if (animationType() != Basic) 440 414 return; 441 415 … … 445 419 void PlatformCAAnimationCocoa::setToValue(const FloatPoint3D& value) 446 420 { 447 if ( !isBasicAnimation())421 if (animationType() != Basic) 448 422 return; 449 423 … … 458 432 void PlatformCAAnimationCocoa::setToValue(const WebCore::Color& value) 459 433 { 460 if ( !isBasicAnimation())434 if (animationType() != Basic) 461 435 return; 462 436 … … 478 452 void PlatformCAAnimationCocoa::copyToValueFrom(const PlatformCAAnimation& value) 479 453 { 480 if ( !isBasicAnimation() || !value.isBasicAnimation())454 if (animationType() != Basic || value.animationType() != Basic) 481 455 return; 482 456 -
trunk/Source/WebKit2/ChangeLog
r201708 r201715 1 2016-06-06 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r201706. 4 https://bugs.webkit.org/show_bug.cgi?id=158427 5 6 This change broke the Yosemite build and its LayoutTest is 7 failing on Mac and iOS testers (Requested by ryanhaddad on 8 #webkit). 9 10 Reverted changeset: 11 12 "Add experimental support for spring based CSS animations" 13 https://bugs.webkit.org/show_bug.cgi?id=158403 14 http://trac.webkit.org/changeset/201706 15 1 16 2016-06-06 Alex Christensen <achristensen@webkit.org> 2 17 -
trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp
r201706 r201715 366 366 break; 367 367 } 368 case TimingFunction::SpringFunction: {369 const SpringTimingFunction* spring = static_cast<const SpringTimingFunction*>(timingFunction);370 encoder << spring->mass();371 encoder << spring->stiffness();372 encoder << spring->damping();373 encoder << spring->initialVelocity();374 break;375 }376 368 } 377 369 } … … 420 412 421 413 timingFunction = StepsTimingFunction::create(numberOfSteps, stepAtStart); 422 return true;423 }424 case TimingFunction::SpringFunction: {425 double mass;426 if (!decoder.decode(mass))427 return false;428 double stiffness;429 if (!decoder.decode(stiffness))430 return false;431 double damping;432 if (!decoder.decode(damping))433 return false;434 double initialVelocity;435 if (!decoder.decode(initialVelocity))436 return false;437 438 timingFunction = SpringTimingFunction::create(mass, stiffness, damping, initialVelocity);439 414 return true; 440 415 } -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
r201706 r201715 266 266 } 267 267 268 void ArgumentCoder<SpringTimingFunction>::encode(ArgumentEncoder& encoder, const SpringTimingFunction& timingFunction)269 {270 encoder.encodeEnum(timingFunction.type());271 272 encoder << timingFunction.mass();273 encoder << timingFunction.stiffness();274 encoder << timingFunction.damping();275 encoder << timingFunction.initialVelocity();276 }277 278 bool ArgumentCoder<SpringTimingFunction>::decode(ArgumentDecoder& decoder, SpringTimingFunction& timingFunction)279 {280 // Type is decoded by the caller.281 double mass;282 if (!decoder.decode(mass))283 return false;284 285 double stiffness;286 if (!decoder.decode(stiffness))287 return false;288 289 double damping;290 if (!decoder.decode(damping))291 return false;292 293 double initialVelocity;294 if (!decoder.decode(initialVelocity))295 return false;296 297 timingFunction.setValues(mass, stiffness, damping, initialVelocity);298 299 return true;300 }301 302 268 void ArgumentCoder<FloatPoint>::encode(ArgumentEncoder& encoder, const FloatPoint& floatPoint) 303 269 { -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h
r201706 r201715 61 61 class ResourceResponse; 62 62 class SessionID; 63 class SpringTimingFunction;64 63 class StepsTimingFunction; 65 64 class StickyPositionViewportConstraints; … … 153 152 }; 154 153 155 template<> struct ArgumentCoder<WebCore::SpringTimingFunction> {156 static void encode(ArgumentEncoder&, const WebCore::SpringTimingFunction&);157 static bool decode(ArgumentDecoder&, WebCore::SpringTimingFunction&);158 };159 160 154 template<> struct ArgumentCoder<WebCore::CertificateInfo> { 161 155 static void encode(ArgumentEncoder&, const WebCore::CertificateInfo&); -
trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h
r201706 r201715 294 294 macro(CustomElementsEnabled, customElementsEnabled, Bool, bool, true, "Custom Elements", "HTML Custom Elements prototype") \ 295 295 macro(WebGL2Enabled, webGL2Enabled, Bool, bool, true, "WebGL 2.0", "WebGL 2 prototype") \ 296 macro(SpringTimingFunctionEnabled, springTimingFunctionEnabled, Bool, bool, true, "CSS Spring Animations", "CSS Spring Animation prototype") \297 296 \ 298 297 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r201706 r201715 3151 3151 #endif 3152 3152 3153 settings.setSpringTimingFunctionEnabled(store.getBoolValueForKey(WebPreferencesKey::springTimingFunctionEnabledKey()));3154 3155 3153 bool processSuppressionEnabled = store.getBoolValueForKey(WebPreferencesKey::pageVisibilityBasedProcessSuppressionEnabledKey()); 3156 3154 if (m_processSuppressionEnabled != processSuppressionEnabled) { -
trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm
r201706 r201715 197 197 encoder << *static_cast<StepsTimingFunction*>(timingFunction.get()); 198 198 break; 199 200 case TimingFunction::SpringFunction:201 encoder << *static_cast<SpringTimingFunction*>(timingFunction.get());202 break;203 199 } 204 200 } … … 287 283 return false; 288 284 break; 289 290 case TimingFunction::SpringFunction:291 timingFunction = SpringTimingFunction::create();292 if (!decoder.decode(*static_cast<SpringTimingFunction*>(timingFunction.get())))293 return false;294 break;295 285 } 296 286 … … 765 755 break; 766 756 } 767 case PlatformCAAnimation::Spring: {768 RetainPtr<CASpringAnimation> springAnimation;769 springAnimation = [CASpringAnimation animationWithKeyPath:properties.keyPath];770 771 if (properties.keyValues.size() > 1) {772 [springAnimation setFromValue:animationValueFromKeyframeValue(properties.keyValues[0])];773 [springAnimation setToValue:animationValueFromKeyframeValue(properties.keyValues[1])];774 }775 776 if (properties.timingFunctions.size()) {777 auto& timingFunction = properties.timingFunctions[0];778 if (timingFunction->isSpringTimingFunction()) {779 auto& function = *static_cast<const SpringTimingFunction*>(timingFunction.get());780 [springAnimation setMass:function.mass()];781 [springAnimation setStiffness:function.stiffness()];782 [springAnimation setDamping:function.damping()];783 [springAnimation setInitialVelocity:function.initialVelocity()];784 }785 }786 caAnimation = springAnimation;787 break;788 }789 757 } 790 758
Note: See TracChangeset
for help on using the changeset viewer.