Merge integration refs/builds/qtci/dev/1715615431
commit
6688b8eaff
|
|
@ -160,15 +160,16 @@ static inline int area(const QSize &s) { return s.width() * s.height(); }
|
|||
// the 2x pixmaps then.)
|
||||
static QPixmapIconEngineEntry *bestSizeScaleMatch(const QSize &size, qreal scale, QPixmapIconEngineEntry *pa, QPixmapIconEngineEntry *pb)
|
||||
{
|
||||
|
||||
const auto scaleA = pa->pixmap.devicePixelRatio();
|
||||
const auto scaleB = pb->pixmap.devicePixelRatio();
|
||||
// scale: we can only differentiate on scale if the scale differs
|
||||
if (pa->scale != pb->scale) {
|
||||
if (scaleA != scaleB) {
|
||||
|
||||
// Score the pixmaps: 0 is an exact scale match, positive
|
||||
// scores have more detail than requested, negative scores
|
||||
// have less detail than requested.
|
||||
qreal ascore = pa->scale - scale;
|
||||
qreal bscore = pb->scale - scale;
|
||||
qreal ascore = scaleA - scale;
|
||||
qreal bscore = scaleB - scale;
|
||||
|
||||
// always prefer positive scores to prevent upscaling
|
||||
if ((ascore < 0) != (bscore < 0))
|
||||
|
|
@ -201,13 +202,14 @@ static QPixmapIconEngineEntry *bestSizeScaleMatch(const QSize &size, qreal scale
|
|||
QPixmapIconEngineEntry *QPixmapIconEngine::tryMatch(const QSize &size, qreal scale, QIcon::Mode mode, QIcon::State state)
|
||||
{
|
||||
QPixmapIconEngineEntry *pe = nullptr;
|
||||
for (int i = 0; i < pixmaps.size(); ++i)
|
||||
if (pixmaps.at(i).mode == mode && pixmaps.at(i).state == state) {
|
||||
for (auto &entry : pixmaps) {
|
||||
if (entry.mode == mode && entry.state == state) {
|
||||
if (pe)
|
||||
pe = bestSizeScaleMatch(size, scale, &pixmaps[i], pe);
|
||||
pe = bestSizeScaleMatch(size, scale, &entry, pe);
|
||||
else
|
||||
pe = &pixmaps[i];
|
||||
pe = &entry;
|
||||
}
|
||||
}
|
||||
return pe;
|
||||
}
|
||||
|
||||
|
|
@ -278,7 +280,7 @@ QPixmap QPixmapIconEngine::scaledPixmap(const QSize &size, QIcon::Mode mode, QIc
|
|||
pm = pe->pixmap;
|
||||
|
||||
if (pm.isNull()) {
|
||||
int idx = pixmaps.size();
|
||||
auto idx = pixmaps.size();
|
||||
while (--idx >= 0) {
|
||||
if (pe == &pixmaps.at(idx)) {
|
||||
pixmaps.remove(idx);
|
||||
|
|
@ -369,7 +371,7 @@ void QPixmapIconEngine::addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon
|
|||
{
|
||||
if (!pixmap.isNull()) {
|
||||
QPixmapIconEngineEntry *pe = tryMatch(pixmap.size(), pixmap.devicePixelRatio(), mode, state);
|
||||
if (pe && pe->size == pixmap.size() && pe->scale == pixmap.devicePixelRatio()) {
|
||||
if (pe && pe->size == pixmap.size() && pe->pixmap.devicePixelRatio() == pixmap.devicePixelRatio()) {
|
||||
pe->pixmap = pixmap;
|
||||
pe->fileName.clear();
|
||||
} else {
|
||||
|
|
@ -387,7 +389,7 @@ static inline int origIcoDepth(const QImage &image)
|
|||
|
||||
static inline int findBySize(const QList<QImage> &images, const QSize &size)
|
||||
{
|
||||
for (int i = 0; i < images.size(); ++i) {
|
||||
for (qsizetype i = 0; i < images.size(); ++i) {
|
||||
if (images.at(i).size() == size)
|
||||
return i;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,24 +49,22 @@ public:
|
|||
|
||||
struct QPixmapIconEngineEntry
|
||||
{
|
||||
QPixmapIconEngineEntry():scale(1), mode(QIcon::Normal), state(QIcon::Off){}
|
||||
QPixmapIconEngineEntry(const QPixmap &pm, QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off)
|
||||
:pixmap(pm), size(pm.size()), scale(pm.devicePixelRatio()), mode(m), state(s){}
|
||||
QPixmapIconEngineEntry(const QString &file, const QSize &sz = QSize(), QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off)
|
||||
:fileName(file), size(sz), scale(1), mode(m), state(s){}
|
||||
QPixmapIconEngineEntry(const QString &file, const QImage &image, QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off);
|
||||
QPixmapIconEngineEntry() = default;
|
||||
QPixmapIconEngineEntry(const QPixmap &pm, QIcon::Mode m, QIcon::State s)
|
||||
: pixmap(pm), size(pm.size()), mode(m), state(s) {}
|
||||
QPixmapIconEngineEntry(const QString &file, const QSize &sz, QIcon::Mode m, QIcon::State s)
|
||||
: fileName(file), size(sz), mode(m), state(s) {}
|
||||
QPixmapIconEngineEntry(const QString &file, const QImage &image, QIcon::Mode m, QIcon::State s);
|
||||
QPixmap pixmap;
|
||||
QString fileName;
|
||||
QSize size;
|
||||
qreal scale;
|
||||
QIcon::Mode mode;
|
||||
QIcon::State state;
|
||||
bool isNull() const {return (fileName.isEmpty() && pixmap.isNull()); }
|
||||
QIcon::Mode mode = QIcon::Normal;
|
||||
QIcon::State state = QIcon::Off;
|
||||
};
|
||||
Q_DECLARE_TYPEINFO(QPixmapIconEngineEntry, Q_RELOCATABLE_TYPE);
|
||||
|
||||
inline QPixmapIconEngineEntry::QPixmapIconEngineEntry(const QString &file, const QImage &image, QIcon::Mode m, QIcon::State s)
|
||||
: fileName(file), size(image.size()), scale(image.devicePixelRatio()), mode(m), state(s)
|
||||
: fileName(file), size(image.size()), mode(m), state(s)
|
||||
{
|
||||
pixmap.convertFromImage(image);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue