Author: bfreisen
Date: Thu May 27 14:21:50 2010
New Revision: 47372
URL:
http://svn.reactos.org/svn/reactos?rev=47372&view=rev
Log:
[PAINT]
- Improvements by Black_Fox, see bug #5418
- Readability improvement, patch by Katayama Hirofumi, see bug #5420
Modified:
trunk/reactos/base/applications/paint/definitions.h
trunk/reactos/base/applications/paint/main.c
trunk/reactos/base/applications/paint/mouse.c
trunk/reactos/base/applications/paint/toolsettings.c
trunk/reactos/base/applications/paint/winproc.c
Modified: trunk/reactos/base/applications/paint/definitions.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/de…
==============================================================================
--- trunk/reactos/base/applications/paint/definitions.h [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/definitions.h [iso-8859-1] Thu May 27 14:21:50
2010
@@ -98,6 +98,24 @@
#define ID_ELLIPSE 614
#define ID_RRECT 615
+//the following 16 numbers need to be in order, increasing by 1
+#define TOOL_FREESEL 1
+#define TOOL_RECTSEL 2
+#define TOOL_RUBBER 3
+#define TOOL_FILL 4
+#define TOOL_COLOR 5
+#define TOOL_ZOOM 6
+#define TOOL_PEN 7
+#define TOOL_BRUSH 8
+#define TOOL_AIRBRUSH 9
+#define TOOL_TEXT 10
+#define TOOL_LINE 11
+#define TOOL_BEZIER 12
+#define TOOL_RECT 13
+#define TOOL_SHAPE 14
+#define TOOL_ELLIPSE 15
+#define TOOL_RRECT 16
+
#define ID_ACCELERATORS 800
#define IDD_MIRRORROTATE 700
Modified: trunk/reactos/base/applications/paint/main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/ma…
==============================================================================
--- trunk/reactos/base/applications/paint/main.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/main.c [iso-8859-1] Thu May 27 14:21:50 2010
@@ -50,7 +50,7 @@
int lineWidth = 1;
int shapeStyle = 0;
int brushStyle = 0;
-int activeTool = 7;
+int activeTool = TOOL_PEN;
int airBrushWidth = 5;
int rubberRadius = 4;
int transpBg = 0;
Modified: trunk/reactos/base/applications/paint/mouse.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/mo…
==============================================================================
--- trunk/reactos/base/applications/paint/mouse.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/mouse.c [iso-8859-1] Thu May 27 14:21:50 2010
@@ -67,7 +67,7 @@
lastY = y;
switch (activeTool)
{
- case 1:
+ case TOOL_FREESEL:
ShowWindow(hSelection, SW_HIDE);
if (ptStack != NULL)
HeapFree(GetProcessHeap(), 0, ptStack);
@@ -76,39 +76,39 @@
ptStack[0].x = x;
ptStack[0].y = y;
break;
- case 10:
- case 11:
- case 13:
- case 15:
- case 16:
- newReversible();
- break;
- case 2:
+ case TOOL_TEXT:
+ case TOOL_LINE:
+ case TOOL_RECT:
+ case TOOL_ELLIPSE:
+ case TOOL_RRECT:
+ newReversible();
+ break;
+ case TOOL_RECTSEL:
newReversible();
ShowWindow(hSelection, SW_HIDE);
rectSel_src[2] = rectSel_src[3] = 0;
break;
- case 3:
+ case TOOL_RUBBER:
newReversible();
Erase(hdc, x, y, x, y, bg, rubberRadius);
break;
- case 4:
+ case TOOL_FILL:
newReversible();
Fill(hdc, x, y, fg);
break;
- case 7:
+ case TOOL_PEN:
newReversible();
SetPixel(hdc, x, y, fg);
break;
- case 8:
+ case TOOL_BRUSH:
newReversible();
Brush(hdc, x, y, x, y, fg, brushStyle);
break;
- case 9:
+ case TOOL_AIRBRUSH:
newReversible();
Airbrush(hdc, x, y, fg, airBrushWidth);
break;
- case 12:
+ case TOOL_BEZIER:
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
if (pointSP == 0)
@@ -117,7 +117,7 @@
pointSP++;
}
break;
- case 14:
+ case TOOL_SHAPE:
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
if (pointSP + 1 >= 2)
@@ -136,7 +136,7 @@
{
switch (activeTool)
{
- case 1:
+ case TOOL_FREESEL:
if (ptSP == 0)
newReversible();
ptSP++;
@@ -147,7 +147,7 @@
resetToU1();
Poly(hdc, ptStack, ptSP + 1, 0, 0, 2, 0, FALSE);
break;
- case 2:
+ case TOOL_RECTSEL:
{
short tempX;
short tempY;
@@ -161,25 +161,25 @@
RectSel(hdc, startX, startY, tempX, tempY);
break;
}
- case 3:
+ case TOOL_RUBBER:
Erase(hdc, lastX, lastY, x, y, bg, rubberRadius);
break;
- case 7:
+ case TOOL_PEN:
Line(hdc, lastX, lastY, x, y, fg, 1);
break;
- case 8:
+ case TOOL_BRUSH:
Brush(hdc, lastX, lastY, x, y, fg, brushStyle);
break;
- case 9:
+ case TOOL_AIRBRUSH:
Airbrush(hdc, x, y, fg, airBrushWidth);
break;
- case 11:
+ case TOOL_LINE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
roundTo8Directions(startX, startY, &x, &y);
Line(hdc, startX, startY, x, y, fg, lineWidth);
break;
- case 12:
+ case TOOL_BEZIER:
resetToU1();
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
@@ -197,13 +197,13 @@
break;
}
break;
- case 13:
+ case TOOL_RECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Rect(hdc, startX, startY, x, y, fg, bg, lineWidth, shapeStyle);
break;
- case 14:
+ case TOOL_SHAPE:
resetToU1();
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
@@ -213,13 +213,13 @@
if (pointSP + 1 >= 2)
Poly(hdc, pointStack, pointSP + 1, fg, bg, lineWidth, shapeStyle,
FALSE);
break;
- case 15:
+ case TOOL_ELLIPSE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Ellp(hdc, startX, startY, x, y, fg, bg, lineWidth, shapeStyle);
break;
- case 16:
+ case TOOL_RRECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
@@ -236,7 +236,7 @@
{
switch (activeTool)
{
- case 1:
+ case TOOL_FREESEL:
{
POINT *ptStackCopy;
int i;
@@ -286,7 +286,7 @@
ptStack = NULL;
break;
}
- case 2:
+ case TOOL_RECTSEL:
resetToU1();
if ((rectSel_src[2] != 0) && (rectSel_src[3] != 0))
{
@@ -306,31 +306,31 @@
ShowWindow(hSelection, SW_SHOW);
}
break;
- case 3:
+ case TOOL_RUBBER:
Erase(hdc, lastX, lastY, x, y, bg, rubberRadius);
break;
- case 7:
+ case TOOL_PEN:
Line(hdc, lastX, lastY, x, y, fg, 1);
SetPixel(hdc, x, y, fg);
break;
- case 11:
+ case TOOL_LINE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
roundTo8Directions(startX, startY, &x, &y);
Line(hdc, startX, startY, x, y, fg, lineWidth);
break;
- case 12:
+ case TOOL_BEZIER:
pointSP++;
if (pointSP == 4)
pointSP = 0;
break;
- case 13:
+ case TOOL_RECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Rect(hdc, startX, startY, x, y, fg, bg, lineWidth, shapeStyle);
break;
- case 14:
+ case TOOL_SHAPE:
resetToU1();
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
@@ -354,13 +354,13 @@
if (pointSP == 255)
pointSP--;
break;
- case 15:
+ case TOOL_ELLIPSE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Ellp(hdc, startX, startY, x, y, fg, bg, lineWidth, shapeStyle);
break;
- case 16:
+ case TOOL_RRECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
@@ -378,35 +378,35 @@
lastY = y;
switch (activeTool)
{
- case 1:
- case 10:
- case 11:
- case 13:
- case 15:
- case 16:
- newReversible();
- break;
- case 3:
+ case TOOL_FREESEL:
+ case TOOL_TEXT:
+ case TOOL_LINE:
+ case TOOL_RECT:
+ case TOOL_ELLIPSE:
+ case TOOL_RRECT:
+ newReversible();
+ break;
+ case TOOL_RUBBER:
newReversible();
Replace(hdc, x, y, x, y, fg, bg, rubberRadius);
break;
- case 4:
+ case TOOL_FILL:
newReversible();
Fill(hdc, x, y, bg);
break;
- case 7:
+ case TOOL_PEN:
newReversible();
SetPixel(hdc, x, y, bg);
break;
- case 8:
+ case TOOL_BRUSH:
newReversible();
Brush(hdc, x, y, x, y, bg, brushStyle);
break;
- case 9:
+ case TOOL_AIRBRUSH:
newReversible();
Airbrush(hdc, x, y, bg, airBrushWidth);
break;
- case 12:
+ case TOOL_BEZIER:
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
if (pointSP == 0)
@@ -415,7 +415,7 @@
pointSP++;
}
break;
- case 14:
+ case TOOL_SHAPE:
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
if (pointSP + 1 >= 2)
@@ -434,25 +434,25 @@
{
switch (activeTool)
{
- case 3:
+ case TOOL_RUBBER:
Replace(hdc, lastX, lastY, x, y, fg, bg, rubberRadius);
break;
- case 7:
+ case TOOL_PEN:
Line(hdc, lastX, lastY, x, y, bg, 1);
break;
- case 8:
+ case TOOL_BRUSH:
Brush(hdc, lastX, lastY, x, y, bg, brushStyle);
break;
- case 9:
+ case TOOL_AIRBRUSH:
Airbrush(hdc, x, y, bg, airBrushWidth);
break;
- case 11:
+ case TOOL_LINE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
roundTo8Directions(startX, startY, &x, &y);
Line(hdc, startX, startY, x, y, bg, lineWidth);
break;
- case 12:
+ case TOOL_BEZIER:
resetToU1();
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
@@ -470,13 +470,13 @@
break;
}
break;
- case 13:
+ case TOOL_RECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Rect(hdc, startX, startY, x, y, bg, fg, lineWidth, shapeStyle);
break;
- case 14:
+ case TOOL_SHAPE:
resetToU1();
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
@@ -486,13 +486,13 @@
if (pointSP + 1 >= 2)
Poly(hdc, pointStack, pointSP + 1, bg, fg, lineWidth, shapeStyle,
FALSE);
break;
- case 15:
+ case TOOL_ELLIPSE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Ellp(hdc, startX, startY, x, y, bg, fg, lineWidth, shapeStyle);
break;
- case 16:
+ case TOOL_RRECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
@@ -509,31 +509,31 @@
{
switch (activeTool)
{
- case 3:
+ case TOOL_RUBBER:
Replace(hdc, lastX, lastY, x, y, fg, bg, rubberRadius);
break;
- case 7:
+ case TOOL_PEN:
Line(hdc, lastX, lastY, x, y, bg, 1);
SetPixel(hdc, x, y, bg);
break;
- case 11:
+ case TOOL_LINE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
roundTo8Directions(startX, startY, &x, &y);
Line(hdc, startX, startY, x, y, bg, lineWidth);
break;
- case 12:
+ case TOOL_BEZIER:
pointSP++;
if (pointSP == 4)
pointSP = 0;
break;
- case 13:
+ case TOOL_RECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Rect(hdc, startX, startY, x, y, bg, fg, lineWidth, shapeStyle);
break;
- case 14:
+ case TOOL_SHAPE:
resetToU1();
pointStack[pointSP].x = x;
pointStack[pointSP].y = y;
@@ -557,13 +557,13 @@
if (pointSP == 255)
pointSP--;
break;
- case 15:
+ case TOOL_ELLIPSE:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Ellp(hdc, startX, startY, x, y, bg, fg, lineWidth, shapeStyle);
break;
- case 16:
+ case TOOL_RRECT:
resetToU1();
if (GetAsyncKeyState(VK_SHIFT) < 0)
regularize(startX, startY, &x, &y);
Modified: trunk/reactos/base/applications/paint/toolsettings.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/to…
==============================================================================
--- trunk/reactos/base/applications/paint/toolsettings.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/toolsettings.c [iso-8859-1] Thu May 27 14:21:50
2010
@@ -34,13 +34,13 @@
DefWindowProc(hwnd, message, wParam, lParam);
- DrawEdge(hdc, &rect1, BDR_SUNKENOUTER, (activeTool == 6) ? BF_RECT :
BF_RECT | BF_MIDDLE);
- DrawEdge(hdc, &rect2, (activeTool >= 13) ? BDR_SUNKENOUTER : 0,
BF_RECT | BF_MIDDLE);
+ DrawEdge(hdc, &rect1, BDR_SUNKENOUTER, (activeTool == TOOL_ZOOM) ?
BF_RECT : BF_RECT | BF_MIDDLE);
+ DrawEdge(hdc, &rect2, (activeTool >= TOOL_RECT) ? BDR_SUNKENOUTER : 0,
BF_RECT | BF_MIDDLE);
switch (activeTool)
{
- case 1:
- case 2:
- case 10:
+ case TOOL_FREESEL:
+ case TOOL_RECTSEL:
+ case TOOL_TEXT:
{
HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
@@ -50,7 +50,7 @@
DrawIconEx(hdc, 1, 33, hTranspIcon, 40, 30, 0, NULL, DI_NORMAL);
break;
}
- case 3:
+ case TOOL_RUBBER:
{
int i;
HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
@@ -69,7 +69,7 @@
DeleteObject(SelectObject(hdc, oldPen));
break;
}
- case 8:
+ case TOOL_BRUSH:
{
int i;
HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
@@ -82,7 +82,7 @@
GetSysColor((i == brushStyle) ? COLOR_HIGHLIGHTTEXT :
COLOR_WINDOWTEXT), i);
break;
}
- case 9:
+ case TOOL_AIRBRUSH:
{
HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
@@ -112,8 +112,8 @@
DeleteObject(SelectObject(hdc, oldPen));
break;
}
- case 11:
- case 12:
+ case TOOL_LINE:
+ case TOOL_BEZIER:
{
int i;
HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
@@ -132,10 +132,10 @@
DeleteObject(SelectObject(hdc, oldPen));
break;
}
- case 13:
- case 14:
- case 15:
- case 16:
+ case TOOL_RECT:
+ case TOOL_SHAPE:
+ case TOOL_ELLIPSE:
+ case TOOL_RRECT:
{
int i;
HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
@@ -178,23 +178,23 @@
{
switch (activeTool)
{
- case 1:
- case 2:
- case 10:
+ case TOOL_FREESEL:
+ case TOOL_RECTSEL:
+ case TOOL_TEXT:
if ((HIWORD(lParam) > 1) && (HIWORD(lParam) < 64))
{
transpBg = (HIWORD(lParam) - 2) / 31;
SendMessage(hwnd, WM_PAINT, 0, 0);
}
break;
- case 3:
+ case TOOL_RUBBER:
if ((HIWORD(lParam) > 1) && (HIWORD(lParam) < 62))
{
rubberRadius = (HIWORD(lParam) - 2) / 15 + 2;
SendMessage(hwnd, WM_PAINT, 0, 0);
}
break;
- case 8:
+ case TOOL_BRUSH:
if ((LOWORD(lParam) > 1) && (LOWORD(lParam) < 40)
&& (HIWORD(lParam) > 1)
&& (HIWORD(lParam) < 62))
{
@@ -202,7 +202,7 @@
SendMessage(hwnd, WM_PAINT, 0, 0);
}
break;
- case 9:
+ case TOOL_AIRBRUSH:
if (HIWORD(lParam) < 62)
{
if (HIWORD(lParam) < 30)
@@ -222,18 +222,18 @@
SendMessage(hwnd, WM_PAINT, 0, 0);
}
break;
- case 11:
- case 12:
+ case TOOL_LINE:
+ case TOOL_BEZIER:
if (HIWORD(lParam) <= 62)
{
lineWidth = (HIWORD(lParam) - 2) / 12 + 1;
SendMessage(hwnd, WM_PAINT, 0, 0);
}
break;
- case 13:
- case 14:
- case 15:
- case 16:
+ case TOOL_RECT:
+ case TOOL_SHAPE:
+ case TOOL_ELLIPSE:
+ case TOOL_RRECT:
if (HIWORD(lParam) <= 60)
{
shapeStyle = (HIWORD(lParam) - 2) / 20;
Modified: trunk/reactos/base/applications/paint/winproc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/wi…
==============================================================================
--- trunk/reactos/base/applications/paint/winproc.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/winproc.c [iso-8859-1] Thu May 27 14:21:50 2010
@@ -460,19 +460,19 @@
{
switch (activeTool)
{
- case 4:
+ case TOOL_FILL:
SetCursor(hCurFill);
break;
- case 5:
+ case TOOL_COLOR:
SetCursor(hCurColor);
break;
- case 6:
+ case TOOL_ZOOM:
SetCursor(hCurZoom);
break;
- case 7:
+ case TOOL_PEN:
SetCursor(hCurPen);
break;
- case 9:
+ case TOOL_AIRBRUSH:
SetCursor(hCurAirbrush);
break;
default:
@@ -486,7 +486,7 @@
case WM_LBUTTONDOWN:
if (hwnd == hImageArea)
{
- if ((!drawing) || (activeTool == 5))
+ if ((!drawing) || (activeTool == TOOL_COLOR))
{
SetCapture(hImageArea);
drawing = TRUE;
@@ -499,7 +499,7 @@
undo();
}
SendMessage(hImageArea, WM_PAINT, 0, 0);
- if ((activeTool == 6) && (zoom < 8000))
+ if ((activeTool == TOOL_ZOOM) && (zoom < 8000))
zoomTo(zoom * 2, (short)LOWORD(lParam), (short)HIWORD(lParam));
}
break;
@@ -507,7 +507,7 @@
case WM_RBUTTONDOWN:
if (hwnd == hImageArea)
{
- if ((!drawing) || (activeTool == 5))
+ if ((!drawing) || (activeTool == TOOL_COLOR))
{
SetCapture(hImageArea);
drawing = TRUE;
@@ -520,7 +520,7 @@
undo();
}
SendMessage(hImageArea, WM_PAINT, 0, 0);
- if ((activeTool == 6) && (zoom > 125))
+ if ((activeTool == TOOL_ZOOM) && (zoom > 125))
zoomTo(zoom / 2, (short)LOWORD(lParam), (short)HIWORD(lParam));
}
break;
@@ -533,7 +533,7 @@
endPaintingL(hDrawingDC, LOWORD(lParam) * 1000 / zoom, HIWORD(lParam) *
1000 / zoom, fgColor,
bgColor);
SendMessage(hImageArea, WM_PAINT, 0, 0);
- if (activeTool == 5)
+ if (activeTool == TOOL_COLOR)
{
int tempColor =
GetPixel(hDrawingDC, LOWORD(lParam) * 1000 / zoom, HIWORD(lParam)
* 1000 / zoom);
@@ -553,7 +553,7 @@
endPaintingR(hDrawingDC, LOWORD(lParam) * 1000 / zoom, HIWORD(lParam) *
1000 / zoom, fgColor,
bgColor);
SendMessage(hImageArea, WM_PAINT, 0, 0);
- if (activeTool == 5)
+ if (activeTool == TOOL_COLOR)
{
int tempColor =
GetPixel(hDrawingDC, LOWORD(lParam) * 1000 / zoom, HIWORD(lParam)
* 1000 / zoom);
@@ -568,16 +568,13 @@
case WM_MOUSEMOVE:
if (hwnd == hImageArea)
{
- if ((!drawing) || (activeTool <= 9))
+ short xNow = (short)LOWORD(lParam) * 1000 / zoom;
+ short yNow = (short)HIWORD(lParam) * 1000 / zoom;
+ if ((!drawing) || (activeTool <= TOOL_AIRBRUSH))
{
TRACKMOUSEEVENT tme;
- TCHAR coordStr[100];
- _stprintf(coordStr, _T("%d, %d"), (short)LOWORD(lParam) *
1000 / zoom,
- (short)HIWORD(lParam) * 1000 / zoom);
- SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) coordStr);
-
- if (activeTool == 6)
+ if (activeTool == TOOL_ZOOM)
{
SendMessage(hImageArea, WM_PAINT, 0, 0);
drawZoomFrame((short)LOWORD(lParam), (short)HIWORD(lParam));
@@ -588,32 +585,73 @@
tme.hwndTrack = hImageArea;
tme.dwHoverTime = 0;
TrackMouseEvent(&tme);
+
+ if (!drawing)
+ {
+ TCHAR coordStr[100];
+ _stprintf(coordStr, _T("%d, %d"), xNow, yNow);
+ SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) coordStr);
+ }
}
if (drawing)
{
+ /* values displayed in statusbar */
+ short xRel = xNow - startX;
+ short yRel = yNow - startY;
+ /* freesel, rectsel and text tools always show numbers limited to fit
into image area */
+ if ((activeTool == TOOL_FREESEL) || (activeTool == TOOL_RECTSEL) ||
(activeTool == TOOL_TEXT))
+ {
+ if (xRel < 0)
+ xRel = (xNow < 0) ? -startX : xRel;
+ else if (xNow > imgXRes)
+ xRel = imgXRes-startX;
+ if (yRel < 0)
+ yRel = (yNow < 0) ? -startY : yRel;
+ else if (yNow > imgYRes)
+ yRel = imgYRes-startY;
+ }
+ /* rectsel and shape tools always show non-negative numbers when
drawing */
+ if ((activeTool == TOOL_RECTSEL) || (activeTool == TOOL_SHAPE))
+ {
+ if (xRel < 0)
+ xRel = -xRel;
+ if (yRel < 0)
+ yRel = -yRel;
+ }
+ /* while drawing, update cursor coordinates only for tools 3, 7, 8,
9, 14 */
+ switch(activeTool)
+ {
+ case TOOL_RUBBER:
+ case TOOL_PEN:
+ case TOOL_BRUSH:
+ case TOOL_AIRBRUSH:
+ case TOOL_SHAPE:
+ {
+ TCHAR coordStr[100];
+ _stprintf(coordStr, _T("%d, %d"), xNow, yNow);
+ SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) coordStr);
+ break;
+ }
+ }
if ((wParam & MK_LBUTTON) != 0)
{
- whilePaintingL(hDrawingDC, (short)LOWORD(lParam) * 1000 / zoom,
- (short)HIWORD(lParam) * 1000 / zoom, fgColor,
bgColor);
+ whilePaintingL(hDrawingDC, xNow, yNow, fgColor, bgColor);
SendMessage(hImageArea, WM_PAINT, 0, 0);
- if ((activeTool >= 10) || (activeTool == 2))
+ if ((activeTool >= TOOL_TEXT) || (activeTool == TOOL_RECTSEL)
|| (activeTool == TOOL_FREESEL))
{
TCHAR sizeStr[100];
- _stprintf(sizeStr, _T("%d x %d"),
(short)LOWORD(lParam) * 1000 / zoom - startX,
- (short)HIWORD(lParam) * 1000 / zoom - startY);
+ _stprintf(sizeStr, _T("%d x %d"), xRel, yRel);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
}
}
if ((wParam & MK_RBUTTON) != 0)
{
- whilePaintingR(hDrawingDC, (short)LOWORD(lParam) * 1000 / zoom,
- (short)HIWORD(lParam) * 1000 / zoom, fgColor,
bgColor);
+ whilePaintingR(hDrawingDC, xNow, yNow, fgColor, bgColor);
SendMessage(hImageArea, WM_PAINT, 0, 0);
- if (activeTool >= 10)
+ if (activeTool >= TOOL_TEXT)
{
TCHAR sizeStr[100];
- _stprintf(sizeStr, _T("%d x %d"),
(short)LOWORD(lParam) * 1000 / zoom - startX,
- (short)HIWORD(lParam) * 1000 / zoom - startY);
+ _stprintf(sizeStr, _T("%d x %d"), xRel, yRel);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
}
}
@@ -623,7 +661,7 @@
case WM_MOUSELEAVE:
SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) _T(""));
- if (activeTool == 6)
+ if (activeTool == TOOL_ZOOM)
SendMessage(hImageArea, WM_PAINT, 0, 0);
break;
@@ -747,7 +785,7 @@
/* remove selection window and already painted content using undo(),
paint Rect for rectangular selections and nothing for freeform
selections */
undo();
- if (activeTool == 2)
+ if (activeTool == TOOL_RECTSEL)
{
newReversible();
Rect(hDrawingDC, rectSel_dest[0], rectSel_dest[1],
rectSel_dest[2] + rectSel_dest[0],
@@ -756,7 +794,7 @@
break;
}
case IDM_EDITSELECTALL:
- if (activeTool == 2)
+ if (activeTool == TOOL_RECTSEL)
{
startPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
whilePaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);