OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> | 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> |
3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. |
4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 | 275 |
276 view->paint(context, enclosingIntRect(srcRect)); | 276 view->paint(context, enclosingIntRect(srcRect)); |
277 | 277 |
278 if (requiresTransparencyLayer) | 278 if (requiresTransparencyLayer) |
279 context->endLayer(); | 279 context->endLayer(); |
280 | 280 |
281 stateSaver.restore(); | 281 stateSaver.restore(); |
282 | 282 |
283 if (imageObserver()) | 283 if (imageObserver()) |
284 imageObserver()->didDraw(this); | 284 imageObserver()->didDraw(this); |
| 285 |
| 286 // Start any (SMIL) animations if needed. This will restart or continue |
| 287 // animations if preceded by calls to resetAnimation or stopAnimation |
| 288 // respectively. |
| 289 startAnimation(); |
285 } | 290 } |
286 | 291 |
287 RenderBox* SVGImage::embeddedContentBox() const | 292 RenderBox* SVGImage::embeddedContentBox() const |
288 { | 293 { |
289 if (!m_page) | 294 if (!m_page) |
290 return 0; | 295 return 0; |
291 LocalFrame* frame = m_page->mainFrame(); | 296 LocalFrame* frame = m_page->mainFrame(); |
292 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; | 297 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; |
293 if (!rootElement) | 298 if (!rootElement) |
294 return 0; | 299 return 0; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 intrinsicRatio = FloatSize(floatValueForLength(intrinsicWidth, 0), float
ValueForLength(intrinsicHeight, 0)); | 349 intrinsicRatio = FloatSize(floatValueForLength(intrinsicWidth, 0), float
ValueForLength(intrinsicHeight, 0)); |
345 } | 350 } |
346 | 351 |
347 // FIXME: support catchUpIfNecessary. | 352 // FIXME: support catchUpIfNecessary. |
348 void SVGImage::startAnimation(bool /* catchUpIfNecessary */) | 353 void SVGImage::startAnimation(bool /* catchUpIfNecessary */) |
349 { | 354 { |
350 if (!m_page) | 355 if (!m_page) |
351 return; | 356 return; |
352 LocalFrame* frame = m_page->mainFrame(); | 357 LocalFrame* frame = m_page->mainFrame(); |
353 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; | 358 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; |
354 if (!rootElement) | 359 if (!rootElement || !rootElement->animationsPaused()) |
355 return; | 360 return; |
356 rootElement->unpauseAnimations(); | 361 rootElement->unpauseAnimations(); |
357 rootElement->setCurrentTime(0); | |
358 } | 362 } |
359 | 363 |
360 void SVGImage::stopAnimation() | 364 void SVGImage::stopAnimation() |
361 { | 365 { |
362 if (!m_page) | 366 if (!m_page) |
363 return; | 367 return; |
364 LocalFrame* frame = m_page->mainFrame(); | 368 LocalFrame* frame = m_page->mainFrame(); |
365 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; | 369 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; |
366 if (!rootElement) | 370 if (!rootElement) |
367 return; | 371 return; |
368 rootElement->pauseAnimations(); | 372 rootElement->pauseAnimations(); |
369 } | 373 } |
370 | 374 |
371 void SVGImage::resetAnimation() | 375 void SVGImage::resetAnimation() |
372 { | 376 { |
373 stopAnimation(); | 377 if (!m_page) |
| 378 return; |
| 379 LocalFrame* frame = m_page->mainFrame(); |
| 380 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; |
| 381 if (!rootElement) |
| 382 return; |
| 383 rootElement->pauseAnimations(); |
| 384 rootElement->setCurrentTime(0); |
374 } | 385 } |
375 | 386 |
376 bool SVGImage::hasAnimations() const | 387 bool SVGImage::hasAnimations() const |
377 { | 388 { |
378 if (!m_page) | 389 if (!m_page) |
379 return false; | 390 return false; |
380 LocalFrame* frame = m_page->mainFrame(); | 391 LocalFrame* frame = m_page->mainFrame(); |
381 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; | 392 SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement()
; |
382 if (!rootElement) | 393 if (!rootElement) |
383 return false; | 394 return false; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 | 441 |
431 return m_page; | 442 return m_page; |
432 } | 443 } |
433 | 444 |
434 String SVGImage::filenameExtension() const | 445 String SVGImage::filenameExtension() const |
435 { | 446 { |
436 return "svg"; | 447 return "svg"; |
437 } | 448 } |
438 | 449 |
439 } | 450 } |
OLD | NEW |