diff --git a/Src/Lib/ResourceHelper.cpp b/Src/Lib/ResourceHelper.cpp index 62a32fb8b..b7388a554 100644 --- a/Src/Lib/ResourceHelper.cpp +++ b/Src/Lib/ResourceHelper.cpp @@ -384,14 +384,14 @@ HICON CreateDisabledIcon( HICON hIcon, int iconSize ) } // Loads an image file into a bitmap and optionally resizes it -HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector *pButtonAnim ) +HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector *pButtonAnim, UINT dpi ) { HBITMAP srcBmp=NULL; if (_wcsicmp(PathFindExtension(path),L".bmp")==0) { srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE); } - if (srcBmp && !pSize) + if (srcBmp && !pSize && !dpi) return srcBmp; CComPtr pFactory; if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory))) @@ -482,6 +482,12 @@ HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, b else frameHeightD=frameWidthD*frameHeightS/frameWidthS; } + + if (dpi) + { + frameWidthD=ScaleForDpi(dpi,frameWidthD); + frameHeightD=ScaleForDpi(dpi,frameHeightD); + } } BITMAPINFO bi={0}; @@ -946,7 +952,12 @@ UINT GetDpi(HWND hwnd) return dpi; } +int ScaleForDpi(UINT dpi, int value) +{ + return MulDiv(value, dpi, USER_DEFAULT_SCREEN_DPI); +} + int ScaleForDpi(HWND hwnd, int value) { - return MulDiv(value, GetDpi(hwnd), USER_DEFAULT_SCREEN_DPI); + return ScaleForDpi(GetDpi(hwnd), value); } diff --git a/Src/Lib/ResourceHelper.h b/Src/Lib/ResourceHelper.h index d44eb6b59..5afc1d1dc 100644 --- a/Src/Lib/ResourceHelper.h +++ b/Src/Lib/ResourceHelper.h @@ -35,7 +35,7 @@ HICON ShExtractIcon( const char *path, int index, int iconSize ); HBITMAP BitmapFromIcon( HICON hIcon, int iconSize, unsigned int **pBits, bool bDestroyIcon ); // Loads an image file into a bitmap and optionally resizes it -HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector *pButtonAnim ); +HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector *pButtonAnim, UINT dpi=0 ); // Loads a bitmap from a IMAGE resource HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown, bool bPremultiply ); @@ -88,6 +88,8 @@ HFONT CreateFontSetting( const wchar_t *fontStr, int dpi ); // Return DPI of given window (or system DPI on older systems) UINT GetDpi(HWND hwnd = nullptr); +// Scale given value according to given DPI +int ScaleForDpi(UINT dpi, int value); // Scale given value according to DPI of window int ScaleForDpi(HWND hwnd, int value); diff --git a/Src/StartMenu/StartMenuDLL/StartButton.cpp b/Src/StartMenu/StartMenuDLL/StartButton.cpp index 39d07d419..f279fa10f 100644 --- a/Src/StartMenu/StartMenuDLL/StartButton.cpp +++ b/Src/StartMenu/StartMenuDLL/StartButton.cpp @@ -526,16 +526,16 @@ void CStartButton::LoadBitmap( void ) } else { + int dpi=GetDpi(GetParent()); bool bResource=false; std::vector buttonAnim; if (*path) { - m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim); + m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim,dpi); } if (!m_Bitmap) { int id; - int dpi=GetDpi(GetParent()); if (dpi<120) id=IDB_BUTTON96; else if (dpi<144)