blob: 0010d8f709ca53d64d2afcda5e048007a34ed6f2 [file] [log] [blame]
dino@apple.coma001d322008-08-05 23:01:41 +00001/*
akling@apple.comc713db32012-11-22 03:45:40 +00002 * Copyright (C) 2007, 2008, 2012 Apple Inc. All rights reserved.
dino@apple.coma001d322008-08-05 23:01:41 +00003 *
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 COMPUTER, 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 COMPUTER, 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
apavlov@chromium.orgf684aec2011-10-19 13:31:03 +000023 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dino@apple.coma001d322008-08-05 23:01:41 +000024 */
25
26#ifndef WebKitCSSKeyframeRule_h
27#define WebKitCSSKeyframeRule_h
28
29#include "CSSRule.h"
dino@apple.coma001d322008-08-05 23:01:41 +000030
31namespace WebCore {
32
akling@apple.com179f7df2013-02-25 15:49:25 +000033class CSSStyleDeclaration;
akling@apple.comb977e612013-04-14 15:19:59 +000034class MutableStylePropertySet;
akling@apple.com179f7df2013-02-25 15:49:25 +000035class StylePropertySet;
antti@apple.com745b7902012-03-31 18:02:35 +000036class StyleRuleCSSStyleDeclaration;
antti@apple.com64288372012-03-29 10:17:19 +000037class WebKitCSSKeyframesRule;
38
39class StyleKeyframe : public RefCounted<StyleKeyframe> {
zoltan@webkit.org2eb7bec2012-09-14 09:12:48 +000040 WTF_MAKE_FAST_ALLOCATED;
antti@apple.com64288372012-03-29 10:17:19 +000041public:
42 static PassRefPtr<StyleKeyframe> create()
43 {
44 return adoptRef(new StyleKeyframe());
45 }
akling@apple.com179f7df2013-02-25 15:49:25 +000046 ~StyleKeyframe();
antti@apple.com64288372012-03-29 10:17:19 +000047
48 String keyText() const { return m_key; }
49 void setKeyText(const String& s) { m_key = s; }
50
51 void getKeys(Vector<float>& keys) const { parseKeyString(m_key, keys); }
52
commit-queue@webkit.org42eb4e12012-07-18 15:15:22 +000053 const StylePropertySet* properties() const { return m_properties.get(); }
akling@apple.comb977e612013-04-14 15:19:59 +000054 MutableStylePropertySet* mutableProperties();
antti@apple.com64288372012-03-29 10:17:19 +000055 void setProperties(PassRefPtr<StylePropertySet>);
56
57 String cssText() const;
58
akling@apple.com179f7df2013-02-25 15:49:25 +000059private:
60 StyleKeyframe();
antti@apple.com64288372012-03-29 10:17:19 +000061
62 static void parseKeyString(const String&, Vector<float>& keys);
63
64 RefPtr<StylePropertySet> m_properties;
65 // FIXME: This should be a parsed vector of floats.
66 // comma separated list of keys
67 String m_key;
68};
dino@apple.coma001d322008-08-05 23:01:41 +000069
70class WebKitCSSKeyframeRule : public CSSRule {
71public:
akling@apple.comc713db32012-11-22 03:45:40 +000072 virtual ~WebKitCSSKeyframeRule();
73
74 virtual CSSRule::Type type() const OVERRIDE { return WEBKIT_KEYFRAME_RULE; }
75 virtual String cssText() const OVERRIDE { return m_keyframe->cssText(); }
76 virtual void reattach(StyleRuleBase*) OVERRIDE;
dino@apple.coma001d322008-08-05 23:01:41 +000077
antti@apple.com64288372012-03-29 10:17:19 +000078 String keyText() const { return m_keyframe->keyText(); }
79 void setKeyText(const String& s) { m_keyframe->setKeyText(s); }
apavlov@chromium.orgf684aec2011-10-19 13:31:03 +000080
akling@apple.comca809842013-05-03 20:27:39 +000081 CSSStyleDeclaration* style();
dino@apple.coma001d322008-08-05 23:01:41 +000082
dino@apple.coma001d322008-08-05 23:01:41 +000083private:
antti@apple.com64288372012-03-29 10:17:19 +000084 WebKitCSSKeyframeRule(StyleKeyframe*, WebKitCSSKeyframesRule* parent);
apavlov@chromium.orgf684aec2011-10-19 13:31:03 +000085
antti@apple.com64288372012-03-29 10:17:19 +000086 RefPtr<StyleKeyframe> m_keyframe;
antti@apple.com745b7902012-03-31 18:02:35 +000087 mutable RefPtr<StyleRuleCSSStyleDeclaration> m_propertiesCSSOMWrapper;
88
antti@apple.com64288372012-03-29 10:17:19 +000089 friend class WebKitCSSKeyframesRule;
dino@apple.coma001d322008-08-05 23:01:41 +000090};
91
92} // namespace WebCore
93
94#endif // WebKitCSSKeyframeRule_h