| 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 #include "platform/graphics/paint/CullRect.h" | 56 #include "platform/graphics/paint/CullRect.h" |
| 57 #include "platform/graphics/paint/DrawingRecorder.h" | 57 #include "platform/graphics/paint/DrawingRecorder.h" |
| 58 #include "platform/graphics/paint/SkPictureBuilder.h" | 58 #include "platform/graphics/paint/SkPictureBuilder.h" |
| 59 #include "third_party/skia/include/core/SkPicture.h" | 59 #include "third_party/skia/include/core/SkPicture.h" |
| 60 #include "wtf/PassRefPtr.h" | 60 #include "wtf/PassRefPtr.h" |
| 61 | 61 |
| 62 namespace blink { | 62 namespace blink { |
| 63 | 63 |
| 64 SVGImage::SVGImage(ImageObserver* observer) | 64 SVGImage::SVGImage(ImageObserver* observer) |
| 65 : Image(observer) | 65 : Image(observer) |
| 66 , m_updatingAnimations(false) |
| 67 , m_resetAnimationAfterUpdate(false) |
| 66 { | 68 { |
| 67 } | 69 } |
| 68 | 70 |
| 69 SVGImage::~SVGImage() | 71 SVGImage::~SVGImage() |
| 70 { | 72 { |
| 71 if (m_page) { | 73 if (m_page) { |
| 72 // Store m_page in a local variable, clearing m_page, so that SVGImageCh
romeClient knows we're destructed. | 74 // Store m_page in a local variable, clearing m_page, so that SVGImageCh
romeClient knows we're destructed. |
| 73 Page* currentPage = m_page.release(); | 75 Page* currentPage = m_page.release(); |
| 74 // Break both the loader and view references to the frame | 76 // Break both the loader and view references to the frame |
| 75 currentPage->willBeDestroyed(); | 77 currentPage->willBeDestroyed(); |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 void SVGImage::stopAnimation() | 411 void SVGImage::stopAnimation() |
| 410 { | 412 { |
| 411 SVGSVGElement* rootElement = svgRootElement(m_page.get()); | 413 SVGSVGElement* rootElement = svgRootElement(m_page.get()); |
| 412 if (!rootElement) | 414 if (!rootElement) |
| 413 return; | 415 return; |
| 414 rootElement->pauseAnimations(); | 416 rootElement->pauseAnimations(); |
| 415 } | 417 } |
| 416 | 418 |
| 417 void SVGImage::resetAnimation() | 419 void SVGImage::resetAnimation() |
| 418 { | 420 { |
| 421 if (m_updatingAnimations) { |
| 422 m_resetAnimationAfterUpdate = true; |
| 423 return; |
| 424 } |
| 425 |
| 419 SVGSVGElement* rootElement = svgRootElement(m_page.get()); | 426 SVGSVGElement* rootElement = svgRootElement(m_page.get()); |
| 420 if (!rootElement) | 427 if (!rootElement) |
| 421 return; | 428 return; |
| 422 rootElement->pauseAnimations(); | 429 rootElement->pauseAnimations(); |
| 423 rootElement->setCurrentTime(0); | 430 rootElement->setCurrentTime(0); |
| 424 } | 431 } |
| 425 | 432 |
| 426 bool SVGImage::hasAnimations() const | 433 bool SVGImage::hasAnimations() const |
| 427 { | 434 { |
| 428 SVGSVGElement* rootElement = svgRootElement(m_page.get()); | 435 SVGSVGElement* rootElement = svgRootElement(m_page.get()); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 } | 541 } |
| 535 | 542 |
| 536 return m_page; | 543 return m_page; |
| 537 } | 544 } |
| 538 | 545 |
| 539 String SVGImage::filenameExtension() const | 546 String SVGImage::filenameExtension() const |
| 540 { | 547 { |
| 541 return "svg"; | 548 return "svg"; |
| 542 } | 549 } |
| 543 | 550 |
| 551 void SVGImage::leaveNoResetAnimationScope() |
| 552 { |
| 553 if (!m_updatingAnimations) { |
| 554 DCHECK(!m_resetAnimationAfterUpdate); |
| 555 return; |
| 556 } |
| 557 m_updatingAnimations = false; |
| 558 if (m_resetAnimationAfterUpdate) { |
| 559 m_resetAnimationAfterUpdate = false; |
| 560 resetAnimation(); |
| 561 } |
| 562 } |
| 563 |
| 564 SVGImage::UpdateAnimationScope::UpdateAnimationScope(SVGImage* image) |
| 565 : m_image(image) |
| 566 , m_imageObserver(m_image->getImageObserver()) |
| 567 { |
| 568 m_image->enterNoResetAnimationsScope(); |
| 569 } |
| 570 |
| 571 SVGImage::UpdateAnimationScope::~UpdateAnimationScope() |
| 572 { |
| 573 m_image->leaveNoResetAnimationScope(); |
| 574 } |
| 575 |
| 544 } // namespace blink | 576 } // namespace blink |
| OLD | NEW |