[MSPAINT] Update scroll info on loading file (#5761)

The scroll info was not updated when the file is loading.
- Rename CCanvasWindow::Update as CCanvasWindow::updateScrollInfo.
- Update scroll info on ImageModel::NotifyImageChanged.
- Improve ImageModel::ClearHistory.
CORE-19094
This commit is contained in:
Katayama Hirofumi MZ 2023-10-05 20:01:41 +09:00 committed by GitHub
parent 3579ea7888
commit 1a90009bb9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 7 deletions

View file

@ -180,7 +180,7 @@ VOID CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
::DeleteDC(hdcMem0); ::DeleteDC(hdcMem0);
} }
VOID CCanvasWindow::Update(HWND hwndFrom) VOID CCanvasWindow::updateScrollInfo()
{ {
CRect rcClient; CRect rcClient;
GetClientRect(&rcClient); GetClientRect(&rcClient);
@ -214,7 +214,7 @@ VOID CCanvasWindow::Update(HWND hwndFrom)
LRESULT CCanvasWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) LRESULT CCanvasWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{ {
if (m_hWnd) if (m_hWnd)
Update(m_hWnd); updateScrollInfo();
return 0; return 0;
} }
@ -245,7 +245,7 @@ VOID CCanvasWindow::OnHVScroll(WPARAM wParam, INT fnBar)
break; break;
} }
SetScrollInfo(fnBar, &si); SetScrollInfo(fnBar, &si);
Update(m_hWnd); updateScrollInfo();
Invalidate(FALSE); // FIXME: Flicker Invalidate(FALSE); // FIXME: Flicker
} }
@ -627,7 +627,7 @@ LRESULT CCanvasWindow::OnLRButtonUp(BOOL bLeftButton, UINT nMsg, WPARAM wParam,
m_hitCanvasSizeBox = HIT_NONE; m_hitCanvasSizeBox = HIT_NONE;
toolsModel.resetTool(); // resets the point-buffer of the polygon and bezier functions toolsModel.resetTool(); // resets the point-buffer of the polygon and bezier functions
Update(NULL); updateScrollInfo();
Invalidate(TRUE); Invalidate(TRUE);
return 0; return 0;
} }

View file

@ -42,7 +42,7 @@ public:
VOID cancelDrawing(); VOID cancelDrawing();
VOID finishDrawing(); VOID finishDrawing();
VOID Update(HWND hwndFrom); VOID updateScrollInfo();
VOID ImageToCanvas(POINT& pt); VOID ImageToCanvas(POINT& pt);
VOID ImageToCanvas(RECT& rc); VOID ImageToCanvas(RECT& rc);

View file

@ -274,8 +274,14 @@ HBITMAP DoLoadImageFile(HWND hwnd, LPCWSTR name, BOOL fIsMainFile)
CImageDx img; CImageDx img;
float xDpi = 0, yDpi = 0; float xDpi = 0, yDpi = 0;
HRESULT hr = img.LoadDx(name, &xDpi, &yDpi); HRESULT hr = img.LoadDx(name, &xDpi, &yDpi);
if (FAILED(hr) && fIsMainFile)
{
imageModel.ClearHistory();
hr = img.LoadDx(name, &xDpi, &yDpi);
}
if (FAILED(hr)) if (FAILED(hr))
{ {
ATLTRACE("hr: 0x%08lX\n", hr);
ShowError(IDS_LOADERRORTEXT, name); ShowError(IDS_LOADERRORTEXT, name);
return NULL; return NULL;
} }

View file

@ -15,9 +15,13 @@ ImageModel imageModel;
void ImageModel::NotifyImageChanged() void ImageModel::NotifyImageChanged()
{ {
if (canvasWindow.IsWindow()) if (canvasWindow.IsWindow())
canvasWindow.Invalidate(FALSE); {
canvasWindow.updateScrollInfo();
canvasWindow.Invalidate();
}
if (miniature.IsWindow()) if (miniature.IsWindow())
miniature.Invalidate(FALSE); miniature.Invalidate();
} }
ImageModel::ImageModel() ImageModel::ImageModel()
@ -99,6 +103,15 @@ void ImageModel::ResetToPrevious()
void ImageModel::ClearHistory() void ImageModel::ClearHistory()
{ {
for (int i = 0; i < HISTORYSIZE; ++i)
{
if (m_hBms[i] && i != m_currInd)
{
::DeleteObject(m_hBms[i]);
m_hBms[i] = NULL;
}
}
m_undoSteps = 0; m_undoSteps = 0;
m_redoSteps = 0; m_redoSteps = 0;
} }