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 CSSKeyframeRule_h
     27 #define CSSKeyframeRule_h
     28 
     29 #include "core/css/CSSRule.h"
     30 
     31 namespace WebCore {
     32 
     33 class CSSStyleDeclaration;
     34 class MutableStylePropertySet;
     35 class StylePropertySet;
     36 class StyleRuleCSSStyleDeclaration;
     37 class CSSKeyframesRule;
     38 
     39 class StyleKeyframe : public RefCounted<StyleKeyframe> {
     40     WTF_MAKE_FAST_ALLOCATED;
     41 public:
     42     static PassRefPtr<StyleKeyframe> create()
     43     {
     44         return adoptRef(new StyleKeyframe());
     45     }
     46     ~StyleKeyframe();
     47 
     48     String keyText() const { return m_key; }
     49     // FIXME: Should we trim whitespace?
     50     // FIXME: Should we leave keyText unchanged when attempting to set to an
     51     // invalid string?
     52     void setKeyText(const String& s) { m_key = s; }
     53 
     54     void getKeys(Vector<float>& keys) const   { parseKeyString(m_key, keys); }
     55 
     56     const StylePropertySet* properties() const { return m_properties.get(); }
     57     MutableStylePropertySet* mutableProperties();
     58     void setProperties(PassRefPtr<StylePropertySet>);
     59 
     60     String cssText() const;
     61 
     62 private:
     63     StyleKeyframe();
     64 
     65     static void parseKeyString(const String&, Vector<float>& keys);
     66 
     67     RefPtr<StylePropertySet> m_properties;
     68     // FIXME: This should be a parsed vector of floats.
     69     // comma separated list of keys
     70     String m_key;
     71 };
     72 
     73 class CSSKeyframeRule : public CSSRule {
     74 public:
     75     virtual ~CSSKeyframeRule();
     76 
     77     virtual CSSRule::Type type() const OVERRIDE { return WEBKIT_KEYFRAME_RULE; }
     78     virtual String cssText() const OVERRIDE { return m_keyframe->cssText(); }
     79     virtual void reattach(StyleRuleBase*) OVERRIDE;
     80 
     81     String keyText() const { return m_keyframe->keyText(); }
     82     void setKeyText(const String& s) { m_keyframe->setKeyText(s); }
     83 
     84     CSSStyleDeclaration* style() const;
     85 
     86 private:
     87     CSSKeyframeRule(StyleKeyframe*, CSSKeyframesRule* parent);
     88 
     89     RefPtr<StyleKeyframe> m_keyframe;
     90     mutable RefPtr<StyleRuleCSSStyleDeclaration> m_propertiesCSSOMWrapper;
     91 
     92     friend class CSSKeyframesRule;
     93 };
     94 
     95 } // namespace WebCore
     96 
     97 #endif // CSSKeyframeRule_h
     98