2009-05-12 14:15:48 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: PAINT for ReactOS
|
|
|
|
* LICENSE: LGPL
|
2009-10-21 15:44:31 +00:00
|
|
|
* FILE: base/applications/paint/selection.c
|
2009-05-12 14:15:48 +00:00
|
|
|
* PURPOSE: Window procedure of the selection window
|
|
|
|
* PROGRAMMERS: Benedikt Freisen
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* INCLUDES *********************************************************/
|
|
|
|
|
|
|
|
#include <windows.h>
|
|
|
|
#include "globalvar.h"
|
2009-05-27 12:03:18 +00:00
|
|
|
#include "drawing.h"
|
|
|
|
#include "history.h"
|
|
|
|
#include "mouse.h"
|
2009-05-12 14:15:48 +00:00
|
|
|
|
|
|
|
/* FUNCTIONS ********************************************************/
|
|
|
|
|
|
|
|
BOOL moving = FALSE;
|
|
|
|
short xPos;
|
|
|
|
short yPos;
|
|
|
|
|
2009-10-21 15:44:31 +00:00
|
|
|
LRESULT CALLBACK
|
|
|
|
SelectionWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
2009-05-12 14:15:48 +00:00
|
|
|
{
|
|
|
|
switch (message)
|
|
|
|
{
|
|
|
|
case WM_PAINT:
|
2009-10-21 15:44:31 +00:00
|
|
|
{
|
|
|
|
if (!moving)
|
2009-05-12 14:15:48 +00:00
|
|
|
{
|
2009-10-21 15:44:31 +00:00
|
|
|
HDC hDC = GetDC(hwnd);
|
|
|
|
DefWindowProc(hwnd, message, wParam, lParam);
|
|
|
|
SelectionFrame(hDC, 1, 1, rectSel_dest[2] * zoom / 1000 + 5,
|
|
|
|
rectSel_dest[3] * zoom / 1000 + 5);
|
|
|
|
ReleaseDC(hwnd, hDC);
|
2009-05-12 14:15:48 +00:00
|
|
|
}
|
|
|
|
break;
|
2009-10-21 15:44:31 +00:00
|
|
|
}
|
2009-05-12 14:15:48 +00:00
|
|
|
case WM_LBUTTONDOWN:
|
|
|
|
xPos = LOWORD(lParam);
|
|
|
|
yPos = HIWORD(lParam);
|
|
|
|
SetCapture(hwnd);
|
|
|
|
moving = TRUE;
|
|
|
|
break;
|
|
|
|
case WM_MOUSEMOVE:
|
|
|
|
if (moving)
|
|
|
|
{
|
|
|
|
resetToU1();
|
2009-10-21 15:44:31 +00:00
|
|
|
rectSel_dest[0] += (short)LOWORD(lParam) - xPos;
|
|
|
|
rectSel_dest[1] += (short)HIWORD(lParam) - yPos;
|
|
|
|
|
|
|
|
Rect(hDrawingDC, rectSel_src[0], rectSel_src[1], rectSel_src[0] + rectSel_src[2],
|
|
|
|
rectSel_src[1] + rectSel_src[3], bgColor, bgColor, 0, TRUE);
|
|
|
|
if (transpBg == 0)
|
|
|
|
BitBlt(hDrawingDC, rectSel_dest[0], rectSel_dest[1], rectSel_dest[2], rectSel_dest[3],
|
|
|
|
hSelDC, 0, 0, SRCCOPY);
|
2009-05-12 14:15:48 +00:00
|
|
|
else
|
2009-10-21 15:44:31 +00:00
|
|
|
BitBlt(hDrawingDC, rectSel_dest[0], rectSel_dest[1], rectSel_dest[2], rectSel_dest[3],
|
|
|
|
hSelDC, 0, 0, SRCAND);
|
|
|
|
//TransparentBlt(hDrawingDC, rectSel_dest[0], rectSel_dest[1], rectSel_dest[2], rectSel_dest[3],
|
|
|
|
// hSelDC, 0, 0, rectSel_dest[2], rectSel_dest[3], bgColor);
|
2009-05-12 14:15:48 +00:00
|
|
|
SendMessage(hImageArea, WM_PAINT, 0, 0);
|
|
|
|
xPos = LOWORD(lParam);
|
|
|
|
yPos = HIWORD(lParam);
|
|
|
|
//SendMessage(hwnd, WM_PAINT, 0, 0);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_LBUTTONUP:
|
|
|
|
if (moving)
|
|
|
|
{
|
|
|
|
moving = FALSE;
|
|
|
|
ReleaseCapture();
|
|
|
|
placeSelWin();
|
|
|
|
ShowWindow(hSelection, SW_HIDE);
|
|
|
|
ShowWindow(hSelection, SW_SHOW);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
2009-10-21 15:44:31 +00:00
|
|
|
return DefWindowProc(hwnd, message, wParam, lParam);
|
2009-05-12 14:15:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|