/* Copyright 2001 TransGaming Technologies Inc. */

#ifndef DDRAW_DSURFACE_HALEB_H_INCLUDED
#define DDRAW_DSURFACE_HALEB_H_INCLUDED

#define HALEB_PRIV(surf) ((HALEB_DirectDrawSurfaceImpl*)((surf)->private))

#define HALEB_PRIV_VAR(name, surf) \
	HALEB_DirectDrawSurfaceImpl* name = HALEB_PRIV(surf)

struct HALEB_DirectDrawSurfaceImpl_Part
{
    BOOL hal_allocated;
};

typedef struct
{
    struct HALEB_DirectDrawSurfaceImpl_Part haleb;
} HALEB_DirectDrawSurfaceImpl;

HRESULT
HALEB_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
				  IDirectDrawImpl* pDD,
				  const DDSURFACEDESC2* pDDSD);

HRESULT HALEB_DirectDrawSurface_Create(IDirectDrawImpl* pDD,
				       const DDSURFACEDESC2* pDDSD,
				       LPDIRECTDRAWSURFACE7* ppSurf,
				       IUnknown* pUnkOuter);

void
HALEB_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);

HRESULT
HALEB_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This,
					  LPDIRECTDRAWSURFACE7* ppDup);

#endif
