WebKitCSSKeyframeRule.cpp [plain text]
#include "config.h"
#include "WebKitCSSKeyframeRule.h"
#include "PropertySetCSSStyleDeclaration.h"
#include "StylePropertySet.h"
#include "WebKitCSSKeyframesRule.h"
#include <wtf/text/StringBuilder.h>
namespace WebCore {
StyleKeyframe::StyleKeyframe()
{
}
StyleKeyframe::~StyleKeyframe()
{
}
MutableStylePropertySet* StyleKeyframe::mutableProperties()
{
if (!m_properties->isMutable())
m_properties = m_properties->mutableCopy();
return static_cast<MutableStylePropertySet*>(m_properties.get());
}
void StyleKeyframe::setProperties(PassRefPtr<StylePropertySet> properties)
{
m_properties = properties;
}
void StyleKeyframe::parseKeyString(const String& s, Vector<float>& keys)
{
keys.clear();
Vector<String> strings;
s.split(',', strings);
for (size_t i = 0; i < strings.size(); ++i) {
float key = -1;
String cur = strings[i].stripWhiteSpace();
if (cur == "from")
key = 0;
else if (cur == "to")
key = 1;
else if (cur.endsWith('%')) {
float k = cur.substring(0, cur.length() - 1).toFloat();
if (k >= 0 && k <= 100)
key = k/100;
}
if (key < 0) {
keys.clear();
return;
}
else
keys.append(key);
}
}
String StyleKeyframe::cssText() const
{
StringBuilder result;
result.append(keyText());
result.appendLiteral(" { ");
String decls = m_properties->asText();
result.append(decls);
if (!decls.isEmpty())
result.append(' ');
result.append('}');
return result.toString();
}
WebKitCSSKeyframeRule::WebKitCSSKeyframeRule(StyleKeyframe* keyframe, WebKitCSSKeyframesRule* parent)
: CSSRule(0)
, m_keyframe(keyframe)
{
setParentRule(parent);
}
WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule()
{
if (m_propertiesCSSOMWrapper)
m_propertiesCSSOMWrapper->clearParentRule();
}
CSSStyleDeclaration* WebKitCSSKeyframeRule::style()
{
if (!m_propertiesCSSOMWrapper)
m_propertiesCSSOMWrapper = StyleRuleCSSStyleDeclaration::create(m_keyframe->mutableProperties(), this);
return m_propertiesCSSOMWrapper.get();
}
void WebKitCSSKeyframeRule::reattach(StyleRuleBase*)
{
ASSERT_NOT_REACHED();
}
}