KHTML
SMILTimeContainer.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef SMILTimeContainer_H
00027 #define SMILTimeContainer_H
00028
00029 #if ENABLE(SVG)
00030
00031 #include "PlatformString.h"
00032 #include "SMILTime.h"
00033 #include "StringHash.h"
00034 #include "Timer.h"
00035 #include <wtf/HashSet.h>
00036 #include <wtf/PassRefPtr.h>
00037 #include <wtf/RefCounted.h>
00038
00039 namespace WebCore {
00040
00041 class SVGElement;
00042 class SVGSMILElement;
00043 class SVGSVGElement;
00044
00045 class SMILTimeContainer : public RefCounted<SMILTimeContainer> {
00046 public:
00047 static PassRefPtr<SMILTimeContainer> create(SVGSVGElement* owner) { return adoptRef(new SMILTimeContainer(owner)); }
00048
00049 void schedule(SVGSMILElement*);
00050 void unschedule(SVGSMILElement*);
00051
00052 SMILTime elapsed() const;
00053
00054 bool isActive() const;
00055 bool isPaused() const;
00056
00057 void begin();
00058 void pause();
00059 void resume();
00060
00061 void setDocumentOrderIndexesDirty() { m_documentOrderIndexesDirty = true; }
00062
00063 private:
00064 SMILTimeContainer(SVGSVGElement* owner);
00065
00066 void timerFired(Timer<SMILTimeContainer>*);
00067 void startTimer(SMILTime fireTime, SMILTime minimumDelay = 0);
00068 void updateAnimations(SMILTime elapsed);
00069
00070 void updateDocumentOrderIndexes();
00071 void sortByPriority(Vector<SVGSMILElement*>& smilElements, SMILTime elapsed);
00072
00073 typedef pair<SVGElement*, String> ElementAttributePair;
00074 String baseValueFor(ElementAttributePair);
00075
00076 double m_beginTime;
00077 double m_pauseTime;
00078 double m_accumulatedPauseTime;
00079
00080 bool m_documentOrderIndexesDirty;
00081
00082 Timer<SMILTimeContainer> m_timer;
00083
00084 typedef HashSet<SVGSMILElement*> TimingElementSet;
00085 TimingElementSet m_scheduledAnimations;
00086
00087 typedef HashMap<ElementAttributePair, String> BaseValueMap;
00088 BaseValueMap m_savedBaseValues;
00089
00090 SVGSVGElement* m_ownerSVGElement;
00091 };
00092 }
00093
00094 #endif
00095 #endif