CustomFilterTransformParameter.h [plain text]
#ifndef CustomFilterTransformParameter_h
#define CustomFilterTransformParameter_h
#if ENABLE(CSS_SHADERS)
#include "CustomFilterParameter.h"
#include "FloatSize.h"
#include "TransformOperations.h"
namespace WebCore {
class FloatRect;
class TransformationMatrix;
class CustomFilterTransformParameter : public CustomFilterParameter {
public:
static PassRefPtr<CustomFilterTransformParameter> create(const String& name)
{
return adoptRef(new CustomFilterTransformParameter(name));
}
virtual PassRefPtr<CustomFilterParameter> blend(const CustomFilterParameter* fromParameter, double progress, const LayoutSize& size)
{
if (!fromParameter || !isSameType(*fromParameter))
return this;
const CustomFilterTransformParameter* fromTransformParameter = static_cast<const CustomFilterTransformParameter*>(fromParameter);
const TransformOperations& from = fromTransformParameter->operations();
const TransformOperations& to = operations();
if (from == to)
return this;
RefPtr<CustomFilterTransformParameter> result = CustomFilterTransformParameter::create(name());
if (from.size() && to.size())
result->setOperations(to.blend(from, progress, size));
else
result->setOperations(progress > 0.5 ? to : from);
return result;
}
virtual bool operator==(const CustomFilterParameter& o) const
{
if (!isSameType(o))
return false;
const CustomFilterTransformParameter* other = static_cast<const CustomFilterTransformParameter*>(&o);
return m_operations == other->m_operations;
}
void applyTransform(TransformationMatrix& transform, const FloatSize& boxSize) const
{
for (unsigned i = 0, size = m_operations.size(); i < size; ++i)
m_operations.at(i)->apply(transform, boxSize);
}
const TransformOperations& operations() const { return m_operations; }
void setOperations(const TransformOperations& value) { m_operations = value; }
private:
CustomFilterTransformParameter(const String& name)
: CustomFilterParameter(TRANSFORM, name)
{
}
virtual ~CustomFilterTransformParameter()
{
}
TransformOperations m_operations;
};
}
#endif // ENABLE(CSS_SHADERS)
#endif // CustomFilterTransformParameter_h