[0.4.10][MSPAINT] Revert LoadDIBFromFile for workaround (#2186) CORE-16566
authorJoachim Henze <Joachim.Henze@reactos.org>
Tue, 6 Oct 2020 01:24:13 +0000 (03:24 +0200)
committerJoachim Henze <Joachim.Henze@reactos.org>
Tue, 6 Oct 2020 01:24:13 +0000 (03:24 +0200)
This fixes the regression of mspaint not being able any longer to
overwrite an existing file.
The regression was once introduced by
0.4.7-dev-118-g
44fc547ffa910f1bce117f739c19c714317db172
when trying to determine the resolution on load.

Our new fix does cover both issues and even reduces imports: win-win.

fix cherry picked from commit 0.4.14-dev-691-g
be40a0e29611fb45e4b314c81be373774808b1c4

base/applications/mspaint/CMakeLists.txt
base/applications/mspaint/dib.cpp

index 3f11200..68bc5ed 100644 (file)
@@ -34,6 +34,6 @@ add_rc_deps(rsrc.rc ${mspaint_rc_deps})
 add_executable(mspaint ${SOURCE} rsrc.rc)
 set_module_type(mspaint win32gui UNICODE)
 target_link_libraries(mspaint atlnew uuid)
-add_importlibs(mspaint hhctrl comdlg32 shell32 user32 gdi32 gdiplus advapi32 comctl32 msvcrt kernel32 rpcrt4 shlwapi)
+add_importlibs(mspaint hhctrl comdlg32 shell32 user32 gdi32 advapi32 comctl32 msvcrt kernel32 rpcrt4 shlwapi)
 add_pch(mspaint precomp.h SOURCE)
 add_cd_file(TARGET mspaint DESTINATION reactos/system32 FOR all)
index 8dc5453..dbe9003 100644 (file)
@@ -83,8 +83,9 @@ void ShowFileLoadError(LPCTSTR name)
 void
 LoadDIBFromFile(HBITMAP * hBitmap, LPCTSTR name, LPSYSTEMTIME time, int *size, int *hRes, int *vRes)
 {
-    using namespace Gdiplus;
-    Bitmap img(CStringW(name), FALSE);  // always use WCHAR string
+    CImage img;
+    img.Load(name);
+    *hBitmap = img.Detach();
 
     if (!hBitmap)
     {
@@ -92,8 +93,6 @@ LoadDIBFromFile(HBITMAP * hBitmap, LPCTSTR name, LPSYSTEMTIME time, int *size, i
         return;
     }
 
-    img.GetHBITMAP(Color(255, 255, 255), hBitmap);
-
     // update time and size
     HANDLE hFile =
         CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
@@ -112,9 +111,10 @@ LoadDIBFromFile(HBITMAP * hBitmap, LPCTSTR name, LPSYSTEMTIME time, int *size, i
     if (size)
         *size = GetFileSize(hFile, NULL);
 
-    // update hRes and vRes
-    *hRes = (int) (img.GetHorizontalResolution() * 1000 / 25.4);
-    *vRes = (int) (img.GetVerticalResolution() * 1000 / 25.4);
+    HDC hScreenDC = GetDC(NULL);
+    *hRes = (int)(GetDeviceCaps(hScreenDC, LOGPIXELSX) * 1000 / 25.4);
+    *vRes = (int)(GetDeviceCaps(hScreenDC, LOGPIXELSY) * 1000 / 25.4);
+    ReleaseDC(NULL, hScreenDC);
 
     CloseHandle(hFile);
 }