Home | History | Annotate | Download | only in css
      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:
     42     static PassRefPtrWillBeRawPtr<StyleRuleKeyframes> create() { return adoptRefWillBeNoop(new StyleRuleKeyframes()); }
     43 
     44     ~StyleRuleKeyframes();
     45 
     46     const WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> >& keyframes() const { return m_keyframes; }
     47 
     48     void parserAppendKeyframe(PassRefPtrWillBeRawPtr<StyleKeyframe>);
     49     void wrapperAppendKeyframe(PassRefPtrWillBeRawPtr<StyleKeyframe>);
     50     void wrapperRemoveKeyframe(unsigned);
     51 
     52     String name() const { return m_name; }
     53     void setName(const String& name) { m_name = AtomicString(name); }
     54 
     55     bool isVendorPrefixed() const { return m_isPrefixed; }
     56     void setVendorPrefixed(bool isPrefixed) { m_isPrefixed = isPrefixed; }
     57 
     58     int findKeyframeIndex(const String& key) const;
     59 
     60     PassRefPtrWillBeRawPtr<StyleRuleKeyframes> copy() const { return adoptRefWillBeNoop(new StyleRuleKeyframes(*this)); }
     61 
     62     void traceAfterDispatch(Visitor*);
     63 
     64 private:
     65     StyleRuleKeyframes();
     66     explicit StyleRuleKeyframes(const StyleRuleKeyframes&);
     67 
     68     WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> > m_keyframes;
     69     AtomicString m_name;
     70     bool m_isPrefixed;
     71 };
     72 
     73 DEFINE_STYLE_RULE_TYPE_CASTS(Keyframes);
     74 
     75 class CSSKeyframesRule FINAL : public CSSRule {
     76 public:
     77     static PassRefPtrWillBeRawPtr<CSSKeyframesRule> create(StyleRuleKeyframes* rule, CSSStyleSheet* sheet)
     78     {
     79         return adoptRefWillBeNoop(new CSSKeyframesRule(rule, sheet));
     80     }
     81 
     82     virtual ~CSSKeyframesRule();
     83 
     84     virtual CSSRule::Type type() const OVERRIDE { return KEYFRAMES_RULE; }
     85     virtual String cssText() const OVERRIDE;
     86     virtual void reattach(StyleRuleBase*) OVERRIDE;
     87 
     88     String name() const { return m_keyframesRule->name(); }
     89     void setName(const String&);
     90 
     91     CSSRuleList* cssRules();
     92 
     93     void insertRule(const String& rule);
     94     void deleteRule(const String& key);
     95     CSSKeyframeRule* findRule(const String& key);
     96 
     97     // For IndexedGetter and CSSRuleList.
     98     unsigned length() const;
     99     CSSKeyframeRule* item(unsigned index) const;
    100 
    101     bool isVendorPrefixed() const { return m_isPrefixed; }
    102     void setVendorPrefixed(bool isPrefixed) { m_isPrefixed = isPrefixed; }
    103 
    104     virtual void trace(Visitor*) OVERRIDE;
    105 
    106 private:
    107     CSSKeyframesRule(StyleRuleKeyframes*, CSSStyleSheet* parent);
    108 
    109     RefPtrWillBeMember<StyleRuleKeyframes> m_keyframesRule;
    110     mutable WillBeHeapVector<RefPtrWillBeMember<CSSKeyframeRule> > m_childRuleCSSOMWrappers;
    111     mutable OwnPtrWillBeMember<CSSRuleList> m_ruleListCSSOMWrapper;
    112     bool m_isPrefixed;
    113 };
    114 
    115 DEFINE_CSS_RULE_TYPE_CASTS(CSSKeyframesRule, KEYFRAMES_RULE);
    116 
    117 } // namespace WebCore
    118 
    119 #endif // CSSKeyframesRule_h
    120