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/glo... ============================================================================== --- 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/lan... ============================================================================== --- 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/mou... ============================================================================== --- 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/reg... ============================================================================== --- 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/sel... ============================================================================== --- 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/win... ============================================================================== --- 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;