From c5b4c13aedfaaeaa8ae34eb8b7bebf53b32796aa Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 25 Oct 2008 11:04:01 +0900 Subject: [PATCH] [9/19] paint: Add TOOL_SPOIT --- programs/paint/canvas.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ programs/paint/main.c | 14 ++++++++ programs/paint/main.h | 2 + programs/paint/rsrc.rc | 2 + programs/paint/spoit.cur | Bin 0 -> 326 bytes 5 files changed, 101 insertions(+), 0 deletions(-) create mode 100644 programs/paint/spoit.cur diff --git a/programs/paint/canvas.c b/programs/paint/canvas.c index 2936be8..d7a3d84 100644 --- a/programs/paint/canvas.c +++ b/programs/paint/canvas.c @@ -611,6 +611,28 @@ VOID Canvas_OnButtonDown(HWND hWnd, INT x, INT y, BOOL fRight) Globals.pt0 = pt; break; + case TOOL_SPOIT: + SetCursor(Globals.hcurSpoit); + Globals.mode = MODE_CANVAS; + SetCapture(hWnd); + CanvasToImage(&pt); + hDC = GetDC(hWnd); + if (hDC != NULL) + { + hMemDC = CreateCompatibleDC(hDC); + if (hMemDC != NULL) + { + hbmOld = SelectObject(hMemDC, Globals.hbmImage); + Globals.rgbSpoit = GetPixel(hMemDC, pt.x, pt.y); + SelectObject(hMemDC, hbmOld); + DeleteDC(hMemDC); + } + ReleaseDC(hWnd, hDC); + } + InvalidateRect(Globals.hToolBox, NULL, FALSE); + UpdateWindow(Globals.hToolBox); + break; + case TOOL_POLYGON: SetCursor(Globals.hcurCross2); Globals.mode = MODE_CANVAS; @@ -864,6 +886,28 @@ VOID Canvas_OnMouseMove(HWND hWnd, INT x, INT y, BOOL fLeftDown, BOOL fRightDown UpdateWindow(hWnd); break; + case TOOL_SPOIT: + SetCursor(Globals.hcurSpoit); + CanvasToImage(&pt); + ShowPos(pt); + ShowNoSize(); + hDC = GetDC(hWnd); + if (hDC != NULL) + { + hMemDC = CreateCompatibleDC(hDC); + if (hMemDC != NULL) + { + HGDIOBJ hbmOld = SelectObject(hMemDC, Globals.hbmImage); + Globals.rgbSpoit = GetPixel(hMemDC, pt.x, pt.y); + SelectObject(hMemDC, hbmOld); + DeleteDC(hMemDC); + } + ReleaseDC(hWnd, hDC); + } + InvalidateRect(Globals.hToolBox, NULL, FALSE); + UpdateWindow(Globals.hToolBox); + break; + case TOOL_PENCIL: SetCursor(Globals.hcurPencil); CanvasToImage(&pt); @@ -945,6 +989,26 @@ VOID Canvas_OnMouseMove(HWND hWnd, INT x, INT y, BOOL fLeftDown, BOOL fRightDown UpdateWindow(hWnd); break; + case TOOL_SPOIT: + SetCursor(Globals.hcurSpoit); + CanvasToImage(&pt); + hDC = GetDC(hWnd); + if (hDC != NULL) + { + hMemDC = CreateCompatibleDC(hDC); + if (hMemDC != NULL) + { + HGDIOBJ hbmOld = SelectObject(hMemDC, Globals.hbmImage); + Globals.rgbSpoit = GetPixel(hMemDC, pt.x, pt.y); + SelectObject(hMemDC, hbmOld); + DeleteDC(hMemDC); + } + ReleaseDC(hWnd, hDC); + } + InvalidateRect(Globals.hToolBox, NULL, FALSE); + UpdateWindow(Globals.hToolBox); + break; + case TOOL_PENCIL: SetCursor(Globals.hcurPencil); CanvasToImage(&pt); @@ -1046,6 +1110,13 @@ VOID Canvas_OnMouseMove(HWND hWnd, INT x, INT y, BOOL fLeftDown, BOOL fRightDown ShowNoSize(); break; + case TOOL_SPOIT: + SetCursor(Globals.hcurSpoit); + CanvasToImage(&pt); + ShowPos(pt); + ShowNoSize(); + break; + case TOOL_PENCIL: SetCursor(Globals.hcurPencil); CanvasToImage(&pt); @@ -1431,6 +1502,18 @@ VOID Canvas_OnButtonUp(HWND hWnd, INT x, INT y, BOOL fRight) SetRectEmpty((RECT*)&Globals.pt0); break; + case TOOL_SPOIT: + Globals.iToolSelect = Globals.iToolPrev; + if (fRight) + Globals.rgbBack = Globals.rgbSpoit; + else + Globals.rgbFore = Globals.rgbSpoit; + InvalidateRect(Globals.hToolBox, NULL, TRUE); + UpdateWindow(Globals.hToolBox); + InvalidateRect(Globals.hColorBox, NULL, TRUE); + UpdateWindow(Globals.hColorBox); + break; + case TOOL_LINE: CanvasToImage(&pt); PrepareForUndo(); diff --git a/programs/paint/main.c b/programs/paint/main.c index 4f58dc9..3ab5c08 100644 --- a/programs/paint/main.c +++ b/programs/paint/main.c @@ -290,6 +290,7 @@ static VOID PAINT_InitData(VOID) Globals.hcurFDiagonal = LoadCursor(Globals.hInstance, MAKEINTRESOURCE(4)); Globals.hcurPencil = LoadCursor(Globals.hInstance, MAKEINTRESOURCE(5)); Globals.hcurFill = LoadCursor(Globals.hInstance, MAKEINTRESOURCE(6)); + Globals.hcurSpoit = LoadCursor(Globals.hInstance, MAKEINTRESOURCE(7)); Globals.hcurZoom = LoadCursor(Globals.hInstance, MAKEINTRESOURCE(9)); Globals.hcurCross2 = LoadCursor(Globals.hInstance, MAKEINTRESOURCE(12)); @@ -643,6 +644,15 @@ VOID ToolBox_OnPaint(HWND hWnd, HDC hDC) } break; + case TOOL_SPOIT: + if (Globals.rgbSpoit != CLR_INVALID) + { + HBRUSH hbr = CreateSolidBrush(Globals.rgbSpoit); + FillRect(hDC, &rc, hbr); + DeleteObject(hbr); + } + break; + case TOOL_BOX: case TOOL_POLYGON: case TOOL_ROUNDRECT: @@ -701,6 +711,9 @@ void ToolBox_OnLButton(HWND hWnd, int x, int y, BOOL fDown) switch (i) { case TOOL_SPOIT: + Globals.rgbSpoit = CLR_INVALID; + break; + case TOOL_POLYSELECT: case TOOL_BOXSELECT: case TOOL_TEXT: @@ -948,6 +961,7 @@ VOID PAINT_OnDestroy(HWND hWnd) DestroyCursor(Globals.hcurVertical); DestroyCursor(Globals.hcurPencil); DestroyCursor(Globals.hcurFill); + DestroyCursor(Globals.hcurSpoit); DestroyCursor(Globals.hcurZoom); DestroyCursor(Globals.hcurCross2); KillTimer(Globals.hCanvasWnd, Globals.idTimer); diff --git a/programs/paint/main.h b/programs/paint/main.h index 59afb8f..9f7a1bb 100644 --- a/programs/paint/main.h +++ b/programs/paint/main.h @@ -101,10 +101,12 @@ typedef struct HCURSOR hcurVertical; HCURSOR hcurPencil; HCURSOR hcurFill; + HCURSOR hcurSpoit; HCURSOR hcurZoom; HCURSOR hcurCross2; UINT idTimer; + COLORREF rgbSpoit; INT nZoom; BOOL fShowGrid; diff --git a/programs/paint/rsrc.rc b/programs/paint/rsrc.rc index b819049..13269d9 100644 --- a/programs/paint/rsrc.rc +++ b/programs/paint/rsrc.rc @@ -82,6 +82,8 @@ IDB_FILL BITMAP "fill.bmp" 5 CURSOR "pencil.cur" /* @makedep: flood.cur */ 6 CURSOR "flood.cur" +/* @makedep: spoit.cur */ +7 CURSOR "spoit.cur" /* @makedep: zoom.cur */ 9 CURSOR "zoom.cur" /* @makedep: cross2.cur */ diff --git a/programs/paint/spoit.cur b/programs/paint/spoit.cur new file mode 100644 index 0000000000000000000000000000000000000000..1984742640dc7dfa656880b2f3475e98d31b61d0 GIT binary patch literal 326 zcmaLRF%AJi6o>I|R)j=v8^uPY!Vw&S1Gs}5ScyXC8V;aR(K&|11(b@7=gX3)?3?`N z&CGw28OTT!1$4=oCg=krdBjY~QP;P9HorL{ew%-*mBCI&owU@rgnSOY1GKM@ZG9}W t`%v0=VWFW0YA*lKTzlh=T1qN)UPs&}5f6i>D#Mpyg