summaryrefslogtreecommitdiffstats
path: root/WebCore/svg/SVGFitToViewBox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/svg/SVGFitToViewBox.cpp')
-rw-r--r--WebCore/svg/SVGFitToViewBox.cpp89
1 files changed, 51 insertions, 38 deletions
diff --git a/WebCore/svg/SVGFitToViewBox.cpp b/WebCore/svg/SVGFitToViewBox.cpp
index 64c978f..c78a619 100644
--- a/WebCore/svg/SVGFitToViewBox.cpp
+++ b/WebCore/svg/SVGFitToViewBox.cpp
@@ -1,22 +1,22 @@
/*
- Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
+ * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2004, 2005, 2006, 2007, 2010 Rob Buis <buis@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
#include "config.h"
@@ -27,11 +27,10 @@
#include "Attr.h"
#include "Document.h"
#include "FloatRect.h"
-#include "MappedAttribute.h"
#include "SVGNames.h"
#include "SVGParserUtilities.h"
#include "SVGPreserveAspectRatio.h"
-#include "StringImpl.h"
+#include <wtf/text/StringImpl.h>
namespace WebCore {
@@ -43,35 +42,49 @@ SVGFitToViewBox::~SVGFitToViewBox()
{
}
-bool SVGFitToViewBox::parseViewBox(Document* doc, const UChar*& c, const UChar* end, float& x, float& y, float& w, float& h, bool validate)
+bool SVGFitToViewBox::parseViewBox(Document* doc, const String& s, FloatRect& viewBox)
+{
+ const UChar* c = s.characters();
+ const UChar* end = c + s.length();
+ return parseViewBox(doc, c, end, viewBox, true);
+}
+
+bool SVGFitToViewBox::parseViewBox(Document* doc, const UChar*& c, const UChar* end, FloatRect& viewBox, bool validate)
{
String str(c, end - c);
skipOptionalSpaces(c, end);
+ float x = 0.0f;
+ float y = 0.0f;
+ float width = 0.0f;
+ float height = 0.0f;
bool valid = (parseNumber(c, end, x) && parseNumber(c, end, y) &&
- parseNumber(c, end, w) && parseNumber(c, end, h, false));
- if (!validate)
+ parseNumber(c, end, width) && parseNumber(c, end, height, false));
+ if (!validate) {
+ viewBox = FloatRect(x, y, width, height);
return true;
+ }
if (!valid) {
doc->accessSVGExtensions()->reportWarning("Problem parsing viewBox=\"" + str + "\"");
return false;
}
- if (w < 0.0) { // check that width is positive
+ if (width < 0.0) { // check that width is positive
doc->accessSVGExtensions()->reportError("A negative value for ViewBox width is not allowed");
return false;
- } else if (h < 0.0) { // check that height is positive
+ }
+ if (height < 0.0) { // check that height is positive
doc->accessSVGExtensions()->reportError("A negative value for ViewBox height is not allowed");
return false;
- } else {
- skipOptionalSpaces(c, end);
- if (c < end) { // nothing should come after the last, fourth number
- doc->accessSVGExtensions()->reportWarning("Problem parsing viewBox=\"" + str + "\"");
- return false;
- }
+ }
+ skipOptionalSpaces(c, end);
+ if (c < end) { // nothing should come after the last, fourth number
+ doc->accessSVGExtensions()->reportWarning("Problem parsing viewBox=\"" + str + "\"");
+ return false;
}
+ viewBox = FloatRect(x, y, width, height);
return true;
}
@@ -83,15 +96,15 @@ AffineTransform SVGFitToViewBox::viewBoxToViewTransform(const FloatRect& viewBox
return preserveAspectRatio.getCTM(viewBoxRect.x(), viewBoxRect.y(), viewBoxRect.width(), viewBoxRect.height(), 0, 0, viewWidth, viewHeight);
}
-bool SVGFitToViewBox::parseMappedAttribute(Document* document, MappedAttribute* attr)
+bool SVGFitToViewBox::parseMappedAttribute(Document* document, Attribute* attr)
{
if (attr->name() == SVGNames::viewBoxAttr) {
- float x = 0.0f, y = 0.0f, w = 0.0f, h = 0.0f;
- const UChar* c = attr->value().characters();
- const UChar* end = c + attr->value().length();
- if (parseViewBox(document, c, end, x, y, w, h))
- setViewBoxBaseValue(FloatRect(x, y, w, h));
- return true;
+ FloatRect viewBox;
+ if (!attr->value().isNull()) {
+ if (!parseViewBox(document, attr->value(), viewBox))
+ return true;
+ }
+ setViewBoxBaseValue(viewBox);
} else if (attr->name() == SVGNames::preserveAspectRatioAttr) {
SVGPreserveAspectRatio::parsePreserveAspectRatio(this, attr->value());
return true;