bool RectangleShape::loadSvg(const KoXmlElement &element, SvgLoadingContext &context) { const qreal x = SvgUtil::parseUnitX(context.currentGC(), element.attribute("x")); const qreal y = SvgUtil::parseUnitY(context.currentGC(), element.attribute("y")); const qreal w = SvgUtil::parseUnitX(context.currentGC(), element.attribute("width")); const qreal h = SvgUtil::parseUnitY(context.currentGC(), element.attribute("height")); const QString rxStr = element.attribute("rx"); const QString ryStr = element.attribute("ry"); qreal rx = rxStr.isEmpty() ? 0.0 : SvgUtil::parseUnitX(context.currentGC(), rxStr); qreal ry = ryStr.isEmpty() ? 0.0 : SvgUtil::parseUnitY(context.currentGC(), ryStr); // if one radius is given but not the other, use the same value for both if (!rxStr.isEmpty() && ryStr.isEmpty()) ry = rx; if (rxStr.isEmpty() && !ryStr.isEmpty()) rx = ry; setSize(QSizeF(w, h)); setPosition(QPointF(x, y)); if (rx >= 0.0) setCornerRadiusX(qMin(qreal(100.0), qreal(rx / (0.5 * w) * 100.0))); if (ry >= 0.0) setCornerRadiusY(qMin(qreal(100.0), qreal(ry / (0.5 * h) * 100.0))); if (w == 0.0 || h == 0.0) setVisible(false); return true; }
bool PictureShape::loadSvg(const KoXmlElement &element, SvgLoadingContext &context) { const qreal x = SvgUtil::parseUnitX(context.currentGC(), element.attribute("x", "0")); const qreal y = SvgUtil::parseUnitY(context.currentGC(), element.attribute("y", "0")); const qreal w = SvgUtil::parseUnitX(context.currentGC(), element.attribute("width", "0")); const qreal h = SvgUtil::parseUnitY(context.currentGC(), element.attribute("height", "0")); // zero width of height disables rendering this image (see svg spec) if (w == 0.0 || h == 0.0) return 0; const QString href = element.attribute("xlink:href"); QImage image; if (href.startsWith(QLatin1String("data:"))) { int start = href.indexOf("base64,"); if (start <= 0) return false; if(!image.loadFromData(QByteArray::fromBase64(href.mid(start + 7).toLatin1()))) return false; } else if (!image.load(context.absoluteFilePath(href))) { return false; } KoImageCollection *imageCollection = context.imageCollection(); if (!imageCollection) return false; // TODO use it already for loading KoImageData *data = imageCollection->createImageData(image); setUserData(data); setSize(QSizeF(w, h)); setPosition(QPointF(x, y)); return true; }