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 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "QualifiedName.h" 32cad810f21b803229eb11403f9209855525a25d57Steve Block#include "PlatformString.h" 33cad810f21b803229eb11403f9209855525a25d57Steve Block#include "SMILTime.h" 34cad810f21b803229eb11403f9209855525a25d57Steve Block#include "Timer.h" 35cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/HashMap.h> 36cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/HashSet.h> 37cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/PassRefPtr.h> 38cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/RefCounted.h> 39cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/text/StringHash.h> 40cad810f21b803229eb11403f9209855525a25d57Steve Block 41cad810f21b803229eb11403f9209855525a25d57Steve Blocknamespace WebCore { 42cad810f21b803229eb11403f9209855525a25d57Steve Block 43cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGElement; 44cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGSMILElement; 45cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGSVGElement; 46cad810f21b803229eb11403f9209855525a25d57Steve Block 47cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SMILTimeContainer : public RefCounted<SMILTimeContainer> { 48cad810f21b803229eb11403f9209855525a25d57Steve Blockpublic: 49cad810f21b803229eb11403f9209855525a25d57Steve Block static PassRefPtr<SMILTimeContainer> create(SVGSVGElement* owner) { return adoptRef(new SMILTimeContainer(owner)); } 50cad810f21b803229eb11403f9209855525a25d57Steve Block 51cad810f21b803229eb11403f9209855525a25d57Steve Block void schedule(SVGSMILElement*); 52cad810f21b803229eb11403f9209855525a25d57Steve Block void unschedule(SVGSMILElement*); 53cad810f21b803229eb11403f9209855525a25d57Steve Block 54cad810f21b803229eb11403f9209855525a25d57Steve Block SMILTime elapsed() const; 55cad810f21b803229eb11403f9209855525a25d57Steve Block 56cad810f21b803229eb11403f9209855525a25d57Steve Block bool isActive() const; 57cad810f21b803229eb11403f9209855525a25d57Steve Block bool isPaused() const; 58cad810f21b803229eb11403f9209855525a25d57Steve Block 59cad810f21b803229eb11403f9209855525a25d57Steve Block void begin(); 60cad810f21b803229eb11403f9209855525a25d57Steve Block void pause(); 61cad810f21b803229eb11403f9209855525a25d57Steve Block void resume(); 62cad810f21b803229eb11403f9209855525a25d57Steve Block 63cad810f21b803229eb11403f9209855525a25d57Steve Block void setDocumentOrderIndexesDirty() { m_documentOrderIndexesDirty = true; } 64cad810f21b803229eb11403f9209855525a25d57Steve Block 65cad810f21b803229eb11403f9209855525a25d57Steve Block // Move to a specific time. Only used for DRT testing purposes. 66cad810f21b803229eb11403f9209855525a25d57Steve Block void sampleAnimationAtTime(const String& elementId, double seconds); 67cad810f21b803229eb11403f9209855525a25d57Steve Block 68cad810f21b803229eb11403f9209855525a25d57Steve Blockprivate: 69cad810f21b803229eb11403f9209855525a25d57Steve Block SMILTimeContainer(SVGSVGElement* owner); 70cad810f21b803229eb11403f9209855525a25d57Steve Block 71cad810f21b803229eb11403f9209855525a25d57Steve Block void timerFired(Timer<SMILTimeContainer>*); 72cad810f21b803229eb11403f9209855525a25d57Steve Block void startTimer(SMILTime fireTime, SMILTime minimumDelay = 0); 73cad810f21b803229eb11403f9209855525a25d57Steve Block void updateAnimations(SMILTime elapsed); 74cad810f21b803229eb11403f9209855525a25d57Steve Block 75cad810f21b803229eb11403f9209855525a25d57Steve Block void updateDocumentOrderIndexes(); 76cad810f21b803229eb11403f9209855525a25d57Steve Block void sortByPriority(Vector<SVGSMILElement*>& smilElements, SMILTime elapsed); 77cad810f21b803229eb11403f9209855525a25d57Steve Block 7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch typedef pair<SVGElement*, QualifiedName> ElementAttributePair; 79cad810f21b803229eb11403f9209855525a25d57Steve Block String baseValueFor(ElementAttributePair); 80cad810f21b803229eb11403f9209855525a25d57Steve Block 81cad810f21b803229eb11403f9209855525a25d57Steve Block double m_beginTime; 82cad810f21b803229eb11403f9209855525a25d57Steve Block double m_pauseTime; 83cad810f21b803229eb11403f9209855525a25d57Steve Block double m_accumulatedPauseTime; 84cad810f21b803229eb11403f9209855525a25d57Steve Block double m_nextManualSampleTime; 85cad810f21b803229eb11403f9209855525a25d57Steve Block String m_nextSamplingTarget; 86cad810f21b803229eb11403f9209855525a25d57Steve Block 87cad810f21b803229eb11403f9209855525a25d57Steve Block bool m_documentOrderIndexesDirty; 88cad810f21b803229eb11403f9209855525a25d57Steve Block 89cad810f21b803229eb11403f9209855525a25d57Steve Block Timer<SMILTimeContainer> m_timer; 90cad810f21b803229eb11403f9209855525a25d57Steve Block 91cad810f21b803229eb11403f9209855525a25d57Steve Block typedef HashSet<SVGSMILElement*> TimingElementSet; 92cad810f21b803229eb11403f9209855525a25d57Steve Block TimingElementSet m_scheduledAnimations; 93cad810f21b803229eb11403f9209855525a25d57Steve Block 94cad810f21b803229eb11403f9209855525a25d57Steve Block typedef HashMap<ElementAttributePair, String> BaseValueMap; 95cad810f21b803229eb11403f9209855525a25d57Steve Block BaseValueMap m_savedBaseValues; 96cad810f21b803229eb11403f9209855525a25d57Steve Block 97cad810f21b803229eb11403f9209855525a25d57Steve Block SVGSVGElement* m_ownerSVGElement; 98cad810f21b803229eb11403f9209855525a25d57Steve Block}; 99cad810f21b803229eb11403f9209855525a25d57Steve Block} 100cad810f21b803229eb11403f9209855525a25d57Steve Block 101cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // ENABLE(SVG) 102cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // SMILTimeContainer_h 103