svn path=/trunk/; revision=62041
int action = 0;
POINTS pos;
POINTS frac;
int action = 0;
POINTS pos;
POINTS frac;
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)
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)
case WM_LBUTTONDOWN:
pos.x = GET_X_LPARAM(lParam);
pos.y = GET_Y_LPARAM(lParam);
case WM_LBUTTONDOWN:
pos.x = GET_X_LPARAM(lParam);
pos.y = GET_Y_LPARAM(lParam);
+ delta.x = 0;
+ delta.y = 0;
SetCapture(hwnd);
if (action != 0)
SetCursor(LoadCursor(NULL, cursors[action]));
SetCapture(hwnd);
if (action != 0)
SetCursor(LoadCursor(NULL, cursors[action]));
if (moving)
{
TCHAR sizeStr[100];
if (moving)
{
TCHAR sizeStr[100];
resetToU1();
frac.x += GET_X_LPARAM(lParam) - pos.x;
frac.y += GET_Y_LPARAM(lParam) - pos.y;
resetToU1();
frac.x += GET_X_LPARAM(lParam) - pos.x;
frac.y += GET_Y_LPARAM(lParam) - pos.y;
+ delta.x += frac.x * 1000 / zoom;
+ delta.y += frac.y * 1000 / zoom;
- delta.x = frac.x * 1000 / zoom;
- delta.y = frac.y * 1000 / zoom;
- delta.x = frac.x * 1000 / zoom;
frac.x -= (frac.x * 1000 / zoom) * zoom / 1000;
frac.x -= (frac.x * 1000 / zoom) * zoom / 1000;
- delta.y = frac.y * 1000 / zoom;
frac.y -= (frac.y * 1000 / zoom) * zoom / 1000;
}
switch (action)
{
frac.y -= (frac.y * 1000 / zoom) * zoom / 1000;
}
switch (action)
{
- /* TODO: make sure that the selection is at least 1 pixel wide and high */
case 0: /* move selection */
case 0: /* move selection */
- OffsetRect(&rectSel_dest, delta.x, delta.y);
+ deltaUsed.x = delta.x;
+ deltaUsed.y = delta.y;
+ OffsetRect(&rectSel_dest, deltaUsed.x, deltaUsed.y);
break;
case 1: /* resize at upper left corner */
break;
case 1: /* resize at upper left corner */
- rectSel_dest.left += delta.x;
- rectSel_dest.top += delta.y;
+ deltaUsed.x = min(delta.x, RECT_WIDTH(rectSel_dest) - 1);
+ deltaUsed.y = min(delta.y, RECT_HEIGHT(rectSel_dest) - 1);
+ rectSel_dest.left += deltaUsed.x;
+ rectSel_dest.top += deltaUsed.y;
break;
case 2: /* resize at top edge */
break;
case 2: /* resize at top edge */
- rectSel_dest.top += delta.y;
+ deltaUsed.x = delta.x;
+ deltaUsed.y = min(delta.y, RECT_HEIGHT(rectSel_dest) - 1);
+ rectSel_dest.top += deltaUsed.y;
break;
case 3: /* resize at upper right corner */
break;
case 3: /* resize at upper right corner */
- rectSel_dest.top += delta.y;
- rectSel_dest.right += delta.x;
+ deltaUsed.x = max(delta.x, -(RECT_WIDTH(rectSel_dest) - 1));
+ deltaUsed.y = min(delta.y, RECT_HEIGHT(rectSel_dest) - 1);
+ rectSel_dest.top += deltaUsed.y;
+ rectSel_dest.right += deltaUsed.x;
break;
case 4: /* resize at left edge */
break;
case 4: /* resize at left edge */
- rectSel_dest.left += delta.x;
+ deltaUsed.x = min(delta.x, RECT_WIDTH(rectSel_dest) - 1);
+ deltaUsed.y = delta.y;
+ rectSel_dest.left += deltaUsed.x;
break;
case 5: /* resize at right edge */
break;
case 5: /* resize at right edge */
- rectSel_dest.right += delta.x;
+ deltaUsed.x = max(delta.x, -(RECT_WIDTH(rectSel_dest) - 1));
+ deltaUsed.y = delta.y;
+ rectSel_dest.right += deltaUsed.x;
break;
case 6: /* resize at lower left corner */
break;
case 6: /* resize at lower left corner */
- rectSel_dest.left += delta.x;
- rectSel_dest.bottom += delta.y;
+ deltaUsed.x = min(delta.x, RECT_WIDTH(rectSel_dest) - 1);
+ deltaUsed.y = max(delta.y, -(RECT_HEIGHT(rectSel_dest) - 1));
+ rectSel_dest.left += deltaUsed.x;
+ rectSel_dest.bottom += deltaUsed.y;
break;
case 7: /* resize at bottom edge */
break;
case 7: /* resize at bottom edge */
- rectSel_dest.bottom += delta.y;
+ deltaUsed.x = delta.x;
+ deltaUsed.y = max(delta.y, -(RECT_HEIGHT(rectSel_dest) - 1));
+ rectSel_dest.bottom += deltaUsed.y;
break;
case 8: /* resize at lower right corner */
break;
case 8: /* resize at lower right corner */
- rectSel_dest.right += delta.x;
- rectSel_dest.bottom += delta.y;
+ deltaUsed.x = max(delta.x, -(RECT_WIDTH(rectSel_dest) - 1));
+ deltaUsed.y = max(delta.y, -(RECT_HEIGHT(rectSel_dest) - 1));
+ rectSel_dest.right += deltaUsed.x;
+ rectSel_dest.bottom += deltaUsed.y;
+ delta.x -= deltaUsed.x;
+ delta.y -= deltaUsed.y;
_stprintf(sizeStr, _T("%d x %d"), RECT_WIDTH(rectSel_dest), RECT_HEIGHT(rectSel_dest));
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
_stprintf(sizeStr, _T("%d x %d"), RECT_WIDTH(rectSel_dest), RECT_HEIGHT(rectSel_dest));
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);