From 6c8a198cfa0ecf2038459015800c1b51835bff36 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 19 Jun 2017 17:42:56 +0200 Subject: [PATCH] feat(App): svg parser in progress --- src/app/providers/ImageProvider.cpp | 52 +++++++++++++++++++++++++---- src/app/providers/ImageProvider.hpp | 2 -- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/app/providers/ImageProvider.cpp b/src/app/providers/ImageProvider.cpp index 4676d4c5a..f666fe91a 100644 --- a/src/app/providers/ImageProvider.cpp +++ b/src/app/providers/ImageProvider.cpp @@ -20,9 +20,12 @@ * Author: Ronan Abhamon */ +#include #include #include #include +#include +#include #include "ImageProvider.hpp" @@ -38,19 +41,56 @@ ImageProvider::ImageProvider () : QQuickImageProvider( QImage ImageProvider::requestImage (const QString &id, QSize *, const QSize &) { const QString path = QStringLiteral(":/assets/images/%1").arg(id); - // 1. Build svg renderer. - QSvgRenderer renderer(path); - if (!renderer.isValid()) - return QImage(path); // Not a svg file? + // 1. Read and update XML content. + QFile file(path); + if (!file.open(QIODevice::ReadOnly)) + return QImage(); // Invalid file. - // 2. Create en empty image. + QString content; + QXmlStreamReader reader(&file); + bool soFarSoGood = true; + + while (soFarSoGood && !reader.atEnd()) + switch (reader.readNext()) { + case QXmlStreamReader::NoToken: + case QXmlStreamReader::Invalid: + break; + + case QXmlStreamReader::StartDocument: + case QXmlStreamReader::EndDocument: + case QXmlStreamReader::StartElement: { + QXmlStreamAttributes attributes = reader.attributes(); + } break; + case QXmlStreamReader::EndElement: + content.append(QStringLiteral("").arg(reader.name().toString())); + break; + + case QXmlStreamReader::Characters: + case QXmlStreamReader::Comment: + case QXmlStreamReader::DTD: + case QXmlStreamReader::EntityReference: + case QXmlStreamReader::ProcessingInstruction: + break; + } + + qDebug() << content; + + if (!soFarSoGood || reader.hasError()) + return QImage(); // Invalid file. + + // 2. Build svg renderer. + QSvgRenderer renderer(&reader); + if (!renderer.isValid()) + return QImage(path); // Not a svg file. + + // 3. Create en empty image. const QRectF viewBox = renderer.viewBoxF(); QImage image(static_cast(viewBox.width()), static_cast(viewBox.height()), QImage::Format_ARGB32); if (image.isNull()) return QImage(); // Memory cannot be allocated. image.fill(0x00000000); - // 3. Paint! + // 4. Paint! QPainter painter(&image); renderer.render(&painter); diff --git a/src/app/providers/ImageProvider.hpp b/src/app/providers/ImageProvider.hpp index edf87d492..58e27c5e3 100644 --- a/src/app/providers/ImageProvider.hpp +++ b/src/app/providers/ImageProvider.hpp @@ -35,8 +35,6 @@ public: QImage requestImage (const QString &id, QSize *size, const QSize &requestedSize) override; static const QString PROVIDER_ID; - -private: }; #endif // IMAGE_PROVIDER_H_