From 95bb0b4748b6a8616351415d37136345b40b1e08 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 26 Apr 2024 16:42:38 +0200 Subject: [PATCH] Follow-up b4c6ec10 : Improved creation ScalableBitmap from .jpg and .png --- src/slic3r/GUI/wxExtensions.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index ef70cdf9ae..09f90ccf37 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -855,15 +855,26 @@ ScalableBitmap::ScalableBitmap(wxWindow* parent, boost::filesystem::path& icon_p wxString path = Slic3r::GUI::from_u8(icon_path.string()); wxBitmap bitmap; const std::string ext = icon_path.extension().string(); - if (ext == ".png") { - bitmap.LoadFile(path, wxBITMAP_TYPE_PNG); - wxBitmap::Rescale(bitmap, icon_size); - m_bmp = wxBitmapBundle(bitmap); - } - else if (ext == ".jpg") { - bitmap.LoadFile(path, wxBITMAP_TYPE_JPEG); - wxBitmap::Rescale(bitmap, icon_size); - m_bmp = wxBitmapBundle(bitmap); + + if (ext == ".png" || ext == ".jpg") { + bitmap.LoadFile(path, ext == ".png" ? wxBITMAP_TYPE_PNG : wxBITMAP_TYPE_JPEG); + + std::set scales = { 1.0 }; +#ifdef __APPLE__ + scales.emplace(Slic3r::GUI::mac_max_scaling_factor()); +#elif _WIN32 + size_t disp_cnt = wxDisplay::GetCount(); + for (size_t disp = 0; disp < disp_cnt; ++disp) + scales.emplace(wxDisplay(disp).GetScaleFactor()); +#endif + + wxVector bmps; + for (double scale : scales) { + wxBitmap bmp = bitmap; + wxBitmap::Rescale(bmp, icon_size * scale); + bmps.push_back(bmp); + } + m_bmp = wxBitmapBundle::FromBitmaps(bmps); } else if (ext == ".svg") { m_bmp = wxBitmapBundle::FromSVGFile(path, icon_size);