Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: Source/core/svg/animation/SMILTimeContainer.cpp

Issue 191963002: Use new Traversal<SVG*Element> API more in SVG code (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 19 matching lines...) Expand all
30 #include "core/animation/DocumentTimeline.h" 30 #include "core/animation/DocumentTimeline.h"
31 #include "core/dom/ElementTraversal.h" 31 #include "core/dom/ElementTraversal.h"
32 #include "core/frame/FrameView.h" 32 #include "core/frame/FrameView.h"
33 #include "core/svg/SVGSVGElement.h" 33 #include "core/svg/SVGSVGElement.h"
34 #include "core/svg/animation/SVGSMILElement.h" 34 #include "core/svg/animation/SVGSMILElement.h"
35 35
36 using namespace std; 36 using namespace std;
37 37
38 namespace WebCore { 38 namespace WebCore {
39 39
40 SMILTimeContainer::SMILTimeContainer(SVGSVGElement* owner) 40 SMILTimeContainer::SMILTimeContainer(SVGSVGElement& owner)
41 : m_beginTime(0) 41 : m_beginTime(0)
42 , m_pauseTime(0) 42 , m_pauseTime(0)
43 , m_resumeTime(0) 43 , m_resumeTime(0)
44 , m_accumulatedActiveTime(0) 44 , m_accumulatedActiveTime(0)
45 , m_presetStartTime(0) 45 , m_presetStartTime(0)
46 , m_frameSchedulingState(Idle) 46 , m_frameSchedulingState(Idle)
47 , m_documentOrderIndexesDirty(false) 47 , m_documentOrderIndexesDirty(false)
48 , m_animationClock(AnimationClock::create()) 48 , m_animationClock(AnimationClock::create())
49 , m_wakeupTimer(this, &SMILTimeContainer::wakeupTimerFired) 49 , m_wakeupTimer(this, &SMILTimeContainer::wakeupTimerFired)
50 , m_ownerSVGElement(owner) 50 , m_ownerSVGElement(owner)
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 } else { 261 } else {
262 ASSERT(m_frameSchedulingState == SynchronizeAnimations); 262 ASSERT(m_frameSchedulingState == SynchronizeAnimations);
263 m_frameSchedulingState = Idle; 263 m_frameSchedulingState = Idle;
264 updateAnimationsAndScheduleFrameIfNeeded(elapsed()); 264 updateAnimationsAndScheduleFrameIfNeeded(elapsed());
265 } 265 }
266 } 266 }
267 267
268 void SMILTimeContainer::updateDocumentOrderIndexes() 268 void SMILTimeContainer::updateDocumentOrderIndexes()
269 { 269 {
270 unsigned timingElementCount = 0; 270 unsigned timingElementCount = 0;
271 for (Element* element = m_ownerSVGElement; element; element = ElementTravers al::next(*element, m_ownerSVGElement)) { 271 for (SVGSMILElement* element = Traversal<SVGSMILElement>::firstWithin(m_owne rSVGElement); element; element = Traversal<SVGSMILElement>::next(*element, &m_ow nerSVGElement))
272 if (isSVGSMILElement(*element)) 272 element->setDocumentOrderIndex(timingElementCount++);
273 toSVGSMILElement(element)->setDocumentOrderIndex(timingElementCount+ +);
274 }
275 m_documentOrderIndexesDirty = false; 273 m_documentOrderIndexesDirty = false;
276 } 274 }
277 275
278 struct PriorityCompare { 276 struct PriorityCompare {
279 PriorityCompare(SMILTime elapsed) : m_elapsed(elapsed) {} 277 PriorityCompare(SMILTime elapsed) : m_elapsed(elapsed) {}
280 bool operator()(const RefPtr<SVGSMILElement>& a, const RefPtr<SVGSMILElement >& b) 278 bool operator()(const RefPtr<SVGSMILElement>& a, const RefPtr<SVGSMILElement >& b)
281 { 279 {
282 // FIXME: This should also consider possible timing relations between th e elements. 280 // FIXME: This should also consider possible timing relations between th e elements.
283 SMILTime aBegin = a->intervalBegin(); 281 SMILTime aBegin = a->intervalBegin();
284 SMILTime bBegin = b->intervalBegin(); 282 SMILTime bBegin = b->intervalBegin();
285 // Frozen elements need to be prioritized based on their previous interv al. 283 // Frozen elements need to be prioritized based on their previous interv al.
286 aBegin = a->isFrozen() && m_elapsed < aBegin ? a->previousIntervalBegin( ) : aBegin; 284 aBegin = a->isFrozen() && m_elapsed < aBegin ? a->previousIntervalBegin( ) : aBegin;
287 bBegin = b->isFrozen() && m_elapsed < bBegin ? b->previousIntervalBegin( ) : bBegin; 285 bBegin = b->isFrozen() && m_elapsed < bBegin ? b->previousIntervalBegin( ) : bBegin;
288 if (aBegin == bBegin) 286 if (aBegin == bBegin)
289 return a->documentOrderIndex() < b->documentOrderIndex(); 287 return a->documentOrderIndex() < b->documentOrderIndex();
290 return aBegin < bBegin; 288 return aBegin < bBegin;
291 } 289 }
292 SMILTime m_elapsed; 290 SMILTime m_elapsed;
293 }; 291 };
294 292
295 Document& SMILTimeContainer::document() const 293 Document& SMILTimeContainer::document() const
296 { 294 {
297 ASSERT(m_ownerSVGElement); 295 return m_ownerSVGElement.document();
298 return m_ownerSVGElement->document();
299 } 296 }
300 297
301 AnimationClock& SMILTimeContainer::animationClock() const 298 AnimationClock& SMILTimeContainer::animationClock() const
302 { 299 {
303 ASSERT(m_animationClock); 300 ASSERT(m_animationClock);
304 return *m_animationClock; 301 return *m_animationClock;
305 } 302 }
306 303
307 double SMILTimeContainer::currentTime() const 304 double SMILTimeContainer::currentTime() const
308 { 305 {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 if (animDiscard->inDocument()) { 420 if (animDiscard->inDocument()) {
424 animDiscard->remove(IGNORE_EXCEPTION); 421 animDiscard->remove(IGNORE_EXCEPTION);
425 ASSERT(!animDiscard->inDocument()); 422 ASSERT(!animDiscard->inDocument());
426 } 423 }
427 } 424 }
428 } 425 }
429 return earliestFireTime; 426 return earliestFireTime;
430 } 427 }
431 428
432 } 429 }
OLDNEW
« no previous file with comments | « Source/core/svg/animation/SMILTimeContainer.h ('k') | Source/core/svg/animation/SVGSMILElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698