ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

callbacks_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.