Author: bfreisen
Date: Sun Oct 10 09:57:44 2010
New Revision: 49089
URL:
http://svn.reactos.org/svn/reactos?rev=49089&view=rev
Log:
[PAINT]
- apply patch by Black_Fox (see bug 5434)
- fix minor bugs introduced by it
- generalize changes related to mirroring rectangular selections to free form selections
- solve problem regarding selection contents update
Modified:
trunk/reactos/base/applications/paint/globalvar.h
trunk/reactos/base/applications/paint/lang/cs-CZ.rc
trunk/reactos/base/applications/paint/mouse.c
trunk/reactos/base/applications/paint/registry.c
trunk/reactos/base/applications/paint/selection.c
trunk/reactos/base/applications/paint/winproc.c
Modified: trunk/reactos/base/applications/paint/globalvar.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/gl…
==============================================================================
--- trunk/reactos/base/applications/paint/globalvar.h [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/globalvar.h [iso-8859-1] Sun Oct 10 09:57:44
2010
@@ -101,3 +101,5 @@
extern POINT pointStack[256];
extern short pointSP;
+extern POINT *ptStack;
+extern int ptSP;
Modified: trunk/reactos/base/applications/paint/lang/cs-CZ.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/la…
==============================================================================
--- trunk/reactos/base/applications/paint/lang/cs-CZ.rc [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/lang/cs-CZ.rc [iso-8859-1] Sun Oct 10 09:57:44
2010
@@ -12,8 +12,8 @@
BEGIN
POPUP "&Soubor"
BEGIN
- MENUITEM "Nový\tCtrl+N", IDM_FILENEW
- MENUITEM "Otevøít...\tCtrl+O", IDM_FILEOPEN
+ MENUITEM "&Nový\tCtrl+N", IDM_FILENEW
+ MENUITEM "&Otevøít...\tCtrl+O", IDM_FILEOPEN
MENUITEM "Uloit\tCtrl+S", IDM_FILESAVE
MENUITEM "Uloit jako...", IDM_FILESAVEAS
MENUITEM SEPARATOR
@@ -60,7 +60,7 @@
MENUITEM "800%", IDM_VIEWZOOM800
END
MENUITEM SEPARATOR
- MENUITEM "Zobrazit møíku", IDM_VIEWSHOWGRID
+ MENUITEM "Zobrazit møíku\tCtrl+G", IDM_VIEWSHOWGRID
MENUITEM "Zobrazit miniaturu", IDM_VIEWSHOWMINIATURE
END
MENUITEM "Celá obrazovka\tCtrl+F", IDM_VIEWFULLSCREEN
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] Sun Oct 10 09:57:44 2010
@@ -284,6 +284,10 @@
placeSelWin();
ShowWindow(hSelection, SW_SHOW);
+ /* force refresh of selection contents */
+ SendMessage(hSelection, WM_LBUTTONDOWN, 0, 0);
+ SendMessage(hSelection, WM_MOUSEMOVE, 0, 0);
+ SendMessage(hSelection, WM_LBUTTONUP, 0, 0);
}
HeapFree(GetProcessHeap(), 0, ptStack);
ptStack = NULL;
@@ -310,6 +314,10 @@
placeSelWin();
ShowWindow(hSelection, SW_SHOW);
+ /* force refresh of selection contents */
+ SendMessage(hSelection, WM_LBUTTONDOWN, 0, 0);
+ SendMessage(hSelection, WM_MOUSEMOVE, 0, 0);
+ SendMessage(hSelection, WM_LBUTTONUP, 0, 0);
}
break;
case TOOL_RUBBER:
Modified: trunk/reactos/base/applications/paint/registry.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/re…
==============================================================================
--- trunk/reactos/base/applications/paint/registry.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/registry.c [iso-8859-1] Sun Oct 10 09:57:44
2010
@@ -14,11 +14,11 @@
/* FUNCTIONS ********************************************************/
void
-SetWallpaper(TCHAR * FileName, DWORD dwStyle, DWORD dwTile) //FIXME: The pattern
(tiled/stretched) is not set
+SetWallpaper(TCHAR * FileName, DWORD dwStyle, DWORD dwTile) //FIXME: Has to be called 2x
to apply the pattern (tiled/stretched) too
{
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) FileName, SPIF_UPDATEINIFILE);
- /*HKEY hDesktop;
+ HKEY hDesktop;
TCHAR szStyle[3], szTile[3];
if ((dwStyle > 2) || (dwTile > 2))
@@ -39,5 +39,5 @@
_tcslen(szTile) * sizeof(TCHAR));
RegCloseKey(hDesktop);
- }*/
+ }
}
Modified: trunk/reactos/base/applications/paint/selection.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/paint/se…
==============================================================================
--- trunk/reactos/base/applications/paint/selection.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/paint/selection.c [iso-8859-1] Sun Oct 10 09:57:44
2010
@@ -9,6 +9,8 @@
/* INCLUDES *********************************************************/
#include <windows.h>
+#include <commctrl.h>
+#include <tchar.h>
#include "globalvar.h"
#include "drawing.h"
#include "history.h"
@@ -87,6 +89,7 @@
case WM_MOUSEMOVE:
if (moving)
{
+ TCHAR sizeStr[100];
int xDelta;
int yDelta;
resetToU1();
@@ -146,6 +149,9 @@
rectSel_dest[3] += yDelta;
break;
}
+
+ _stprintf(sizeStr, _T("%d x %d"), rectSel_dest[2],
rectSel_dest[3]);
+ SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
if (action != 0)
StretchBlt(hDrawingDC, rectSel_dest[0], rectSel_dest[1],
rectSel_dest[2], rectSel_dest[3], hSelDC, 0, 0, GetDIBWidth(hSelBm), GetDIBHeight(hSelBm),
SRCCOPY);
@@ -182,6 +188,7 @@
int h = rectSel_dest[3] * zoom / 1000 + 6;
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
+ SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) NULL);
action = identifyCorner(xPos, yPos, w, h);
if (action != 0)
SetCursor(LoadCursor(NULL, cursors[action]));
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] Sun Oct 10 09:57:44 2010
@@ -151,6 +151,11 @@
{
switch (message) /* handle the messages */
{
+ case WM_CREATE:
+ ptStack = NULL;
+ ptSP = 0;
+ break;
+
case WM_DESTROY:
PostQuitMessage(0); /* send a WM_QUIT to the message queue */
break;
@@ -446,9 +451,7 @@
HDC hdc;
GetClientRect(hwndMiniature, (LPRECT) &mclient);
hdc = GetDC(hwndMiniature);
- BitBlt(hdc, -min(imgXRes * GetScrollPos(hScrollbox, SB_HORZ) / 10000,
imgXRes - mclient[2]),
- -min(imgYRes * GetScrollPos(hScrollbox, SB_VERT) / 10000, imgYRes
- mclient[3]),
- imgXRes, imgYRes, hDrawingDC, 0, 0, SRCCOPY);
+ BitBlt(hdc, 0, 0, imgXRes, imgYRes, hDrawingDC, 0, 0, SRCCOPY);
ReleaseDC(hwndMiniature, hdc);
}
break;
@@ -562,6 +565,24 @@
SendMessage(hPalWin, WM_PAINT, 0, 0);
}
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) "");
+ }
+ break;
+
+ case WM_KEYDOWN:
+ if (wParam == VK_ESCAPE)
+ {
+ if (!drawing)
+ {
+ /* Deselect */
+ if ((activeTool == TOOL_RECTSEL) || (activeTool == TOOL_FREESEL))
+ {
+ startPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
+ whilePaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
+ endPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
+ ShowWindow(hSelection, SW_HIDE);
+ }
+ }
+ /* FIXME: also cancel current drawing underway */
}
break;
@@ -640,6 +661,8 @@
if ((activeTool >= TOOL_TEXT) || (activeTool == TOOL_RECTSEL)
|| (activeTool == TOOL_FREESEL))
{
TCHAR sizeStr[100];
+ if ((activeTool >= TOOL_LINE) &&
(GetAsyncKeyState(VK_SHIFT) < 0))
+ yRel = xRel;
_stprintf(sizeStr, _T("%d x %d"), xRel, yRel);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
}
@@ -651,6 +674,8 @@
if (activeTool >= TOOL_TEXT)
{
TCHAR sizeStr[100];
+ if ((activeTool >= TOOL_LINE) &&
(GetAsyncKeyState(VK_SHIFT) < 0))
+ yRel = xRel;
_stprintf(sizeStr, _T("%d x %d"), xRel, yRel);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
}
@@ -783,7 +808,7 @@
case IDM_EDITDELETESELECTION:
{
/* remove selection window and already painted content using undo(),
- paint Rect for rectangular selections and nothing for freeform
selections */
+ paint Rect for rectangular selections and Poly for freeform
selections */
undo();
if (activeTool == TOOL_RECTSEL)
{
@@ -791,16 +816,23 @@
Rect(hDrawingDC, rectSel_dest[0], rectSel_dest[1],
rectSel_dest[2] + rectSel_dest[0],
rectSel_dest[3] + rectSel_dest[1], bgColor, bgColor, 0,
TRUE);
}
+ if (activeTool == TOOL_FREESEL)
+ {
+ newReversible();
+ Poly(hDrawingDC, ptStack, ptSP + 1, 0, 0, 2, 0, FALSE);
+ }
break;
}
case IDM_EDITSELECTALL:
- if (activeTool == TOOL_RECTSEL)
- {
- startPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
- whilePaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);
- endPaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);
- }
- break;
+ {
+ HWND hToolbar = FindWindowEx(hToolBoxContainer, NULL,
TOOLBARCLASSNAME, NULL);
+ SendMessage(hToolbar, TB_CHECKBUTTON, ID_RECTSEL, MAKELONG(TRUE,
0));
+ SendMessage(hwnd, WM_COMMAND, ID_RECTSEL, 0);
+ startPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
+ whilePaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);
+ endPaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);
+ break;
+ }
case IDM_EDITCOPYTO:
if (GetSaveFileName(&ofn) != 0)
SaveDIBToFile(hSelBm, ofn.lpstrFile, hDrawingDC, NULL, NULL,
fileHPPM, fileVPPM);
@@ -829,23 +861,73 @@
case IDM_IMAGEROTATEMIRROR:
switch (mirrorRotateDlg())
{
- case 1:
- newReversible();
- StretchBlt(hDrawingDC, imgXRes - 1, 0, -imgXRes, imgYRes,
hDrawingDC, 0, 0,
- imgXRes, imgYRes, SRCCOPY);
- SendMessage(hImageArea, WM_PAINT, 0, 0);
+ case 1: /* flip horizontally */
+ if (IsWindowVisible(hSelection))
+ {
+ SelectObject(hSelDC, hSelMask);
+ StretchBlt(hSelDC, rectSel_dest[2] - 1, 0,
-rectSel_dest[2], rectSel_dest[3], hSelDC,
+ 0, 0, rectSel_dest[2], rectSel_dest[3],
SRCCOPY);
+ SelectObject(hSelDC, hSelBm);
+ StretchBlt(hSelDC, rectSel_dest[2] - 1, 0,
-rectSel_dest[2], rectSel_dest[3], hSelDC,
+ 0, 0, rectSel_dest[2], rectSel_dest[3],
SRCCOPY);
+ /* force refresh of selection contents, used also in case
2 and case 4 */
+ SendMessage(hSelection, WM_LBUTTONDOWN, 0, 0);
+ SendMessage(hSelection, WM_MOUSEMOVE, 0, 0);
+ SendMessage(hSelection, WM_LBUTTONUP, 0, 0);
+ }
+ else
+ {
+ newReversible();
+ StretchBlt(hDrawingDC, imgXRes - 1, 0, -imgXRes, imgYRes,
hDrawingDC, 0, 0,
+ imgXRes, imgYRes, SRCCOPY);
+ SendMessage(hImageArea, WM_PAINT, 0, 0);
+ }
break;
- case 2:
- newReversible();
- StretchBlt(hDrawingDC, 0, imgYRes - 1, imgXRes, -imgYRes,
hDrawingDC, 0, 0,
- imgXRes, imgYRes, SRCCOPY);
- SendMessage(hImageArea, WM_PAINT, 0, 0);
+ case 2: /* flip vertically */
+ if (IsWindowVisible(hSelection))
+ {
+ SelectObject(hSelDC, hSelMask);
+ StretchBlt(hSelDC, 0, rectSel_dest[3] - 1,
rectSel_dest[2], -rectSel_dest[3], hSelDC,
+ 0, 0, rectSel_dest[2], rectSel_dest[3],
SRCCOPY);
+ SelectObject(hSelDC, hSelBm);
+ StretchBlt(hSelDC, 0, rectSel_dest[3] - 1,
rectSel_dest[2], -rectSel_dest[3], hSelDC,
+ 0, 0, rectSel_dest[2], rectSel_dest[3],
SRCCOPY);
+ SendMessage(hSelection, WM_LBUTTONDOWN, 0, 0);
+ SendMessage(hSelection, WM_MOUSEMOVE, 0, 0);
+ SendMessage(hSelection, WM_LBUTTONUP, 0, 0);
+ }
+ else
+ {
+ newReversible();
+ StretchBlt(hDrawingDC, 0, imgYRes - 1, imgXRes, -imgYRes,
hDrawingDC, 0, 0,
+ imgXRes, imgYRes, SRCCOPY);
+ SendMessage(hImageArea, WM_PAINT, 0, 0);
+ }
break;
- case 4:
- newReversible();
- StretchBlt(hDrawingDC, imgXRes - 1, imgYRes - 1, -imgXRes,
-imgYRes, hDrawingDC,
- 0, 0, imgXRes, imgYRes, SRCCOPY);
- SendMessage(hImageArea, WM_PAINT, 0, 0);
+ case 3: /* rotate 90 degrees */
+ break;
+ case 4: /* rotate 180 degrees */
+ if (IsWindowVisible(hSelection))
+ {
+ SelectObject(hSelDC, hSelMask);
+ StretchBlt(hSelDC, rectSel_dest[2] - 1, rectSel_dest[3] -
1, -rectSel_dest[2], -rectSel_dest[3], hSelDC,
+ 0, 0, rectSel_dest[2], rectSel_dest[3],
SRCCOPY);
+ SelectObject(hSelDC, hSelBm);
+ StretchBlt(hSelDC, rectSel_dest[2] - 1, rectSel_dest[3] -
1, -rectSel_dest[2], -rectSel_dest[3], hSelDC,
+ 0, 0, rectSel_dest[2], rectSel_dest[3],
SRCCOPY);
+ SendMessage(hSelection, WM_LBUTTONDOWN, 0, 0);
+ SendMessage(hSelection, WM_MOUSEMOVE, 0, 0);
+ SendMessage(hSelection, WM_LBUTTONUP, 0, 0);
+ }
+ else
+ {
+ newReversible();
+ StretchBlt(hDrawingDC, imgXRes - 1, imgYRes - 1,
-imgXRes, -imgYRes, hDrawingDC,
+ 0, 0, imgXRes, imgYRes, SRCCOPY);
+ SendMessage(hImageArea, WM_PAINT, 0, 0);
+ }
+ break;
+ case 5: /* rotate 270 degrees */
break;
}
break;
@@ -895,6 +977,7 @@
case IDM_VIEWSHOWGRID:
showGrid = !showGrid;
+ SendMessage(hImageArea, WM_PAINT, 0, 0);
break;
case IDM_VIEWSHOWMINIATURE:
showMiniature = !showMiniature;