[MSPAINT] Simplify SelectionModel::StretchSkew

...and omit cloning HBITMAP in SelectionModel::InsertFromHBITMAP. CORE-18867
This commit is contained in:
Katayama Hirofumi MZ 2023-06-19 14:11:16 +09:00
parent 7bb0561c2d
commit b5335fb90b
2 changed files with 27 additions and 28 deletions

View file

@ -212,7 +212,7 @@ void SelectionModel::Landing()
void SelectionModel::InsertFromHBITMAP(HBITMAP hbmColor, INT x, INT y, HBITMAP hbmMask) void SelectionModel::InsertFromHBITMAP(HBITMAP hbmColor, INT x, INT y, HBITMAP hbmMask)
{ {
::DeleteObject(m_hbmColor); ::DeleteObject(m_hbmColor);
m_hbmColor = CopyDIBImage(hbmColor); m_hbmColor = hbmColor;
m_rc.left = x; m_rc.left = x;
m_rc.top = y; m_rc.top = y;
@ -222,7 +222,7 @@ void SelectionModel::InsertFromHBITMAP(HBITMAP hbmColor, INT x, INT y, HBITMAP h
if (hbmMask) if (hbmMask)
{ {
::DeleteObject(m_hbmMask); ::DeleteObject(m_hbmMask);
m_hbmMask = CopyMonoImage(hbmMask); m_hbmMask = hbmMask;
} }
else else
{ {
@ -332,6 +332,14 @@ void SelectionModel::RotateNTimes90Degrees(int iN)
NotifyContentChanged(); NotifyContentChanged();
} }
static void AttachHBITMAP(HBITMAP *phbm, HBITMAP hbmNew)
{
if (hbmNew == NULL)
return;
::DeleteObject(*phbm);
*phbm = hbmNew;
}
void SelectionModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY) void SelectionModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY)
{ {
if (nStretchPercentX == 100 && nStretchPercentY == 100 && nSkewDegX == 0 && nSkewDegY == 0) if (nStretchPercentX == 100 && nStretchPercentY == 100 && nSkewDegX == 0 && nSkewDegY == 0)
@ -339,54 +347,46 @@ void SelectionModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int
TakeOff(); TakeOff();
INT oldWidth = m_rc.Width(); INT oldWidth = m_rc.Width(), oldHeight = m_rc.Height();
INT oldHeight = m_rc.Height();
INT newWidth = oldWidth * nStretchPercentX / 100; INT newWidth = oldWidth * nStretchPercentX / 100;
INT newHeight = oldHeight * nStretchPercentY / 100; INT newHeight = oldHeight * nStretchPercentY / 100;
HBITMAP hbmColor, hbmMask; HBITMAP hbmColor = m_hbmColor, hbmMask = m_hbmMask;
HGDIOBJ hbmOld;
if (m_hbmMask == NULL) if (hbmMask == NULL)
m_hbmMask = CreateMonoBitmap(newWidth, newHeight, TRUE); hbmMask = CreateMonoBitmap(oldWidth, oldHeight, TRUE);
if (oldWidth != newWidth || oldHeight != newHeight) if (oldWidth != newWidth || oldHeight != newHeight)
{ {
hbmColor = CopyDIBImage(m_hbmColor, newWidth, newHeight); AttachHBITMAP(&hbmColor, CopyDIBImage(hbmColor, newWidth, newHeight));
hbmMask = CopyMonoImage(m_hbmMask, newWidth, newHeight); AttachHBITMAP(&hbmMask, CopyMonoImage(hbmMask, newWidth, newHeight));
InsertFromHBITMAP(hbmColor, m_rc.left, m_rc.top, hbmMask);
::DeleteObject(hbmColor);
::DeleteObject(hbmMask);
} }
HGDIOBJ hbmOld;
HDC hDC = ::CreateCompatibleDC(NULL); HDC hDC = ::CreateCompatibleDC(NULL);
if (nSkewDegX) if (nSkewDegX)
{ {
hbmOld = ::SelectObject(hDC, m_hbmColor); hbmOld = ::SelectObject(hDC, hbmColor);
hbmColor = SkewDIB(hDC, m_hbmColor, nSkewDegX, FALSE); AttachHBITMAP(&hbmColor, SkewDIB(hDC, hbmColor, nSkewDegX, FALSE));
::SelectObject(hDC, m_hbmMask); ::SelectObject(hDC, hbmMask);
hbmMask = SkewDIB(hDC, m_hbmMask, nSkewDegX, FALSE, TRUE); AttachHBITMAP(&hbmMask, SkewDIB(hDC, hbmMask, nSkewDegX, FALSE, TRUE));
::SelectObject(hDC, hbmOld); ::SelectObject(hDC, hbmOld);
InsertFromHBITMAP(hbmColor, m_rc.left, m_rc.top, hbmMask);
::DeleteObject(hbmColor);
::DeleteObject(hbmMask);
} }
if (nSkewDegY) if (nSkewDegY)
{ {
hbmOld = ::SelectObject(hDC, m_hbmColor); hbmOld = ::SelectObject(hDC, hbmColor);
hbmColor = SkewDIB(hDC, m_hbmColor, nSkewDegY, TRUE); AttachHBITMAP(&hbmColor, SkewDIB(hDC, hbmColor, nSkewDegY, TRUE));
::SelectObject(hDC, m_hbmMask); ::SelectObject(hDC, hbmMask);
hbmMask = SkewDIB(hDC, m_hbmMask, nSkewDegY, TRUE, TRUE); AttachHBITMAP(&hbmMask, SkewDIB(hDC, hbmMask, nSkewDegY, TRUE, TRUE));
::SelectObject(hDC, hbmOld); ::SelectObject(hDC, hbmOld);
InsertFromHBITMAP(hbmColor, m_rc.left, m_rc.top, hbmMask);
::DeleteObject(hbmColor);
::DeleteObject(hbmMask);
} }
::DeleteDC(hDC); ::DeleteDC(hDC);
InsertFromHBITMAP(hbmColor, m_rc.left, m_rc.top, hbmMask);
m_bShow = TRUE; m_bShow = TRUE;
NotifyContentChanged(); NotifyContentChanged();
} }

View file

@ -844,7 +844,6 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
if (hbmNew) if (hbmNew)
{ {
InsertSelectionFromHBITMAP(hbmNew, m_hWnd); InsertSelectionFromHBITMAP(hbmNew, m_hWnd);
DeleteObject(hbmNew);
} }
} }
break; break;