Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

154 lines
4.6 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: d3drmanimationset2obj.cpp
//
//--------------------------------------------------------------------------
// d3drmAnimationSet2Obj.cpp : Implementation of CDirectApp and DLL registration.
#include "stdafx.h"
#include "Direct.h"
#include "dms.h"
#include "d3drmAnimationSet2Obj.h"
#include "d3drmAnimation2Obj.h"
#include "d3drmAnimationArrayObj.h"
extern void *g_dxj_Direct3dRMAnimationArray;
extern HRESULT BSTRtoGUID(LPGUID,BSTR);
CONSTRUCTOR( _dxj_Direct3dRMAnimationSet2,{});
DESTRUCTOR( _dxj_Direct3dRMAnimationSet2,{});
GETSET_OBJECT(_dxj_Direct3dRMAnimationSet2);
CLONE_R(_dxj_Direct3dRMAnimationSet2,Direct3DRMAnimationSet2);
SETNAME_R(_dxj_Direct3dRMAnimationSet2);
GETNAME_R(_dxj_Direct3dRMAnimationSet2);
GETCLASSNAME_R(_dxj_Direct3dRMAnimationSet2);
ADDDESTROYCALLBACK_R(_dxj_Direct3dRMAnimationSet2);
DELETEDESTROYCALLBACK_R(_dxj_Direct3dRMAnimationSet2);
PASS_THROUGH_CAST_1_R(_dxj_Direct3dRMAnimationSet2, setAppData, SetAppData, long,(DWORD));
PASS_THROUGH1_R( _dxj_Direct3dRMAnimationSet2, setTime, SetTime, d3dvalue);
GET_DIRECT_R(_dxj_Direct3dRMAnimationSet2, getAppData, GetAppData, long);
DO_GETOBJECT_ANDUSEIT_R(_dxj_Direct3dRMAnimationSet2, addAnimation, AddAnimation, _dxj_Direct3dRMAnimation2);
//DO_GETOBJECT_ANDUSEIT_R(_dxj_Direct3dRMAnimationSet2, deleteAnimation, DeleteAnimation, _dxj_Direct3dRMAnimation2);
STDMETHODIMP C_dxj_Direct3dRMAnimationSet2Object::deleteAnimation(I_dxj_Direct3dRMAnimation2 *anim)
{
HRESULT hr;
UINT i;
if (!anim) return E_INVALIDARG;
DO_GETOBJECT_NOTNULL(LPDIRECT3DRMANIMATION2,pRealAnim,anim);
i=pRealAnim->AddRef();
i=pRealAnim->Release();
hr=m__dxj_Direct3dRMAnimationSet2->DeleteAnimation(pRealAnim);
i=pRealAnim->AddRef();
i=pRealAnim->Release();
return hr;
}
/////////////////////////////////////////////////////////////////////////////
//
STDMETHODIMP C_dxj_Direct3dRMAnimationSet2Object::loadFromFile(BSTR filename,
VARIANT id, long flags, I_dxj_Direct3dRMLoadTextureCallback3 *callme,
IUnknown *useMe, I_dxj_Direct3dRMFrame3 *frame)
{
D3DRMLOADTEXTURE3CALLBACK d3dtcb = NULL;
LPVOID pArgs = NULL;
TextureCallback3 *tcb = NULL;
HRESULT hr;
if( callme ) {
tcb = (TextureCallback3*)AddCallbackLink((void**)&TextureCallbacks3,
(I_dxj_Direct3dRMCallback*)callme, (void*)useMe);
if( tcb ) {
d3dtcb = myLoadTextureCallback3;
pArgs = (void *)tcb;
} else {
DPF(1,"Callback object creation failed!\r\n");
return E_FAIL;
}
}
USES_CONVERSION;
LPSTR pszName = NULL;
__try { pszName = W2T(filename); /* Now convert to ANSI */ } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
DO_GETOBJECT_NOTNULL( LPDIRECT3DRMFRAME3, f, frame);
void *args=NULL;
DWORD pos=0;
GUID loadGuid;
VARIANT var;
VariantInit(&var);
if ((flags & D3DRMLOAD_BYNAME)||(D3DRMLOAD_FROMURL & flags)) {
hr=VariantChangeType(&var,&id,0,VT_BSTR);
if FAILED(hr) return E_INVALIDARG;
__try { args=(void*)W2T(V_BSTR(&id)); } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
}
else if(flags & D3DRMLOAD_BYPOSITION){
hr=VariantChangeType(&var,&id,0,VT_I4);
if FAILED(hr) return E_INVALIDARG;
pos=V_I4(&id);
args=&pos;
}
else if(flags & D3DRMLOAD_BYGUID){
hr=VariantChangeType(&var,&id,0,VT_BSTR);
if FAILED(hr) return E_INVALIDARG;
hr=BSTRtoGUID(&loadGuid,V_BSTR(&id));
if FAILED(hr) return E_INVALIDARG;
args=&loadGuid;
}
VariantClear(&var);
if (flags &D3DRMLOAD_FROMRESOURCE){
D3DRMLOADRESOURCE res;
ZeroMemory(&res,sizeof(D3DRMLOADRESOURCE));
res.lpName=pszName;
res.lpType="XFILE";
hr = m__dxj_Direct3dRMAnimationSet2->Load((void *)&res, (DWORD*)args, (DWORD)flags,
d3dtcb, pArgs, (IDirect3DRMFrame3*)f);
}
else {
hr = m__dxj_Direct3dRMAnimationSet2->Load((void *)pszName, (DWORD*)args, (DWORD)flags,
d3dtcb, pArgs, (IDirect3DRMFrame3*)f);
}
//We are done with the callback so remove the linked entry
if (tcb)
UndoCallbackLink( (GeneralCallback*)tcb,
(GeneralCallback**)&TextureCallbacks3 );
return hr;
}
STDMETHODIMP C_dxj_Direct3dRMAnimationSet2Object::getAnimations(I_dxj_Direct3dRMAnimationArray **ppret)
{
HRESULT hr;
LPDIRECT3DRMANIMATIONARRAY lpArray=NULL;
hr=m__dxj_Direct3dRMAnimationSet2->GetAnimations(&lpArray);
if FAILED(hr) return hr;
INTERNAL_CREATE(_dxj_Direct3dRMAnimationArray, lpArray, ppret);
return hr;
}