This source file includes following definitions.
- toSVGEnumerationBase
- cloneForAnimation
- valueAsString
- setValue
- setValueAsString
- add
- calculateAnimatedValue
- calculateDistance
#include "config.h"
#include "core/svg/SVGEnumeration.h"
#include "bindings/v8/ExceptionState.h"
#include "bindings/v8/ExceptionStatePlaceholder.h"
#include "core/dom/ExceptionCode.h"
#include "core/svg/SVGAnimationElement.h"
namespace WebCore {
inline PassRefPtr<SVGEnumerationBase> toSVGEnumerationBase(PassRefPtr<SVGPropertyBase> passBase)
{
RefPtr<SVGPropertyBase> base = passBase;
ASSERT(base->type() == SVGEnumerationBase::classType());
return static_pointer_cast<SVGEnumerationBase>(base.release());
}
SVGEnumerationBase::~SVGEnumerationBase()
{
}
PassRefPtr<SVGPropertyBase> SVGEnumerationBase::cloneForAnimation(const String& value) const
{
RefPtr<SVGEnumerationBase> svgEnumeration = clone();
svgEnumeration->setValueAsString(value, IGNORE_EXCEPTION);
return svgEnumeration.release();
}
String SVGEnumerationBase::valueAsString() const
{
StringEntries::const_iterator it = m_entries.begin();
StringEntries::const_iterator itEnd = m_entries.end();
for (; it != itEnd; ++it) {
if (m_value == it->first)
return it->second;
}
ASSERT_NOT_REACHED();
return String();
}
void SVGEnumerationBase::setValue(unsigned short value, ExceptionState& exceptionState)
{
if (!value) {
exceptionState.throwTypeError("The enumeration value provided is 0, which is not settable.");
return;
}
if (value > maxEnumValue()) {
exceptionState.throwTypeError("The enumeration value provided (" + String::number(value) + ") is larger than the largest allowed value (" + String::number(maxEnumValue()) + ").");
return;
}
m_value = value;
notifyChange();
}
void SVGEnumerationBase::setValueAsString(const String& string, ExceptionState& exceptionState)
{
StringEntries::const_iterator it = m_entries.begin();
StringEntries::const_iterator itEnd = m_entries.end();
for (; it != itEnd; ++it) {
if (string == it->second) {
m_value = it->first;
notifyChange();
return;
}
}
exceptionState.throwDOMException(SyntaxError, "The value provided ('" + string + "') is invalid.");
notifyChange();
}
void SVGEnumerationBase::add(PassRefPtr<SVGPropertyBase>, SVGElement*)
{
ASSERT_NOT_REACHED();
}
void SVGEnumerationBase::calculateAnimatedValue(SVGAnimationElement* animationElement, float percentage, unsigned repeatCount, PassRefPtr<SVGPropertyBase> from, PassRefPtr<SVGPropertyBase> to, PassRefPtr<SVGPropertyBase>, SVGElement*)
{
ASSERT(animationElement);
unsigned short fromEnumeration = animationElement->animationMode() == ToAnimation ? m_value : toSVGEnumerationBase(from)->value();
unsigned short toEnumeration = toSVGEnumerationBase(to)->value();
animationElement->animateDiscreteType<unsigned short>(percentage, fromEnumeration, toEnumeration, m_value);
}
float SVGEnumerationBase::calculateDistance(PassRefPtr<SVGPropertyBase>, SVGElement*)
{
return -1;
}
}