KHtml

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

KDE's Doxygen guidelines are available online.