mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
[MSPAINT] Don't show error message twice (#5715)
- Reduce display of error message on IDM_EDITCOPYTO and IDM_EDITPASTEFROM. - Introduce LockBitmap/UnlockBitmap mechanism for ImageModel and SelectionModel. CORE-19181, CORE-19182
This commit is contained in:
parent
98050f9139
commit
bbb33a6ed5
|
@ -261,27 +261,41 @@ void ImageModel::Clamp(POINT& pt) const
|
|||
|
||||
HBITMAP ImageModel::CopyBitmap()
|
||||
{
|
||||
// NOTE: An app cannot select a bitmap into more than one device context at a time.
|
||||
::SelectObject(m_hDrawingDC, m_hbmOld); // De-select
|
||||
HBITMAP ret = CopyDIBImage(m_hBms[m_currInd]);
|
||||
m_hbmOld = ::SelectObject(m_hDrawingDC, m_hBms[m_currInd]); // Re-select
|
||||
HBITMAP hBitmap = LockBitmap();
|
||||
HBITMAP ret = CopyDIBImage(hBitmap);
|
||||
UnlockBitmap(hBitmap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL ImageModel::IsBlackAndWhite()
|
||||
{
|
||||
::SelectObject(m_hDrawingDC, m_hbmOld); // De-select
|
||||
BOOL bBlackAndWhite = IsBitmapBlackAndWhite(m_hBms[m_currInd]);
|
||||
m_hbmOld = ::SelectObject(m_hDrawingDC, m_hBms[m_currInd]); // Re-select
|
||||
HBITMAP hBitmap = LockBitmap();
|
||||
BOOL bBlackAndWhite = IsBitmapBlackAndWhite(hBitmap);
|
||||
UnlockBitmap(hBitmap);
|
||||
return bBlackAndWhite;
|
||||
}
|
||||
|
||||
void ImageModel::PushBlackAndWhite()
|
||||
{
|
||||
::SelectObject(m_hDrawingDC, m_hbmOld); // De-select
|
||||
HBITMAP hNewBitmap = ConvertToBlackAndWhite(m_hBms[m_currInd]);
|
||||
m_hbmOld = ::SelectObject(m_hDrawingDC, m_hBms[m_currInd]); // Re-select
|
||||
HBITMAP hBitmap = LockBitmap();
|
||||
HBITMAP hNewBitmap = ConvertToBlackAndWhite(hBitmap);
|
||||
UnlockBitmap(hBitmap);
|
||||
|
||||
if (hNewBitmap)
|
||||
PushImageForUndo(hNewBitmap);
|
||||
}
|
||||
|
||||
HBITMAP ImageModel::LockBitmap()
|
||||
{
|
||||
// NOTE: An app cannot select a bitmap into more than one device context at a time.
|
||||
::SelectObject(m_hDrawingDC, m_hbmOld); // De-select
|
||||
HBITMAP hbmLocked = m_hBms[m_currInd];
|
||||
m_hBms[m_currInd] = NULL;
|
||||
return hbmLocked;
|
||||
}
|
||||
|
||||
void ImageModel::UnlockBitmap(HBITMAP hbmLocked)
|
||||
{
|
||||
m_hBms[m_currInd] = hbmLocked;
|
||||
m_hbmOld = ::SelectObject(m_hDrawingDC, hbmLocked); // Re-select
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@ public:
|
|||
int GetWidth() const;
|
||||
int GetHeight() const;
|
||||
HBITMAP CopyBitmap();
|
||||
HBITMAP LockBitmap();
|
||||
void UnlockBitmap(HBITMAP hbmLocked);
|
||||
void InvertColors();
|
||||
void FlipHorizontally();
|
||||
void FlipVertically();
|
||||
|
|
|
@ -117,9 +117,9 @@ BOOL OpenMailer(HWND hWnd, LPCWSTR pszPathName)
|
|||
strFileTitle += L".png";
|
||||
|
||||
// Save it to the temporary file
|
||||
HBITMAP hbm = imageModel.CopyBitmap();
|
||||
BOOL ret = SaveDIBToFile(hbm, g_szMailTempFile, FALSE, Gdiplus::ImageFormatPNG);
|
||||
::DeleteObject(hbm);
|
||||
HBITMAP hbmLocked = imageModel.LockBitmap();
|
||||
BOOL ret = SaveDIBToFile(hbmLocked, g_szMailTempFile, FALSE, Gdiplus::ImageFormatPNG);
|
||||
imageModel.UnlockBitmap(hbmLocked);
|
||||
if (!ret)
|
||||
{
|
||||
g_szMailTempFile[0] = UNICODE_NULL;
|
||||
|
|
|
@ -528,3 +528,15 @@ void SelectionModel::SwapWidthAndHeight()
|
|||
m_rc.right = m_rc.left + cy;
|
||||
m_rc.bottom = m_rc.top + cx;
|
||||
}
|
||||
|
||||
HBITMAP SelectionModel::LockBitmap()
|
||||
{
|
||||
HBITMAP hbm = m_hbmColor;
|
||||
m_hbmColor = NULL;
|
||||
return hbm;
|
||||
}
|
||||
|
||||
void SelectionModel::UnlockBitmap(HBITMAP hbmLocked)
|
||||
{
|
||||
m_hbmColor = hbmLocked;
|
||||
}
|
||||
|
|
|
@ -40,6 +40,8 @@ public:
|
|||
void DeleteSelection();
|
||||
|
||||
HBITMAP CopyBitmap();
|
||||
HBITMAP LockBitmap();
|
||||
void UnlockBitmap(HBITMAP hbmLocked);
|
||||
void GetSelectionContents(HDC hDCImage);
|
||||
void DrawFramePoly(HDC hDCImage);
|
||||
void DrawBackground(HDC hDCImage);
|
||||
|
|
|
@ -741,13 +741,13 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
selectionModel.TakeOff();
|
||||
|
||||
{
|
||||
HBITMAP hbm = selectionModel.CopyBitmap();
|
||||
if (hbm)
|
||||
HBITMAP hbmLocked = selectionModel.LockBitmap();
|
||||
if (hbmLocked)
|
||||
{
|
||||
HGLOBAL hGlobal = BitmapToClipboardDIB(hbm);
|
||||
HGLOBAL hGlobal = BitmapToClipboardDIB(hbmLocked);
|
||||
if (hGlobal)
|
||||
::SetClipboardData(CF_DIB, hGlobal);
|
||||
::DeleteObject(hbm);
|
||||
selectionModel.UnlockBitmap(hbmLocked);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -865,10 +865,9 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
WCHAR szFileName[MAX_LONG_PATH] = L"*.png";
|
||||
if (GetSaveFileName(szFileName, _countof(szFileName)))
|
||||
{
|
||||
HBITMAP hbm = selectionModel.CopyBitmap();
|
||||
if (!SaveDIBToFile(hbm, szFileName, FALSE))
|
||||
ShowError(IDS_SAVEERROR, szFileName);
|
||||
::DeleteObject(hbm);
|
||||
HBITMAP hbmLocked = selectionModel.LockBitmap();
|
||||
SaveDIBToFile(hbmLocked, szFileName, FALSE);
|
||||
selectionModel.UnlockBitmap(hbmLocked);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -880,8 +879,6 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
HBITMAP hbmNew = DoLoadImageFile(m_hWnd, szFileName, FALSE);
|
||||
if (hbmNew)
|
||||
InsertSelectionFromHBITMAP(hbmNew, m_hWnd);
|
||||
else
|
||||
ShowError(IDS_LOADERRORTEXT, szFileName);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1008,7 +1005,6 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
imageModel.PushImageForUndo(selectionModel.CopyBitmap());
|
||||
selectionModel.HideSelection();
|
||||
break;
|
||||
|
||||
case IDM_VIEWTOOLBOX:
|
||||
registrySettings.ShowToolBox = !toolBoxContainer.IsWindowVisible();
|
||||
toolBoxContainer.ShowWindow(registrySettings.ShowToolBox ? SW_SHOWNOACTIVATE : SW_HIDE);
|
||||
|
|
Loading…
Reference in a new issue