From 4d4724a29932be65f8fec67886f75b2b2e3e0439 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 25 Oct 2008 11:06:26 +0900 Subject: [PATCH] [12/19] paint: Add [Stretch and Skew] dialog --- programs/paint/bitmap.c | 41 +++++++++++++++++++++++++++ programs/paint/canvas.c | 30 ++++++++++++++++++++ programs/paint/hslant.ico | Bin 0 -> 766 bytes programs/paint/hstretch.ico | Bin 0 -> 766 bytes programs/paint/main.h | 2 + programs/paint/paint.c | 65 ++++++++++++++++++++++++++++++++++++++++++- programs/paint/rsrc.rc | 8 +++++ programs/paint/vslant.ico | Bin 0 -> 766 bytes programs/paint/vstretch.ico | Bin 0 -> 766 bytes 9 files changed, 145 insertions(+), 1 deletions(-) create mode 100644 programs/paint/hslant.ico create mode 100644 programs/paint/hstretch.ico create mode 100644 programs/paint/vslant.ico create mode 100644 programs/paint/vstretch.ico diff --git a/programs/paint/bitmap.c b/programs/paint/bitmap.c index bce020e..a276195 100644 --- a/programs/paint/bitmap.c +++ b/programs/paint/bitmap.c @@ -83,6 +83,47 @@ HBITMAP BM_CreateResized(HWND hWnd, SIZE sizNew, HBITMAP hbm, SIZE siz) return hbmNew; } +HBITMAP BM_CreateStretched(HWND hWnd, SIZE sizNew, HBITMAP hbm, SIZE siz) +{ + DWORD dwError; + HDC hDC, hdcMem1, hdcMem2; + HBITMAP hbmNew, hbmOld1, hbmOld2; + + hbmNew = BM_Create(sizNew); + if (hbmNew != NULL) + { + dwError = 0; + hDC = GetDC(hWnd); + hdcMem1 = CreateCompatibleDC(hDC); + if (hdcMem1 != NULL) + { + hbmOld1 = SelectObject(hdcMem1, hbmNew); + + hdcMem2 = CreateCompatibleDC(hDC); + if (hdcMem2 != NULL) + { + hbmOld2 = SelectObject(hdcMem2, hbm); + SetStretchBltMode(hdcMem1, COLORONCOLOR); + StretchBlt(hdcMem1, 0, 0, sizNew.cx, sizNew.cy, + hdcMem2, 0, 0, siz.cx, siz.cy, SRCCOPY); + SelectObject(hdcMem2, hbmOld2); + DeleteDC(hdcMem2); + } + else + dwError = GetLastError(); + SelectObject(hdcMem1, hbmOld1); + + DeleteDC(hdcMem1); + } + else + dwError = GetLastError(); + ReleaseDC(hWnd, hDC); + SetLastError(dwError); + } + + return hbmNew; +} + HBITMAP BM_Copy(HBITMAP hbm) { return (HBITMAP)CopyImage(hbm, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); diff --git a/programs/paint/canvas.c b/programs/paint/canvas.c index c6aaade..8ac3b2c 100644 --- a/programs/paint/canvas.c +++ b/programs/paint/canvas.c @@ -831,6 +831,7 @@ VOID Canvas_OnButtonDown(HWND hWnd, INT x, INT y, BOOL fRight) CanvasToImage(&pt); Globals.pt0 = Globals.pt1 = pt; break; + default: break; } @@ -1368,6 +1369,35 @@ VOID Canvas_Resize(HWND hWnd, SIZE sizNew) ShowLastError(); } +VOID Canvas_Stretch(HWND hWnd, SIZE sizNew) +{ + HBITMAP hbmNew = BM_CreateStretched(hWnd, sizNew, + Globals.hbmImage, Globals.sizImage); + if (hbmNew != NULL) + { + if (Globals.hbmImage != NULL) + DeleteObject(Globals.hbmImage); + Globals.hbmImage = hbmNew; + Globals.sizImage = sizNew; + + if (Globals.hbmBuffer != NULL) + DeleteObject(Globals.hbmBuffer); + Globals.hbmBuffer = BM_Copy(Globals.hbmImage); + if (Globals.hbmZoomBuffer != NULL) + DeleteObject(Globals.hbmZoomBuffer); + sizNew.cx *= Globals.nZoom; + sizNew.cy *= Globals.nZoom; + Globals.hbmZoomBuffer = BM_Create(sizNew); + Globals.fModified = TRUE; + Globals.xScrollPos = Globals.yScrollPos = 0; + PostMessage(hWnd, WM_SIZE, 0, 0); + InvalidateRect(hWnd, NULL, TRUE); + UpdateWindow(hWnd); + } + else + ShowLastError(); +} + VOID Canvas_OnButtonDblClk(HWND hWnd, INT x, INT y, BOOL fRight) { HDC hDC, hMemDC; diff --git a/programs/paint/hslant.ico b/programs/paint/hslant.ico new file mode 100644 index 0000000000000000000000000000000000000000..0b191ecc29417afebe1100a8162d575bf6f92af0 GIT binary patch literal 766 zcmdr~yAHxI47>tT)d?n6I`S9cle)pyjEt=P8uBTOjEoGW=A6U`RSfOQrS|!8wp1lR z!Bf{8`W5aAU<+VRt7!+C))k(;-|%d*<9#A}hBS{50vi%Ph-gIP(UQ8EIGq!Go-4UT z@w7c{Ohx`oa7<|IH|KDb#21_CQjiIij5O^KJ1Vv^2+S+eyG$ jZYbq}CGWM6o=;_%Ah2DLuP+hT%i#K!^G;cF(fSwO+5YYf literal 0 HcmV?d00001 diff --git a/programs/paint/hstretch.ico b/programs/paint/hstretch.ico new file mode 100644 index 0000000000000000000000000000000000000000..62e2810aaddbb97bb49fc9a842e84a6cfcfcc418 GIT binary patch literal 766 zcmd^6F%rTs3{yFlZcNM>`9=C9Hb%0wTf6o($X z;s-q8E;!{TNXPrIkqYFO`@#{xm-m1pfUouOf^(eJ`m}oUy8Vgry5xW8{SAtNz9oVd sG=RS4R{OG>Vv(^e^41iI{UwZOCZLA&*y!-o>c?}`FSs=r!2~qwFS+5~Q~&?~ literal 0 HcmV?d00001 diff --git a/programs/paint/vstretch.ico b/programs/paint/vstretch.ico new file mode 100644 index 0000000000000000000000000000000000000000..e08e0b6f233d5126be3f46d87fa3ecaa5ac3266d GIT binary patch literal 766 zcmdT>F%AMT4D%r*?lvaojy!{3u~uSXyfwe+##h)F8H?TOhD65zV!^G`I%!%Z1qP0k z_Ox5vH^2eFkxb-?l)r(ob!31OIroK@Ta;3`Dp1=*t=f?sa>)dY=LJ15@=(L`2YLeB zeKtEinK^A{vpXO2|4hevV!a6cK&+2n;QH~6zAothnX#*H_@MtrUdVxz{)Ea=uI^CY G>N_vDky)ew literal 0 HcmV?d00001 -- 1.6.0.2