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
remotes/origin/work/bharadwaj/darkmode-button
Albert Astals Cid 5 years ago
parent b3379d331d
commit a408499889
  1. 18
      core/annotations.cpp

@ -165,20 +165,28 @@ QPixmap AnnotationUtils::loadStamp(const QString &nameOrPath, int size, bool kee
{ {
const QString name = nameOrPath.toLower(); const QString name = nameOrPath.toLower();
static std::unique_ptr<QSvgRenderer> svgStampFile;
if (!svgStampFile.get()) {
const QString stampFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("okular/pics/stamps.svg")); const QString stampFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("okular/pics/stamps.svg"));
if (!stampFile.isEmpty()) { if (!stampFile.isEmpty()) {
QSvgRenderer r(stampFile); svgStampFile = std::make_unique<QSvgRenderer>(stampFile);
if (r.isValid() && r.elementExists(name)) { if (!svgStampFile->isValid()) {
const QSize stampSize = r.boundsOnElement(name).size().toSize(); 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); const QSize pixmapSize = stampSize.scaled(size, size, keepAspectRatio ? Qt::KeepAspectRatioByExpanding : Qt::IgnoreAspectRatio);
QPixmap pixmap(pixmapSize); QPixmap pixmap(pixmapSize);
pixmap.fill(Qt::transparent); pixmap.fill(Qt::transparent);
QPainter p(&pixmap); QPainter p(&pixmap);
r.render(&p, name); r->render(&p, name);
p.end(); p.end();
return pixmap; return pixmap;
} }
}
// _name is a path (do this before loading as icon name to avoid some rare weirdness ) // _name is a path (do this before loading as icon name to avoid some rare weirdness )
QPixmap pixmap; QPixmap pixmap;

Loading…
Cancel
Save