Implement Gdintry4 (not tested, we can not test it yet in ros, until we
got ddraw.dll and some api in win32k/ntdraw been implement)
Modified: trunk/reactos/lib/gdi32/include/precomp.h
Modified: trunk/reactos/lib/gdi32/misc/gdientry.c
Modified: trunk/reactos/lib/gdi32/misc/stubs.c
_____
Modified: trunk/reactos/lib/gdi32/include/precomp.h
--- trunk/reactos/lib/gdi32/include/precomp.h 2005-08-07 12:10:54 UTC
(rev 17163)
+++ trunk/reactos/lib/gdi32/include/precomp.h 2005-08-07 12:54:41 UTC
(rev 17164)
@@ -88,4 +88,8 @@
VOID
STDCALL
LogFontW2A(LPLOGFONTA pA, CONST LOGFONTW *pW);
+
+/* == Directx FUNCTIONS
================================================== */
+BOOL
+intDDCreateSurface ( LPDDRAWI_DDRAWSURFACE_LCL pSurface, BOOL
bComplete);
/* EOF */
_____
Modified: trunk/reactos/lib/gdi32/misc/gdientry.c
--- trunk/reactos/lib/gdi32/misc/gdientry.c 2005-08-07 12:10:54 UTC
(rev 17163)
+++ trunk/reactos/lib/gdi32/misc/gdientry.c 2005-08-07 12:54:41 UTC
(rev 17164)
@@ -118,9 +118,19 @@
return NtGdiDdDeleteDirectDrawObject((HANDLE)pDirectDrawGlobal->hDD);
}
+/*
+ * @implemented
+ *
+ * GDIEntry 4
+ */
+BOOL STDCALL DdCreateSurfaceObject(
+LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal,
+BOOL bPrimarySurface
+)
+{
+ return intDDCreateSurface(pSurfaceLocal,1);
+}
-
-
/*
* @implemented
*
@@ -295,3 +305,68 @@
return TRUE;
}
+
+/* interal create surface */
+BOOL
+intDDCreateSurface ( LPDDRAWI_DDRAWSURFACE_LCL pSurface,
+ BOOL bComplete)
+{
+ DD_SURFACE_LOCAL SurfaceLocal;
+ DD_SURFACE_GLOBAL SurfaceGlobal;
+ DD_SURFACE_MORE SurfaceMore;
+
+ /* Zero struct */
+ RtlZeroMemory(&SurfaceLocal, sizeof(DD_SURFACE_LOCAL));
+ RtlZeroMemory(&SurfaceGlobal, sizeof(DD_SURFACE_GLOBAL));
+ RtlZeroMemory(&SurfaceMore, sizeof(DD_SURFACE_MORE));
+
+ /* Set up SurfaceLocal struct */
+ SurfaceLocal.ddsCaps.dwCaps = pSurface->ddsCaps.dwCaps;
+ SurfaceLocal.dwFlags = pSurface->dwFlags;
+
+ /* Set up SurfaceMore struct */
+ /* copy pSurface->ddckCKDestBlt and pSurface->ddckCKSrcBlt to
SurfaceMore.ddsCapsEx */
+ memcpy(&SurfaceMore.ddsCapsEx, &pSurface->ddckCKDestBlt,
sizeof(DDSCAPSEX));
+ SurfaceMore.dwSurfaceHandle = (DWORD)
pSurface->dbnOverlayNode.object_int->lpVtbl;
+
+
+ /* Set up SurfaceGlobal struct */
+ SurfaceGlobal.fpVidMem = pSurface->lpGbl->fpVidMem;
+ SurfaceGlobal.dwLinearSize = pSurface->lpGbl->dwLinearSize;
+ SurfaceGlobal.wHeight = pSurface->lpGbl->wHeight;
+ SurfaceGlobal.wWidth = pSurface->lpGbl->wWidth;
+
+ /* check which memory type should be use */
+ if ((pSurface->dwFlags & DDRAWISURFGBL_LOCKVRAMSTYLE) ==
DDRAWISURFGBL_LOCKVRAMSTYLE)
+ {
+
memcpy(&SurfaceGlobal.ddpfSurface,&pSurface->lpGbl->lpDD->vmiData.ddpfDi
splay, sizeof(DDPIXELFORMAT));
+ }
+ else
+ {
+
memcpy(&SurfaceGlobal.ddpfSurface,&pSurface->lpGbl->ddpfSurface,
sizeof(DDPIXELFORMAT));
+ }
+
+ /* Determer if Gdi32 chace of directdraw handler or not */
+ if (pSurface->lpGbl->lpDD->hDD)
+ {
+ pSurface->hDDSurface = ((DWORD) NtGdiDdCreateSurfaceObject(
(HANDLE) pSurface->lpGbl->lpDD->hDD,
+ (HANDLE)
pSurface->hDDSurface, &SurfaceLocal,
+
&SurfaceMore, &SurfaceGlobal, bComplete));
+ }
+ else
+ {
+ pSurface->hDDSurface = ((DWORD) NtGdiDdCreateSurfaceObject(
(HANDLE) pDirectDrawGlobalInternal->hDD,
+ (HANDLE)
pSurface->hDDSurface, &SurfaceLocal,
+
&SurfaceMore,
+
&SurfaceGlobal,
+
bComplete));
+ }
+
+ /* return status */
+ if (pSurface->hDDSurface)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
_____
Modified: trunk/reactos/lib/gdi32/misc/stubs.c
--- trunk/reactos/lib/gdi32/misc/stubs.c 2005-08-07 12:10:54 UTC
(rev 17163)
+++ trunk/reactos/lib/gdi32/misc/stubs.c 2005-08-07 12:54:41 UTC
(rev 17164)
@@ -3890,24 +3890,6 @@
/*
* @unimplemented
*/
-BOOL STDCALL DdCreateSurfaceObject(
-LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal,
-BOOL bPrimarySurface
-)
-{
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-
-
-
-
-
-/*
- * @unimplemented
- */
HBITMAP STDCALL DdCreateDIBSection(
HDC hdc,
CONST BITMAPINFO *pbmi,
Show replies by date