#pragma once
#include "FloatRect.h"
#include "QualifiedName.h"
#include "SVGNames.h"
#include "SVGPreserveAspectRatio.h"
#include <wtf/HashSet.h>
namespace WebCore {
class AffineTransform;
class Document;
class SVGFitToViewBox {
public:
static AffineTransform viewBoxToViewTransform(const FloatRect& viewBoxRect, const SVGPreserveAspectRatioValue&, float viewWidth, float viewHeight);
static bool isKnownAttribute(const QualifiedName&);
static void addSupportedAttributes(HashSet<QualifiedName>&);
template<class SVGElementTarget>
static bool parseAttribute(SVGElementTarget* target, const QualifiedName& name, const AtomicString& value)
{
ASSERT(target);
if (name == SVGNames::viewBoxAttr) {
FloatRect viewBox;
bool valueIsValid = !value.isNull() && parseViewBox(&target->document(), value, viewBox);
target->setViewBoxBaseValue(viewBox, valueIsValid);
return true;
}
if (name == SVGNames::preserveAspectRatioAttr) {
SVGPreserveAspectRatioValue preserveAspectRatio;
preserveAspectRatio.parse(value);
target->setPreserveAspectRatioBaseValue(preserveAspectRatio);
return true;
}
return false;
}
static bool parseViewBox(Document*, const UChar*& start, const UChar* end, FloatRect& viewBox, bool validate = true);
private:
static bool parseViewBox(Document*, const String&, FloatRect&);
};
}