| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> | 2 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> |
| 3 * Copyright (C) 2007 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2007 Rob Buis <buis@kde.org> |
| 4 * Copyright (C) 2008 Apple Inc. All rights reserved. | 4 * Copyright (C) 2008 Apple Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 m_hasToPointAtEndOfDuration = false; | 224 m_hasToPointAtEndOfDuration = false; |
| 225 if (animationMode() == ByAnimation && !isAdditive()) | 225 if (animationMode() == ByAnimation && !isAdditive()) |
| 226 return false; | 226 return false; |
| 227 parsePoint(fromString, m_fromPoint); | 227 parsePoint(fromString, m_fromPoint); |
| 228 FloatPoint byPoint; | 228 FloatPoint byPoint; |
| 229 parsePoint(byString, byPoint); | 229 parsePoint(byString, byPoint); |
| 230 m_toPoint = FloatPoint(m_fromPoint.x() + byPoint.x(), m_fromPoint.y() + byPo
int.y()); | 230 m_toPoint = FloatPoint(m_fromPoint.x() + byPoint.x(), m_fromPoint.y() + byPo
int.y()); |
| 231 return true; | 231 return true; |
| 232 } | 232 } |
| 233 | 233 |
| 234 void SVGAnimateMotionElement::buildTransformForProgress(AffineTransform* transfo
rm, float percentage) | |
| 235 { | |
| 236 ASSERT(!m_animationPath.isEmpty()); | |
| 237 | |
| 238 bool ok = false; | |
| 239 float positionOnPath = m_animationPath.length() * percentage; | |
| 240 FloatPoint position = m_animationPath.pointAtLength(positionOnPath, ok); | |
| 241 if (!ok) | |
| 242 return; | |
| 243 transform->translate(position.x(), position.y()); | |
| 244 } | |
| 245 | |
| 246 void SVGAnimateMotionElement::calculateAnimatedValue(float percentage, unsigned
repeatCount, SVGSMILElement*) | 234 void SVGAnimateMotionElement::calculateAnimatedValue(float percentage, unsigned
repeatCount, SVGSMILElement*) |
| 247 { | 235 { |
| 248 SVGElement* targetElement = this->targetElement(); | 236 SVGElement* targetElement = this->targetElement(); |
| 249 if (!targetElement) | 237 if (!targetElement) |
| 250 return; | 238 return; |
| 251 AffineTransform* transform = targetElement->supplementalTransform(); | 239 AffineTransform* transform = targetElement->supplementalTransform(); |
| 252 if (!transform) | 240 if (!transform) |
| 253 return; | 241 return; |
| 254 | 242 |
| 255 if (RenderObject* targetRenderer = targetElement->renderer()) | 243 if (RenderObject* targetRenderer = targetElement->renderer()) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 266 float animatedX = 0; | 254 float animatedX = 0; |
| 267 animateAdditiveNumber(percentage, repeatCount, m_fromPoint.x(), m_toPoin
t.x(), toPointAtEndOfDuration.x(), animatedX); | 255 animateAdditiveNumber(percentage, repeatCount, m_fromPoint.x(), m_toPoin
t.x(), toPointAtEndOfDuration.x(), animatedX); |
| 268 | 256 |
| 269 float animatedY = 0; | 257 float animatedY = 0; |
| 270 animateAdditiveNumber(percentage, repeatCount, m_fromPoint.y(), m_toPoin
t.y(), toPointAtEndOfDuration.y(), animatedY); | 258 animateAdditiveNumber(percentage, repeatCount, m_fromPoint.y(), m_toPoin
t.y(), toPointAtEndOfDuration.y(), animatedY); |
| 271 | 259 |
| 272 transform->translate(animatedX, animatedY); | 260 transform->translate(animatedX, animatedY); |
| 273 return; | 261 return; |
| 274 } | 262 } |
| 275 | 263 |
| 276 buildTransformForProgress(transform, percentage); | 264 ASSERT(!m_animationPath.isEmpty()); |
| 265 |
| 266 bool ok = false; |
| 267 float positionOnPath = m_animationPath.length() * percentage; |
| 268 FloatPoint position; |
| 269 float angle; |
| 270 ok = m_animationPath.pointAndNormalAtLength(positionOnPath, position, angle)
; |
| 271 if (!ok) |
| 272 return; |
| 277 | 273 |
| 278 // Handle accumulate="sum". | 274 // Handle accumulate="sum". |
| 279 if (isAccumulated() && repeatCount) { | 275 if (isAccumulated() && repeatCount) { |
| 280 for (unsigned i = 0; i < repeatCount; ++i) | 276 FloatPoint positionAtEndOfDuration = m_animationPath.pointAtLength(m_ani
mationPath.length(), ok); |
| 281 buildTransformForProgress(transform, 1); | 277 if (ok) |
| 278 position.move(positionAtEndOfDuration.x() * repeatCount, positionAtE
ndOfDuration.y() * repeatCount); |
| 282 } | 279 } |
| 283 | 280 |
| 284 bool ok = false; | 281 transform->translate(position.x(), position.y()); |
| 285 float positionOnPath = m_animationPath.length() * percentage; | |
| 286 float angle = m_animationPath.normalAngleAtLength(positionOnPath, ok); | |
| 287 if (!ok) | |
| 288 return; | |
| 289 RotateMode rotateMode = this->rotateMode(); | 282 RotateMode rotateMode = this->rotateMode(); |
| 290 if (rotateMode != RotateAuto && rotateMode != RotateAutoReverse) | 283 if (rotateMode != RotateAuto && rotateMode != RotateAutoReverse) |
| 291 return; | 284 return; |
| 292 if (rotateMode == RotateAutoReverse) | 285 if (rotateMode == RotateAutoReverse) |
| 293 angle += 180; | 286 angle += 180; |
| 294 transform->rotate(angle); | 287 transform->rotate(angle); |
| 295 } | 288 } |
| 296 | 289 |
| 297 void SVGAnimateMotionElement::applyResultsToTarget() | 290 void SVGAnimateMotionElement::applyResultsToTarget() |
| 298 { | 291 { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 | 332 |
| 340 void SVGAnimateMotionElement::updateAnimationMode() | 333 void SVGAnimateMotionElement::updateAnimationMode() |
| 341 { | 334 { |
| 342 if (!m_animationPath.isEmpty()) | 335 if (!m_animationPath.isEmpty()) |
| 343 setAnimationMode(PathAnimation); | 336 setAnimationMode(PathAnimation); |
| 344 else | 337 else |
| 345 SVGAnimationElement::updateAnimationMode(); | 338 SVGAnimationElement::updateAnimationMode(); |
| 346 } | 339 } |
| 347 | 340 |
| 348 } | 341 } |
| OLD | NEW |