diff --git a/reactos/base/applications/mspaint_new/definitions.h b/reactos/base/applications/mspaint_new/definitions.h index ce6e9053b9e..2155a6d6376 100644 --- a/reactos/base/applications/mspaint_new/definitions.h +++ b/reactos/base/applications/mspaint_new/definitions.h @@ -228,3 +228,4 @@ #define WM_PALETTEMODELPALETTECHANGED (WM_APP + 4) #define WM_IMAGEMODELDIMENSIONSCHANGED (WM_APP + 5) #define WM_IMAGEMODELIMAGECHANGED (WM_APP + 6) +#define WM_SELECTIONMODELREFRESHNEEDED (WM_APP + 7) diff --git a/reactos/base/applications/mspaint_new/palette.cpp b/reactos/base/applications/mspaint_new/palette.cpp index 72d5fbe35c8..2e1c9933a4b 100644 --- a/reactos/base/applications/mspaint_new/palette.cpp +++ b/reactos/base/applications/mspaint_new/palette.cpp @@ -61,22 +61,14 @@ LRESULT CPaletteWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& b LRESULT CPaletteWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (GET_X_LPARAM(lParam) >= 31) - { paletteModel.SetFgColor(paletteModel.GetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14)); - if (toolsModel.GetActiveTool() == 10) - ForceRefreshSelectionContents(); - } return 0; } LRESULT CPaletteWindow::OnRButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (GET_X_LPARAM(lParam) >= 31) - { paletteModel.SetBgColor(paletteModel.GetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14)); - if (toolsModel.GetActiveTool() == 10) - ForceRefreshSelectionContents(); - } return 0; } @@ -88,8 +80,6 @@ LRESULT CPaletteWindow::OnLButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam, paletteModel.SetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14, choosecolor.rgbResult); paletteModel.SetFgColor(choosecolor.rgbResult); - if (toolsModel.GetActiveTool() == 10) - ForceRefreshSelectionContents(); } return 0; } @@ -102,8 +92,6 @@ LRESULT CPaletteWindow::OnRButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam, paletteModel.SetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14, choosecolor.rgbResult); paletteModel.SetBgColor(choosecolor.rgbResult); - if (toolsModel.GetActiveTool() == 10) - ForceRefreshSelectionContents(); } return 0; } diff --git a/reactos/base/applications/mspaint_new/palettemodel.cpp b/reactos/base/applications/mspaint_new/palettemodel.cpp index 551597086e7..93c63b017a3 100644 --- a/reactos/base/applications/mspaint_new/palettemodel.cpp +++ b/reactos/base/applications/mspaint_new/palettemodel.cpp @@ -90,6 +90,7 @@ void PaletteModel::SetBgColor(int newColor) void PaletteModel::NotifyColorChanged() { paletteWindow.SendMessage(WM_PALETTEMODELCOLORCHANGED); + selectionWindow.SendMessage(WM_PALETTEMODELCOLORCHANGED); } void PaletteModel::NotifyPaletteChanged() diff --git a/reactos/base/applications/mspaint_new/selection.cpp b/reactos/base/applications/mspaint_new/selection.cpp index cd3df620b7b..906692982be 100644 --- a/reactos/base/applications/mspaint_new/selection.cpp +++ b/reactos/base/applications/mspaint_new/selection.cpp @@ -229,3 +229,25 @@ LRESULT CSelectionWindow::OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, B } return 0; } + +LRESULT CSelectionWindow::OnPaletteModelColorChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + if (toolsModel.GetActiveTool() == TOOL_TEXT) + ForceRefreshSelectionContents(); + return 0; +} + +LRESULT CSelectionWindow::OnToolsModelSettingsChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + if (toolsModel.GetActiveTool() == TOOL_FREESEL || + toolsModel.GetActiveTool() == TOOL_RECTSEL || + toolsModel.GetActiveTool() == TOOL_TEXT) + ForceRefreshSelectionContents(); + return 0; +} + +LRESULT CSelectionWindow::OnSelectionModelRefreshNeeded(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + ForceRefreshSelectionContents(); + return 0; +} diff --git a/reactos/base/applications/mspaint_new/selection.h b/reactos/base/applications/mspaint_new/selection.h index bf42c0cad06..d4fe9f48817 100644 --- a/reactos/base/applications/mspaint_new/selection.h +++ b/reactos/base/applications/mspaint_new/selection.h @@ -20,6 +20,9 @@ public: MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove) MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp) + MESSAGE_HANDLER(WM_PALETTEMODELCOLORCHANGED, OnPaletteModelColorChanged) + MESSAGE_HANDLER(WM_TOOLSMODELSETTINGSCHANGED, OnToolsModelSettingsChanged) + MESSAGE_HANDLER(WM_SELECTIONMODELREFRESHNEEDED, OnSelectionModelRefreshNeeded) END_MSG_MAP() LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); @@ -30,6 +33,9 @@ public: LRESULT OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnPaletteModelColorChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnToolsModelSettingsChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSelectionModelRefreshNeeded(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); private: static const LPCTSTR m_lpszCursorLUT[9]; diff --git a/reactos/base/applications/mspaint_new/selectionmodel.cpp b/reactos/base/applications/mspaint_new/selectionmodel.cpp index 4ed7b073597..af720fa3d3e 100644 --- a/reactos/base/applications/mspaint_new/selectionmodel.cpp +++ b/reactos/base/applications/mspaint_new/selectionmodel.cpp @@ -183,6 +183,7 @@ void SelectionModel::FlipHorizontally() SelectObject(m_hDC, m_hBm); StretchBlt(m_hDC, RECT_WIDTH(m_rcDest) - 1, 0, -RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), m_hDC, 0, 0, RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), SRCCOPY); + NotifyRefreshNeeded(); } void SelectionModel::FlipVertically() @@ -193,6 +194,7 @@ void SelectionModel::FlipVertically() SelectObject(m_hDC, m_hBm); StretchBlt(m_hDC, 0, RECT_HEIGHT(m_rcDest) - 1, RECT_WIDTH(m_rcDest), -RECT_HEIGHT(m_rcDest), m_hDC, 0, 0, RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), SRCCOPY); + NotifyRefreshNeeded(); } void SelectionModel::RotateNTimes90Degrees(int iN) @@ -206,6 +208,7 @@ void SelectionModel::RotateNTimes90Degrees(int iN) StretchBlt(m_hDC, RECT_WIDTH(m_rcDest) - 1, RECT_HEIGHT(m_rcDest) - 1, -RECT_WIDTH(m_rcDest), -RECT_HEIGHT(m_rcDest), m_hDC, 0, 0, RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), SRCCOPY); } + NotifyRefreshNeeded(); } HBITMAP SelectionModel::GetBitmap() @@ -326,3 +329,8 @@ void SelectionModel::DrawTextToolText(HDC hDCImage, COLORREF crFg, COLORREF crBg { Text(hDCImage, m_rcDest.left, m_rcDest.top, m_rcDest.right, m_rcDest.bottom, crFg, crBg, textToolText, hfontTextFont, bBgTransparent); } + +void SelectionModel::NotifyRefreshNeeded() +{ + selectionWindow.SendMessage(WM_SELECTIONMODELREFRESHNEEDED); +} diff --git a/reactos/base/applications/mspaint_new/selectionmodel.h b/reactos/base/applications/mspaint_new/selectionmodel.h index a3de6dcecc2..0fec3315a03 100644 --- a/reactos/base/applications/mspaint_new/selectionmodel.h +++ b/reactos/base/applications/mspaint_new/selectionmodel.h @@ -33,6 +33,7 @@ private: // void NotifySelectionChanging(); // void NotifySelectionChanged(); + void NotifyRefreshNeeded(); public: SelectionModel(); diff --git a/reactos/base/applications/mspaint_new/toolsettings.cpp b/reactos/base/applications/mspaint_new/toolsettings.cpp index 7cd22afae23..8246d101ef9 100644 --- a/reactos/base/applications/mspaint_new/toolsettings.cpp +++ b/reactos/base/applications/mspaint_new/toolsettings.cpp @@ -188,11 +188,7 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar case TOOL_RECTSEL: case TOOL_TEXT: if ((y > 1) && (y < 64)) - { toolsModel.SetBackgroundTransparent((y - 2) / 31); - - ForceRefreshSelectionContents(); - } break; case TOOL_RUBBER: if ((y > 1) && (y < 62)) diff --git a/reactos/base/applications/mspaint_new/toolsmodel.cpp b/reactos/base/applications/mspaint_new/toolsmodel.cpp index 05682a3624e..e23e6c51d40 100644 --- a/reactos/base/applications/mspaint_new/toolsmodel.cpp +++ b/reactos/base/applications/mspaint_new/toolsmodel.cpp @@ -122,6 +122,7 @@ void ToolsModel::NotifyToolChanged() void ToolsModel::NotifyToolSettingsChanged() { toolSettingsWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED); + selectionWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED); } void ToolsModel::NotifyZoomChanged() diff --git a/reactos/base/applications/mspaint_new/winproc.cpp b/reactos/base/applications/mspaint_new/winproc.cpp index 67571742cf0..e9c38845d1f 100644 --- a/reactos/base/applications/mspaint_new/winproc.cpp +++ b/reactos/base/applications/mspaint_new/winproc.cpp @@ -448,10 +448,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH { case 1: /* flip horizontally */ if (selectionWindow.IsWindowVisible()) - { selectionModel.FlipHorizontally(); - ForceRefreshSelectionContents(); - } else { imageModel.CopyPrevious(); @@ -462,10 +459,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH break; case 2: /* flip vertically */ if (selectionWindow.IsWindowVisible()) - { selectionModel.FlipVertically(); - ForceRefreshSelectionContents(); - } else { imageModel.CopyPrevious(); @@ -478,10 +472,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH break; case 4: /* rotate 180 degrees */ if (selectionWindow.IsWindowVisible()) - { selectionModel.RotateNTimes90Degrees(2); - ForceRefreshSelectionContents(); - } else { imageModel.CopyPrevious();