SMILTimeContainer.h revision cad810f21b803229eb11403f9209855525a25d57
1cad810f21b803229eb11403f9209855525a25d57Steve Block/* 2cad810f21b803229eb11403f9209855525a25d57Steve Block * Copyright (C) 2008 Apple Inc. All rights reserved. 3cad810f21b803229eb11403f9209855525a25d57Steve Block * 4cad810f21b803229eb11403f9209855525a25d57Steve Block * Redistribution and use in source and binary forms, with or without 5cad810f21b803229eb11403f9209855525a25d57Steve Block * modification, are permitted provided that the following conditions 6cad810f21b803229eb11403f9209855525a25d57Steve Block * are met: 7cad810f21b803229eb11403f9209855525a25d57Steve Block * 1. Redistributions of source code must retain the above copyright 8cad810f21b803229eb11403f9209855525a25d57Steve Block * notice, this list of conditions and the following disclaimer. 9cad810f21b803229eb11403f9209855525a25d57Steve Block * 2. Redistributions in binary form must reproduce the above copyright 10cad810f21b803229eb11403f9209855525a25d57Steve Block * notice, this list of conditions and the following disclaimer in the 11cad810f21b803229eb11403f9209855525a25d57Steve Block * documentation and/or other materials provided with the distribution. 12cad810f21b803229eb11403f9209855525a25d57Steve Block * 13cad810f21b803229eb11403f9209855525a25d57Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14cad810f21b803229eb11403f9209855525a25d57Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15cad810f21b803229eb11403f9209855525a25d57Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16cad810f21b803229eb11403f9209855525a25d57Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17cad810f21b803229eb11403f9209855525a25d57Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18cad810f21b803229eb11403f9209855525a25d57Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19cad810f21b803229eb11403f9209855525a25d57Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20cad810f21b803229eb11403f9209855525a25d57Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21cad810f21b803229eb11403f9209855525a25d57Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22cad810f21b803229eb11403f9209855525a25d57Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23cad810f21b803229eb11403f9209855525a25d57Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24cad810f21b803229eb11403f9209855525a25d57Steve Block */ 25cad810f21b803229eb11403f9209855525a25d57Steve Block 26cad810f21b803229eb11403f9209855525a25d57Steve Block#ifndef SMILTimeContainer_h 27cad810f21b803229eb11403f9209855525a25d57Steve Block#define SMILTimeContainer_h 28cad810f21b803229eb11403f9209855525a25d57Steve Block 29cad810f21b803229eb11403f9209855525a25d57Steve Block#if ENABLE(SVG) 30cad810f21b803229eb11403f9209855525a25d57Steve Block 31cad810f21b803229eb11403f9209855525a25d57Steve Block#include "PlatformString.h" 32cad810f21b803229eb11403f9209855525a25d57Steve Block#include "SMILTime.h" 33cad810f21b803229eb11403f9209855525a25d57Steve Block#include "Timer.h" 34cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/HashMap.h> 35cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/HashSet.h> 36cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/PassRefPtr.h> 37cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/RefCounted.h> 38cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/text/StringHash.h> 39cad810f21b803229eb11403f9209855525a25d57Steve Block 40cad810f21b803229eb11403f9209855525a25d57Steve Blocknamespace WebCore { 41cad810f21b803229eb11403f9209855525a25d57Steve Block 42cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGElement; 43cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGSMILElement; 44cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGSVGElement; 45cad810f21b803229eb11403f9209855525a25d57Steve Block 46cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SMILTimeContainer : public RefCounted<SMILTimeContainer> { 47cad810f21b803229eb11403f9209855525a25d57Steve Blockpublic: 48cad810f21b803229eb11403f9209855525a25d57Steve Block static PassRefPtr<SMILTimeContainer> create(SVGSVGElement* owner) { return adoptRef(new SMILTimeContainer(owner)); } 49cad810f21b803229eb11403f9209855525a25d57Steve Block 50cad810f21b803229eb11403f9209855525a25d57Steve Block void schedule(SVGSMILElement*); 51cad810f21b803229eb11403f9209855525a25d57Steve Block void unschedule(SVGSMILElement*); 52cad810f21b803229eb11403f9209855525a25d57Steve Block 53cad810f21b803229eb11403f9209855525a25d57Steve Block SMILTime elapsed() const; 54cad810f21b803229eb11403f9209855525a25d57Steve Block 55cad810f21b803229eb11403f9209855525a25d57Steve Block bool isActive() const; 56cad810f21b803229eb11403f9209855525a25d57Steve Block bool isPaused() const; 57cad810f21b803229eb11403f9209855525a25d57Steve Block 58cad810f21b803229eb11403f9209855525a25d57Steve Block void begin(); 59cad810f21b803229eb11403f9209855525a25d57Steve Block void pause(); 60cad810f21b803229eb11403f9209855525a25d57Steve Block void resume(); 61cad810f21b803229eb11403f9209855525a25d57Steve Block 62cad810f21b803229eb11403f9209855525a25d57Steve Block void setDocumentOrderIndexesDirty() { m_documentOrderIndexesDirty = true; } 63cad810f21b803229eb11403f9209855525a25d57Steve Block 64cad810f21b803229eb11403f9209855525a25d57Steve Block // Move to a specific time. Only used for DRT testing purposes. 65cad810f21b803229eb11403f9209855525a25d57Steve Block void sampleAnimationAtTime(const String& elementId, double seconds); 66cad810f21b803229eb11403f9209855525a25d57Steve Block 67cad810f21b803229eb11403f9209855525a25d57Steve Blockprivate: 68cad810f21b803229eb11403f9209855525a25d57Steve Block SMILTimeContainer(SVGSVGElement* owner); 69cad810f21b803229eb11403f9209855525a25d57Steve Block 70cad810f21b803229eb11403f9209855525a25d57Steve Block void timerFired(Timer<SMILTimeContainer>*); 71cad810f21b803229eb11403f9209855525a25d57Steve Block void startTimer(SMILTime fireTime, SMILTime minimumDelay = 0); 72cad810f21b803229eb11403f9209855525a25d57Steve Block void updateAnimations(SMILTime elapsed); 73cad810f21b803229eb11403f9209855525a25d57Steve Block 74cad810f21b803229eb11403f9209855525a25d57Steve Block void updateDocumentOrderIndexes(); 75cad810f21b803229eb11403f9209855525a25d57Steve Block void sortByPriority(Vector<SVGSMILElement*>& smilElements, SMILTime elapsed); 76cad810f21b803229eb11403f9209855525a25d57Steve Block 77cad810f21b803229eb11403f9209855525a25d57Steve Block typedef pair<SVGElement*, String> ElementAttributePair; 78cad810f21b803229eb11403f9209855525a25d57Steve Block String baseValueFor(ElementAttributePair); 79cad810f21b803229eb11403f9209855525a25d57Steve Block 80cad810f21b803229eb11403f9209855525a25d57Steve Block double m_beginTime; 81cad810f21b803229eb11403f9209855525a25d57Steve Block double m_pauseTime; 82cad810f21b803229eb11403f9209855525a25d57Steve Block double m_accumulatedPauseTime; 83cad810f21b803229eb11403f9209855525a25d57Steve Block double m_nextManualSampleTime; 84cad810f21b803229eb11403f9209855525a25d57Steve Block String m_nextSamplingTarget; 85cad810f21b803229eb11403f9209855525a25d57Steve Block 86cad810f21b803229eb11403f9209855525a25d57Steve Block bool m_documentOrderIndexesDirty; 87cad810f21b803229eb11403f9209855525a25d57Steve Block 88cad810f21b803229eb11403f9209855525a25d57Steve Block Timer<SMILTimeContainer> m_timer; 89cad810f21b803229eb11403f9209855525a25d57Steve Block 90cad810f21b803229eb11403f9209855525a25d57Steve Block typedef HashSet<SVGSMILElement*> TimingElementSet; 91cad810f21b803229eb11403f9209855525a25d57Steve Block TimingElementSet m_scheduledAnimations; 92cad810f21b803229eb11403f9209855525a25d57Steve Block 93cad810f21b803229eb11403f9209855525a25d57Steve Block typedef HashMap<ElementAttributePair, String> BaseValueMap; 94cad810f21b803229eb11403f9209855525a25d57Steve Block BaseValueMap m_savedBaseValues; 95cad810f21b803229eb11403f9209855525a25d57Steve Block 96cad810f21b803229eb11403f9209855525a25d57Steve Block SVGSVGElement* m_ownerSVGElement; 97cad810f21b803229eb11403f9209855525a25d57Steve Block}; 98cad810f21b803229eb11403f9209855525a25d57Steve Block} 99cad810f21b803229eb11403f9209855525a25d57Steve Block 100cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // ENABLE(SVG) 101cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // SMILTimeContainer_h 102