mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 06:53:37 +00:00
[MSPAINT] Fix crash on zoom out
- Check the denominator for zero for both zoomed width and height. - Do not allow to move zoom slider above possible position. - Move commonly used `zoomTo` function into new header file. CORE-14539
This commit is contained in:
parent
065e70048d
commit
955048e50a
5 changed files with 31 additions and 9 deletions
|
@ -6,6 +6,7 @@
|
|||
* hPalWin, hToolSettings and hSelection
|
||||
* PROGRAMMERS: Benedikt Freisen
|
||||
* Katayama Hirofumi MZ
|
||||
* Stanislav Motylkov
|
||||
*/
|
||||
|
||||
/* INCLUDES *********************************************************/
|
||||
|
@ -16,7 +17,7 @@
|
|||
|
||||
/* FUNCTIONS ********************************************************/
|
||||
|
||||
void
|
||||
BOOL
|
||||
zoomTo(int newZoom, int mouseX, int mouseY)
|
||||
{
|
||||
RECT clientRectScrollbox;
|
||||
|
@ -24,8 +25,14 @@ zoomTo(int newZoom, int mouseX, int mouseY)
|
|||
int x, y, w, h;
|
||||
scrollboxWindow.GetClientRect(&clientRectScrollbox);
|
||||
imageArea.GetClientRect(&clientRectImageArea);
|
||||
w = clientRectImageArea.right * clientRectScrollbox.right / (clientRectImageArea.right * newZoom / toolsModel.GetZoom());
|
||||
h = clientRectImageArea.bottom * clientRectScrollbox.bottom / (clientRectImageArea.bottom * newZoom / toolsModel.GetZoom());
|
||||
w = clientRectImageArea.right * newZoom / toolsModel.GetZoom();
|
||||
h = clientRectImageArea.bottom * newZoom / toolsModel.GetZoom();
|
||||
if (!w || !h)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
w = clientRectImageArea.right * clientRectScrollbox.right / w;
|
||||
h = clientRectImageArea.bottom * clientRectScrollbox.bottom / h;
|
||||
x = max(0, min(clientRectImageArea.right - w, mouseX - w / 2)) * newZoom / toolsModel.GetZoom();
|
||||
y = max(0, min(clientRectImageArea.bottom - h, mouseY - h / 2)) * newZoom / toolsModel.GetZoom();
|
||||
|
||||
|
@ -38,6 +45,7 @@ zoomTo(int newZoom, int mouseX, int mouseY)
|
|||
|
||||
scrollboxWindow.SendMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, x), 0);
|
||||
scrollboxWindow.SendMessage(WM_VSCROLL, MAKEWPARAM(SB_THUMBPOSITION, y), 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CMainWindow::alignChildrenToMainWindow()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue