Use "= default" to denote default constructor or destructor
[WebKit-https.git] / Source / WebCore / platform / animation / Animation.cpp
1 /*
2  * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
3  * Copyright (C) 2004-2017 Apple Inc. All rights reserved.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  *
20  */
21
22 #include "config.h"
23 #include "Animation.h"
24
25 #include <wtf/NeverDestroyed.h>
26
27 namespace WebCore {
28
29 Animation::Animation()
30     : m_name(initialName())
31     , m_property(CSSPropertyInvalid)
32     , m_mode(AnimateAll)
33     , m_iterationCount(initialIterationCount())
34     , m_delay(initialDelay())
35     , m_duration(initialDuration())
36     , m_timingFunction(initialTimingFunction())
37 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
38     , m_trigger(initialTrigger())
39 #endif
40     , m_direction(initialDirection())
41     , m_fillMode(initialFillMode())
42     , m_playState(initialPlayState())
43     , m_delaySet(false)
44     , m_directionSet(false)
45     , m_durationSet(false)
46     , m_fillModeSet(false)
47     , m_iterationCountSet(false)
48     , m_nameSet(false)
49     , m_playStateSet(false)
50     , m_propertySet(false)
51     , m_timingFunctionSet(false)
52 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
53     , m_triggerSet(false)
54 #endif
55     , m_isNone(false)
56 {
57 }
58
59 Animation::Animation(const Animation& o)
60     : RefCounted<Animation>()
61     , m_name(o.m_name)
62     , m_nameStyleScopeOrdinal(o.m_nameStyleScopeOrdinal)
63     , m_property(o.m_property)
64     , m_mode(o.m_mode)
65     , m_iterationCount(o.m_iterationCount)
66     , m_delay(o.m_delay)
67     , m_duration(o.m_duration)
68     , m_timingFunction(o.m_timingFunction)
69 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
70     , m_trigger(o.m_trigger)
71 #endif
72     , m_direction(o.m_direction)
73     , m_fillMode(o.m_fillMode)
74     , m_playState(o.m_playState)
75     , m_delaySet(o.m_delaySet)
76     , m_directionSet(o.m_directionSet)
77     , m_durationSet(o.m_durationSet)
78     , m_fillModeSet(o.m_fillModeSet)
79     , m_iterationCountSet(o.m_iterationCountSet)
80     , m_nameSet(o.m_nameSet)
81     , m_playStateSet(o.m_playStateSet)
82     , m_propertySet(o.m_propertySet)
83     , m_timingFunctionSet(o.m_timingFunctionSet)
84 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
85     , m_triggerSet(o.m_triggerSet)
86 #endif
87     , m_isNone(o.m_isNone)
88 {
89 }
90
91 Animation& Animation::operator=(const Animation& o)
92 {
93     m_name = o.m_name;
94     m_nameStyleScopeOrdinal = o.m_nameStyleScopeOrdinal;
95     m_property = o.m_property;
96     m_mode = o.m_mode;
97     m_iterationCount = o.m_iterationCount;
98     m_delay = o.m_delay;
99     m_duration = o.m_duration;
100     m_timingFunction = o.m_timingFunction;
101 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
102     m_trigger = o.m_trigger;
103 #endif
104     m_direction = o.m_direction;
105     m_fillMode = o.m_fillMode;
106     m_playState = o.m_playState;
107 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
108     m_trigger = o.m_trigger;
109 #endif
110
111     m_delaySet = o.m_delaySet;
112     m_directionSet = o.m_directionSet;
113     m_durationSet = o.m_durationSet;
114     m_fillModeSet = o.m_fillModeSet;
115     m_iterationCountSet = o.m_iterationCountSet;
116     m_nameSet = o.m_nameSet;
117     m_playStateSet = o.m_playStateSet;
118     m_propertySet = o.m_propertySet;
119     m_timingFunctionSet = o.m_timingFunctionSet;
120 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
121     m_triggerSet = o.m_triggerSet;
122 #endif
123     m_isNone = o.m_isNone;
124
125     return *this;
126 }
127
128 Animation::~Animation() = default;
129
130 bool Animation::animationsMatch(const Animation& other, bool matchPlayStates) const
131 {
132     bool result = m_name == other.m_name
133         && m_nameStyleScopeOrdinal == other.m_nameStyleScopeOrdinal
134         && m_property == other.m_property
135         && m_mode == other.m_mode
136         && m_iterationCount == other.m_iterationCount
137         && m_delay == other.m_delay
138         && m_duration == other.m_duration
139         && *(m_timingFunction.get()) == *(other.m_timingFunction.get())
140 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
141         && *(m_trigger.get()) == *(other.m_trigger.get())
142 #endif
143         && m_direction == other.m_direction
144         && m_fillMode == other.m_fillMode
145         && m_delaySet == other.m_delaySet
146         && m_directionSet == other.m_directionSet
147         && m_durationSet == other.m_durationSet
148         && m_fillModeSet == other.m_fillModeSet
149         && m_iterationCountSet == other.m_iterationCountSet
150         && m_nameSet == other.m_nameSet
151         && m_propertySet == other.m_propertySet
152         && m_timingFunctionSet == other.m_timingFunctionSet
153 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
154         && m_triggerSet == other.m_triggerSet
155 #endif
156         && m_isNone == other.m_isNone;
157
158     if (!result)
159         return false;
160
161     return !matchPlayStates || (m_playState == other.m_playState && m_playStateSet == other.m_playStateSet);
162 }
163
164 const String& Animation::initialName()
165 {
166     static NeverDestroyed<String> initialValue(MAKE_STATIC_STRING_IMPL("none"));
167     return initialValue;
168 }
169
170 } // namespace WebCore