- Timestamp:
- Oct 1, 2001, 12:23:46 AM (24 years ago)
- Location:
- trunk/src/ddraw
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ddraw/OS2CLIPPER.CPP
r5820 r6901 1 /* $Id: OS2CLIPPER.CPP,v 1.1 2 2001-05-28 17:17:09 phallerExp $ */1 /* $Id: OS2CLIPPER.CPP,v 1.13 2001-09-30 22:23:44 sandervl Exp $ */ 2 2 3 3 /* … … 22 22 #include <winerror.h> 23 23 #include <winuser.h> 24 #include <winuser32.h> 25 #include "oslibgpi.h" 24 26 25 27 //****************************************************************************** 26 28 //****************************************************************************** 27 29 OS2IDirectDrawClipper::OS2IDirectDrawClipper(void) : 28 Referenced(0), lastError(DD_OK), 29 clipWindow(0) 30 Referenced(0), lastError(DD_OK), fDrawingAllowed(TRUE), 31 clipWindow(0), lpRgnData(NULL), fClipListChanged(FALSE) 30 32 { 31 33 // this constructor creates an unassociated instance of the ddraw clipper, … … 46 48 // lpDraw->Vtbl.AddRef(lpDraw); 47 49 // hDive = lpDirectDraw->GetDiveInstance(); 48 windowRect.left = windowRect.right = windowRect.top = windowRect.bottom = 0;49 50 } 50 51 … … 52 53 //****************************************************************************** 53 54 OS2IDirectDrawClipper::OS2IDirectDrawClipper(OS2IDirectDraw *lpDirectDraw) : 54 Referenced(0), lastError(DD_OK), 55 clipWindow(0) 55 Referenced(0), lastError(DD_OK), fDrawingAllowed(TRUE), 56 clipWindow(0), lpRgnData(NULL), fClipListChanged(FALSE) 56 57 { 57 58 lpVtbl = &Vtbl; … … 69 70 lpDraw->Vtbl.AddRef(lpDraw); 70 71 hDive = lpDirectDraw->GetDiveInstance(); 71 windowRect.left = windowRect.right = windowRect.top = windowRect.bottom = 0;72 72 } 73 73 //****************************************************************************** 74 74 //****************************************************************************** 75 75 OS2IDirectDrawClipper::~OS2IDirectDrawClipper() 76 { 76 { 77 if(lpRgnData) free(lpRgnData); 78 if(clipWindow) { 79 WinSetVisibleRgnNotifyProc(clipWindow, NULL, 0); 80 } 77 81 lpDraw->Vtbl.Release(lpDraw); 78 82 } … … 142 146 if(me->clipWindow) 143 147 { 144 HRGN hRgn, hRgn1; 145 HDC hdc; 146 int bufneeded; 147 148 hRgn = CreateRectRgn(0, 0, 1, 1); 149 hdc = GetDC(me->clipWindow); 150 if(GetClipRgn(hdc, hRgn)) { 151 if(lpRect) { 152 hRgn1 = CreateRectRgnIndirect(lpRect); 153 CombineRgn(hRgn, hRgn, hRgn1, RGN_AND); 154 DeleteObject(hRgn1); 155 } 156 bufneeded = GetRegionData(hRgn, *lpdwSize, lpClipList); 157 if(bufneeded > *lpdwSize) { 158 rc = DDERR_REGIONTOOSMALL; 159 } 160 } 161 else rc = DDERR_NOCLIPLIST; 162 DeleteObject(hRgn); 163 ReleaseDC(me->clipWindow, hdc); 148 RECT *rect = (RECT *)&lpClipList->Buffer; 149 DWORD regiondatasize; 150 151 if(me->lpRgnData == NULL) { 152 DebugInt3(); 153 return DDERR_NOCLIPLIST; 154 } 155 regiondatasize = me->lpRgnData->rdh.dwSize + me->lpRgnData->rdh.nCount*sizeof(RECT); 156 if(lpClipList == NULL) { 157 *lpdwSize = regiondatasize; 158 return DD_OK; 159 } 160 161 if(*lpdwSize < regiondatasize) { 162 *lpdwSize = regiondatasize; 163 return DDERR_REGIONTOOSMALL; 164 } 165 memcpy(lpClipList, me->lpRgnData, regiondatasize); 166 dprintf(("Boundary rectangle (%d,%d)(%d,%d)", lpClipList->rdh.rcBound.left, lpClipList->rdh.rcBound.top, lpClipList->rdh.rcBound.right, lpClipList->rdh.rcBound.bottom)); 164 167 } 165 168 else { //todo!! … … 224 227 HRESULT WIN32API ClipIsClipListChanged(THIS This, BOOL *lpbChanged) 225 228 { 229 OS2IDirectDrawClipper *me = (OS2IDirectDrawClipper *)This; 230 226 231 dprintf(("DDRAW: ClipIsClipListChanged %x %x", This, lpbChanged)); 227 232 228 return(DD_OK); 229 } 230 //****************************************************************************** 231 //****************************************************************************** 232 HRESULT WIN32API ClipSetClipList(THIS This, LPRGNDATA lpClipList, DWORD lpdwSize) 233 { 234 OS2IDirectDrawClipper *me = (OS2IDirectDrawClipper *)This; 235 236 dprintf(("DDRAW: ClipSetClipList %x %x %x", This, lpClipList, lpdwSize)); 233 if(lpbChanged == NULL) { 234 return DDERR_INVALIDPARAMS; 235 } 236 *lpbChanged = me->fClipListChanged; 237 me->fClipListChanged = FALSE; 238 return(DD_OK); 239 } 240 //****************************************************************************** 241 //****************************************************************************** 242 HRESULT WIN32API ClipSetClipList(THIS This, LPRGNDATA lpClipList, DWORD dwFlags) 243 { 244 OS2IDirectDrawClipper *me = (OS2IDirectDrawClipper *)This; 245 246 dprintf(("DDRAW: ClipSetClipList %x %x %x", This, lpClipList, dwFlags)); 237 247 238 248 if(me->clipWindow) { 239 return DDERR_CLIPPERISUSINGHWND; 240 } 241 return(DD_OK); 249 return DDERR_CLIPPERISUSINGHWND; 250 } 251 if(lpClipList == NULL) { 252 //TODO: should protect this with a critical section 253 if(me->lpRgnData) { 254 free(me->lpRgnData); 255 me->lpRgnData = NULL; 256 } 257 return DD_OK; 258 } 259 //TODO: return error if a clip list is already active?? 260 if(me->lpRgnData) { 261 free(me->lpRgnData); 262 me->lpRgnData = NULL; 263 } 264 me->lpRgnData = (LPRGNDATA)malloc(lpClipList->rdh.dwSize + lpClipList->rdh.nCount*sizeof(RECT)); 265 memcpy(me->lpRgnData, lpClipList, lpClipList->rdh.dwSize + lpClipList->rdh.nCount*sizeof(RECT)); 266 return DD_OK; 267 } 268 //****************************************************************************** 269 //****************************************************************************** 270 BOOL WIN32API ClipVisRgnCallback(HWND hwnd, BOOL fDrawingAllowed, DWORD dwUserData) 271 { 272 OS2IDirectDrawClipper *me = (OS2IDirectDrawClipper *)dwUserData; 273 LPRGNDATA lpClipList, lpRgnOld; 274 275 dprintf(("DDRAW: ClipVisRgnCallback %x %x %x", me, hwnd, fDrawingAllowed)); 276 if(me && me->clipWindow == hwnd) { 277 me->fClipListChanged = TRUE; 278 lpRgnOld = me->lpRgnData; 279 if(fDrawingAllowed == FALSE) { 280 me->fDrawingAllowed = FALSE; 281 lpClipList = (LPRGNDATA)malloc(sizeof(RGNDATA)); 282 lpClipList->rdh.dwSize = sizeof(lpClipList->rdh); 283 lpClipList->rdh.iType = RDH_RECTANGLES; // one and only possible value 284 lpClipList->rdh.nCount = 0; 285 lpClipList->rdh.nRgnSize = 0; 286 me->lpRgnData = lpClipList; 287 } 288 else { 289 me->fDrawingAllowed = TRUE; 290 me->lpRgnData = OSLibQueryVisibleRegion(hwnd, me->lpDraw->GetScreenHeight()); 291 } 292 free(lpRgnOld); 293 } 294 return TRUE; 242 295 } 243 296 //****************************************************************************** … … 250 303 dprintf(("DDRAW: ClipSetHWnd %x %x %x", This, reserved, hwnd)); 251 304 305 if(!IsWindow(hwnd)) { 306 dprintf(("WARNING: ClipSetHWnd invalid window handle")); 307 return DDERR_INVALIDPARAMS; 308 } 309 if(me->clipWindow) { 310 //TODO: Is this really allowed?? 311 WinSetVisibleRgnNotifyProc(me->clipWindow, NULL, 0); 312 } 252 313 me->clipWindow = hwnd; 253 GetClientRect(hwnd, &me->windowRect); 254 255 return(DD_OK); 256 } 257 //****************************************************************************** 258 //****************************************************************************** 314 WinSetVisibleRgnNotifyProc(hwnd, ClipVisRgnCallback, (DWORD)me); 315 316 #if 1 317 me->lpRgnData = OSLibQueryVisibleRegion(hwnd, me->lpDraw->GetScreenHeight()); 318 #else 319 me->lpRgnData = (LPRGNDATA)malloc(sizeof(RGNDATAHEADER) + sizeof(RECT)); 320 me->lpRgnData->rdh.dwSize = sizeof(RGNDATAHEADER); 321 me->lpRgnData->rdh.iType = RDH_RECTANGLES; 322 me->lpRgnData->rdh.nCount = 1; 323 me->lpRgnData->rdh.nRgnSize = sizeof(RECT); 324 //TODO: Do we need to return the window rectangle or the client 325 // rectangle converted to screen coordinates?????? 326 GetWindowRect(me->clipWindow, &me->lpRgnData->rdh.rcBound); 327 RECT *rect = (RECT *)&me->lpRgnData->Buffer; 328 *rect = me->lpRgnData->rdh.rcBound; 329 #endif 330 331 return(DD_OK); 332 } 333 //****************************************************************************** 334 //****************************************************************************** -
trunk/src/ddraw/OS2CLIPPER.H
r5820 r6901 1 /* $Id: OS2CLIPPER.H,v 1. 8 2001-05-28 17:17:12 phallerExp $ */1 /* $Id: OS2CLIPPER.H,v 1.9 2001-09-30 22:23:44 sandervl Exp $ */ 2 2 3 3 /* … … 36 36 HDIVE hDive; 37 37 HWND clipWindow; 38 RECT windowRect; 38 39 LPRGNDATA lpRgnData; 40 BOOL fClipListChanged; 41 BOOL fDrawingAllowed; 39 42 40 43 // Linked list management … … 42 45 static OS2IDirectDrawClipper* ddraw; // List of OS2IDirectDraw 43 46 44 friend HRESULT __stdcall ClipQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj); 45 friend ULONG __stdcall ClipAddRef(THIS); 46 friend ULONG __stdcall ClipRelease(THIS); 47 friend HRESULT __stdcall ClipGetClipList(THIS, LPRECT, LPRGNDATA, LPDWORD); 48 friend HRESULT __stdcall ClipGetHWnd(THIS, HWND FAR *); 49 friend HRESULT __stdcall ClipInitialize(THIS, LPDIRECTDRAW, DWORD); 50 friend HRESULT __stdcall ClipIsClipListChanged(THIS, BOOL FAR *); 51 friend HRESULT __stdcall ClipSetClipList(THIS, LPRGNDATA,DWORD); 52 friend HRESULT __stdcall ClipSetHWnd(THIS, DWORD, HWND ); 47 friend HRESULT WIN32API ClipQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj); 48 friend ULONG WIN32API ClipAddRef(THIS); 49 friend ULONG WIN32API ClipRelease(THIS); 50 friend HRESULT WIN32API ClipGetClipList(THIS, LPRECT, LPRGNDATA, LPDWORD); 51 friend HRESULT WIN32API ClipGetHWnd(THIS, HWND FAR *); 52 friend HRESULT WIN32API ClipInitialize(THIS, LPDIRECTDRAW, DWORD); 53 friend HRESULT WIN32API ClipIsClipListChanged(THIS, BOOL FAR *); 54 friend HRESULT WIN32API ClipSetClipList(THIS, LPRGNDATA,DWORD); 55 friend HRESULT WIN32API ClipSetHWnd(THIS, DWORD, HWND ); 56 friend BOOL WIN32API ClipVisRgnCallback(HWND hwnd, BOOL fDrawingAllowed, DWORD dwUserData); 57 53 58 }; 54 59 -
trunk/src/ddraw/OS2DDRAW.CPP
r6804 r6901 1 /* $Id: OS2DDRAW.CPP,v 1.3 0 2001-09-24 18:42:00sandervl Exp $ */1 /* $Id: OS2DDRAW.CPP,v 1.31 2001-09-30 22:23:44 sandervl Exp $ */ 2 2 3 3 /* … … 209 209 pdwUnknownData[241] = dCaps.ulDepth; 210 210 211 screenwidth = dCaps.ul VerticalResolution;212 screenheight = dCaps.ul HorizontalResolution;211 screenwidth = dCaps.ulHorizontalResolution; 212 screenheight = dCaps.ulVerticalResolution; 213 213 screenbpp = dCaps.ulDepth; 214 214 -
trunk/src/ddraw/OS2SURFACE.CPP
r5472 r6901 1 /* $Id: OS2SURFACE.CPP,v 1.3 2 2001-04-04 09:02:14 sandervl Exp $ */1 /* $Id: OS2SURFACE.CPP,v 1.33 2001-09-30 22:23:44 sandervl Exp $ */ 2 2 3 3 /* … … 4516 4516 dprintf(("DDRAW: SurfLock %d %08X %d %d\n", (int)lpRect, (int)lpSurfaceDesc, dwFlags, hEvent)); 4517 4517 4518 if((NULL==lpSurfaceDesc)|| ((dwFlags & DDLOCK_EVENT) && NULL != hEvent)) 4518 if((NULL==lpSurfaceDesc)|| ((dwFlags & DDLOCK_EVENT) && NULL != hEvent)) { 4519 dprintf(("Invalid parameters")); 4519 4520 return DDERR_INVALIDPARAMS; 4520 4521 if(lpSurfaceDesc->dwSize != sizeof(DDSURFACEDESC) && lpSurfaceDesc->dwSize != sizeof(DDSURFACEDESC2)) 4521 } 4522 4523 if(lpSurfaceDesc->dwSize != sizeof(DDSURFACEDESC) && lpSurfaceDesc->dwSize != sizeof(DDSURFACEDESC2)) { 4524 dprintf(("Invalid parameters")); 4522 4525 return DDERR_INVALIDPARAMS; 4526 } 4523 4527 4524 4528 SurfaceDesc4.dwSize = sizeof(DDSURFACEDESC2); … … 4570 4574 4571 4575 if (NULL!=lpRect) 4572 pIRectNew = new DDRectangle( lpRect->left, lpRect->top, lpRect-> bottom, lpRect->right);4576 pIRectNew = new DDRectangle( lpRect->left, lpRect->top, lpRect->right, lpRect->bottom ); 4573 4577 else 4574 pIRectNew = new DDRectangle( 0, 0, me-> height, me->width);4578 pIRectNew = new DDRectangle( 0, 0, me->width, me->height); 4575 4579 4576 4580 // ToDo : the lockchecking should be done in a critcal seq. 4577 4581 dprintf( ("Lock Rectangle (%d/%d) x (%d/%d)\n", 4582 pIRectNew->Left(), 4578 4583 pIRectNew->Top(), 4579 pIRectNew->Left(), 4580 pIRectNew->Bottom(), 4581 pIRectNew->Right() )); 4584 pIRectNew->Right(), 4585 pIRectNew->Bottom())); 4582 4586 4583 4587 rc = DD_OK; … … 4991 4995 dprintf(("DDRAW: Rectangle compare")); 4992 4996 4997 #if 1 4998 i = 0; 4999 pIRectEnum = (DDRectangle*)DPA_FastGetPtr(me->DPA_LockedRects,0); 5000 Found = (pIRectEnum != NULL); 5001 #else 4993 5002 pIRectUnlock = new DDRectangle( 0, 0, me->height, me->width); 4994 5003 … … 5016 5025 } 5017 5026 delete pIRectUnlock; 5027 #endif 5018 5028 } 5019 5029 -
trunk/src/ddraw/makefile
r5820 r6901 1 # $Id: makefile,v 1.2 8 2001-05-28 17:17:15 phallerExp $1 # $Id: makefile,v 1.29 2001-09-30 22:23:45 sandervl Exp $ 2 2 3 3 # … … 22 22 $(OBJDIR)\os2ddraw.obj \ 23 23 $(OBJDIR)\os2clipper.obj \ 24 $(OBJDIR)\oslibgpi.obj \ 24 25 $(OBJDIR)\os2d3d.obj \ 25 26 $(OBJDIR)\iccio1.obj \
Note:
See TracChangeset
for help on using the changeset viewer.