Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencallbacks_surf_hel.c
Go to the documentation of this file.
00001 /* $Id$ 00002 * 00003 * COPYRIGHT: See COPYING in the top level directory 00004 * PROJECT: ReactOS DirectX 00005 * FILE: ddraw/surface/callbacks_surf_hel.c 00006 * PURPOSE: HEL Callbacks For Surface APIs 00007 * PROGRAMMER: Magnus Olsen 00008 * 00009 */ 00010 00011 #include "rosdraw.h" 00012 00013 DWORD CALLBACK HelDdSurfAddAttachedSurface(LPDDHAL_ADDATTACHEDSURFACEDATA lpDestroySurface) 00014 { 00015 DX_STUB; 00016 } 00017 00018 DWORD CALLBACK HelDdSurfBlt(LPDDHAL_BLTDATA lpBltData) 00019 { 00020 DX_WINDBG_trace(); 00021 00022 if (lpBltData->dwFlags & DDBLT_COLORFILL) 00023 { 00024 HBRUSH hbr = CreateSolidBrush(lpBltData->bltFX.dwFillColor ); 00025 FillRect( (HDC)lpBltData->lpDDDestSurface->lpSurfMore->lpDD_lcl->hDC, 00026 (CONST RECT *)&lpBltData->rDest, 00027 hbr); 00028 DeleteObject(hbr); 00029 lpBltData->ddRVal = DD_OK; 00030 } 00031 else if (lpBltData->dwFlags & DDBLT_ROP) 00032 { 00033 BitBlt( (HDC)lpBltData->lpDDDestSurface->lpSurfMore->lpDD_lcl->hDC, 00034 lpBltData->rDest.top, 00035 lpBltData->rDest.left, 00036 lpBltData->rDest.right, 00037 lpBltData->rDest.bottom, 00038 (HDC)lpBltData->lpDDSrcSurface->lpSurfMore->lpDD_lcl->hDC, 00039 lpBltData->rSrc.top, 00040 lpBltData->rSrc.right, 00041 lpBltData->bltFX.dwROP); 00042 lpBltData->ddRVal = DD_OK; 00043 } 00044 return DDHAL_DRIVER_HANDLED; 00045 } 00046 00047 DWORD CALLBACK HelDdSurfDestroySurface(LPDDHAL_DESTROYSURFACEDATA lpDestroySurfaceData) 00048 { 00049 DX_STUB; 00050 } 00051 00052 DWORD CALLBACK HelDdSurfFlip(LPDDHAL_FLIPDATA lpFlipData) 00053 { 00054 DX_STUB; 00055 } 00056 00057 DWORD CALLBACK HelDdSurfGetBltStatus(LPDDHAL_GETBLTSTATUSDATA lpGetBltStatusData) 00058 { 00059 DX_STUB; 00060 } 00061 00062 DWORD CALLBACK HelDdSurfGetFlipStatus(LPDDHAL_GETFLIPSTATUSDATA lpGetFlipStatusData) 00063 { 00064 DX_STUB; 00065 } 00066 00067 DWORD CALLBACK HelDdSurfLock(LPDDHAL_LOCKDATA lpLockData) 00068 { 00069 00070 HDC hDC; 00071 HBITMAP hImage = NULL; 00072 00073 LONG cbBuffer = 0; 00074 LPDWORD pixels = NULL; 00075 00076 HDC hMemDC = NULL; 00077 HBITMAP hDCBmp = NULL; 00078 BITMAP bm = {0}; 00079 00080 DX_WINDBG_trace(); 00081 00082 /* ToDo tell ddraw internal this surface is locked */ 00083 /* ToDo add support for dwFlags */ 00084 00085 00086 /* Get our hdc for the active window */ 00087 hDC = GetDC((HWND)lpLockData->lpDDSurface->lpSurfMore->lpDD_lcl->hFocusWnd); 00088 00089 if (hDC != NULL) 00090 { 00091 /* Create a memory bitmap to store a copy of current hdc surface */ 00092 00093 if (!lpLockData->bHasRect) 00094 { 00095 hImage = CreateCompatibleBitmap (hDC, lpLockData->lpDDSurface->lpGbl->wWidth, lpLockData->lpDDSurface->lpGbl->wHeight); 00096 } 00097 else 00098 { 00099 hImage = CreateCompatibleBitmap (hDC, lpLockData->rArea.right, lpLockData->rArea.bottom); 00100 } 00101 00102 /* Create a memory hdc so we can draw on our current memory bitmap */ 00103 hMemDC = CreateCompatibleDC(hDC); 00104 00105 if (hMemDC != NULL) 00106 { 00107 /* Select our memory bitmap to our memory hdc */ 00108 hDCBmp = (HBITMAP) SelectObject (hMemDC, hImage); 00109 00110 /* Get our memory bitmap information */ 00111 GetObject(hImage, sizeof(BITMAP), &bm); 00112 00113 if (!lpLockData->bHasRect) 00114 { 00115 BitBlt (hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hDC, 0, 0, SRCCOPY); 00116 } 00117 else 00118 { 00119 BitBlt (hMemDC, lpLockData->rArea.top, lpLockData->rArea.left, lpLockData->rArea.right, lpLockData->rArea.bottom, hDC, 0, 0, SRCCOPY); 00120 } 00121 00122 SelectObject (hMemDC, hDCBmp); 00123 00124 /* Allocate memory buffer for the bitmap pixel data */ 00125 cbBuffer = bm.bmWidthBytes * bm.bmHeight ; 00126 pixels = (PDWORD) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbBuffer ); 00127 00128 if (pixels != NULL) 00129 { 00130 /* Get the bitmap bits */ 00131 GetBitmapBits(hImage,cbBuffer,pixels); 00132 00133 /* Fixme HACK - check which member stores the HEL bitmap buffer */ 00134 lpLockData->lpDDSurface->lpSurfMore->lpDDRAWReserved2 = pixels; 00135 00136 /* Setup return value */ 00137 lpLockData->ddRVal = DD_OK; 00138 lpLockData->lpSurfData = pixels; 00139 } 00140 } 00141 } 00142 00143 00144 /* Free the pixels buffer if we fail */ 00145 if ( (pixels != NULL) && 00146 (lpLockData->ddRVal != DD_OK) ) 00147 { 00148 HeapFree(GetProcessHeap(), 0, pixels ); 00149 } 00150 00151 /* Cleanup after us */ 00152 if (hImage != NULL) 00153 { 00154 DeleteObject (hImage); 00155 } 00156 00157 if (hMemDC != NULL) 00158 { 00159 DeleteDC (hMemDC); 00160 } 00161 00162 return DDHAL_DRIVER_HANDLED; 00163 } 00164 00165 DWORD CALLBACK HelDdSurfreserved4(DWORD *lpPtr) 00166 { 00167 /* This api is not doucmented by MS, keep it stubbed */ 00168 DX_STUB; 00169 } 00170 00171 DWORD CALLBACK HelDdSurfSetClipList(LPDDHAL_SETCLIPLISTDATA lpSetClipListData) 00172 { 00173 DX_STUB; 00174 } 00175 00176 DWORD CALLBACK HelDdSurfSetColorKey(LPDDHAL_SETCOLORKEYDATA lpSetColorKeyData) 00177 { 00178 DX_STUB; 00179 } 00180 00181 DWORD CALLBACK HelDdSurfSetOverlayPosition(LPDDHAL_SETOVERLAYPOSITIONDATA lpSetOverlayPositionData) 00182 { 00183 DX_STUB; 00184 } 00185 00186 DWORD CALLBACK HelDdSurfSetPalette(LPDDHAL_SETPALETTEDATA lpSetPaletteData) 00187 { 00188 DX_STUB; 00189 } 00190 00191 DWORD CALLBACK HelDdSurfUnlock(LPDDHAL_UNLOCKDATA lpUnLockData) 00192 { 00193 HDC hDC; 00194 HBITMAP hImage = NULL; 00195 00196 HDC hMemDC = NULL; 00197 HBITMAP hDCBmp = NULL; 00198 BITMAP bm = {0}; 00199 00200 DX_WINDBG_trace(); 00201 00202 /* Get our hdc for the active window */ 00203 hDC = GetDC((HWND)lpUnLockData->lpDDSurface->lpSurfMore->lpDD_lcl->hFocusWnd); 00204 00205 if (hDC != NULL) 00206 { 00207 /* Create a memory bitmap to store a copy of current hdc surface */ 00208 00209 /* fixme the rcarea are not store in the struct yet so the data will look corupted */ 00210 hImage = CreateCompatibleBitmap (hDC, lpUnLockData->lpDDSurface->lpGbl->wWidth, lpUnLockData->lpDDSurface->lpGbl->wHeight); 00211 00212 /* Create a memory hdc so we can draw on our current memory bitmap */ 00213 hMemDC = CreateCompatibleDC(hDC); 00214 00215 if (hMemDC != NULL) 00216 { 00217 /* Select our memory bitmap to our memory hdc */ 00218 hDCBmp = (HBITMAP) SelectObject (hMemDC, hImage); 00219 00220 /* Get our memory bitmap information */ 00221 GetObject(hImage, sizeof(BITMAP), &bm); 00222 00223 SetBitmapBits(hImage,bm.bmWidthBytes * bm.bmHeight, lpUnLockData->lpDDSurface->lpSurfMore->lpDDRAWReserved2); 00224 00225 BitBlt (hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); 00226 00227 SelectObject (hMemDC, hDCBmp); 00228 00229 /* Setup return value */ 00230 lpUnLockData->ddRVal = DD_OK; 00231 } 00232 } 00233 00234 /* Cleanup after us */ 00235 if (hImage != NULL) 00236 { 00237 DeleteObject (hImage); 00238 } 00239 00240 if (hMemDC != NULL) 00241 { 00242 DeleteDC (hMemDC); 00243 } 00244 00245 if (lpUnLockData->lpDDSurface->lpSurfMore->lpDDRAWReserved2 != NULL) 00246 { 00247 HeapFree(GetProcessHeap(), 0, lpUnLockData->lpDDSurface->lpSurfMore->lpDDRAWReserved2 ); 00248 } 00249 00250 return DDHAL_DRIVER_HANDLED; 00251 } 00252 00253 DWORD CALLBACK HelDdSurfUpdateOverlay(LPDDHAL_UPDATEOVERLAYDATA lpUpDateOveryLayData) 00254 { 00255 DX_STUB; 00256 } 00257 Generated on Sun May 27 2012 04:21:25 for ReactOS by
1.7.6.1
|