mirror of
https://github.com/reactos/reactos.git
synced 2025-02-20 15:35:04 +00:00
[MSPAINT_NEW] manage palette and tools data in a PaletteModel and ToolsModel class, respectively; fix tiny bug in mouse.cpp (third batch of git commits)
svn path=/trunk/; revision=68368
This commit is contained in:
parent
e60f09bacc
commit
b912eb3b15
17 changed files with 480 additions and 263 deletions
|
@ -14,12 +14,14 @@ list(APPEND SOURCE
|
|||
miniature.cpp
|
||||
mouse.cpp
|
||||
palette.cpp
|
||||
palettemodel.cpp
|
||||
registry.cpp
|
||||
scrollbox.cpp
|
||||
selection.cpp
|
||||
sizebox.cpp
|
||||
textedit.cpp
|
||||
toolsettings.cpp
|
||||
toolsmodel.cpp
|
||||
winproc.cpp
|
||||
precomp.h)
|
||||
|
||||
|
|
|
@ -40,14 +40,10 @@ extern BOOL imageSaved;
|
|||
|
||||
extern POINT start;
|
||||
extern POINT last;
|
||||
extern int lineWidth;
|
||||
extern int shapeStyle;
|
||||
extern int brushStyle;
|
||||
extern int activeTool;
|
||||
extern int airBrushWidth;
|
||||
extern int rubberRadius;
|
||||
extern int transpBg;
|
||||
extern int zoom;
|
||||
|
||||
class ToolsModel;
|
||||
extern ToolsModel toolsModel;
|
||||
|
||||
extern RECT rectSel_src;
|
||||
extern RECT rectSel_dest;
|
||||
extern HBITMAP hSelBm;
|
||||
|
@ -58,13 +54,8 @@ extern HFONT hfontTextFont;
|
|||
extern LPTSTR textToolText;
|
||||
extern int textToolTextMaxLen;
|
||||
|
||||
extern int palColors[28];
|
||||
extern int modernPalColors[28];
|
||||
extern int oldPalColors[28];
|
||||
extern int selectedPalette;
|
||||
|
||||
extern int fgColor;
|
||||
extern int bgColor;
|
||||
class PaletteModel;
|
||||
extern PaletteModel paletteModel;
|
||||
|
||||
extern HWND hStatusBar;
|
||||
extern HWND hTrackbarZoom;
|
||||
|
|
|
@ -119,8 +119,8 @@ cropReversible(int width, int height, int xOffset, int yOffset)
|
|||
hdc = CreateCompatibleDC(hDrawingDC);
|
||||
SelectObject(hdc, hBms[currInd]);
|
||||
|
||||
oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_SOLID, 1, bgColor));
|
||||
oldBrush = (HBRUSH) SelectObject(hdc, CreateSolidBrush(bgColor));
|
||||
oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_SOLID, 1, paletteModel.GetBgColor()));
|
||||
oldBrush = (HBRUSH) SelectObject(hdc, CreateSolidBrush(paletteModel.GetBgColor()));
|
||||
Rectangle(hdc, 0, 0, width, height);
|
||||
BitBlt(hdc, -xOffset, -yOffset, imgXRes, imgYRes, hDrawingDC, 0, 0, SRCCOPY);
|
||||
DeleteObject(SelectObject(hdc, oldBrush));
|
||||
|
|
|
@ -55,26 +55,26 @@ LRESULT CImgAreaWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
0,
|
||||
0, 3, 3, TRUE);
|
||||
sizeboxCenterTop.MoveWindow(
|
||||
imgXRes * zoom / 2000 + 3 * 3 / 4,
|
||||
imgXRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4,
|
||||
0, 3, 3, TRUE);
|
||||
sizeboxRightTop.MoveWindow(
|
||||
imgXRes * zoom / 1000 + 3,
|
||||
imgXRes * toolsModel.GetZoom() / 1000 + 3,
|
||||
0, 3, 3, TRUE);
|
||||
sizeboxLeftCenter.MoveWindow(
|
||||
0,
|
||||
imgYRes * zoom / 2000 + 3 * 3 / 4, 3, 3, TRUE);
|
||||
imgYRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4, 3, 3, TRUE);
|
||||
sizeboxRightCenter.MoveWindow(
|
||||
imgXRes * zoom / 1000 + 3,
|
||||
imgYRes * zoom / 2000 + 3 * 3 / 4, 3, 3, TRUE);
|
||||
imgXRes * toolsModel.GetZoom() / 1000 + 3,
|
||||
imgYRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4, 3, 3, TRUE);
|
||||
sizeboxLeftBottom.MoveWindow(
|
||||
0,
|
||||
imgYRes * zoom / 1000 + 3, 3, 3, TRUE);
|
||||
imgYRes * toolsModel.GetZoom() / 1000 + 3, 3, 3, TRUE);
|
||||
sizeboxCenterBottom.MoveWindow(
|
||||
imgXRes * zoom / 2000 + 3 * 3 / 4,
|
||||
imgYRes * zoom / 1000 + 3, 3, 3, TRUE);
|
||||
imgXRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4,
|
||||
imgYRes * toolsModel.GetZoom() / 1000 + 3, 3, 3, TRUE);
|
||||
sizeboxRightBottom.MoveWindow(
|
||||
imgXRes * zoom / 1000 + 3,
|
||||
imgYRes * zoom / 1000 + 3, 3, 3, TRUE);
|
||||
imgXRes * toolsModel.GetZoom() / 1000 + 3,
|
||||
imgYRes * toolsModel.GetZoom() / 1000 + 3, 3, 3, TRUE);
|
||||
UpdateScrollbox();
|
||||
return 0;
|
||||
}
|
||||
|
@ -83,21 +83,21 @@ LRESULT CImgAreaWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& b
|
|||
{
|
||||
DefWindowProc(WM_PAINT, wParam, lParam);
|
||||
HDC hdc = imageArea.GetDC();
|
||||
StretchBlt(hdc, 0, 0, imgXRes * zoom / 1000, imgYRes * zoom / 1000, hDrawingDC, 0, 0, imgXRes,
|
||||
StretchBlt(hdc, 0, 0, imgXRes * toolsModel.GetZoom() / 1000, imgYRes * toolsModel.GetZoom() / 1000, hDrawingDC, 0, 0, imgXRes,
|
||||
imgYRes, SRCCOPY);
|
||||
if (showGrid && (zoom >= 4000))
|
||||
if (showGrid && (toolsModel.GetZoom() >= 4000))
|
||||
{
|
||||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_SOLID, 1, 0x00a0a0a0));
|
||||
int counter;
|
||||
for(counter = 0; counter <= imgYRes; counter++)
|
||||
{
|
||||
MoveToEx(hdc, 0, counter * zoom / 1000, NULL);
|
||||
LineTo(hdc, imgXRes * zoom / 1000, counter * zoom / 1000);
|
||||
MoveToEx(hdc, 0, counter * toolsModel.GetZoom() / 1000, NULL);
|
||||
LineTo(hdc, imgXRes * toolsModel.GetZoom() / 1000, counter * toolsModel.GetZoom() / 1000);
|
||||
}
|
||||
for(counter = 0; counter <= imgXRes; counter++)
|
||||
{
|
||||
MoveToEx(hdc, counter * zoom / 1000, 0, NULL);
|
||||
LineTo(hdc, counter * zoom / 1000, imgYRes * zoom / 1000);
|
||||
MoveToEx(hdc, counter * toolsModel.GetZoom() / 1000, 0, NULL);
|
||||
LineTo(hdc, counter * toolsModel.GetZoom() / 1000, imgYRes * toolsModel.GetZoom() / 1000);
|
||||
}
|
||||
DeleteObject(SelectObject(hdc, oldPen));
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ LRESULT CImgAreaWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& b
|
|||
|
||||
LRESULT CImgAreaWindow::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FILL:
|
||||
SetCursor(hCurFill);
|
||||
|
@ -134,12 +134,12 @@ LRESULT CImgAreaWindow::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
|
||||
LRESULT CImgAreaWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
if ((!drawing) || (activeTool == TOOL_COLOR))
|
||||
if ((!drawing) || (toolsModel.GetActiveTool() == TOOL_COLOR))
|
||||
{
|
||||
SetCapture();
|
||||
drawing = TRUE;
|
||||
startPaintingL(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / zoom, GET_Y_LPARAM(lParam) * 1000 / zoom,
|
||||
fgColor, bgColor);
|
||||
startPaintingL(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom(),
|
||||
paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -147,19 +147,19 @@ LRESULT CImgAreaWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
undo();
|
||||
}
|
||||
Invalidate(FALSE);
|
||||
if ((activeTool == TOOL_ZOOM) && (zoom < 8000))
|
||||
zoomTo(zoom * 2, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||
if ((toolsModel.GetActiveTool() == TOOL_ZOOM) && (toolsModel.GetZoom() < 8000))
|
||||
zoomTo(toolsModel.GetZoom() * 2, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CImgAreaWindow::OnRButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
if ((!drawing) || (activeTool == TOOL_COLOR))
|
||||
if ((!drawing) || (toolsModel.GetActiveTool() == TOOL_COLOR))
|
||||
{
|
||||
SetCapture();
|
||||
drawing = TRUE;
|
||||
startPaintingR(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / zoom, GET_Y_LPARAM(lParam) * 1000 / zoom,
|
||||
fgColor, bgColor);
|
||||
startPaintingR(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom(),
|
||||
paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -167,8 +167,8 @@ LRESULT CImgAreaWindow::OnRButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
undo();
|
||||
}
|
||||
Invalidate(FALSE);
|
||||
if ((activeTool == TOOL_ZOOM) && (zoom > 125))
|
||||
zoomTo(zoom / 2, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||
if ((toolsModel.GetActiveTool() == TOOL_ZOOM) && (toolsModel.GetZoom() > 125))
|
||||
zoomTo(toolsModel.GetZoom() / 2, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -178,15 +178,15 @@ LRESULT CImgAreaWindow::OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
{
|
||||
ReleaseCapture();
|
||||
drawing = FALSE;
|
||||
endPaintingL(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / zoom, GET_Y_LPARAM(lParam) * 1000 / zoom, fgColor,
|
||||
bgColor);
|
||||
endPaintingL(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), paletteModel.GetFgColor(),
|
||||
paletteModel.GetBgColor());
|
||||
Invalidate(FALSE);
|
||||
if (activeTool == TOOL_COLOR)
|
||||
if (toolsModel.GetActiveTool() == TOOL_COLOR)
|
||||
{
|
||||
COLORREF tempColor =
|
||||
GetPixel(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / zoom, GET_Y_LPARAM(lParam) * 1000 / zoom);
|
||||
GetPixel(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom());
|
||||
if (tempColor != CLR_INVALID)
|
||||
fgColor = tempColor;
|
||||
paletteModel.SetFgColor(tempColor);
|
||||
paletteWindow.Invalidate(FALSE);
|
||||
}
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) "");
|
||||
|
@ -200,15 +200,15 @@ LRESULT CImgAreaWindow::OnRButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
{
|
||||
ReleaseCapture();
|
||||
drawing = FALSE;
|
||||
endPaintingR(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / zoom, GET_Y_LPARAM(lParam) * 1000 / zoom, fgColor,
|
||||
bgColor);
|
||||
endPaintingR(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), paletteModel.GetFgColor(),
|
||||
paletteModel.GetBgColor());
|
||||
Invalidate(FALSE);
|
||||
if (activeTool == TOOL_COLOR)
|
||||
if (toolsModel.GetActiveTool() == TOOL_COLOR)
|
||||
{
|
||||
COLORREF tempColor =
|
||||
GetPixel(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / zoom, GET_Y_LPARAM(lParam) * 1000 / zoom);
|
||||
GetPixel(hDrawingDC, GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom(), GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom());
|
||||
if (tempColor != CLR_INVALID)
|
||||
bgColor = tempColor;
|
||||
paletteModel.SetBgColor(tempColor);
|
||||
paletteWindow.Invalidate(FALSE);
|
||||
}
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) "");
|
||||
|
@ -218,13 +218,13 @@ LRESULT CImgAreaWindow::OnRButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
|
||||
LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
LONG xNow = GET_X_LPARAM(lParam) * 1000 / zoom;
|
||||
LONG yNow = GET_Y_LPARAM(lParam) * 1000 / zoom;
|
||||
if ((!drawing) || (activeTool <= TOOL_AIRBRUSH))
|
||||
LONG xNow = GET_X_LPARAM(lParam) * 1000 / toolsModel.GetZoom();
|
||||
LONG yNow = GET_Y_LPARAM(lParam) * 1000 / toolsModel.GetZoom();
|
||||
if ((!drawing) || (toolsModel.GetActiveTool() <= TOOL_AIRBRUSH))
|
||||
{
|
||||
TRACKMOUSEEVENT tme;
|
||||
|
||||
if (activeTool == TOOL_ZOOM)
|
||||
if (toolsModel.GetActiveTool() == TOOL_ZOOM)
|
||||
{
|
||||
Invalidate(FALSE);
|
||||
UpdateWindow();
|
||||
|
@ -250,7 +250,7 @@ LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
LONG xRel = xNow - start.x;
|
||||
LONG yRel = yNow - start.y;
|
||||
/* 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 ((toolsModel.GetActiveTool() == TOOL_FREESEL) || (toolsModel.GetActiveTool() == TOOL_RECTSEL) || (toolsModel.GetActiveTool() == TOOL_TEXT))
|
||||
{
|
||||
if (xRel < 0)
|
||||
xRel = (xNow < 0) ? -start.x : xRel;
|
||||
|
@ -262,7 +262,7 @@ LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
yRel = imgYRes-start.y;
|
||||
}
|
||||
/* rectsel and shape tools always show non-negative numbers when drawing */
|
||||
if ((activeTool == TOOL_RECTSEL) || (activeTool == TOOL_SHAPE))
|
||||
if ((toolsModel.GetActiveTool() == TOOL_RECTSEL) || (toolsModel.GetActiveTool() == TOOL_SHAPE))
|
||||
{
|
||||
if (xRel < 0)
|
||||
xRel = -xRel;
|
||||
|
@ -270,7 +270,7 @@ LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
yRel = -yRel;
|
||||
}
|
||||
/* while drawing, update cursor coordinates only for tools 3, 7, 8, 9, 14 */
|
||||
switch(activeTool)
|
||||
switch(toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_RUBBER:
|
||||
case TOOL_PEN:
|
||||
|
@ -286,12 +286,12 @@ LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
}
|
||||
if ((wParam & MK_LBUTTON) != 0)
|
||||
{
|
||||
whilePaintingL(hDrawingDC, xNow, yNow, fgColor, bgColor);
|
||||
whilePaintingL(hDrawingDC, xNow, yNow, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
Invalidate(FALSE);
|
||||
if ((activeTool >= TOOL_TEXT) || (activeTool == TOOL_RECTSEL) || (activeTool == TOOL_FREESEL))
|
||||
if ((toolsModel.GetActiveTool() >= TOOL_TEXT) || (toolsModel.GetActiveTool() == TOOL_RECTSEL) || (toolsModel.GetActiveTool() == TOOL_FREESEL))
|
||||
{
|
||||
TCHAR sizeStr[100];
|
||||
if ((activeTool >= TOOL_LINE) && (GetAsyncKeyState(VK_SHIFT) < 0))
|
||||
if ((toolsModel.GetActiveTool() >= TOOL_LINE) && (GetAsyncKeyState(VK_SHIFT) < 0))
|
||||
yRel = xRel;
|
||||
_stprintf(sizeStr, _T("%ld x %ld"), xRel, yRel);
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
|
||||
|
@ -299,12 +299,12 @@ LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
}
|
||||
if ((wParam & MK_RBUTTON) != 0)
|
||||
{
|
||||
whilePaintingR(hDrawingDC, xNow, yNow, fgColor, bgColor);
|
||||
whilePaintingR(hDrawingDC, xNow, yNow, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
Invalidate(FALSE);
|
||||
if (activeTool >= TOOL_TEXT)
|
||||
if (toolsModel.GetActiveTool() >= TOOL_TEXT)
|
||||
{
|
||||
TCHAR sizeStr[100];
|
||||
if ((activeTool >= TOOL_LINE) && (GetAsyncKeyState(VK_SHIFT) < 0))
|
||||
if ((toolsModel.GetActiveTool() >= TOOL_LINE) && (GetAsyncKeyState(VK_SHIFT) < 0))
|
||||
yRel = xRel;
|
||||
_stprintf(sizeStr, _T("%ld x %ld"), xRel, yRel);
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
|
||||
|
@ -317,7 +317,7 @@ LRESULT CImgAreaWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
LRESULT CImgAreaWindow::OnMouseLeave(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) _T(""));
|
||||
if (activeTool == TOOL_ZOOM)
|
||||
if (toolsModel.GetActiveTool() == TOOL_ZOOM)
|
||||
imageArea.Invalidate(FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -32,14 +32,9 @@ BOOL imageSaved = TRUE;
|
|||
|
||||
POINT start;
|
||||
POINT last;
|
||||
int lineWidth = 1;
|
||||
int shapeStyle = 0;
|
||||
int brushStyle = 0;
|
||||
int activeTool = TOOL_PEN;
|
||||
int airBrushWidth = 5;
|
||||
int rubberRadius = 4;
|
||||
int transpBg = 0;
|
||||
int zoom = 1000;
|
||||
|
||||
ToolsModel toolsModel;
|
||||
|
||||
RECT rectSel_src;
|
||||
RECT rectSel_dest;
|
||||
HBITMAP hSelBm;
|
||||
|
@ -50,29 +45,7 @@ HWND hwndEditCtl;
|
|||
LPTSTR textToolText = NULL;
|
||||
int textToolTextMaxLen = 0;
|
||||
|
||||
/* array holding palette colors; may be changed by the user during execution */
|
||||
int palColors[28];
|
||||
|
||||
/* modern palette */
|
||||
int modernPalColors[28] = { 0x000000, 0x464646, 0x787878, 0x300099, 0x241ced, 0x0078ff, 0x0ec2ff,
|
||||
0x00f2ff, 0x1de6a8, 0x4cb122, 0xefb700, 0xf36d4d, 0x99362f, 0x98316f,
|
||||
0xffffff, 0xdcdcdc, 0xb4b4b4, 0x3c5a9c, 0xb1a3ff, 0x7aaae5, 0x9ce4f5,
|
||||
0xbdf9ff, 0xbcf9d3, 0x61bb9d, 0xead999, 0xd19a70, 0x8e6d54, 0xd5a5b5
|
||||
};
|
||||
|
||||
/* older palette containing VGA colors */
|
||||
int oldPalColors[28] = { 0x000000, 0x808080, 0x000080, 0x008080, 0x008000, 0x808000, 0x800000,
|
||||
0x800080, 0x408080, 0x404000, 0xff8000, 0x804000, 0xff0040, 0x004080,
|
||||
0xffffff, 0xc0c0c0, 0x0000ff, 0x00ffff, 0x00ff00, 0xffff00, 0xff0000,
|
||||
0xff00ff, 0x80ffff, 0x80ff00, 0xffff80, 0xff8080, 0x8000ff, 0x4080ff
|
||||
};
|
||||
|
||||
/* palette currently in use (1: modern, 2: old) */
|
||||
int selectedPalette;
|
||||
|
||||
/* foreground and background colors with initial value */
|
||||
int fgColor = 0x00000000;
|
||||
int bgColor = 0x00ffffff;
|
||||
PaletteModel paletteModel;
|
||||
|
||||
HWND hStatusBar;
|
||||
HWND hTrackbarZoom;
|
||||
|
@ -170,10 +143,6 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
|
|||
lstrcpy(lfTextFont.lfFaceName, _T(""));
|
||||
hfontTextFont = CreateFontIndirect(&lfTextFont);
|
||||
|
||||
/* init palette */
|
||||
selectedPalette = 1;
|
||||
CopyMemory(palColors, modernPalColors, sizeof(palColors));
|
||||
|
||||
hProgInstance = hThisInstance;
|
||||
|
||||
/* initialize common controls library */
|
||||
|
@ -293,8 +262,8 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
|
|||
hDrawingDC = CreateCompatibleDC(hDC);
|
||||
hSelDC = CreateCompatibleDC(hDC);
|
||||
imageArea.ReleaseDC(hDC);
|
||||
SelectObject(hDrawingDC, CreatePen(PS_SOLID, 0, fgColor));
|
||||
SelectObject(hDrawingDC, CreateSolidBrush(bgColor));
|
||||
SelectObject(hDrawingDC, CreatePen(PS_SOLID, 0, paletteModel.GetFgColor()));
|
||||
SelectObject(hDrawingDC, CreateSolidBrush(paletteModel.GetBgColor()));
|
||||
|
||||
hBms[0] = CreateDIBWithProperties(imgXRes, imgYRes);
|
||||
SelectObject(hDrawingDC, hBms[0]);
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
void
|
||||
placeSelWin()
|
||||
{
|
||||
selectionWindow.MoveWindow(rectSel_dest.left * zoom / 1000, rectSel_dest.top * zoom / 1000,
|
||||
RECT_WIDTH(rectSel_dest) * zoom / 1000 + 6, RECT_HEIGHT(rectSel_dest) * zoom / 1000 + 6, TRUE);
|
||||
selectionWindow.MoveWindow(rectSel_dest.left * toolsModel.GetZoom() / 1000, rectSel_dest.top * toolsModel.GetZoom() / 1000,
|
||||
RECT_WIDTH(rectSel_dest) * toolsModel.GetZoom() / 1000 + 6, RECT_HEIGHT(rectSel_dest) * toolsModel.GetZoom() / 1000 + 6, TRUE);
|
||||
selectionWindow.BringWindowToTop();
|
||||
imageArea.InvalidateRect(NULL, FALSE);
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ startPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
start.y = y;
|
||||
last.x = x;
|
||||
last.y = y;
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
selectionWindow.ShowWindow(SW_HIDE);
|
||||
|
@ -87,7 +87,7 @@ startPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
break;
|
||||
case TOOL_RUBBER:
|
||||
newReversible();
|
||||
Erase(hdc, x, y, x, y, bg, rubberRadius);
|
||||
Erase(hdc, x, y, x, y, bg, toolsModel.GetRubberRadius());
|
||||
break;
|
||||
case TOOL_FILL:
|
||||
newReversible();
|
||||
|
@ -99,11 +99,11 @@ startPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
break;
|
||||
case TOOL_BRUSH:
|
||||
newReversible();
|
||||
Brush(hdc, x, y, x, y, fg, brushStyle);
|
||||
Brush(hdc, x, y, x, y, fg, toolsModel.GetBrushStyle());
|
||||
break;
|
||||
case TOOL_AIRBRUSH:
|
||||
newReversible();
|
||||
Airbrush(hdc, x, y, fg, airBrushWidth);
|
||||
Airbrush(hdc, x, y, fg, toolsModel.GetAirBrushWidth());
|
||||
break;
|
||||
case TOOL_BEZIER:
|
||||
pointStack[pointSP].x = x;
|
||||
|
@ -118,7 +118,7 @@ startPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
pointStack[pointSP].x = x;
|
||||
pointStack[pointSP].y = y;
|
||||
if (pointSP + 1 >= 2)
|
||||
Poly(hdc, pointStack, pointSP + 1, fg, bg, lineWidth, shapeStyle, FALSE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP + 1, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), FALSE, FALSE);
|
||||
if (pointSP == 0)
|
||||
{
|
||||
newReversible();
|
||||
|
@ -131,7 +131,7 @@ startPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
void
|
||||
whilePaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
||||
{
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
if (ptSP == 0)
|
||||
|
@ -159,22 +159,22 @@ whilePaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
break;
|
||||
}
|
||||
case TOOL_RUBBER:
|
||||
Erase(hdc, last.x, last.y, x, y, bg, rubberRadius);
|
||||
Erase(hdc, last.x, last.y, x, y, bg, toolsModel.GetRubberRadius());
|
||||
break;
|
||||
case TOOL_PEN:
|
||||
Line(hdc, last.x, last.y, x, y, fg, 1);
|
||||
break;
|
||||
case TOOL_BRUSH:
|
||||
Brush(hdc, last.x, last.y, x, y, fg, brushStyle);
|
||||
Brush(hdc, last.x, last.y, x, y, fg, toolsModel.GetBrushStyle());
|
||||
break;
|
||||
case TOOL_AIRBRUSH:
|
||||
Airbrush(hdc, x, y, fg, airBrushWidth);
|
||||
Airbrush(hdc, x, y, fg, toolsModel.GetAirBrushWidth());
|
||||
break;
|
||||
case TOOL_LINE:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
roundTo8Directions(start.x, start.y, &x, &y);
|
||||
Line(hdc, start.x, start.y, x, y, fg, lineWidth);
|
||||
Line(hdc, start.x, start.y, x, y, fg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
case TOOL_BEZIER:
|
||||
resetToU1();
|
||||
|
@ -184,13 +184,13 @@ whilePaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
{
|
||||
case 1:
|
||||
Line(hdc, pointStack[0].x, pointStack[0].y, pointStack[1].x, pointStack[1].y, fg,
|
||||
lineWidth);
|
||||
toolsModel.GetLineWidth());
|
||||
break;
|
||||
case 2:
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[2], pointStack[1], fg, lineWidth);
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[2], pointStack[1], fg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
case 3:
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[3], pointStack[1], fg, lineWidth);
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[3], pointStack[1], fg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -198,7 +198,7 @@ whilePaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Rect(hdc, start.x, start.y, x, y, fg, bg, lineWidth, shapeStyle);
|
||||
Rect(hdc, start.x, start.y, x, y, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_SHAPE:
|
||||
resetToU1();
|
||||
|
@ -208,19 +208,19 @@ whilePaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
roundTo8Directions(pointStack[pointSP - 1].x, pointStack[pointSP - 1].y,
|
||||
&pointStack[pointSP].x, &pointStack[pointSP].y);
|
||||
if (pointSP + 1 >= 2)
|
||||
Poly(hdc, pointStack, pointSP + 1, fg, bg, lineWidth, shapeStyle, FALSE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP + 1, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), FALSE, FALSE);
|
||||
break;
|
||||
case TOOL_ELLIPSE:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Ellp(hdc, start.x, start.y, x, y, fg, bg, lineWidth, shapeStyle);
|
||||
Ellp(hdc, start.x, start.y, x, y, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_RRECT:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
RRect(hdc, start.x, start.y, x, y, fg, bg, lineWidth, shapeStyle);
|
||||
RRect(hdc, start.x, start.y, x, y, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -231,7 +231,7 @@ whilePaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
void
|
||||
endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
||||
{
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
{
|
||||
|
@ -303,7 +303,7 @@ endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
BitBlt(hSelDC, 0, 0, RECT_WIDTH(rectSel_src), RECT_HEIGHT(rectSel_src), hDrawingDC, rectSel_src.left,
|
||||
rectSel_src.top, SRCCOPY);
|
||||
Rect(hdc, rectSel_src.left, rectSel_src.top, rectSel_src.right,
|
||||
rectSel_src.bottom, bgColor, bgColor, 0, TRUE);
|
||||
rectSel_src.bottom, bg, bg, 0, TRUE);
|
||||
newReversible();
|
||||
|
||||
BitBlt(hDrawingDC, rectSel_src.left, rectSel_src.top, RECT_WIDTH(rectSel_src), RECT_HEIGHT(rectSel_src), hSelDC, 0,
|
||||
|
@ -326,7 +326,7 @@ endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
}
|
||||
break;
|
||||
case TOOL_RUBBER:
|
||||
Erase(hdc, last.x, last.y, x, y, bg, rubberRadius);
|
||||
Erase(hdc, last.x, last.y, x, y, bg, toolsModel.GetRubberRadius());
|
||||
break;
|
||||
case TOOL_PEN:
|
||||
Line(hdc, last.x, last.y, x, y, fg, 1);
|
||||
|
@ -336,7 +336,7 @@ endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
roundTo8Directions(start.x, start.y, &x, &y);
|
||||
Line(hdc, start.x, start.y, x, y, fg, lineWidth);
|
||||
Line(hdc, start.x, start.y, x, y, fg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
case TOOL_BEZIER:
|
||||
pointSP++;
|
||||
|
@ -347,7 +347,7 @@ endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Rect(hdc, start.x, start.y, x, y, fg, bg, lineWidth, shapeStyle);
|
||||
Rect(hdc, start.x, start.y, x, y, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_SHAPE:
|
||||
resetToU1();
|
||||
|
@ -360,14 +360,14 @@ endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
if (pointSP >= 2)
|
||||
{
|
||||
if ((pointStack[0].x - x) * (pointStack[0].x - x) +
|
||||
(pointStack[0].y - y) * (pointStack[0].y - y) <= lineWidth * lineWidth + 1)
|
||||
(pointStack[0].y - y) * (pointStack[0].y - y) <= toolsModel.GetLineWidth() * toolsModel.GetLineWidth() + 1)
|
||||
{
|
||||
Poly(hdc, pointStack, pointSP, fg, bg, lineWidth, shapeStyle, TRUE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), TRUE, FALSE);
|
||||
pointSP = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Poly(hdc, pointStack, pointSP, fg, bg, lineWidth, shapeStyle, FALSE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), FALSE, FALSE);
|
||||
}
|
||||
}
|
||||
if (pointSP == 255)
|
||||
|
@ -377,13 +377,13 @@ endPaintingL(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Ellp(hdc, start.x, start.y, x, y, fg, bg, lineWidth, shapeStyle);
|
||||
Ellp(hdc, start.x, start.y, x, y, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_RRECT:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
RRect(hdc, start.x, start.y, x, y, fg, bg, lineWidth, shapeStyle);
|
||||
RRect(hdc, start.x, start.y, x, y, fg, bg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -395,7 +395,7 @@ startPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
start.y = y;
|
||||
last.x = x;
|
||||
last.y = y;
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
case TOOL_TEXT:
|
||||
|
@ -407,7 +407,7 @@ startPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
break;
|
||||
case TOOL_RUBBER:
|
||||
newReversible();
|
||||
Replace(hdc, x, y, x, y, fg, bg, rubberRadius);
|
||||
Replace(hdc, x, y, x, y, fg, bg, toolsModel.GetRubberRadius());
|
||||
break;
|
||||
case TOOL_FILL:
|
||||
newReversible();
|
||||
|
@ -419,11 +419,11 @@ startPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
break;
|
||||
case TOOL_BRUSH:
|
||||
newReversible();
|
||||
Brush(hdc, x, y, x, y, bg, brushStyle);
|
||||
Brush(hdc, x, y, x, y, bg, toolsModel.GetBrushStyle());
|
||||
break;
|
||||
case TOOL_AIRBRUSH:
|
||||
newReversible();
|
||||
Airbrush(hdc, x, y, bg, airBrushWidth);
|
||||
Airbrush(hdc, x, y, bg, toolsModel.GetAirBrushWidth());
|
||||
break;
|
||||
case TOOL_BEZIER:
|
||||
pointStack[pointSP].x = x;
|
||||
|
@ -438,7 +438,7 @@ startPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
pointStack[pointSP].x = x;
|
||||
pointStack[pointSP].y = y;
|
||||
if (pointSP + 1 >= 2)
|
||||
Poly(hdc, pointStack, pointSP + 1, bg, fg, lineWidth, shapeStyle, FALSE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP + 1, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), FALSE, FALSE);
|
||||
if (pointSP == 0)
|
||||
{
|
||||
newReversible();
|
||||
|
@ -451,25 +451,25 @@ startPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
void
|
||||
whilePaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
||||
{
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_RUBBER:
|
||||
Replace(hdc, last.x, last.y, x, y, fg, bg, rubberRadius);
|
||||
Replace(hdc, last.x, last.y, x, y, fg, bg, toolsModel.GetRubberRadius());
|
||||
break;
|
||||
case TOOL_PEN:
|
||||
Line(hdc, last.x, last.y, x, y, bg, 1);
|
||||
break;
|
||||
case TOOL_BRUSH:
|
||||
Brush(hdc, last.x, last.y, x, y, bg, brushStyle);
|
||||
Brush(hdc, last.x, last.y, x, y, bg, toolsModel.GetBrushStyle());
|
||||
break;
|
||||
case TOOL_AIRBRUSH:
|
||||
Airbrush(hdc, x, y, bg, airBrushWidth);
|
||||
Airbrush(hdc, x, y, bg, toolsModel.GetAirBrushWidth());
|
||||
break;
|
||||
case TOOL_LINE:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
roundTo8Directions(start.x, start.y, &x, &y);
|
||||
Line(hdc, start.x, start.y, x, y, bg, lineWidth);
|
||||
Line(hdc, start.x, start.y, x, y, bg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
case TOOL_BEZIER:
|
||||
resetToU1();
|
||||
|
@ -479,13 +479,13 @@ whilePaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
{
|
||||
case 1:
|
||||
Line(hdc, pointStack[0].x, pointStack[0].y, pointStack[1].x, pointStack[1].y, bg,
|
||||
lineWidth);
|
||||
toolsModel.GetLineWidth());
|
||||
break;
|
||||
case 2:
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[2], pointStack[1], bg, lineWidth);
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[2], pointStack[1], bg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
case 3:
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[3], pointStack[1], bg, lineWidth);
|
||||
Bezier(hdc, pointStack[0], pointStack[2], pointStack[3], pointStack[1], bg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -493,7 +493,7 @@ whilePaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Rect(hdc, start.x, start.y, x, y, bg, fg, lineWidth, shapeStyle);
|
||||
Rect(hdc, start.x, start.y, x, y, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_SHAPE:
|
||||
resetToU1();
|
||||
|
@ -503,19 +503,19 @@ whilePaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
roundTo8Directions(pointStack[pointSP - 1].x, pointStack[pointSP - 1].y,
|
||||
&pointStack[pointSP].x, &pointStack[pointSP].y);
|
||||
if (pointSP + 1 >= 2)
|
||||
Poly(hdc, pointStack, pointSP + 1, bg, fg, lineWidth, shapeStyle, FALSE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP + 1, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), FALSE, FALSE);
|
||||
break;
|
||||
case TOOL_ELLIPSE:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Ellp(hdc, start.x, start.y, x, y, bg, fg, lineWidth, shapeStyle);
|
||||
Ellp(hdc, start.x, start.y, x, y, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_RRECT:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
RRect(hdc, start.x, start.y, x, y, bg, fg, lineWidth, shapeStyle);
|
||||
RRect(hdc, start.x, start.y, x, y, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -526,10 +526,10 @@ whilePaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
void
|
||||
endPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
||||
{
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_RUBBER:
|
||||
Replace(hdc, last.x, last.y, x, y, fg, bg, rubberRadius);
|
||||
Replace(hdc, last.x, last.y, x, y, fg, bg, toolsModel.GetRubberRadius());
|
||||
break;
|
||||
case TOOL_PEN:
|
||||
Line(hdc, last.x, last.y, x, y, bg, 1);
|
||||
|
@ -539,7 +539,7 @@ endPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
roundTo8Directions(start.x, start.y, &x, &y);
|
||||
Line(hdc, start.x, start.y, x, y, bg, lineWidth);
|
||||
Line(hdc, start.x, start.y, x, y, bg, toolsModel.GetLineWidth());
|
||||
break;
|
||||
case TOOL_BEZIER:
|
||||
pointSP++;
|
||||
|
@ -550,7 +550,7 @@ endPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Rect(hdc, start.x, start.y, x, y, bg, fg, lineWidth, shapeStyle);
|
||||
Rect(hdc, start.x, start.y, x, y, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_SHAPE:
|
||||
resetToU1();
|
||||
|
@ -563,14 +563,14 @@ endPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
if (pointSP >= 2)
|
||||
{
|
||||
if ((pointStack[0].x - x) * (pointStack[0].x - x) +
|
||||
(pointStack[0].y - y) * (pointStack[0].y - y) <= lineWidth * lineWidth + 1)
|
||||
(pointStack[0].y - y) * (pointStack[0].y - y) <= toolsModel.GetLineWidth() * toolsModel.GetLineWidth() + 1)
|
||||
{
|
||||
Poly(hdc, pointStack, pointSP, bg, fg, lineWidth, shapeStyle, TRUE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), TRUE, FALSE);
|
||||
pointSP = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Poly(hdc, pointStack, pointSP, bg, fg, lineWidth, shapeStyle, FALSE, FALSE);
|
||||
Poly(hdc, pointStack, pointSP, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle(), FALSE, FALSE);
|
||||
}
|
||||
}
|
||||
if (pointSP == 255)
|
||||
|
@ -580,13 +580,13 @@ endPaintingR(HDC hdc, LONG x, LONG y, COLORREF fg, COLORREF bg)
|
|||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
Ellp(hdc, start.x, start.y, x, y, bg, fg, lineWidth, shapeStyle);
|
||||
Ellp(hdc, start.x, start.y, x, y, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
case TOOL_RRECT:
|
||||
resetToU1();
|
||||
if (GetAsyncKeyState(VK_SHIFT) < 0)
|
||||
regularize(start.x, start.y, &x, &y);
|
||||
RRect(hdc, start.x, start.y, x, y, bg, fg, lineWidth, shapeStyle);
|
||||
RRect(hdc, start.x, start.y, x, y, bg, fg, toolsModel.GetLineWidth(), toolsModel.GetShapeStyle());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,12 +32,12 @@ LRESULT CPaletteWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& b
|
|||
SetRect(&rc, 11, 12, 26, 27);
|
||||
DrawEdge(hDC, &rc, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
|
||||
oldPen = (HPEN) SelectObject(hDC, CreatePen(PS_NULL, 0, 0));
|
||||
oldBrush = (HBRUSH) SelectObject(hDC, CreateSolidBrush(bgColor));
|
||||
oldBrush = (HBRUSH) SelectObject(hDC, CreateSolidBrush(paletteModel.GetBgColor()));
|
||||
Rectangle(hDC, rc.left, rc.top + 2, rc.right - 1, rc.bottom - 1);
|
||||
DeleteObject(SelectObject(hDC, oldBrush));
|
||||
SetRect(&rc, 4, 5, 19, 20);
|
||||
DrawEdge(hDC, &rc, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
|
||||
oldBrush = (HBRUSH) SelectObject(hDC, CreateSolidBrush(fgColor));
|
||||
oldBrush = (HBRUSH) SelectObject(hDC, CreateSolidBrush(paletteModel.GetFgColor()));
|
||||
Rectangle(hDC, rc.left + 2, rc.top + 2, rc.right - 1, rc.bottom - 1);
|
||||
DeleteObject(SelectObject(hDC, oldBrush));
|
||||
DeleteObject(SelectObject(hDC, oldPen));
|
||||
|
@ -49,7 +49,7 @@ LRESULT CPaletteWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& b
|
|||
DrawEdge(hDC, &rc, EDGE_RAISED, BF_TOPLEFT);
|
||||
DrawEdge(hDC, &rc, BDR_SUNKENOUTER, BF_RECT);
|
||||
oldPen = (HPEN) SelectObject(hDC, CreatePen(PS_NULL, 0, 0));
|
||||
oldBrush = (HBRUSH) SelectObject(hDC, CreateSolidBrush(palColors[i]));
|
||||
oldBrush = (HBRUSH) SelectObject(hDC, CreateSolidBrush(paletteModel.GetColor(i)));
|
||||
Rectangle(hDC, rc.left + 2, rc.top + 2, rc.right - 1, rc.bottom - 1);
|
||||
DeleteObject(SelectObject(hDC, oldBrush));
|
||||
DeleteObject(SelectObject(hDC, oldPen));
|
||||
|
@ -62,9 +62,9 @@ LRESULT CPaletteWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
{
|
||||
if (GET_X_LPARAM(lParam) >= 31)
|
||||
{
|
||||
fgColor = palColors[(GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14];
|
||||
paletteModel.SetFgColor(paletteModel.GetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14));
|
||||
InvalidateRect(NULL, FALSE);
|
||||
if (activeTool == 10)
|
||||
if (toolsModel.GetActiveTool() == 10)
|
||||
ForceRefreshSelectionContents();
|
||||
}
|
||||
return 0;
|
||||
|
@ -74,9 +74,9 @@ LRESULT CPaletteWindow::OnRButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
{
|
||||
if (GET_X_LPARAM(lParam) >= 31)
|
||||
{
|
||||
bgColor = palColors[(GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14];
|
||||
paletteModel.SetBgColor(paletteModel.GetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14));
|
||||
InvalidateRect(NULL, FALSE);
|
||||
if (activeTool == 10)
|
||||
if (toolsModel.GetActiveTool() == 10)
|
||||
ForceRefreshSelectionContents();
|
||||
}
|
||||
return 0;
|
||||
|
@ -87,11 +87,11 @@ LRESULT CPaletteWindow::OnLButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam,
|
|||
if (GET_X_LPARAM(lParam) >= 31)
|
||||
if (ChooseColor(&choosecolor))
|
||||
{
|
||||
palColors[(GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14] =
|
||||
choosecolor.rgbResult;
|
||||
fgColor = choosecolor.rgbResult;
|
||||
paletteModel.SetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14,
|
||||
choosecolor.rgbResult);
|
||||
paletteModel.SetFgColor(choosecolor.rgbResult);
|
||||
InvalidateRect(NULL, FALSE);
|
||||
if (activeTool == 10)
|
||||
if (toolsModel.GetActiveTool() == 10)
|
||||
ForceRefreshSelectionContents();
|
||||
}
|
||||
return 0;
|
||||
|
@ -102,11 +102,11 @@ LRESULT CPaletteWindow::OnRButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam,
|
|||
if (GET_X_LPARAM(lParam) >= 31)
|
||||
if (ChooseColor(&choosecolor))
|
||||
{
|
||||
palColors[(GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14] =
|
||||
choosecolor.rgbResult;
|
||||
bgColor = choosecolor.rgbResult;
|
||||
paletteModel.SetColor((GET_X_LPARAM(lParam) - 31) / 16 + (GET_Y_LPARAM(lParam) / 16) * 14,
|
||||
choosecolor.rgbResult);
|
||||
paletteModel.SetBgColor(choosecolor.rgbResult);
|
||||
InvalidateRect(NULL, FALSE);
|
||||
if (activeTool == 10)
|
||||
if (toolsModel.GetActiveTool() == 10)
|
||||
ForceRefreshSelectionContents();
|
||||
}
|
||||
return 0;
|
||||
|
|
82
reactos/base/applications/mspaint_new/palettemodel.cpp
Normal file
82
reactos/base/applications/mspaint_new/palettemodel.cpp
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* PROJECT: PAINT for ReactOS
|
||||
* LICENSE: LGPL
|
||||
* FILE: base/applications/mspaint_new/palettemodel.cpp
|
||||
* PURPOSE: Keep track of palette data, notify listeners
|
||||
* PROGRAMMERS: Benedikt Freisen
|
||||
*/
|
||||
|
||||
/* INCLUDES *********************************************************/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
/* FUNCTIONS ********************************************************/
|
||||
|
||||
PaletteModel::PaletteModel()
|
||||
{
|
||||
m_fgColor = 0x00000000;
|
||||
m_bgColor = 0x00ffffff;
|
||||
SelectPalette(1);
|
||||
}
|
||||
|
||||
int PaletteModel::SelectedPalette()
|
||||
{
|
||||
return m_nSelectedPalette;
|
||||
}
|
||||
|
||||
void PaletteModel::SelectPalette(int nPalette)
|
||||
{
|
||||
int modernColors[28] = {
|
||||
0x000000, 0x464646, 0x787878, 0x300099, 0x241ced, 0x0078ff, 0x0ec2ff,
|
||||
0x00f2ff, 0x1de6a8, 0x4cb122, 0xefb700, 0xf36d4d, 0x99362f, 0x98316f,
|
||||
0xffffff, 0xdcdcdc, 0xb4b4b4, 0x3c5a9c, 0xb1a3ff, 0x7aaae5, 0x9ce4f5,
|
||||
0xbdf9ff, 0xbcf9d3, 0x61bb9d, 0xead999, 0xd19a70, 0x8e6d54, 0xd5a5b5
|
||||
};
|
||||
int oldColors[28] = {
|
||||
0x000000, 0x808080, 0x000080, 0x008080, 0x008000, 0x808000, 0x800000,
|
||||
0x800080, 0x408080, 0x404000, 0xff8000, 0x804000, 0xff0040, 0x004080,
|
||||
0xffffff, 0xc0c0c0, 0x0000ff, 0x00ffff, 0x00ff00, 0xffff00, 0xff0000,
|
||||
0xff00ff, 0x80ffff, 0x80ff00, 0xffff80, 0xff8080, 0x8000ff, 0x4080ff
|
||||
};
|
||||
if (nPalette == 1)
|
||||
CopyMemory(m_colors, modernColors, sizeof(m_colors));
|
||||
else if (nPalette == 2)
|
||||
CopyMemory(m_colors, oldColors, sizeof(m_colors));
|
||||
else
|
||||
return;
|
||||
m_nSelectedPalette = nPalette;
|
||||
}
|
||||
|
||||
int PaletteModel::GetColor(int nIndex)
|
||||
{
|
||||
if (nIndex < 28)
|
||||
return m_colors[nIndex];
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PaletteModel::SetColor(int nIndex, int newColor)
|
||||
{
|
||||
if (nIndex < 28)
|
||||
m_colors[nIndex] = newColor;
|
||||
}
|
||||
|
||||
int PaletteModel::GetFgColor()
|
||||
{
|
||||
return m_fgColor;
|
||||
}
|
||||
|
||||
void PaletteModel::SetFgColor(int newColor)
|
||||
{
|
||||
m_fgColor = newColor;
|
||||
}
|
||||
|
||||
int PaletteModel::GetBgColor()
|
||||
{
|
||||
return m_bgColor;
|
||||
}
|
||||
|
||||
void PaletteModel::SetBgColor(int newColor)
|
||||
{
|
||||
m_bgColor = newColor;
|
||||
}
|
28
reactos/base/applications/mspaint_new/palettemodel.h
Normal file
28
reactos/base/applications/mspaint_new/palettemodel.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* PROJECT: PAINT for ReactOS
|
||||
* LICENSE: LGPL
|
||||
* FILE: base/applications/mspaint_new/palettemodel.h
|
||||
* PURPOSE: Keep track of palette data, notify listeners
|
||||
* PROGRAMMERS: Benedikt Freisen
|
||||
*/
|
||||
|
||||
/* CLASSES **********************************************************/
|
||||
|
||||
class PaletteModel
|
||||
{
|
||||
private:
|
||||
int m_colors[28];
|
||||
int m_nSelectedPalette;
|
||||
int m_fgColor;
|
||||
int m_bgColor;
|
||||
public:
|
||||
PaletteModel();
|
||||
int SelectedPalette();
|
||||
void SelectPalette(int nPalette);
|
||||
int GetColor(int nIndex);
|
||||
void SetColor(int nIndex, int newColor);
|
||||
int GetFgColor();
|
||||
void SetFgColor(int newColor);
|
||||
int GetBgColor();
|
||||
void SetBgColor(int newColor);
|
||||
};
|
|
@ -27,11 +27,13 @@
|
|||
#include "miniature.h"
|
||||
#include "mouse.h"
|
||||
#include "palette.h"
|
||||
#include "palettemodel.h"
|
||||
#include "scrollbox.h"
|
||||
#include "selection.h"
|
||||
#include "sizebox.h"
|
||||
#include "textedit.h"
|
||||
#include "toolsettings.h"
|
||||
#include "toolsmodel.h"
|
||||
#include "winproc.h"
|
||||
|
||||
#endif /* _MSPAINT_H */
|
||||
|
|
|
@ -74,8 +74,8 @@ LRESULT CScrollboxWindow::OnHScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
}
|
||||
scrollboxWindow.SetScrollInfo(SB_HORZ, &si);
|
||||
scrlClientWindow.MoveWindow(-scrollboxWindow.GetScrollPos(SB_HORZ),
|
||||
-scrollboxWindow.GetScrollPos(SB_VERT), imgXRes * zoom / 1000 + 6,
|
||||
imgYRes * zoom / 1000 + 6, TRUE);
|
||||
-scrollboxWindow.GetScrollPos(SB_VERT), imgXRes * toolsModel.GetZoom() / 1000 + 6,
|
||||
imgYRes * toolsModel.GetZoom() / 1000 + 6, TRUE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -109,8 +109,8 @@ LRESULT CScrollboxWindow::OnVScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
}
|
||||
scrollboxWindow.SetScrollInfo(SB_VERT, &si);
|
||||
scrlClientWindow.MoveWindow(-scrollboxWindow.GetScrollPos(SB_HORZ),
|
||||
-scrollboxWindow.GetScrollPos(SB_VERT), imgXRes * zoom / 1000 + 6,
|
||||
imgYRes * zoom / 1000 + 6, TRUE);
|
||||
-scrollboxWindow.GetScrollPos(SB_VERT), imgXRes * toolsModel.GetZoom() / 1000 + 6,
|
||||
imgYRes * toolsModel.GetZoom() / 1000 + 6, TRUE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -118,8 +118,8 @@ LRESULT CSelectionWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL&
|
|||
{
|
||||
HDC hDC = GetDC();
|
||||
DefWindowProc(WM_PAINT, wParam, lParam);
|
||||
SelectionFrame(hDC, 1, 1, RECT_WIDTH(rectSel_dest) * zoom / 1000 + 5,
|
||||
RECT_HEIGHT(rectSel_dest) * zoom / 1000 + 5,
|
||||
SelectionFrame(hDC, 1, 1, RECT_WIDTH(rectSel_dest) * toolsModel.GetZoom() / 1000 + 5,
|
||||
RECT_HEIGHT(rectSel_dest) * toolsModel.GetZoom() / 1000 + 5,
|
||||
system_selection_color);
|
||||
ReleaseDC(hDC);
|
||||
}
|
||||
|
@ -178,17 +178,17 @@ LRESULT CSelectionWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
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;
|
||||
if (zoom < 1000)
|
||||
delta.x += frac.x * 1000 / toolsModel.GetZoom();
|
||||
delta.y += frac.y * 1000 / toolsModel.GetZoom();
|
||||
if (toolsModel.GetZoom() < 1000)
|
||||
{
|
||||
frac.x = 0;
|
||||
frac.y = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
frac.x -= (frac.x * 1000 / zoom) * zoom / 1000;
|
||||
frac.y -= (frac.y * 1000 / zoom) * zoom / 1000;
|
||||
frac.x -= (frac.x * 1000 / toolsModel.GetZoom()) * toolsModel.GetZoom() / 1000;
|
||||
frac.y -= (frac.y * 1000 / toolsModel.GetZoom()) * toolsModel.GetZoom() / 1000;
|
||||
}
|
||||
switch (action)
|
||||
{
|
||||
|
@ -248,22 +248,22 @@ LRESULT CSelectionWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
_stprintf(sizeStr, _T("%d x %d"), RECT_WIDTH(rectSel_dest), RECT_HEIGHT(rectSel_dest));
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) sizeStr);
|
||||
|
||||
if (activeTool == TOOL_TEXT)
|
||||
if (toolsModel.GetActiveTool() == TOOL_TEXT)
|
||||
{
|
||||
Text(hDrawingDC, rectSel_dest.left, rectSel_dest.top, rectSel_dest.right, rectSel_dest.bottom, fgColor, bgColor, textToolText, hfontTextFont, transpBg);
|
||||
Text(hDrawingDC, rectSel_dest.left, rectSel_dest.top, rectSel_dest.right, rectSel_dest.bottom, paletteModel.GetFgColor(), paletteModel.GetBgColor(), textToolText, hfontTextFont, toolsModel.IsBackgroundTransparent());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (action != ACTION_MOVE)
|
||||
StretchBlt(hDrawingDC, rectSel_dest.left, rectSel_dest.top, RECT_WIDTH(rectSel_dest), RECT_HEIGHT(rectSel_dest), hSelDC, 0, 0, GetDIBWidth(hSelBm), GetDIBHeight(hSelBm), SRCCOPY);
|
||||
else
|
||||
if (transpBg == 0)
|
||||
if (toolsModel.IsBackgroundTransparent() == 0)
|
||||
MaskBlt(hDrawingDC, rectSel_dest.left, rectSel_dest.top, RECT_WIDTH(rectSel_dest), RECT_HEIGHT(rectSel_dest),
|
||||
hSelDC, 0, 0, hSelMask, 0, 0, MAKEROP4(SRCCOPY, SRCAND));
|
||||
else
|
||||
{
|
||||
ColorKeyedMaskBlt(hDrawingDC, rectSel_dest.left, rectSel_dest.top, RECT_WIDTH(rectSel_dest), RECT_HEIGHT(rectSel_dest),
|
||||
hSelDC, 0, 0, hSelMask, 0, 0, MAKEROP4(SRCCOPY, SRCAND), bgColor);
|
||||
hSelDC, 0, 0, hSelMask, 0, 0, MAKEROP4(SRCCOPY, SRCAND), paletteModel.GetBgColor());
|
||||
}
|
||||
}
|
||||
imageArea.InvalidateRect(NULL, FALSE);
|
||||
|
@ -273,8 +273,8 @@ LRESULT CSelectionWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
}
|
||||
else
|
||||
{
|
||||
int w = RECT_WIDTH(rectSel_dest) * zoom / 1000 + 6;
|
||||
int h = RECT_HEIGHT(rectSel_dest) * zoom / 1000 + 6;
|
||||
int w = RECT_WIDTH(rectSel_dest) * toolsModel.GetZoom() / 1000 + 6;
|
||||
int h = RECT_HEIGHT(rectSel_dest) * toolsModel.GetZoom() / 1000 + 6;
|
||||
pos.x = GET_X_LPARAM(lParam);
|
||||
pos.y = GET_Y_LPARAM(lParam);
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) NULL);
|
||||
|
@ -293,7 +293,7 @@ LRESULT CSelectionWindow::OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, B
|
|||
ReleaseCapture();
|
||||
if (action != ACTION_MOVE)
|
||||
{
|
||||
if (activeTool == TOOL_TEXT)
|
||||
if (toolsModel.GetActiveTool() == TOOL_TEXT)
|
||||
{
|
||||
// FIXME: What to do?
|
||||
}
|
||||
|
|
|
@ -45,8 +45,8 @@ LRESULT CSizeboxWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
TCHAR sizeStr[100];
|
||||
short xRel;
|
||||
short yRel;
|
||||
xRel = (GET_X_LPARAM(lParam) - xOrig) * 1000 / zoom;
|
||||
yRel = (GET_Y_LPARAM(lParam) - yOrig) * 1000 / zoom;
|
||||
xRel = (GET_X_LPARAM(lParam) - xOrig) * 1000 / toolsModel.GetZoom();
|
||||
yRel = (GET_Y_LPARAM(lParam) - yOrig) * 1000 / toolsModel.GetZoom();
|
||||
if (m_hWnd == sizeboxLeftTop.m_hWnd)
|
||||
_stprintf(sizeStr, _T("%d x %d"), imgXRes - xRel, imgYRes - yRel);
|
||||
if (m_hWnd == sizeboxCenterTop.m_hWnd)
|
||||
|
@ -76,8 +76,8 @@ LRESULT CSizeboxWindow::OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
|
|||
short yRel;
|
||||
ReleaseCapture();
|
||||
resizing = FALSE;
|
||||
xRel = (GET_X_LPARAM(lParam) - xOrig) * 1000 / zoom;
|
||||
yRel = (GET_Y_LPARAM(lParam) - yOrig) * 1000 / zoom;
|
||||
xRel = (GET_X_LPARAM(lParam) - xOrig) * 1000 / toolsModel.GetZoom();
|
||||
yRel = (GET_Y_LPARAM(lParam) - yOrig) * 1000 / toolsModel.GetZoom();
|
||||
if (m_hWnd == sizeboxLeftTop)
|
||||
cropReversible(imgXRes - xRel, imgYRes - yRel, xRel, yRel);
|
||||
if (m_hWnd == sizeboxCenterTop.m_hWnd)
|
||||
|
|
|
@ -28,9 +28,9 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
|
||||
DefWindowProc(WM_PAINT, wParam, lParam);
|
||||
|
||||
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)
|
||||
DrawEdge(hdc, &rect1, BDR_SUNKENOUTER, (toolsModel.GetActiveTool() == TOOL_ZOOM) ? BF_RECT : BF_RECT | BF_MIDDLE);
|
||||
DrawEdge(hdc, &rect2, (toolsModel.GetActiveTool() >= TOOL_RECT) ? BDR_SUNKENOUTER : 0, BF_RECT | BF_MIDDLE);
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
case TOOL_RECTSEL:
|
||||
|
@ -38,7 +38,7 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
{
|
||||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
Rectangle(hdc, 2, transpBg * 31 + 2, 41, transpBg * 31 + 33);
|
||||
Rectangle(hdc, 2, toolsModel.IsBackgroundTransparent() * 31 + 2, 41, toolsModel.IsBackgroundTransparent() * 31 + 33);
|
||||
DeleteObject(SelectObject(hdc, oldPen));
|
||||
DrawIconEx(hdc, 1, 2, hNontranspIcon, 40, 30, 0, NULL, DI_NORMAL);
|
||||
DrawIconEx(hdc, 1, 33, hTranspIcon, 40, 30, 0, NULL, DI_NORMAL);
|
||||
|
@ -50,7 +50,7 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
if (rubberRadius == i + 2)
|
||||
if (toolsModel.GetRubberRadius() == i + 2)
|
||||
{
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
Rectangle(hdc, 14, i * 15 + 2, 29, i * 15 + 17);
|
||||
|
@ -68,19 +68,19 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
int i;
|
||||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
Rectangle(hdc, brushStyle % 3 * 13 + 2, brushStyle / 3 * 15 + 2, brushStyle % 3 * 13 + 15,
|
||||
brushStyle / 3 * 15 + 17);
|
||||
Rectangle(hdc, toolsModel.GetBrushStyle() % 3 * 13 + 2, toolsModel.GetBrushStyle() / 3 * 15 + 2, toolsModel.GetBrushStyle() % 3 * 13 + 15,
|
||||
toolsModel.GetBrushStyle() / 3 * 15 + 17);
|
||||
DeleteObject(SelectObject(hdc, oldPen));
|
||||
for(i = 0; i < 12; i++)
|
||||
Brush(hdc, i % 3 * 13 + 7, i / 3 * 15 + 8, i % 3 * 13 + 7, i / 3 * 15 + 8,
|
||||
GetSysColor((i == brushStyle) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), i);
|
||||
GetSysColor((i == toolsModel.GetBrushStyle()) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), i);
|
||||
break;
|
||||
}
|
||||
case TOOL_AIRBRUSH:
|
||||
{
|
||||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
switch (airBrushWidth)
|
||||
switch (toolsModel.GetAirBrushWidth())
|
||||
{
|
||||
case 5:
|
||||
Rectangle(hdc, 2, 2, 21, 31);
|
||||
|
@ -96,13 +96,13 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
break;
|
||||
}
|
||||
Airbrush(hdc, 10, 15,
|
||||
GetSysColor((airBrushWidth == 5) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 5);
|
||||
GetSysColor((toolsModel.GetAirBrushWidth() == 5) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 5);
|
||||
Airbrush(hdc, 30, 15,
|
||||
GetSysColor((airBrushWidth == 8) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 8);
|
||||
GetSysColor((toolsModel.GetAirBrushWidth() == 8) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 8);
|
||||
Airbrush(hdc, 8, 45,
|
||||
GetSysColor((airBrushWidth == 3) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 3);
|
||||
GetSysColor((toolsModel.GetAirBrushWidth() == 3) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 3);
|
||||
Airbrush(hdc, 27, 45,
|
||||
GetSysColor((airBrushWidth == 12) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 12);
|
||||
GetSysColor((toolsModel.GetAirBrushWidth() == 12) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 12);
|
||||
DeleteObject(SelectObject(hdc, oldPen));
|
||||
break;
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
|
||||
for(i = 0; i < 5; i++)
|
||||
{
|
||||
if (lineWidth == i + 1)
|
||||
if (toolsModel.GetLineWidth() == i + 1)
|
||||
{
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
Rectangle(hdc, 2, i * 12 + 2, 41, i * 12 + 14);
|
||||
|
@ -135,23 +135,23 @@ LRESULT CToolSettingsWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
HPEN oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
|
||||
for(i = 0; i < 3; i++)
|
||||
{
|
||||
if (shapeStyle == i)
|
||||
if (toolsModel.GetShapeStyle() == i)
|
||||
{
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
Rectangle(hdc, 2, i * 20 + 2, 41, i * 20 + 22);
|
||||
}
|
||||
}
|
||||
Rect(hdc, 5, 6, 37, 16,
|
||||
GetSysColor((shapeStyle == 0) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT),
|
||||
GetSysColor((toolsModel.GetShapeStyle() == 0) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT),
|
||||
GetSysColor(COLOR_APPWORKSPACE), 1, 0);
|
||||
Rect(hdc, 5, 26, 37, 36,
|
||||
GetSysColor((shapeStyle == 1) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT),
|
||||
GetSysColor((toolsModel.GetShapeStyle() == 1) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT),
|
||||
GetSysColor(COLOR_APPWORKSPACE), 1, 1);
|
||||
Rect(hdc, 5, 46, 37, 56, GetSysColor(COLOR_APPWORKSPACE), GetSysColor(COLOR_APPWORKSPACE),
|
||||
1, 1);
|
||||
for(i = 0; i < 5; i++)
|
||||
{
|
||||
if (lineWidth == i + 1)
|
||||
if (toolsModel.GetLineWidth() == i + 1)
|
||||
{
|
||||
SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
|
||||
Rectangle(hdc, 2, i * 12 + 72, 41, i * 12 + 84);
|
||||
|
@ -173,14 +173,14 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar
|
|||
{
|
||||
int x = GET_X_LPARAM(lParam);
|
||||
int y = GET_Y_LPARAM(lParam);
|
||||
switch (activeTool)
|
||||
switch (toolsModel.GetActiveTool())
|
||||
{
|
||||
case TOOL_FREESEL:
|
||||
case TOOL_RECTSEL:
|
||||
case TOOL_TEXT:
|
||||
if ((y > 1) && (y < 64))
|
||||
{
|
||||
transpBg = (y - 2) / 31;
|
||||
toolsModel.SetBackgroundTransparent((y - 2) / 31);
|
||||
InvalidateRect(NULL, TRUE);
|
||||
|
||||
ForceRefreshSelectionContents();
|
||||
|
@ -189,7 +189,7 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar
|
|||
case TOOL_RUBBER:
|
||||
if ((y > 1) && (y < 62))
|
||||
{
|
||||
rubberRadius = (y - 2) / 15 + 2;
|
||||
toolsModel.SetRubberRadius((y - 2) / 15 + 2);
|
||||
InvalidateRect(NULL, TRUE);
|
||||
}
|
||||
break;
|
||||
|
@ -197,7 +197,7 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar
|
|||
if ((x > 1) && (x < 40) && (y > 1)
|
||||
&& (y < 62))
|
||||
{
|
||||
brushStyle = (y - 2) / 15 * 3 + (x - 2) / 13;
|
||||
toolsModel.SetBrushStyle((y - 2) / 15 * 3 + (x - 2) / 13);
|
||||
InvalidateRect(NULL, TRUE);
|
||||
}
|
||||
break;
|
||||
|
@ -207,16 +207,16 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar
|
|||
if (y < 30)
|
||||
{
|
||||
if (x < 20)
|
||||
airBrushWidth = 5;
|
||||
toolsModel.SetAirBrushWidth(5);
|
||||
else
|
||||
airBrushWidth = 8;
|
||||
toolsModel.SetAirBrushWidth(8);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (x < 15)
|
||||
airBrushWidth = 3;
|
||||
toolsModel.SetAirBrushWidth(3);
|
||||
else
|
||||
airBrushWidth = 12;
|
||||
toolsModel.SetAirBrushWidth(12);
|
||||
}
|
||||
InvalidateRect(NULL, TRUE);
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar
|
|||
case TOOL_BEZIER:
|
||||
if (y <= 62)
|
||||
{
|
||||
lineWidth = (y - 2) / 12 + 1;
|
||||
toolsModel.SetLineWidth((y - 2) / 12 + 1);
|
||||
InvalidateRect(NULL, TRUE);
|
||||
}
|
||||
break;
|
||||
|
@ -235,12 +235,12 @@ LRESULT CToolSettingsWindow::OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lPar
|
|||
case TOOL_RRECT:
|
||||
if (y <= 60)
|
||||
{
|
||||
shapeStyle = (y - 2) / 20;
|
||||
toolsModel.SetShapeStyle((y - 2) / 20);
|
||||
InvalidateRect(NULL, TRUE);
|
||||
}
|
||||
if ((y >= 70) && (y <= 132))
|
||||
{
|
||||
lineWidth = (y - 72) / 12 + 1;
|
||||
toolsModel.SetLineWidth((y - 72) / 12 + 1);
|
||||
InvalidateRect(NULL, TRUE);
|
||||
}
|
||||
break;
|
||||
|
|
105
reactos/base/applications/mspaint_new/toolsmodel.cpp
Normal file
105
reactos/base/applications/mspaint_new/toolsmodel.cpp
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* PROJECT: PAINT for ReactOS
|
||||
* LICENSE: LGPL
|
||||
* FILE: base/applications/mspaint_new/toolsmodel.cpp
|
||||
* PURPOSE: Keep track of tool parameters, notify listeners
|
||||
* PROGRAMMERS: Benedikt Freisen
|
||||
*/
|
||||
|
||||
/* INCLUDES *********************************************************/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
/* FUNCTIONS ********************************************************/
|
||||
|
||||
ToolsModel::ToolsModel()
|
||||
{
|
||||
m_lineWidth = 1;
|
||||
m_shapeStyle = 0;
|
||||
m_brushStyle = 0;
|
||||
m_activeTool = TOOL_PEN;
|
||||
m_airBrushWidth = 5;
|
||||
m_rubberRadius = 4;
|
||||
m_transpBg = FALSE;
|
||||
m_zoom = 1000;
|
||||
}
|
||||
|
||||
int ToolsModel::GetLineWidth()
|
||||
{
|
||||
return m_lineWidth;
|
||||
}
|
||||
|
||||
void ToolsModel::SetLineWidth(int nLineWidth)
|
||||
{
|
||||
m_lineWidth = nLineWidth;
|
||||
}
|
||||
|
||||
int ToolsModel::GetShapeStyle()
|
||||
{
|
||||
return m_shapeStyle;
|
||||
}
|
||||
|
||||
void ToolsModel::SetShapeStyle(int nShapeStyle)
|
||||
{
|
||||
m_shapeStyle = nShapeStyle;
|
||||
}
|
||||
|
||||
int ToolsModel::GetBrushStyle()
|
||||
{
|
||||
return m_brushStyle;
|
||||
}
|
||||
|
||||
void ToolsModel::SetBrushStyle(int nBrushStyle)
|
||||
{
|
||||
m_brushStyle = nBrushStyle;
|
||||
}
|
||||
|
||||
int ToolsModel::GetActiveTool()
|
||||
{
|
||||
return m_activeTool;
|
||||
}
|
||||
|
||||
void ToolsModel::SetActiveTool(int nActiveTool)
|
||||
{
|
||||
m_activeTool = nActiveTool;
|
||||
}
|
||||
|
||||
int ToolsModel::GetAirBrushWidth()
|
||||
{
|
||||
return m_airBrushWidth;
|
||||
}
|
||||
|
||||
void ToolsModel::SetAirBrushWidth(int nAirBrushWidth)
|
||||
{
|
||||
m_airBrushWidth = nAirBrushWidth;
|
||||
}
|
||||
|
||||
int ToolsModel::GetRubberRadius()
|
||||
{
|
||||
return m_rubberRadius;
|
||||
}
|
||||
|
||||
void ToolsModel::SetRubberRadius(int nRubberRadius)
|
||||
{
|
||||
m_rubberRadius = nRubberRadius;
|
||||
}
|
||||
|
||||
BOOL ToolsModel::IsBackgroundTransparent()
|
||||
{
|
||||
return m_transpBg;
|
||||
}
|
||||
|
||||
void ToolsModel::SetBackgroundTransparent(BOOL bTransparent)
|
||||
{
|
||||
m_transpBg = bTransparent;
|
||||
}
|
||||
|
||||
int ToolsModel::GetZoom()
|
||||
{
|
||||
return m_zoom;
|
||||
}
|
||||
|
||||
void ToolsModel::SetZoom(int nZoom)
|
||||
{
|
||||
m_zoom = nZoom;
|
||||
}
|
40
reactos/base/applications/mspaint_new/toolsmodel.h
Normal file
40
reactos/base/applications/mspaint_new/toolsmodel.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* PROJECT: PAINT for ReactOS
|
||||
* LICENSE: LGPL
|
||||
* FILE: base/applications/mspaint_new/toolsmodel.h
|
||||
* PURPOSE: Keep track of tool parameters, notify listeners
|
||||
* PROGRAMMERS: Benedikt Freisen
|
||||
*/
|
||||
|
||||
/* CLASSES **********************************************************/
|
||||
|
||||
class ToolsModel
|
||||
{
|
||||
private:
|
||||
int m_lineWidth;
|
||||
int m_shapeStyle;
|
||||
int m_brushStyle;
|
||||
int m_activeTool;
|
||||
int m_airBrushWidth;
|
||||
int m_rubberRadius;
|
||||
BOOL m_transpBg;
|
||||
int m_zoom;
|
||||
public:
|
||||
ToolsModel();
|
||||
int GetLineWidth();
|
||||
void SetLineWidth(int nLineWidth);
|
||||
int GetShapeStyle();
|
||||
void SetShapeStyle(int nShapeStyle);
|
||||
int GetBrushStyle();
|
||||
void SetBrushStyle(int nBrushStyle);
|
||||
int GetActiveTool();
|
||||
void SetActiveTool(int nActiveTool);
|
||||
int GetAirBrushWidth();
|
||||
void SetAirBrushWidth(int nAirBrushWidth);
|
||||
int GetRubberRadius();
|
||||
void SetRubberRadius(int nRubberRadius);
|
||||
BOOL IsBackgroundTransparent();
|
||||
void SetBackgroundTransparent(BOOL bTransparent);
|
||||
int GetZoom();
|
||||
void SetZoom(int nZoom);
|
||||
};
|
|
@ -19,7 +19,7 @@
|
|||
void CMainWindow::selectTool(int tool)
|
||||
{
|
||||
selectionWindow.ShowWindow(SW_HIDE);
|
||||
activeTool = tool;
|
||||
toolsModel.SetActiveTool(tool);
|
||||
pointSP = 0; // resets the point-buffer of the polygon and bezier functions
|
||||
toolSettingsWindow.Invalidate(TRUE);
|
||||
::ShowWindow(hTrackbarZoom, (tool == TOOL_ZOOM) ? SW_SHOW : SW_HIDE);
|
||||
|
@ -30,7 +30,7 @@ void
|
|||
updateCanvasAndScrollbars()
|
||||
{
|
||||
selectionWindow.ShowWindow(SW_HIDE);
|
||||
imageArea.MoveWindow(3, 3, imgXRes * zoom / 1000, imgYRes * zoom / 1000, FALSE);
|
||||
imageArea.MoveWindow(3, 3, imgXRes * toolsModel.GetZoom() / 1000, imgYRes * toolsModel.GetZoom() / 1000, FALSE);
|
||||
scrollboxWindow.Invalidate(TRUE);
|
||||
imageArea.Invalidate(FALSE);
|
||||
|
||||
|
@ -49,15 +49,15 @@ zoomTo(int newZoom, int mouseX, int mouseY)
|
|||
int x, y, w, h;
|
||||
scrollboxWindow.GetClientRect(&clientRectScrollbox);
|
||||
imageArea.GetClientRect(&clientRectImageArea);
|
||||
w = clientRectImageArea.right * clientRectScrollbox.right / (clientRectImageArea.right * newZoom / zoom);
|
||||
h = clientRectImageArea.bottom * clientRectScrollbox.bottom / (clientRectImageArea.bottom * newZoom / zoom);
|
||||
x = max(0, min(clientRectImageArea.right - w, mouseX - w / 2)) * newZoom / zoom;
|
||||
y = max(0, min(clientRectImageArea.bottom - h, mouseY - h / 2)) * newZoom / zoom;
|
||||
w = clientRectImageArea.right * clientRectScrollbox.right / (clientRectImageArea.right * newZoom / toolsModel.GetZoom());
|
||||
h = clientRectImageArea.bottom * clientRectScrollbox.bottom / (clientRectImageArea.bottom * newZoom / toolsModel.GetZoom());
|
||||
x = max(0, min(clientRectImageArea.right - w, mouseX - w / 2)) * newZoom / toolsModel.GetZoom();
|
||||
y = max(0, min(clientRectImageArea.bottom - h, mouseY - h / 2)) * newZoom / toolsModel.GetZoom();
|
||||
|
||||
zoom = newZoom;
|
||||
toolsModel.SetZoom(newZoom);
|
||||
|
||||
selectionWindow.ShowWindow(SW_HIDE);
|
||||
imageArea.MoveWindow(3, 3, imgXRes * zoom / 1000, imgYRes * zoom / 1000, FALSE);
|
||||
imageArea.MoveWindow(3, 3, imgXRes * toolsModel.GetZoom() / 1000, imgYRes * toolsModel.GetZoom() / 1000, FALSE);
|
||||
scrollboxWindow.Invalidate(TRUE);
|
||||
imageArea.Invalidate(FALSE);
|
||||
|
||||
|
@ -239,7 +239,7 @@ LRESULT CMainWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHan
|
|||
LRESULT CMainWindow::OnInitMenuPopup(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
HMENU menu = GetMenu();
|
||||
BOOL trueSelection = (selectionWindow.IsWindowVisible() && ((activeTool == TOOL_FREESEL) || (activeTool == TOOL_RECTSEL)));
|
||||
BOOL trueSelection = (selectionWindow.IsWindowVisible() && ((toolsModel.GetActiveTool() == TOOL_FREESEL) || (toolsModel.GetActiveTool() == TOOL_RECTSEL)));
|
||||
switch (lParam)
|
||||
{
|
||||
case 0: /* File menu */
|
||||
|
@ -264,27 +264,27 @@ LRESULT CMainWindow::OnInitMenuPopup(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
|
|||
CheckMenuItem(menu, IDM_VIEWCOLORPALETTE, CHECKED_IF(paletteWindow.IsWindowVisible()));
|
||||
CheckMenuItem(menu, IDM_VIEWSTATUSBAR, CHECKED_IF(::IsWindowVisible(hStatusBar)));
|
||||
CheckMenuItem(menu, IDM_FORMATICONBAR, CHECKED_IF(textEditWindow.IsWindowVisible()));
|
||||
EnableMenuItem(menu, IDM_FORMATICONBAR, ENABLED_IF(activeTool == TOOL_TEXT));
|
||||
EnableMenuItem(menu, IDM_FORMATICONBAR, ENABLED_IF(toolsModel.GetActiveTool() == TOOL_TEXT));
|
||||
|
||||
CheckMenuItem(menu, IDM_VIEWSHOWGRID, CHECKED_IF(showGrid));
|
||||
CheckMenuItem(menu, IDM_VIEWSHOWMINIATURE, CHECKED_IF(showMiniature));
|
||||
break;
|
||||
case 3: /* Image menu */
|
||||
EnableMenuItem(menu, IDM_IMAGECROP, ENABLED_IF(selectionWindow.IsWindowVisible()));
|
||||
CheckMenuItem(menu, IDM_IMAGEDRAWOPAQUE, CHECKED_IF(transpBg == 0));
|
||||
CheckMenuItem(menu, IDM_IMAGEDRAWOPAQUE, CHECKED_IF(!toolsModel.IsBackgroundTransparent()));
|
||||
break;
|
||||
}
|
||||
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM125, CHECKED_IF(zoom == 125));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM25, CHECKED_IF(zoom == 250));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM50, CHECKED_IF(zoom == 500));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM100, CHECKED_IF(zoom == 1000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM200, CHECKED_IF(zoom == 2000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM400, CHECKED_IF(zoom == 4000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM800, CHECKED_IF(zoom == 8000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM125, CHECKED_IF(toolsModel.GetZoom() == 125));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM25, CHECKED_IF(toolsModel.GetZoom() == 250));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM50, CHECKED_IF(toolsModel.GetZoom() == 500));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM100, CHECKED_IF(toolsModel.GetZoom() == 1000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM200, CHECKED_IF(toolsModel.GetZoom() == 2000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM400, CHECKED_IF(toolsModel.GetZoom() == 4000));
|
||||
CheckMenuItem(menu, IDM_VIEWZOOM800, CHECKED_IF(toolsModel.GetZoom() == 8000));
|
||||
|
||||
CheckMenuItem(menu, IDM_COLORSMODERNPALETTE, CHECKED_IF(selectedPalette == 1));
|
||||
CheckMenuItem(menu, IDM_COLORSOLDPALETTE, CHECKED_IF(selectedPalette == 2));
|
||||
CheckMenuItem(menu, IDM_COLORSMODERNPALETTE, CHECKED_IF(paletteModel.SelectedPalette() == 1));
|
||||
CheckMenuItem(menu, IDM_COLORSOLDPALETTE, CHECKED_IF(paletteModel.SelectedPalette() == 2));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -325,11 +325,11 @@ LRESULT CMainWindow::OnKeyDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
if (!imageArea.drawing)
|
||||
{
|
||||
/* Deselect */
|
||||
if ((activeTool == TOOL_RECTSEL) || (activeTool == TOOL_FREESEL))
|
||||
if ((toolsModel.GetActiveTool() == TOOL_RECTSEL) || (toolsModel.GetActiveTool() == TOOL_FREESEL))
|
||||
{
|
||||
startPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
|
||||
whilePaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
|
||||
endPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
|
||||
startPaintingL(hDrawingDC, 0, 0, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
whilePaintingL(hDrawingDC, 0, 0, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
endPaintingL(hDrawingDC, 0, 0, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
selectionWindow.ShowWindow(SW_HIDE);
|
||||
}
|
||||
}
|
||||
|
@ -459,13 +459,13 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
/* remove selection window and already painted content using undo(),
|
||||
paint Rect for rectangular selections and Poly for freeform selections */
|
||||
undo();
|
||||
if (activeTool == TOOL_RECTSEL)
|
||||
if (toolsModel.GetActiveTool() == TOOL_RECTSEL)
|
||||
{
|
||||
newReversible();
|
||||
Rect(hDrawingDC, rectSel_dest.left, rectSel_dest.top, rectSel_dest.right,
|
||||
rectSel_dest.bottom, bgColor, bgColor, 0, TRUE);
|
||||
rectSel_dest.bottom, paletteModel.GetBgColor(), paletteModel.GetBgColor(), 0, TRUE);
|
||||
}
|
||||
if (activeTool == TOOL_FREESEL)
|
||||
if (toolsModel.GetActiveTool() == TOOL_FREESEL)
|
||||
{
|
||||
newReversible();
|
||||
Poly(hDrawingDC, ptStack, ptSP + 1, 0, 0, 2, 0, FALSE, TRUE);
|
||||
|
@ -477,9 +477,9 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
HWND hToolbar = FindWindowEx(toolBoxContainer.m_hWnd, NULL, TOOLBARCLASSNAME, NULL);
|
||||
SendMessage(hToolbar, TB_CHECKBUTTON, ID_RECTSEL, MAKELONG(TRUE, 0));
|
||||
SendMessage(WM_COMMAND, ID_RECTSEL, 0);
|
||||
startPaintingL(hDrawingDC, 0, 0, fgColor, bgColor);
|
||||
whilePaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);
|
||||
endPaintingL(hDrawingDC, imgXRes, imgYRes, fgColor, bgColor);
|
||||
startPaintingL(hDrawingDC, 0, 0, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
whilePaintingL(hDrawingDC, imgXRes, imgYRes, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
endPaintingL(hDrawingDC, imgXRes, imgYRes, paletteModel.GetFgColor(), paletteModel.GetBgColor());
|
||||
break;
|
||||
}
|
||||
case IDM_EDITCOPYTO:
|
||||
|
@ -501,18 +501,16 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
case IDM_COLORSEDITPALETTE:
|
||||
if (ChooseColor(&choosecolor))
|
||||
{
|
||||
fgColor = choosecolor.rgbResult;
|
||||
paletteModel.SetFgColor(choosecolor.rgbResult);
|
||||
paletteWindow.Invalidate(FALSE);
|
||||
}
|
||||
break;
|
||||
case IDM_COLORSMODERNPALETTE:
|
||||
selectedPalette = 1;
|
||||
CopyMemory(palColors, modernPalColors, sizeof(palColors));
|
||||
paletteModel.SelectPalette(1);
|
||||
paletteWindow.Invalidate(FALSE);
|
||||
break;
|
||||
case IDM_COLORSOLDPALETTE:
|
||||
selectedPalette = 2;
|
||||
CopyMemory(palColors, oldPalColors, sizeof(palColors));
|
||||
paletteModel.SelectPalette(2);
|
||||
paletteWindow.Invalidate(FALSE);
|
||||
break;
|
||||
case IDM_IMAGEINVERTCOLORS:
|
||||
|
@ -526,7 +524,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
}
|
||||
case IDM_IMAGEDELETEIMAGE:
|
||||
newReversible();
|
||||
Rect(hDrawingDC, 0, 0, imgXRes, imgYRes, bgColor, bgColor, 0, TRUE);
|
||||
Rect(hDrawingDC, 0, 0, imgXRes, imgYRes, paletteModel.GetBgColor(), paletteModel.GetBgColor(), 0, TRUE);
|
||||
imageArea.Invalidate(FALSE);
|
||||
break;
|
||||
case IDM_IMAGEROTATEMIRROR:
|
||||
|
@ -616,7 +614,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
|||
break;
|
||||
}
|
||||
case IDM_IMAGEDRAWOPAQUE:
|
||||
transpBg = 1 - transpBg;
|
||||
toolsModel.SetBackgroundTransparent(!toolsModel.IsBackgroundTransparent());
|
||||
toolSettingsWindow.Invalidate(TRUE);
|
||||
break;
|
||||
case IDM_IMAGECROP:
|
||||
|
|
Loading…
Reference in a new issue