• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007, 2008, 2012 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 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
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef CSSKeyframesRule_h
27 #define CSSKeyframesRule_h
28 
29 #include "core/css/CSSRule.h"
30 #include "core/css/StyleRule.h"
31 #include "wtf/Forward.h"
32 #include "wtf/text/AtomicString.h"
33 
34 namespace WebCore {
35 
36 class CSSRuleList;
37 class StyleKeyframe;
38 class CSSKeyframeRule;
39 
40 class StyleRuleKeyframes FINAL : public StyleRuleBase {
41 public:
create()42     static PassRefPtr<StyleRuleKeyframes> create() { return adoptRef(new StyleRuleKeyframes()); }
43 
44     ~StyleRuleKeyframes();
45 
keyframes()46     const Vector<RefPtr<StyleKeyframe> >& keyframes() const { return m_keyframes; }
47 
48     void parserAppendKeyframe(PassRefPtr<StyleKeyframe>);
49     void wrapperAppendKeyframe(PassRefPtr<StyleKeyframe>);
50     void wrapperRemoveKeyframe(unsigned);
51 
name()52     String name() const { return m_name; }
setName(const String & name)53     void setName(const String& name) { m_name = AtomicString(name); }
54 
isVendorPrefixed()55     bool isVendorPrefixed() const { return m_isPrefixed; }
setVendorPrefixed(bool isPrefixed)56     void setVendorPrefixed(bool isPrefixed) { m_isPrefixed = isPrefixed; }
57 
58     int findKeyframeIndex(const String& key) const;
59 
copy()60     PassRefPtr<StyleRuleKeyframes> copy() const { return adoptRef(new StyleRuleKeyframes(*this)); }
61 
62 private:
63     StyleRuleKeyframes();
64     explicit StyleRuleKeyframes(const StyleRuleKeyframes&);
65 
66     Vector<RefPtr<StyleKeyframe> > m_keyframes;
67     AtomicString m_name;
68     bool m_isPrefixed;
69 };
70 
71 DEFINE_STYLE_RULE_TYPE_CASTS(Keyframes);
72 
73 class CSSKeyframesRule FINAL : public CSSRule {
74 public:
create(StyleRuleKeyframes * rule,CSSStyleSheet * sheet)75     static PassRefPtr<CSSKeyframesRule> create(StyleRuleKeyframes* rule, CSSStyleSheet* sheet) { return adoptRef(new CSSKeyframesRule(rule, sheet)); }
76 
77     virtual ~CSSKeyframesRule();
78 
type()79     virtual CSSRule::Type type() const OVERRIDE { return KEYFRAMES_RULE; }
80     virtual String cssText() const OVERRIDE;
81     virtual void reattach(StyleRuleBase*) OVERRIDE;
82 
name()83     String name() const { return m_keyframesRule->name(); }
84     void setName(const String&);
85 
86     CSSRuleList* cssRules();
87 
88     void insertRule(const String& rule);
89     void deleteRule(const String& key);
90     CSSKeyframeRule* findRule(const String& key);
91 
92     // For IndexedGetter and CSSRuleList.
93     unsigned length() const;
94     CSSKeyframeRule* item(unsigned index) const;
95 
isVendorPrefixed()96     bool isVendorPrefixed() const { return m_isPrefixed; }
setVendorPrefixed(bool isPrefixed)97     void setVendorPrefixed(bool isPrefixed) { m_isPrefixed = isPrefixed; }
98 
99 private:
100     CSSKeyframesRule(StyleRuleKeyframes*, CSSStyleSheet* parent);
101 
102     RefPtr<StyleRuleKeyframes> m_keyframesRule;
103     mutable Vector<RefPtr<CSSKeyframeRule> > m_childRuleCSSOMWrappers;
104     mutable OwnPtr<CSSRuleList> m_ruleListCSSOMWrapper;
105     bool m_isPrefixed;
106 };
107 
108 DEFINE_CSS_RULE_TYPE_CASTS(CSSKeyframesRule, KEYFRAMES_RULE);
109 
110 } // namespace WebCore
111 
112 #endif // CSSKeyframesRule_h
113