mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 21:52:59 +00:00
[MSPAINT] Improve Zoom tool (#5798)
- Delete global zoomTo function. - Add CCanvasWindow::zoomTo and CCanvasWindow::getNewZoomRect functions. - Rename CCanvasWindow::updateScrollInfo as CCanvasWindow::updateScrollRange. - Rename CCanvasWindow::resetScrollPos as CCanvasWindow::updateScrollPos. - Draw the proper zoom rectangle on mouse move. - Revert the active tool on click when the tool was Zoom. CORE-19094
This commit is contained in:
parent
e2d3aa7f4a
commit
8f1eb03ad2
8 changed files with 113 additions and 73 deletions
|
@ -563,40 +563,67 @@ struct ColorTool : ToolBase
|
|||
// TOOL_ZOOM
|
||||
struct ZoomTool : ToolBase
|
||||
{
|
||||
BOOL m_bZoomed = FALSE;
|
||||
|
||||
ZoomTool() : ToolBase(TOOL_ZOOM)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL getNewZoomRect(CRect& rcView, INT newZoom);
|
||||
|
||||
void OnDrawOverlayOnCanvas(HDC hdc) override
|
||||
{
|
||||
CRect rc;
|
||||
canvasWindow.GetImageRect(rc);
|
||||
canvasWindow.ImageToCanvas(rc);
|
||||
|
||||
POINT pt;
|
||||
::GetCursorPos(&pt);
|
||||
::ScreenToClient(canvasWindow, &pt);
|
||||
|
||||
// FIXME: Draw the border of the area that is to be zoomed in
|
||||
if (rc.PtInRect(pt))
|
||||
DrawXorRect(hdc, &rc);
|
||||
CRect rcView;
|
||||
INT oldZoom = toolsModel.GetZoom();
|
||||
if (oldZoom < MAX_ZOOM && getNewZoomRect(rcView, oldZoom * 2))
|
||||
DrawXorRect(hdc, &rcView);
|
||||
}
|
||||
|
||||
void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick) override
|
||||
{
|
||||
INT newZoom, oldZoom = toolsModel.GetZoom();
|
||||
if (bLeftButton)
|
||||
{
|
||||
if (toolsModel.GetZoom() < MAX_ZOOM)
|
||||
zoomTo(toolsModel.GetZoom() * 2, x, y);
|
||||
}
|
||||
newZoom = (oldZoom < MAX_ZOOM) ? (oldZoom * 2) : MIN_ZOOM;
|
||||
else
|
||||
newZoom = (oldZoom > MIN_ZOOM) ? (oldZoom / 2) : MAX_ZOOM;
|
||||
|
||||
m_bZoomed = FALSE;
|
||||
|
||||
if (oldZoom != newZoom)
|
||||
{
|
||||
if (toolsModel.GetZoom() > MIN_ZOOM)
|
||||
zoomTo(toolsModel.GetZoom() / 2, x, y);
|
||||
CRect rcView;
|
||||
if (getNewZoomRect(rcView, newZoom))
|
||||
{
|
||||
canvasWindow.zoomTo(newZoom, rcView.left, rcView.top);
|
||||
m_bZoomed = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL OnButtonUp(BOOL bLeftButton, LONG& x, LONG& y) override
|
||||
{
|
||||
if (m_bZoomed)
|
||||
toolsModel.SetActiveTool(toolsModel.GetOldActiveTool());
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
};
|
||||
|
||||
BOOL ZoomTool::getNewZoomRect(CRect& rcView, INT newZoom)
|
||||
{
|
||||
CPoint pt;
|
||||
::GetCursorPos(&pt);
|
||||
canvasWindow.ScreenToClient(&pt);
|
||||
|
||||
canvasWindow.getNewZoomRect(rcView, newZoom, pt);
|
||||
|
||||
CRect rc;
|
||||
canvasWindow.GetImageRect(rc);
|
||||
canvasWindow.ImageToCanvas(rc);
|
||||
|
||||
return rc.PtInRect(pt);
|
||||
}
|
||||
|
||||
// TOOL_PEN
|
||||
struct PenTool : SmoothDrawTool
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue