Merge integration refs/builds/qtci/dev/1715615431

bb10
Qt CI Bot 2024-05-13 22:32:34 +00:00
commit 6688b8eaff
2 changed files with 22 additions and 22 deletions

View File

@ -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;
}

View File

@ -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);
}