https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b2f8d62cd1a116fb2cad2a...
commit b2f8d62cd1a116fb2cad2af889e9c6651e942e42 Author: Katayama Hirofumi MZ katayama.hirofumi.mz@gmail.com AuthorDate: Mon Jan 10 08:50:37 2022 +0900 Commit: GitHub noreply@github.com CommitDate: Mon Jan 10 08:50:37 2022 +0900
[MSPAINT] Prepare for debugging (#4257)
- Add #include <debug.h> and add link to ntdll.dll for debugging. - Add CopyDIBImage helper function. CORE-17969 --- base/applications/mspaint/CMakeLists.txt | 2 +- base/applications/mspaint/dib.h | 5 +++++ base/applications/mspaint/history.cpp | 15 +++++++++------ base/applications/mspaint/precomp.h | 3 +++ base/applications/mspaint/selectionmodel.cpp | 5 ++--- base/applications/mspaint/winproc.cpp | 4 ++-- 6 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/base/applications/mspaint/CMakeLists.txt b/base/applications/mspaint/CMakeLists.txt index fcf694a08ca..03c71c21359 100644 --- a/base/applications/mspaint/CMakeLists.txt +++ b/base/applications/mspaint/CMakeLists.txt @@ -32,6 +32,6 @@ add_executable(mspaint ${SOURCE} rsrc.rc) set_module_type(mspaint win32gui UNICODE) target_link_libraries(mspaint uuid cpprt atl_classes) set_target_cpp_properties(mspaint WITH_EXCEPTIONS) -add_importlibs(mspaint hhctrl comdlg32 shell32 user32 gdi32 advapi32 comctl32 msvcrt kernel32 rpcrt4 shlwapi) +add_importlibs(mspaint hhctrl comdlg32 shell32 user32 gdi32 advapi32 comctl32 msvcrt kernel32 rpcrt4 shlwapi ntdll) add_pch(mspaint precomp.h SOURCE) add_cd_file(TARGET mspaint DESTINATION reactos/system32 FOR all) diff --git a/base/applications/mspaint/dib.h b/base/applications/mspaint/dib.h index 6bbb56d9c6d..21c73a7dd13 100644 --- a/base/applications/mspaint/dib.h +++ b/base/applications/mspaint/dib.h @@ -11,6 +11,11 @@ HBITMAP CreateDIBWithProperties(int width, int height); HBITMAP CreateColorDIB(int width, int height, COLORREF rgb);
+static inline HBITMAP CopyDIBImage(HBITMAP hbm, INT cx = 0, INT cy = 0) +{ + return (HBITMAP)CopyImage(hbm, IMAGE_BITMAP, cx, cy, LR_COPYRETURNORG | LR_CREATEDIBSECTION); +} + int GetDIBWidth(HBITMAP hbm);
int GetDIBHeight(HBITMAP hbm); diff --git a/base/applications/mspaint/history.cpp b/base/applications/mspaint/history.cpp index 221dffc52d7..1a5cd8966a8 100644 --- a/base/applications/mspaint/history.cpp +++ b/base/applications/mspaint/history.cpp @@ -44,8 +44,9 @@ ImageModel::ImageModel()
void ImageModel::CopyPrevious() { + DPRINT("%s: %d\n", __FUNCTION__, currInd); DeleteObject(hBms[(currInd + 1) % HISTORYSIZE]); - hBms[(currInd + 1) % HISTORYSIZE] = (HBITMAP) CopyImage(hBms[currInd], IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); + hBms[(currInd + 1) % HISTORYSIZE] = CopyDIBImage(hBms[currInd]); currInd = (currInd + 1) % HISTORYSIZE; if (undoSteps < HISTORYSIZE - 1) undoSteps++; @@ -56,6 +57,7 @@ void ImageModel::CopyPrevious()
void ImageModel::Undo() { + DPRINT("%s: %d\n", __FUNCTION__, undoSteps); if (undoSteps > 0) { int oldWidth = GetWidth(); @@ -74,6 +76,7 @@ void ImageModel::Undo()
void ImageModel::Redo() { + DPRINT("%s: %d\n", __FUNCTION__, redoSteps); if (redoSteps > 0) { int oldWidth = GetWidth(); @@ -92,9 +95,9 @@ void ImageModel::Redo()
void ImageModel::ResetToPrevious() { + DPRINT("%s: %d\n", __FUNCTION__, currInd); DeleteObject(hBms[currInd]); - hBms[currInd] = - (HBITMAP) CopyImage(hBms[(currInd + HISTORYSIZE - 1) % HISTORYSIZE], IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); + hBms[currInd] = CopyDIBImage(hBms[(currInd + HISTORYSIZE - 1) % HISTORYSIZE]); SelectObject(hDrawingDC, hBms[currInd]); NotifyImageChanged(); } @@ -183,9 +186,9 @@ void ImageModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSk { int oldWidth = GetWidth(); int oldHeight = GetHeight(); - Insert((HBITMAP) CopyImage(hBms[currInd], IMAGE_BITMAP, - GetWidth() * nStretchPercentX / 100, - GetHeight() * nStretchPercentY / 100, 0)); + INT newWidth = oldWidth * nStretchPercentX / 100; + INT newHeight = oldHeight * nStretchPercentY / 100; + Insert(CopyDIBImage(hBms[currInd], newWidth, newHeight)); if (GetWidth() != oldWidth || GetHeight() != oldHeight) NotifyDimensionsChanged(); NotifyImageChanged(); diff --git a/base/applications/mspaint/precomp.h b/base/applications/mspaint/precomp.h index 5e2756b2fa1..1f27501432f 100644 --- a/base/applications/mspaint/precomp.h +++ b/base/applications/mspaint/precomp.h @@ -21,6 +21,9 @@ #include <shellapi.h> #include <htmlhelp.h>
+#define NDEBUG +#include <debug.h> + #define WM_TOOLSMODELTOOLCHANGED (WM_APP + 0) #define WM_TOOLSMODELSETTINGSCHANGED (WM_APP + 1) #define WM_TOOLSMODELZOOMCHANGED (WM_APP + 2) diff --git a/base/applications/mspaint/selectionmodel.cpp b/base/applications/mspaint/selectionmodel.cpp index 464b6bdca64..50c6ad4a53f 100644 --- a/base/applications/mspaint/selectionmodel.cpp +++ b/base/applications/mspaint/selectionmodel.cpp @@ -170,9 +170,8 @@ void SelectionModel::InsertFromHBITMAP(HBITMAP hBm) HDC hTempDC; HBITMAP hTempMask;
- DeleteObject(SelectObject(m_hDC, m_hBm = (HBITMAP) CopyImage(hBm, - IMAGE_BITMAP, 0, 0, - LR_COPYRETURNORG))); + m_hBm = CopyDIBImage(hBm); + DeleteObject(SelectObject(m_hDC, m_hBm));
SetRectEmpty(&m_rcSrc); m_rcDest.left = m_rcDest.top = 0; diff --git a/base/applications/mspaint/winproc.cpp b/base/applications/mspaint/winproc.cpp index 7a739f76cca..43b0f812c1f 100644 --- a/base/applications/mspaint/winproc.cpp +++ b/base/applications/mspaint/winproc.cpp @@ -534,7 +534,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH case IDM_EDITCOPY: OpenClipboard(); EmptyClipboard(); - SetClipboardData(CF_BITMAP, CopyImage(selectionModel.GetBitmap(), IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)); + SetClipboardData(CF_BITMAP, CopyDIBImage(selectionModel.GetBitmap())); CloseClipboard(); break; case IDM_EDITCUT: @@ -653,7 +653,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH toolsModel.SetBackgroundTransparent(!toolsModel.IsBackgroundTransparent()); break; case IDM_IMAGECROP: - imageModel.Insert((HBITMAP) CopyImage(selectionModel.GetBitmap(), IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)); + imageModel.Insert(CopyDIBImage(selectionModel.GetBitmap())); break;
case IDM_VIEWTOOLBOX: