main.c

来自「Wine-20031016」· C语言 代码 · 共 223 行

C
223
字号
/*		DirectDrawClipper implementation * * Copyright 2000 Marcus Meissner * Copyright 2000 TransGaming Technologies Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "config.h"#include <stdarg.h>#include <stdlib.h>#include <string.h>#include "windef.h"#include "winbase.h"#include "wingdi.h"#include "ddraw.h"#include "winerror.h"#include "ddraw_private.h"#include "dclipper/main.h"#include "ddraw/main.h"#include "wine/debug.h"WINE_DEFAULT_DEBUG_CHANNEL(ddraw);/****************************************************************************** *			DirectDrawCreateClipper (DDRAW.@) */static ICOM_VTABLE(IDirectDrawClipper) DDRAW_Clipper_VTable;HRESULT WINAPI DirectDrawCreateClipper(    DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, LPUNKNOWN pUnkOuter) {    IDirectDrawClipperImpl* This;    TRACE("(%08lx,%p,%p)\n", dwFlags, lplpDDClipper, pUnkOuter);    if (pUnkOuter != NULL) return CLASS_E_NOAGGREGATION;    This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,		     sizeof(IDirectDrawClipperImpl));    if (This == NULL) return E_OUTOFMEMORY;    ICOM_INIT_INTERFACE(This, IDirectDrawClipper, DDRAW_Clipper_VTable);    This->ref = 1;    This->hWnd = 0;    This->ddraw_owner = NULL;    *lplpDDClipper = ICOM_INTERFACE(This, IDirectDrawClipper);    return DD_OK;}/* This is the classfactory implementation. */HRESULT DDRAW_CreateDirectDrawClipper(IUnknown* pUnkOuter, REFIID riid,				      LPVOID* ppObj){    HRESULT hr;    LPDIRECTDRAWCLIPPER pClip;    hr = DirectDrawCreateClipper(0, &pClip, pUnkOuter);    if (FAILED(hr)) return hr;    hr = IDirectDrawClipper_QueryInterface(pClip, riid, ppObj);    IDirectDrawClipper_Release(pClip);    return hr;}/****************************************************************************** *			IDirectDrawClipper */HRESULT WINAPI Main_DirectDrawClipper_SetHwnd(    LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    TRACE("(%p)->SetHwnd(0x%08lx,0x%08lx)\n",This,dwFlags,(DWORD)hWnd);    if( dwFlags ) {	FIXME("dwFlags = 0x%08lx, not supported.\n",dwFlags);	return DDERR_INVALIDPARAMS;    }    This->hWnd = hWnd;    return DD_OK;}static void Main_DirectDrawClipper_Destroy(IDirectDrawClipperImpl* This){    if (This->ddraw_owner != NULL)	Main_DirectDraw_RemoveClipper(This->ddraw_owner, This);    HeapFree(GetProcessHeap(), 0 ,This);}void Main_DirectDrawClipper_ForceDestroy(IDirectDrawClipperImpl* This){    WARN("deleting clipper %p with refcnt %lu\n", This, This->ref);    Main_DirectDrawClipper_Destroy(This);}ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );    if (--This->ref == 0)    {	Main_DirectDrawClipper_Destroy(This);	return 0;    }    else return This->ref;}HRESULT WINAPI Main_DirectDrawClipper_GetClipList(    LPDIRECTDRAWCLIPPER iface,LPRECT prcClip,LPRGNDATA lprgn,LPDWORD pdwSize) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    static int warned = 0;    if (warned++ < 10)	FIXME("(%p,%p,%p,%p),stub!\n",This,prcClip,lprgn,pdwSize);    if (pdwSize) *pdwSize=0;    return DDERR_NOCLIPLIST;}HRESULT WINAPI Main_DirectDrawClipper_SetClipList(    LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,DWORD pdwSize) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    FIXME("(%p,%p,%ld),stub!\n",This,lprgn,pdwSize);    return DD_OK;}HRESULT WINAPI Main_DirectDrawClipper_QueryInterface(    LPDIRECTDRAWCLIPPER iface, REFIID riid, LPVOID* ppvObj) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    if (IsEqualGUID(&IID_IUnknown, riid)	|| IsEqualGUID(&IID_IDirectDrawClipper, riid))    {	*ppvObj = ICOM_INTERFACE(This, IDirectDrawClipper);	++This->ref;	return S_OK;    }    else    {	return E_NOINTERFACE;    }}ULONG WINAPI Main_DirectDrawClipper_AddRef( LPDIRECTDRAWCLIPPER iface ){    ICOM_THIS(IDirectDrawClipperImpl,iface);    TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );    return ++This->ref;}HRESULT WINAPI Main_DirectDrawClipper_GetHWnd(    LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    FIXME("(%p)->(%p),stub!\n",This,hWndPtr);    *hWndPtr = This->hWnd;    return DD_OK;}HRESULT WINAPI Main_DirectDrawClipper_Initialize(     LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags) {    IDirectDrawImpl* pOwner;    ICOM_THIS(IDirectDrawClipperImpl,iface);    FIXME("(%p)->(%p,0x%08lx),stub!\n",This,lpDD,dwFlags);    if (This->ddraw_owner != NULL) return DDERR_ALREADYINITIALIZED;    pOwner = ICOM_OBJECT(IDirectDrawImpl, IDirectDraw, lpDD);    This->ddraw_owner = pOwner;    Main_DirectDraw_AddClipper(pOwner, This);    return DD_OK;}HRESULT WINAPI Main_DirectDrawClipper_IsClipListChanged(    LPDIRECTDRAWCLIPPER iface, BOOL* lpbChanged) {    ICOM_THIS(IDirectDrawClipperImpl,iface);    FIXME("(%p)->(%p),stub!\n",This,lpbChanged);    /* XXX What is safest? */    *lpbChanged = FALSE;    return DD_OK;}static ICOM_VTABLE(IDirectDrawClipper) DDRAW_Clipper_VTable ={    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE    Main_DirectDrawClipper_QueryInterface,    Main_DirectDrawClipper_AddRef,    Main_DirectDrawClipper_Release,    Main_DirectDrawClipper_GetClipList,    Main_DirectDrawClipper_GetHWnd,    Main_DirectDrawClipper_Initialize,    Main_DirectDrawClipper_IsClipListChanged,    Main_DirectDrawClipper_SetClipList,    Main_DirectDrawClipper_SetHwnd};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?