mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-19 08:52:15 -07:00
fix scaling for other svgs
This commit is contained in:
parent
1bdb576d42
commit
82d17262c7
1 changed files with 13 additions and 7 deletions
|
|
@ -19,11 +19,12 @@
|
||||||
* Loads in an svg from file and scales it without affecting image quality.
|
* Loads in an svg from file and scales it without affecting image quality.
|
||||||
*
|
*
|
||||||
* @param svgPath The path to the svg file. Automatically appends ".svg" to the end if not present
|
* @param svgPath The path to the svg file. Automatically appends ".svg" to the end if not present
|
||||||
* @param size The desired size of the pixmap
|
* @param size The desired size of the pixmap.
|
||||||
|
* @param expandOnly If true, then keep the size of the initial pixmap to at least the svg size.
|
||||||
*
|
*
|
||||||
* @return The svg loaded into a Pixmap with the given size, or an empty Pixmap if the loading failed.
|
* @return The svg loaded into a Pixmap with the given size, or an empty Pixmap if the loading failed.
|
||||||
*/
|
*/
|
||||||
static QPixmap loadSvg(const QString &svgPath, const QSize &size)
|
static QPixmap loadSvg(const QString &svgPath, const QSize &size, bool expandOnly = false)
|
||||||
{
|
{
|
||||||
QString path = svgPath;
|
QString path = svgPath;
|
||||||
if (!path.endsWith(".svg")) {
|
if (!path.endsWith(".svg")) {
|
||||||
|
|
@ -37,16 +38,21 @@ static QPixmap loadSvg(const QString &svgPath, const QSize &size)
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Makes sure the pixmap is at least as large as the svg, so that we don't lose any detail.
|
// If expandOnly, make sure the pixmap is at least as large as the svg, so that we don't lose any detail.
|
||||||
// QIcon.pixmap(size) will automatically scale down the image, but it won't scale it up.
|
// QIcon.pixmap(size) will automatically scale down the image, but it won't scale it up.
|
||||||
QPixmap pix(svgRenderer.defaultSize().expandedTo(size));
|
QSize pixmapSize = expandOnly ? svgRenderer.defaultSize().expandedTo(size) : size;
|
||||||
|
QPixmap pix(pixmapSize);
|
||||||
pix.fill(Qt::transparent);
|
pix.fill(Qt::transparent);
|
||||||
|
|
||||||
QPainter pixPainter(&pix);
|
QPainter pixPainter(&pix);
|
||||||
svgRenderer.render(&pixPainter);
|
svgRenderer.render(&pixPainter);
|
||||||
|
|
||||||
// Converting the pixmap to a QIcon and back is the easiest way to scale down a svg without affecting image quality
|
// Converting the pixmap to a QIcon and back is the easiest way to scale down a svg without affecting image quality
|
||||||
return QIcon(pix).pixmap(size);
|
if (expandOnly) {
|
||||||
|
return QIcon(pix).pixmap(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pix;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMap<QString, QPixmap> PhasePixmapGenerator::pmCache;
|
QMap<QString, QPixmap> PhasePixmapGenerator::pmCache;
|
||||||
|
|
@ -129,7 +135,7 @@ QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countr
|
||||||
return pmCache.value(key);
|
return pmCache.value(key);
|
||||||
|
|
||||||
int width = height * 2;
|
int width = height * 2;
|
||||||
QPixmap pixmap = loadSvg("theme:countries/" + countryCode.toLower(), QSize(width, height));
|
QPixmap pixmap = loadSvg("theme:countries/" + countryCode.toLower(), QSize(width, height), true);
|
||||||
|
|
||||||
QPainter painter(&pixmap);
|
QPainter painter(&pixmap);
|
||||||
painter.setPen(Qt::black);
|
painter.setPen(Qt::black);
|
||||||
|
|
@ -321,7 +327,7 @@ QPixmap LockPixmapGenerator::generatePixmap(int height)
|
||||||
if (pmCache.contains(key))
|
if (pmCache.contains(key))
|
||||||
return pmCache.value(key);
|
return pmCache.value(key);
|
||||||
|
|
||||||
QPixmap pixmap = loadSvg("theme:icons/lock", QSize(height, height));
|
QPixmap pixmap = loadSvg("theme:icons/lock", QSize(height, height), true);
|
||||||
pmCache.insert(key, pixmap);
|
pmCache.insert(key, pixmap);
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue