mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:13:03 +00:00
[MSPAINT] Polymorphism on tools (#4210)
- Introduce polymorphism on tools and mouse actions. - Implement double-clicking on TOOL_SHAPE. - Fix some bugs about mouse handling. CORE-17931
This commit is contained in:
parent
e0a47b7b5f
commit
ee132a05ba
12 changed files with 790 additions and 635 deletions
|
@ -17,11 +17,27 @@ ToolsModel::ToolsModel()
|
|||
m_lineWidth = 1;
|
||||
m_shapeStyle = 0;
|
||||
m_brushStyle = 0;
|
||||
m_activeTool = TOOL_PEN;
|
||||
m_oldActiveTool = m_activeTool = TOOL_PEN;
|
||||
m_airBrushWidth = 5;
|
||||
m_rubberRadius = 4;
|
||||
m_transpBg = FALSE;
|
||||
m_zoom = 1000;
|
||||
ZeroMemory(&m_tools, sizeof(m_tools));
|
||||
m_pToolObject = GetOrCreateTool(m_activeTool);
|
||||
}
|
||||
|
||||
ToolsModel::~ToolsModel()
|
||||
{
|
||||
for (size_t i = 0; i < TOOL_MAX + 1; ++i)
|
||||
delete m_tools[i];
|
||||
}
|
||||
|
||||
ToolBase *ToolsModel::GetOrCreateTool(TOOLTYPE nTool)
|
||||
{
|
||||
if (!m_tools[nTool])
|
||||
m_tools[nTool] = ToolBase::createToolObject(nTool);
|
||||
|
||||
return m_tools[nTool];
|
||||
}
|
||||
|
||||
int ToolsModel::GetLineWidth() const
|
||||
|
@ -62,9 +78,29 @@ TOOLTYPE ToolsModel::GetActiveTool() const
|
|||
return m_activeTool;
|
||||
}
|
||||
|
||||
TOOLTYPE ToolsModel::GetOldActiveTool() const
|
||||
{
|
||||
return m_oldActiveTool;
|
||||
}
|
||||
|
||||
void ToolsModel::SetActiveTool(TOOLTYPE nActiveTool)
|
||||
{
|
||||
switch (m_activeTool)
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
case TOOL_RECTSEL:
|
||||
case TOOL_RUBBER:
|
||||
case TOOL_COLOR:
|
||||
case TOOL_ZOOM:
|
||||
case TOOL_TEXT:
|
||||
break;
|
||||
default:
|
||||
m_oldActiveTool = m_activeTool;
|
||||
break;
|
||||
}
|
||||
|
||||
m_activeTool = nActiveTool;
|
||||
m_pToolObject = GetOrCreateTool(m_activeTool);
|
||||
NotifyToolChanged();
|
||||
}
|
||||
|
||||
|
@ -129,3 +165,47 @@ void ToolsModel::NotifyZoomChanged()
|
|||
{
|
||||
toolSettingsWindow.SendMessage(WM_TOOLSMODELZOOMCHANGED);
|
||||
}
|
||||
|
||||
void ToolsModel::OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick)
|
||||
{
|
||||
m_pToolObject->beginEvent();
|
||||
updateStartAndLast(x, y);
|
||||
m_pToolObject->OnButtonDown(bLeftButton, x, y, bDoubleClick);
|
||||
m_pToolObject->endEvent();
|
||||
}
|
||||
|
||||
void ToolsModel::OnMouseMove(BOOL bLeftButton, LONG x, LONG y)
|
||||
{
|
||||
m_pToolObject->beginEvent();
|
||||
m_pToolObject->OnMouseMove(bLeftButton, x, y);
|
||||
updateLast(x, y);
|
||||
m_pToolObject->endEvent();
|
||||
}
|
||||
|
||||
void ToolsModel::OnButtonUp(BOOL bLeftButton, LONG x, LONG y)
|
||||
{
|
||||
m_pToolObject->beginEvent();
|
||||
m_pToolObject->OnButtonUp(bLeftButton, x, y);
|
||||
updateLast(x, y);
|
||||
m_pToolObject->endEvent();
|
||||
}
|
||||
|
||||
void ToolsModel::OnCancelDraw()
|
||||
{
|
||||
m_pToolObject->beginEvent();
|
||||
m_pToolObject->OnCancelDraw();
|
||||
m_pToolObject->endEvent();
|
||||
}
|
||||
|
||||
void ToolsModel::resetTool()
|
||||
{
|
||||
m_pToolObject->reset();
|
||||
}
|
||||
|
||||
void ToolsModel::selectAll()
|
||||
{
|
||||
SetActiveTool(TOOL_RECTSEL);
|
||||
OnButtonDown(TRUE, 0, 0, FALSE);
|
||||
OnMouseMove(TRUE, imageModel.GetWidth(), imageModel.GetHeight());
|
||||
OnButtonUp(TRUE, imageModel.GetWidth(), imageModel.GetHeight());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue