Windows2000/private/windows/shell/accesory/ole2pbsh/airbrudp.c
2020-09-30 17:12:32 +02:00

136 lines
3.3 KiB
C

/****************************Module*Header******************************\
* Copyright (c) 1987 - 1991 Microsoft Corporation *
*/
/*
* file: AirBruDP.c *
* system: PC Paintbrush for MS-Windows *
* descr: air brush draw proc *
* date: 04/01/87 @ 10:20 *
*/
//#include "onlypbr.h"
//#undef NOKEYSTATES
//#undef NORASTEROPS
//#undef NOWINMESSAGES
#include <windows.h>
#include <port1632.h>
#include "oleglue.h"
#include "pbrush.h"
extern int theSize, theForeg;
extern RECT theBounds;
extern DWORD *rgbColor;
int cntr, dir, wid, hgt, halfWid, halfHgt;
static HDC mono1DC;
extern BOOL bExchanged;
extern RECT rDirty;
LONG APIENTRY DrawAirBru(HDC dstDC, LPRECT lprBounds, WPARAM wParam)
{
RECT rcTemp;
if(01 & cntr++)
return(FALSE);
ConstrainBrush(lprBounds, wParam, &dir);
rcTemp.left = lprBounds->right-halfWid + imageView.left;
rcTemp.top = lprBounds->bottom-halfHgt + imageView.top;
rcTemp.right = rcTemp.left + wid;
rcTemp.bottom = rcTemp.top + hgt;
BitBlt(hdcWork, rcTemp.left, rcTemp.top, wid, hgt, mono1DC, 0, 0, ROP_DSPDxax);
BitBlt(dstDC, rcTemp.left - imageView.left, rcTemp.top - imageView.top, wid, hgt, hdcWork,rcTemp.left, rcTemp.top, SRCCOPY);
lprBounds->left = lprBounds->right;
lprBounds->top = lprBounds->bottom;
return(TRUE);
}
void AirBruDP(HWND hWnd, UINT code, WPARAM wParam, LONG lParam)
{
HBITMAP monoBM, hOldBM;
HDC paintDC;
HBRUSH brush, hOldBrush;
HBITMAP brushBM;
POINT newPt;
RECT rcReturn;
if(code == WM_LBUTTONDOWN || code == WM_LBUTTONDBLCLK)
{
if(bExchanged)
{
PasteDownRect(rDirty.left, rDirty.top, rDirty.right-rDirty.left, rDirty.bottom-rDirty.top);
}
LONG2POINT(lParam,newPt);
cntr = dir = 0;
rcReturn.left = rcReturn.right = newPt.x;
rcReturn.top = rcReturn.bottom = newPt.y;
GetAspct((theSize + 1) * 3, &wid, &hgt);
halfWid = wid >> 1;
halfHgt = hgt >> 1;
if(!(paintDC = GetDisplayDC(hWnd)))
goto Error1;
if(!(mono1DC = CreateCompatibleDC(paintDC)))
goto Error2;
if(!(monoBM = CreateBitmap(wid, hgt, 1, 1, 0L)))
goto Error3;
hOldBM = SelectObject(mono1DC, monoBM);
PatBlt(mono1DC, 0, 0, wid, hgt, BLACKNESS);
SelectObject(mono1DC, GetStockObject(NULL_PEN));
SelectObject(mono1DC, GetStockObject(DKGRAY_BRUSH));
Ellipse(mono1DC, 0, 0, wid, hgt);
if(!(brushBM = CreatePatternBM(paintDC, rgbColor[theForeg])))
goto Error4;
if(!(brush = CreatePatternBrush(brushBM)))
goto Error5;
hOldBrush = SelectObject(hdcWork, brush);
code = TrackTool(hWnd, DrawAirBru, &rcReturn, &wParam, paintDC);
theBounds.left += imageView.left - halfWid;
theBounds.top += imageView.top - halfHgt;
theBounds.right += imageView.left + halfWid;
theBounds.bottom += imageView.top + halfHgt;
UnionWithRect(&rDirty, &theBounds);
AdviseDataChange();
if (hOldBrush)
SelectObject(hdcWork, hOldBrush);
DeleteObject(brush);
Error5:
DeleteObject(brushBM);
Error4:
if (hOldBM)
SelectObject(mono1DC, hOldBM);
DeleteObject(monoBM);
Error3:
DeleteDC(mono1DC);
Error2:
ReleaseDC(hWnd, paintDC);
Error1:
;
}
}