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"