WebKitCSSKeyframeRule.cpp [plain text]
#include "config.h"
#include "WebKitCSSKeyframeRule.h"
#include "PropertySetCSSStyleDeclaration.h"
#include "StyleProperties.h"
#include "WebKitCSSKeyframesRule.h"
#include <wtf/text/StringBuilder.h>
namespace WebCore {
StyleKeyframe::StyleKeyframe(PassRef<StyleProperties> properties)
: m_properties(WTF::move(properties))
{
}
StyleKeyframe::~StyleKeyframe()
{
}
MutableStyleProperties& StyleKeyframe::mutableProperties()
{
if (!m_properties->isMutable())
m_properties = m_properties->mutableCopy();
return static_cast<MutableStyleProperties&>(m_properties.get());
}
void StyleKeyframe::parseKeyString(const String& s, Vector<double>& keys)
{
keys.clear();
Vector<String> strings;
s.split(',', strings);
for (size_t i = 0; i < strings.size(); ++i) {
double key = -1;
String cur = strings[i].stripWhiteSpace();
if (cur == "from")
key = 0;
else if (cur == "to")
key = 1;
else if (cur.endsWith('%')) {
double k = cur.substring(0, cur.length() - 1).toDouble();
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();
}
}