File indexing completed on 2024-04-28 04:58:04

0001 /*  This file is part of the KDE libraries
0002     SPDX-FileCopyrightText: 2006 Pascal Létourneau <pascal.letourneau@kdemail.net>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "svgcreator.h"
0008 
0009 #include <QImage>
0010 #include <QPainter>
0011 #include <QSvgRenderer>
0012 
0013 #include <KPluginFactory>
0014 
0015 K_PLUGIN_CLASS_WITH_JSON(SvgCreator, "svgthumbnail.json")
0016 
0017 SvgCreator::SvgCreator(QObject *parent, const QVariantList &args)
0018     : KIO::ThumbnailCreator(parent, args)
0019 {
0020 }
0021 
0022 KIO::ThumbnailResult SvgCreator::create(const KIO::ThumbnailRequest &request)
0023 {
0024     QSvgRenderer r(request.url().toLocalFile());
0025     if (!r.isValid())
0026         return KIO::ThumbnailResult::fail();
0027 
0028     // render using the correct ratio
0029     const double ratio = static_cast<double>(r.defaultSize().height()) / static_cast<double>(r.defaultSize().width());
0030 
0031     int w = request.targetSize().width() * request.devicePixelRatio();
0032     int h = request.targetSize().height() * request.devicePixelRatio();
0033 
0034     if (w < h)
0035         h = qRound(ratio * w);
0036     else
0037         w = qRound(h / ratio);
0038 
0039     QImage i(w, h, QImage::Format_ARGB32_Premultiplied);
0040     i.fill(0);
0041     QPainter p(&i);
0042     r.render(&p, QRectF(QPointF(0, 0), QSizeF(h, w)));
0043 
0044     return KIO::ThumbnailResult::pass(i);
0045 }
0046 
0047 #include "moc_svgcreator.cpp"
0048 #include "svgcreator.moc"