ReactOS  0.4.15-dev-3739-gff9301e
SelectionModel Class Reference

#include <selectionmodel.h>

Collaboration diagram for SelectionModel:

Public Member Functions

 SelectionModel ()
 
 ~SelectionModel ()
 
void ResetPtStack ()
 
void PushToPtStack (LONG x, LONG y)
 
void CalculateBoundingBoxAndContents (HDC hDCImage)
 
void CalculateContents (HDC hDCImage)
 
void DrawBackgroundPoly (HDC hDCImage, COLORREF crBg)
 
void DrawBackgroundRect (HDC hDCImage, COLORREF crBg)
 
void DrawSelection (HDC hDCImage, COLORREF crBg=0, BOOL bBgTransparent=FALSE)
 
void DrawSelectionStretched (HDC hDCImage)
 
void ScaleContentsToFit ()
 
void InsertFromHBITMAP (HBITMAP hBm)
 
void FlipHorizontally ()
 
void FlipVertically ()
 
void RotateNTimes90Degrees (int iN)
 
HBITMAP GetBitmap () const
 
int PtStackSize () const
 
void DrawFramePoly (HDC hDCImage)
 
void SetSrcAndDestRectFromPoints (const POINT &ptFrom, const POINT &ptTo)
 
void SetSrcRectSizeToZero ()
 
BOOL IsSrcRectSizeNonzero () const
 
void ModifyDestRect (POINT &ptDelta, int iAction)
 
LONG GetDestRectWidth () const
 
LONG GetDestRectHeight () const
 
LONG GetDestRectLeft () const
 
LONG GetDestRectTop () const
 
void GetRect (LPRECT prc) const
 
void DrawTextToolText (HDC hDCImage, COLORREF crFg, COLORREF crBg, BOOL bBgTransparent=FALSE)
 

Private Member Functions

void NotifyRefreshNeeded ()
 
 SelectionModel (const SelectionModel &)
 
SelectionModeloperator= (const SelectionModel &)
 

Private Attributes

HDC m_hDC
 
RECT m_rcSrc
 
RECT m_rcDest
 
HBITMAP m_hBm
 
HBITMAP m_hMask
 
POINTm_ptStack
 
int m_iPtSP
 

Detailed Description

Definition at line 26 of file selectionmodel.h.

Constructor & Destructor Documentation

◆ SelectionModel() [1/2]

SelectionModel::SelectionModel ( )

Definition at line 16 of file selectionmodel.cpp.

18  , m_hBm(NULL)
19  , m_hMask(NULL)
20  , m_ptStack(NULL)
21  , m_iPtSP(0)
22 {
25 }
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
#define NULL
Definition: types.h:112

◆ ~SelectionModel()

SelectionModel::~SelectionModel ( )

Definition at line 27 of file selectionmodel.cpp.

28 {
29  DeleteDC(m_hDC);
30  ResetPtStack();
31  if (m_hBm)
32  {
34  }
35  if (m_hMask)
36  {
38  }
39 }
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
BOOL WINAPI DeleteDC(_In_ HDC)

◆ SelectionModel() [2/2]

SelectionModel::SelectionModel ( const SelectionModel )
private

Member Function Documentation

◆ CalculateBoundingBoxAndContents()

void SelectionModel::CalculateBoundingBoxAndContents ( HDC  hDCImage)

Definition at line 63 of file selectionmodel.cpp.

64 {
65  int i;
68  for (i = 0; i < m_iPtSP; i++)
69  {
70  if (m_ptStack[i].x < m_rcSrc.left)
72  if (m_ptStack[i].y < m_rcSrc.top)
73  m_rcSrc.top = m_ptStack[i].y;
74  if (m_ptStack[i].x > m_rcSrc.right)
76  if (m_ptStack[i].y > m_rcSrc.bottom)
78  }
79  m_rcSrc.right += 1;
80  m_rcSrc.bottom += 1;
85 
86  if (m_iPtSP > 1)
87  {
91  POINT *m_ptStackCopy = (POINT*) HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sizeof(POINT) * m_iPtSP);
92  for (i = 0; i < m_iPtSP; i++)
93  {
94  m_ptStackCopy[i].x = m_ptStack[i].x - m_rcSrc.left;
95  m_ptStackCopy[i].y = m_ptStack[i].y - m_rcSrc.top;
96  }
97  Poly(m_hDC, m_ptStackCopy, m_iPtSP, 0x00ffffff, 0x00ffffff, 1, 2, TRUE, FALSE);
98  HeapFree(GetProcessHeap(), 0, m_ptStackCopy);
103  }
104 }
long y
Definition: polytest.cpp:48
#define MAXLONG
Definition: umtypes.h:116
long x
Definition: polytest.cpp:48
#define TRUE
Definition: types.h:120
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
#define FALSE
Definition: types.h:117
HBITMAP CreateDIBWithProperties(int width, int height)
Definition: dib.cpp:16
#define MAKEROP4(f, b)
Definition: wingdi.h:2946
void Poly(HDC hdc, POINT *lpPoints, int nCount, COLORREF fg, COLORREF bg, int thickness, int style, BOOL closed, BOOL inverted)
Definition: drawing.cpp:70
#define POINT
Definition: precomp.h:30
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
ImageModel imageModel
Definition: main.cpp:32
#define WHITENESS
Definition: wingdi.h:337
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define NULL
Definition: types.h:112
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
LONG bottom
Definition: windef.h:309
BOOL WINAPI MaskBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ HBITMAP, _In_ int, _In_ int, _In_ DWORD)
#define HEAP_GENERATE_EXCEPTIONS
Definition: nt_native.h:1694
void ResetToPrevious(void)
Definition: history.cpp:98
#define HeapFree(x, y, z)
Definition: compat.h:594
#define SRCCOPY
Definition: wingdi.h:333
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)

Referenced by FreeSelTool::OnButtonUp().

◆ CalculateContents()

void SelectionModel::CalculateContents ( HDC  hDCImage)

Definition at line 106 of file selectionmodel.cpp.

107 {
111  Rect(m_hDC, 0, 0, RECT_WIDTH(m_rcSrc), RECT_HEIGHT(m_rcSrc), 0x00ffffff, 0x00ffffff, 1, 2);
114  m_rcSrc.top, SRCCOPY);
115 }
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LONG left
Definition: windef.h:306
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
HBITMAP CreateDIBWithProperties(int width, int height)
Definition: dib.cpp:16
#define NULL
Definition: types.h:112
#define SRCCOPY
Definition: wingdi.h:333
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49
struct Rect Rect
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)

Referenced by RectSelTool::OnButtonUp().

◆ DrawBackgroundPoly()

void SelectionModel::DrawBackgroundPoly ( HDC  hDCImage,
COLORREF  crBg 
)

Definition at line 117 of file selectionmodel.cpp.

118 {
119  Poly(hDCImage, m_ptStack, m_iPtSP, crBg, crBg, 1, 2, TRUE, FALSE);
120 }
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
void Poly(HDC hdc, POINT *lpPoints, int nCount, COLORREF fg, COLORREF bg, int thickness, int style, BOOL closed, BOOL inverted)
Definition: drawing.cpp:70

Referenced by FreeSelTool::OnButtonUp().

◆ DrawBackgroundRect()

void SelectionModel::DrawBackgroundRect ( HDC  hDCImage,
COLORREF  crBg 
)

Definition at line 122 of file selectionmodel.cpp.

123 {
124  Rect(hDCImage, m_rcSrc.left, m_rcSrc.top, m_rcSrc.right, m_rcSrc.bottom, crBg, crBg, 0, 1);
125 }
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
struct Rect Rect

Referenced by RectSelTool::OnButtonUp().

◆ DrawFramePoly()

void SelectionModel::DrawFramePoly ( HDC  hDCImage)

Definition at line 236 of file selectionmodel.cpp.

237 {
238  Poly(hDCImage, m_ptStack, m_iPtSP, 0, 0, 2, 0, FALSE, TRUE); /* draw the freehand selection inverted/xored */
239 }
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
void Poly(HDC hdc, POINT *lpPoints, int nCount, COLORREF fg, COLORREF bg, int thickness, int style, BOOL closed, BOOL inverted)
Definition: drawing.cpp:70

Referenced by FreeSelTool::OnMouseMove().

◆ DrawSelection()

void SelectionModel::DrawSelection ( HDC  hDCImage,
COLORREF  crBg = 0,
BOOL  bBgTransparent = FALSE 
)

Definition at line 130 of file selectionmodel.cpp.

131 {
132  if (!bBgTransparent)
134  m_hDC, 0, 0, m_hMask, 0, 0, MAKEROP4(SRCCOPY, SRCAND));
135  else
137  m_hDC, 0, 0, m_hMask, 0, 0, MAKEROP4(SRCCOPY, SRCAND), crBg);
138 }
LONG top
Definition: windef.h:307
BOOL ColorKeyedMaskBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, HBITMAP hbmMask, int xMask, int yMask, DWORD dwRop, COLORREF keyColor)
Definition: selection.cpp:25
LONG left
Definition: windef.h:306
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
#define MAKEROP4(f, b)
Definition: wingdi.h:2946
#define SRCAND
Definition: wingdi.h:330
BOOL WINAPI MaskBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ HBITMAP, _In_ int, _In_ int, _In_ DWORD)
#define SRCCOPY
Definition: wingdi.h:333

Referenced by FreeSelTool::OnButtonUp(), RectSelTool::OnButtonUp(), and CSelectionWindow::OnMouseMove().

◆ DrawSelectionStretched()

void SelectionModel::DrawSelectionStretched ( HDC  hDCImage)

Definition at line 140 of file selectionmodel.cpp.

141 {
143 }
LONG top
Definition: windef.h:307
int GetDIBHeight(HBITMAP hBitmap)
Definition: dib.cpp:61
LONG left
Definition: windef.h:306
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define RECT_HEIGHT(a)
Definition: common.h:21
int GetDIBWidth(HBITMAP hBitmap)
Definition: dib.cpp:53
#define RECT_WIDTH(a)
Definition: common.h:18
#define SRCCOPY
Definition: wingdi.h:333

Referenced by CSelectionWindow::OnMouseMove().

◆ DrawTextToolText()

void SelectionModel::DrawTextToolText ( HDC  hDCImage,
COLORREF  crFg,
COLORREF  crBg,
BOOL  bBgTransparent = FALSE 
)

Definition at line 340 of file selectionmodel.cpp.

341 {
342  Text(hDCImage, m_rcDest.left, m_rcDest.top, m_rcDest.right, m_rcDest.bottom, crFg, crBg, textToolText, hfontTextFont, bBgTransparent);
343 }
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
HFONT hfontTextFont
Definition: main.cpp:23
LPTSTR textToolText
Definition: main.cpp:25
LONG bottom
Definition: windef.h:309
char * Text
Definition: combotst.c:136

Referenced by CSelectionWindow::OnMouseMove().

◆ FlipHorizontally()

void SelectionModel::FlipHorizontally ( )

Definition at line 190 of file selectionmodel.cpp.

191 {
199 }
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
void NotifyRefreshNeeded()
#define SRCCOPY
Definition: wingdi.h:333

Referenced by CMainWindow::OnCommand().

◆ FlipVertically()

void SelectionModel::FlipVertically ( )

Definition at line 201 of file selectionmodel.cpp.

202 {
210 }
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
void NotifyRefreshNeeded()
#define SRCCOPY
Definition: wingdi.h:333

Referenced by CMainWindow::OnCommand().

◆ GetBitmap()

HBITMAP SelectionModel::GetBitmap ( ) const

Definition at line 226 of file selectionmodel.cpp.

227 {
228  return m_hBm;
229 }

Referenced by CMainWindow::OnCommand().

◆ GetDestRectHeight()

LONG SelectionModel::GetDestRectHeight ( ) const

Definition at line 325 of file selectionmodel.cpp.

326 {
327  return m_rcDest.bottom - m_rcDest.top;
328 }
LONG top
Definition: windef.h:307
LONG bottom
Definition: windef.h:309

Referenced by CSelectionWindow::OnMouseMove(), CSelectionWindow::OnPaint(), and placeSelWin().

◆ GetDestRectLeft()

LONG SelectionModel::GetDestRectLeft ( ) const

Definition at line 330 of file selectionmodel.cpp.

331 {
332  return m_rcDest.left;
333 }
LONG left
Definition: windef.h:306

Referenced by placeSelWin().

◆ GetDestRectTop()

LONG SelectionModel::GetDestRectTop ( ) const

Definition at line 335 of file selectionmodel.cpp.

336 {
337  return m_rcDest.top;
338 }
LONG top
Definition: windef.h:307

Referenced by placeSelWin().

◆ GetDestRectWidth()

LONG SelectionModel::GetDestRectWidth ( ) const

Definition at line 320 of file selectionmodel.cpp.

321 {
322  return m_rcDest.right - m_rcDest.left;
323 }
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308

Referenced by CSelectionWindow::OnMouseMove(), CSelectionWindow::OnPaint(), and placeSelWin().

◆ GetRect()

void SelectionModel::GetRect ( LPRECT  prc) const

Definition at line 350 of file selectionmodel.cpp.

351 {
352  *prc = m_rcDest;
353 }
_Out_ LPRECT prc
Definition: ntgdi.h:1658

Referenced by TextTool::OnButtonUp().

◆ InsertFromHBITMAP()

void SelectionModel::InsertFromHBITMAP ( HBITMAP  hBm)

Definition at line 168 of file selectionmodel.cpp.

169 {
170  HDC hTempDC;
171  HBITMAP hTempMask;
172 
173  m_hBm = CopyDIBImage(hBm);
175 
177  m_rcDest.left = m_rcDest.top = 0;
180 
181  hTempDC = CreateCompatibleDC(m_hDC);
182  hTempMask = CreateBitmap(RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), 1, 1, NULL);
183  SelectObject(hTempDC, hTempMask);
184  Rect(hTempDC, m_rcDest.left, m_rcDest.top, m_rcDest.right, m_rcDest.bottom, 0x00ffffff, 0x00ffffff, 1, 1);
186  m_hMask = hTempMask;
187  DeleteDC(hTempDC);
188 }
static HBITMAP CopyDIBImage(HBITMAP hbm, INT cx=0, INT cy=0)
Definition: dib.h:14
static HDC
Definition: imagelist.c:92
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
int GetDIBHeight(HBITMAP hBitmap)
Definition: dib.cpp:61
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
#define RECT_HEIGHT(a)
Definition: common.h:21
int GetDIBWidth(HBITMAP hBitmap)
Definition: dib.cpp:53
#define RECT_WIDTH(a)
Definition: common.h:18
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
BOOL WINAPI DeleteDC(_In_ HDC)
#define NULL
Definition: types.h:112
LONG bottom
Definition: windef.h:309
static HBITMAP
Definition: button.c:44
struct Rect Rect
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)

Referenced by CMainWindow::InsertSelectionFromHBITMAP().

◆ IsSrcRectSizeNonzero()

BOOL SelectionModel::IsSrcRectSizeNonzero ( ) const

Definition at line 255 of file selectionmodel.cpp.

256 {
257  return (RECT_WIDTH(m_rcSrc) != 0) && (RECT_HEIGHT(m_rcSrc) != 0);
258 }
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18

Referenced by RectSelTool::OnButtonUp(), and TextTool::OnButtonUp().

◆ ModifyDestRect()

void SelectionModel::ModifyDestRect ( POINT ptDelta,
int  iAction 
)

Definition at line 260 of file selectionmodel.cpp.

261 {
262  POINT ptDeltaUsed;
263 
264  switch (iAction)
265  {
266  case ACTION_MOVE: /* move selection */
267  ptDeltaUsed.x = ptDelta.x;
268  ptDeltaUsed.y = ptDelta.y;
269  OffsetRect(&m_rcDest, ptDeltaUsed.x, ptDeltaUsed.y);
270  break;
271  case ACTION_RESIZE_TOP_LEFT: /* resize at upper left corner */
272  ptDeltaUsed.x = min(ptDelta.x, RECT_WIDTH(m_rcDest) - 1);
273  ptDeltaUsed.y = min(ptDelta.y, RECT_HEIGHT(m_rcDest) - 1);
274  m_rcDest.left += ptDeltaUsed.x;
275  m_rcDest.top += ptDeltaUsed.y;
276  break;
277  case ACTION_RESIZE_TOP: /* resize at top edge */
278  ptDeltaUsed.x = ptDelta.x;
279  ptDeltaUsed.y = min(ptDelta.y, RECT_HEIGHT(m_rcDest) - 1);
280  m_rcDest.top += ptDeltaUsed.y;
281  break;
282  case ACTION_RESIZE_TOP_RIGHT: /* resize at upper right corner */
283  ptDeltaUsed.x = max(ptDelta.x, -(RECT_WIDTH(m_rcDest) - 1));
284  ptDeltaUsed.y = min(ptDelta.y, RECT_HEIGHT(m_rcDest) - 1);
285  m_rcDest.top += ptDeltaUsed.y;
286  m_rcDest.right += ptDeltaUsed.x;
287  break;
288  case ACTION_RESIZE_LEFT: /* resize at left edge */
289  ptDeltaUsed.x = min(ptDelta.x, RECT_WIDTH(m_rcDest) - 1);
290  ptDeltaUsed.y = ptDelta.y;
291  m_rcDest.left += ptDeltaUsed.x;
292  break;
293  case ACTION_RESIZE_RIGHT: /* resize at right edge */
294  ptDeltaUsed.x = max(ptDelta.x, -(RECT_WIDTH(m_rcDest) - 1));
295  ptDeltaUsed.y = ptDelta.y;
296  m_rcDest.right += ptDeltaUsed.x;
297  break;
298  case ACTION_RESIZE_BOTTOM_LEFT: /* resize at lower left corner */
299  ptDeltaUsed.x = min(ptDelta.x, RECT_WIDTH(m_rcDest) - 1);
300  ptDeltaUsed.y = max(ptDelta.y, -(RECT_HEIGHT(m_rcDest) - 1));
301  m_rcDest.left += ptDeltaUsed.x;
302  m_rcDest.bottom += ptDeltaUsed.y;
303  break;
304  case ACTION_RESIZE_BOTTOM: /* resize at bottom edge */
305  ptDeltaUsed.x = ptDelta.x;
306  ptDeltaUsed.y = max(ptDelta.y, -(RECT_HEIGHT(m_rcDest) - 1));
307  m_rcDest.bottom += ptDeltaUsed.y;
308  break;
309  case ACTION_RESIZE_BOTTOM_RIGHT: /* resize at lower right corner */
310  ptDeltaUsed.x = max(ptDelta.x, -(RECT_WIDTH(m_rcDest) - 1));
311  ptDeltaUsed.y = max(ptDelta.y, -(RECT_HEIGHT(m_rcDest) - 1));
312  m_rcDest.right += ptDeltaUsed.x;
313  m_rcDest.bottom += ptDeltaUsed.y;
314  break;
315  }
316  ptDelta.x -= ptDeltaUsed.x;
317  ptDelta.y -= ptDeltaUsed.y;
318 }
#define max(a, b)
Definition: svc.c:63
long y
Definition: polytest.cpp:48
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
long x
Definition: polytest.cpp:48
#define ACTION_RESIZE_TOP_LEFT
LONG top
Definition: windef.h:307
#define ACTION_RESIZE_RIGHT
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
#define ACTION_RESIZE_BOTTOM_LEFT
#define ACTION_RESIZE_TOP_RIGHT
#define ACTION_MOVE
#define ACTION_RESIZE_TOP
#define ACTION_RESIZE_LEFT
#define min(a, b)
Definition: monoChain.cc:55
LONG bottom
Definition: windef.h:309
#define ACTION_RESIZE_BOTTOM
#define ACTION_RESIZE_BOTTOM_RIGHT

Referenced by CSelectionWindow::OnMouseMove().

◆ NotifyRefreshNeeded()

void SelectionModel::NotifyRefreshNeeded ( )
private

Definition at line 345 of file selectionmodel.cpp.

346 {
348 }
#define WM_SELECTIONMODELREFRESHNEEDED
Definition: precomp.h:43
CSelectionWindow selectionWindow
Definition: main.cpp:71

Referenced by FlipHorizontally(), FlipVertically(), and RotateNTimes90Degrees().

◆ operator=()

◆ PtStackSize()

int SelectionModel::PtStackSize ( ) const

Definition at line 231 of file selectionmodel.cpp.

232 {
233  return m_iPtSP;
234 }

Referenced by FreeSelTool::OnButtonUp(), and FreeSelTool::OnMouseMove().

◆ PushToPtStack()

void SelectionModel::PushToPtStack ( LONG  x,
LONG  y 
)

Definition at line 49 of file selectionmodel.cpp.

50 {
51  if (m_iPtSP % 1024 == 0)
52  {
53  if (m_ptStack)
55  else
57  }
58  m_ptStack[m_iPtSP].x = x;
59  m_ptStack[m_iPtSP].y = y;
60  m_iPtSP++;
61 }
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define POINT
Definition: precomp.h:30
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define HeapReAlloc
Definition: compat.h:593
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define HEAP_GENERATE_EXCEPTIONS
Definition: nt_native.h:1694

Referenced by FreeSelTool::OnButtonDown(), and FreeSelTool::OnMouseMove().

◆ ResetPtStack()

void SelectionModel::ResetPtStack ( )

◆ RotateNTimes90Degrees()

void SelectionModel::RotateNTimes90Degrees ( int  iN)

Definition at line 212 of file selectionmodel.cpp.

213 {
214  if (iN == 2)
215  {
222  }
224 }
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define RECT_HEIGHT(a)
Definition: common.h:21
#define RECT_WIDTH(a)
Definition: common.h:18
void NotifyRefreshNeeded()
#define SRCCOPY
Definition: wingdi.h:333

Referenced by CMainWindow::OnCommand().

◆ ScaleContentsToFit()

void SelectionModel::ScaleContentsToFit ( )

Definition at line 145 of file selectionmodel.cpp.

146 {
147  HDC hTempDC;
148  HBITMAP hTempBm;
149  hTempDC = CreateCompatibleDC(m_hDC);
151  SelectObject(hTempDC, hTempBm);
153  StretchBlt(hTempDC, 0, 0, RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), m_hDC, 0, 0,
156  m_hBm = hTempBm;
158  SelectObject(hTempDC, hTempBm);
160  StretchBlt(hTempDC, 0, 0, RECT_WIDTH(m_rcDest), RECT_HEIGHT(m_rcDest), m_hDC, 0, 0,
163  m_hMask = hTempBm;
165  DeleteDC(hTempDC);
166 }
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
int GetDIBHeight(HBITMAP hBitmap)
Definition: dib.cpp:61
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define RECT_HEIGHT(a)
Definition: common.h:21
int GetDIBWidth(HBITMAP hBitmap)
Definition: dib.cpp:53
#define RECT_WIDTH(a)
Definition: common.h:18
HBITMAP CreateDIBWithProperties(int width, int height)
Definition: dib.cpp:16
BOOL WINAPI DeleteDC(_In_ HDC)
#define NULL
Definition: types.h:112
static HBITMAP
Definition: button.c:44
#define SRCCOPY
Definition: wingdi.h:333
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)

Referenced by CSelectionWindow::OnLButtonUp().

◆ SetSrcAndDestRectFromPoints()

void SelectionModel::SetSrcAndDestRectFromPoints ( const POINT ptFrom,
const POINT ptTo 
)

Definition at line 241 of file selectionmodel.cpp.

242 {
243  m_rcDest.left = m_rcSrc.left = min(ptFrom.x, ptTo.x);
244  m_rcDest.top = m_rcSrc.top = min(ptFrom.y, ptTo.y);
245  m_rcDest.right = m_rcSrc.right = max(ptFrom.x, ptTo.x);
246  m_rcDest.bottom = m_rcSrc.bottom = max(ptFrom.y, ptTo.y);
247 }
#define max(a, b)
Definition: svc.c:63
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
#define min(a, b)
Definition: monoChain.cc:55
LONG bottom
Definition: windef.h:309

Referenced by RectSelTool::OnMouseMove(), and TextTool::UpdatePoint().

◆ SetSrcRectSizeToZero()

void SelectionModel::SetSrcRectSizeToZero ( )

Definition at line 249 of file selectionmodel.cpp.

250 {
253 }
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309

Referenced by RectSelTool::OnButtonDown().

Member Data Documentation

◆ m_hBm

◆ m_hDC

◆ m_hMask

◆ m_iPtSP

int SelectionModel::m_iPtSP
private

◆ m_ptStack

POINT* SelectionModel::m_ptStack
private

◆ m_rcDest

◆ m_rcSrc


The documentation for this class was generated from the following files: