simplefly Main_DirectDraw_QueryInterface code

svn path=/trunk/; revision=27266
This commit is contained in:
Magnus Olsen 2007-06-23 09:57:34 +00:00
parent 2d2cf54cc3
commit f26b273557

View file

@ -14,6 +14,8 @@
* table to right version of the functions * table to right version of the functions
*/ */
#include "rosdraw.h" #include "rosdraw.h"
#include <string.h> #include <string.h>
@ -21,6 +23,22 @@
/* PSEH for SEH Support */ /* PSEH for SEH Support */
#include <pseh/pseh.h> #include <pseh/pseh.h>
LPDDRAWI_DIRECTDRAW_INT
internal_directdraw_int_alloc(LPDDRAWI_DIRECTDRAW_INT This)
{
LPDDRAWI_DIRECTDRAW_INT newThis;
DxHeapMemAlloc(newThis, sizeof(DDRAWI_DIRECTDRAW_INT));
if (newThis)
{
newThis->lpLcl = This->lpLcl;
newThis->lpLink = This;
}
return newThis;
}
HRESULT WINAPI HRESULT WINAPI
Main_DirectDraw_QueryInterface (LPDDRAWI_DIRECTDRAW_INT This, Main_DirectDraw_QueryInterface (LPDDRAWI_DIRECTDRAW_INT This,
REFIID id, REFIID id,
@ -40,110 +58,67 @@ Main_DirectDraw_QueryInterface (LPDDRAWI_DIRECTDRAW_INT This,
{ {
if (This->lpVtbl != &DirectDraw7_Vtable) if (This->lpVtbl != &DirectDraw7_Vtable)
{ {
LPDDRAWI_DIRECTDRAW_INT newThis; This = internal_directdraw_int_alloc(This);
DxHeapMemAlloc(newThis, sizeof(DDRAWI_DIRECTDRAW_INT)); if (!This)
{
retVal = DDERR_OUTOFVIDEOMEMORY;
_SEH_LEAVE;
}
}
if (newThis == NULL) This->lpVtbl = &DirectDraw7_Vtable;
{
retVal = DDERR_OUTOFMEMORY;
}
else
{
/* DirectDraw7 Vtable */
newThis->lpVtbl = &DirectDraw7_Vtable;
newThis->lpLcl = This->lpLcl;
newThis->lpLink = This;
*obj = &newThis->lpVtbl;
Main_DirectDraw_AddRef(newThis);
}
}
else
{
*obj = This; *obj = This;
Main_DirectDraw_AddRef(This); Main_DirectDraw_AddRef(This);
} }
}
else if (IsEqualGUID(&IID_IDirectDraw4, id)) else if (IsEqualGUID(&IID_IDirectDraw4, id))
{ {
if (This->lpVtbl != &DirectDraw4_Vtable) if (This->lpVtbl != &DirectDraw4_Vtable)
{ {
LPDDRAWI_DIRECTDRAW_INT newThis; This = internal_directdraw_int_alloc(This);
DxHeapMemAlloc(newThis, sizeof(DDRAWI_DIRECTDRAW_INT)); if (!This)
{
retVal = DDERR_OUTOFVIDEOMEMORY;
_SEH_LEAVE;
}
}
if (newThis == NULL) This->lpVtbl = &DirectDraw2_Vtable;
{
retVal = DDERR_OUTOFMEMORY;
}
else
{
/* DirectDraw4 Vtable */
newThis->lpVtbl = &DirectDraw4_Vtable;
newThis->lpLcl = This->lpLcl;
newThis->lpLink = This;
*obj = &newThis->lpVtbl;
Main_DirectDraw_AddRef(newThis);
}
}
else
{
*obj = This; *obj = This;
Main_DirectDraw_AddRef(This); Main_DirectDraw_AddRef(This);
} }
}
else if (IsEqualGUID(&IID_IDirectDraw2, id))
{
if (This->lpVtbl != &DirectDraw2_Vtable)
{
LPDDRAWI_DIRECTDRAW_INT newThis;
DxHeapMemAlloc(newThis, sizeof(DDRAWI_DIRECTDRAW_INT));
if (newThis == NULL) else if (IsEqualGUID(&IID_IDirectDraw4, id))
{ {
retVal = DDERR_OUTOFMEMORY; if (This->lpVtbl != &DirectDraw4_Vtable)
}
else
{ {
/* DirectDraw4 Vtable */ This = internal_directdraw_int_alloc(This);
newThis->lpVtbl = &DirectDraw2_Vtable; if (!This)
newThis->lpLcl = This->lpLcl; {
newThis->lpLink = This; retVal = DDERR_OUTOFVIDEOMEMORY;
*obj = &newThis->lpVtbl; _SEH_LEAVE;
Main_DirectDraw_AddRef(newThis);
} }
} }
else
{ This->lpVtbl = &DirectDraw2_Vtable;
*obj = This; *obj = This;
Main_DirectDraw_AddRef(This); Main_DirectDraw_AddRef(This);
} }
}
else if (IsEqualGUID(&IID_IDirectDraw, id)) else if (IsEqualGUID(&IID_IDirectDraw, id))
{ {
if (This->lpVtbl != &DirectDraw_Vtable) if (This->lpVtbl != &DirectDraw_Vtable)
{ {
LPDDRAWI_DIRECTDRAW_INT newThis; This = internal_directdraw_int_alloc(This);
DxHeapMemAlloc(newThis, sizeof(DDRAWI_DIRECTDRAW_INT)); if (!This)
{
retVal = DDERR_OUTOFVIDEOMEMORY;
_SEH_LEAVE;
}
}
if (newThis == NULL) This->lpVtbl = &DirectDraw_Vtable;
{
retVal = DDERR_OUTOFMEMORY;
}
else
{
/* DirectDraw Vtable */
newThis->lpVtbl = &DirectDraw_Vtable;
newThis->lpLcl = This->lpLcl;
newThis->lpLink = This;
*obj = &newThis->lpVtbl;
Main_DirectDraw_AddRef(newThis);
}
}
else
{
*obj = This; *obj = This;
Main_DirectDraw_AddRef(This); Main_DirectDraw_AddRef(This);
} }
}
else else
{ {
*obj = NULL; *obj = NULL;