mirror of
https://github.com/reactos/reactos.git
synced 2026-06-08 17:02:56 +08:00
[MSPAINT] Improve Undo/Redo and finishing tool (#4324)
- Fix Undo/Redo mechanism. - Finish drawing when the tool is to be chanaged and when the file is to be saved. - Add ToolBase::OnFinishDraw to virtualize finishing drawing. - Extend bClearRedo parameter to ImageModel::Undo. - Add ImageModel::DrawSelectionBackground and ImageModel::DeleteSelection methods. - Fix some WM_PAINT message handling. CORE-17969
This commit is contained in:
committed by
GitHub
parent
c5b029d0fc
commit
0839711566
@@ -85,6 +85,11 @@ TOOLTYPE ToolsModel::GetOldActiveTool() const
|
||||
|
||||
void ToolsModel::SetActiveTool(TOOLTYPE nActiveTool)
|
||||
{
|
||||
OnFinishDraw();
|
||||
|
||||
if (m_activeTool == nActiveTool)
|
||||
return;
|
||||
|
||||
switch (m_activeTool)
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
@@ -92,15 +97,7 @@ void ToolsModel::SetActiveTool(TOOLTYPE nActiveTool)
|
||||
case TOOL_RUBBER:
|
||||
case TOOL_COLOR:
|
||||
case TOOL_ZOOM:
|
||||
break;
|
||||
|
||||
case TOOL_TEXT:
|
||||
if (nActiveTool != TOOL_TEXT)
|
||||
{
|
||||
// Finish the text
|
||||
OnButtonDown(TRUE, -1, -1, TRUE);
|
||||
OnButtonUp(TRUE, -1, -1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -171,15 +168,18 @@ void ToolsModel::NotifyToolChanged()
|
||||
|
||||
void ToolsModel::NotifyToolSettingsChanged()
|
||||
{
|
||||
toolSettingsWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED);
|
||||
selectionWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED);
|
||||
if (toolSettingsWindow.IsWindow())
|
||||
toolSettingsWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED);
|
||||
if (selectionWindow.IsWindow())
|
||||
selectionWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED);
|
||||
if (textEditWindow.IsWindow())
|
||||
textEditWindow.SendMessage(WM_TOOLSMODELSETTINGSCHANGED);
|
||||
}
|
||||
|
||||
void ToolsModel::NotifyZoomChanged()
|
||||
{
|
||||
toolSettingsWindow.SendMessage(WM_TOOLSMODELZOOMCHANGED);
|
||||
if (toolSettingsWindow.IsWindow())
|
||||
toolSettingsWindow.SendMessage(WM_TOOLSMODELZOOMCHANGED);
|
||||
if (textEditWindow.IsWindow())
|
||||
textEditWindow.SendMessage(WM_TOOLSMODELZOOMCHANGED);
|
||||
if (selectionWindow.IsWindow())
|
||||
@@ -212,11 +212,20 @@ void ToolsModel::OnButtonUp(BOOL bLeftButton, LONG x, LONG y)
|
||||
|
||||
void ToolsModel::OnCancelDraw()
|
||||
{
|
||||
ATLTRACE("ToolsModel::OnCancelDraw()\n");
|
||||
m_pToolObject->beginEvent();
|
||||
m_pToolObject->OnCancelDraw();
|
||||
m_pToolObject->endEvent();
|
||||
}
|
||||
|
||||
void ToolsModel::OnFinishDraw()
|
||||
{
|
||||
ATLTRACE("ToolsModel::OnFinishDraw()\n");
|
||||
m_pToolObject->beginEvent();
|
||||
m_pToolObject->OnFinishDraw();
|
||||
m_pToolObject->endEvent();
|
||||
}
|
||||
|
||||
void ToolsModel::resetTool()
|
||||
{
|
||||
m_pToolObject->reset();
|
||||
|
||||
Reference in New Issue
Block a user