Fixed blurry thumbnails on retina displays.

This commit is contained in:
Leonardo Zide
2025-12-15 12:01:51 -03:00
parent c2db2d8d45
commit 6984b53990
4 changed files with 27 additions and 12 deletions
+12 -4
View File
@@ -399,7 +399,7 @@ void lcPartSelectionListModel::RequestThumbnail(int PartIndex)
int ColorIndex = mParts[PartIndex].ColorIndex == -1 ? mColorIndex : mParts[PartIndex].ColorIndex;
auto [ThumbnailId, Thumbnail] = lcGetPiecesLibrary()->GetThumbnailManager()->RequestThumbnail(Info, ColorIndex, mIconSize);
auto [ThumbnailId, Thumbnail] = lcGetPiecesLibrary()->GetThumbnailManager()->RequestThumbnail(Info, ColorIndex, mIconSize, mDeviceScale);
mParts[PartIndex].ThumbnailId = ThumbnailId;
@@ -486,12 +486,13 @@ void lcPartSelectionListModel::SetPartDescriptionFilter(bool Option)
SetFilter(mFilterString);
}
void lcPartSelectionListModel::SetIconSize(int Size)
void lcPartSelectionListModel::SetIconSize(int Size, float DeviceScale)
{
if (Size == mIconSize)
if (Size == mIconSize && DeviceScale == mDeviceScale)
return;
mIconSize = Size;
mDeviceScale = DeviceScale;
beginResetModel();
@@ -770,7 +771,14 @@ void lcPartSelectionListView::SetIconSize(int Size)
{
setIconSize(QSize(Size, Size));
lcSetProfileInt(LC_PROFILE_PARTS_LIST_ICONS, Size);
mListModel->SetIconSize(Size);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
float DeviceScale = devicePixelRatioF();
#else
float DeviceScale = devicePixelRatio();
#endif
mListModel->SetIconSize(Size, DeviceScale);
UpdateViewMode();
int Width = Size + 2 * frameWidth() + 6;
+2 -1
View File
@@ -159,7 +159,7 @@ public:
void SetCaseSensitiveFilter(bool Option);
void SetFileNameFilter(bool Option);
void SetPartDescriptionFilter(bool Option);
void SetIconSize(int Size);
void SetIconSize(int Size, float DeviceScale);
void SetShowPartNames(bool Show);
protected slots:
@@ -172,6 +172,7 @@ protected:
std::vector<lcPartSelectionListModelEntry> mParts;
lcPartFilterType mPartFilterType;
int mIconSize;
float mDeviceScale = 1.0f;
bool mColorLocked;
int mColorIndex;
bool mShowPartNames;
+11 -6
View File
@@ -19,10 +19,10 @@ lcThumbnailManager::~lcThumbnailManager()
mLibrary->ReleasePieceInfo(Thumbnail.Info);
}
std::pair<lcPartThumbnailId, QPixmap> lcThumbnailManager::RequestThumbnail(PieceInfo* Info, int ColorIndex, int Size)
std::pair<lcPartThumbnailId, QPixmap> lcThumbnailManager::RequestThumbnail(PieceInfo* Info, int ColorIndex, int Size, float DeviceScale)
{
for (auto &[ThumbnailId, Thumbnail] : mThumbnails)
if (Thumbnail.Info == Info && Thumbnail.ColorIndex == ColorIndex && Thumbnail.Size == Size)
if (Thumbnail.Info == Info && Thumbnail.ColorIndex == ColorIndex && Thumbnail.Size == Size && Thumbnail.DeviceScale == DeviceScale)
return { ThumbnailId, Thumbnail.Pixmap };
lcPartThumbnailId ThumbnailId = static_cast<lcPartThumbnailId>(mNextThumbnailId++);
@@ -31,6 +31,7 @@ std::pair<lcPartThumbnailId, QPixmap> lcThumbnailManager::RequestThumbnail(Piece
Thumbnail.Info = Info;
Thumbnail.ColorIndex = ColorIndex;
Thumbnail.Size = Size;
Thumbnail.DeviceScale = DeviceScale;
Thumbnail.ReferenceCount = 1;
mLibrary->LoadPieceInfo(Info, false, false);
@@ -70,8 +71,8 @@ void lcThumbnailManager::PartLoaded(PieceInfo* Info)
void lcThumbnailManager::DrawThumbnail(lcPartThumbnailId ThumbnailId, lcPartThumbnail& Thumbnail)
{
const int Width = Thumbnail.Size * 2;
const int Height = Thumbnail.Size * 2;
const int Width = Thumbnail.Size * 2 * Thumbnail.DeviceScale;
const int Height = Thumbnail.Size * 2 * Thumbnail.DeviceScale;
if (mView && (mView->GetWidth() != Width || mView->GetHeight() != Height))
mView.reset();
@@ -145,8 +146,12 @@ void lcThumbnailManager::DrawThumbnail(lcPartThumbnailId ThumbnailId, lcPartThum
Painter.drawImage(QPoint(0, 0), Icon);
Painter.end();
}
Thumbnail.Pixmap = QPixmap::fromImage(Image).scaled(Thumbnail.Size, Thumbnail.Size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
Image.setDevicePixelRatio(Thumbnail.DeviceScale);
float ScaledSize = Thumbnail.Size * Thumbnail.DeviceScale;
Thumbnail.Pixmap = QPixmap::fromImage(Image).scaled(ScaledSize, ScaledSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
mLibrary->ReleasePieceInfo(Info);
+2 -1
View File
@@ -8,6 +8,7 @@ struct lcPartThumbnail
PieceInfo* Info;
int ColorIndex;
int Size;
float DeviceScale;
int ReferenceCount;
};
@@ -24,7 +25,7 @@ public:
lcThumbnailManager(lcPiecesLibrary* Library);
~lcThumbnailManager();
std::pair<lcPartThumbnailId, QPixmap> RequestThumbnail(PieceInfo* Info, int ColorIndex, int Size);
std::pair<lcPartThumbnailId, QPixmap> RequestThumbnail(PieceInfo* Info, int ColorIndex, int Size, float DeviceScale);
void ReleaseThumbnail(lcPartThumbnailId ThumbnailId);
signals: