From a408499889bd5746f09011bf74eb97b4b3886d3e Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 1 Oct 2021 19:31:23 +0200 Subject: [PATCH] Make the stamps renderer as static as before Looking for and loading the SVG file isn't cheap so cache it as we did in the past --- core/annotations.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/core/annotations.cpp b/core/annotations.cpp index e6d781307..46e1db18e 100644 --- a/core/annotations.cpp +++ b/core/annotations.cpp @@ -165,21 +165,29 @@ QPixmap AnnotationUtils::loadStamp(const QString &nameOrPath, int size, bool kee { const QString name = nameOrPath.toLower(); - const QString stampFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("okular/pics/stamps.svg")); - if (!stampFile.isEmpty()) { - QSvgRenderer r(stampFile); - if (r.isValid() && r.elementExists(name)) { - const QSize stampSize = r.boundsOnElement(name).size().toSize(); - const QSize pixmapSize = stampSize.scaled(size, size, keepAspectRatio ? Qt::KeepAspectRatioByExpanding : Qt::IgnoreAspectRatio); - QPixmap pixmap(pixmapSize); - pixmap.fill(Qt::transparent); - QPainter p(&pixmap); - r.render(&p, name); - p.end(); - return pixmap; + static std::unique_ptr svgStampFile; + if (!svgStampFile.get()) { + const QString stampFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("okular/pics/stamps.svg")); + if (!stampFile.isEmpty()) { + svgStampFile = std::make_unique(stampFile); + if (!svgStampFile->isValid()) { + svgStampFile.reset(); + } } } + QSvgRenderer *r = svgStampFile.get(); + if (r && r->isValid() && r->elementExists(name)) { + const QSize stampSize = r->boundsOnElement(name).size().toSize(); + const QSize pixmapSize = stampSize.scaled(size, size, keepAspectRatio ? Qt::KeepAspectRatioByExpanding : Qt::IgnoreAspectRatio); + QPixmap pixmap(pixmapSize); + pixmap.fill(Qt::transparent); + QPainter p(&pixmap); + r->render(&p, name); + p.end(); + return pixmap; + } + // _name is a path (do this before loading as icon name to avoid some rare weirdness ) QPixmap pixmap; pixmap.load(nameOrPath);