Magic_Game/core/e2dcustom.h

195 lines
3.4 KiB
C++

#pragma once
#include "e2dmacros.h"
#include "e2dcommon.h"
namespace e2d
{
template<class Interface>
inline void SafeRelease(Interface*& p)
{
if (p != nullptr)
{
p->Release();
p = nullptr;
}
}
class Music;
// ÒôÔ´»Øµ÷
class VoiceCallback
: public IXAudio2VoiceCallback
{
public:
VoiceCallback(Music * music);
~VoiceCallback();
void __stdcall OnStreamEnd();
void __stdcall OnBufferEnd(
void * pBufferContext
);
void __stdcall OnBufferStart(
void * pBufferContext
);
void __stdcall OnLoopEnd(
void * pBufferContext
);
void __stdcall OnVoiceProcessingPassEnd();
void __stdcall OnVoiceProcessingPassStart(
UINT32 SamplesRequired
);
void __stdcall OnVoiceError(
void * pBufferContext,
HRESULT Error
);
void SetFuncOnStreamEnd(
const Function& func
);
void SetFuncOnLoopEnd(
const Function& func
);
protected:
Music * _music;
Function _loopEndFunc;
Function _streamEndFunc;
};
// ÎÄ×ÖäÖȾÆ÷
class TextRenderer
: public IDWriteTextRenderer
{
public:
TextRenderer(
ID2D1Factory* pD2DFactory,
ID2D1HwndRenderTarget* pRT,
ID2D1SolidColorBrush* pBrush
);
~TextRenderer();
STDMETHOD_(void, SetTextStyle)(
CONST D2D1_COLOR_F &fillColor,
BOOL hasOutline,
CONST D2D1_COLOR_F &outlineColor,
FLOAT outlineWidth,
D2D1_LINE_JOIN outlineJoin
);
STDMETHOD(DrawGlyphRun)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
DWRITE_MEASURING_MODE measuringMode,
__in DWRITE_GLYPH_RUN const* glyphRun,
__in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawUnderline)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
__in DWRITE_UNDERLINE const* underline,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawStrikethrough)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
__in DWRITE_STRIKETHROUGH const* strikethrough,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawInlineObject)(
__maybenull void* clientDrawingContext,
FLOAT originX,
FLOAT originY,
IDWriteInlineObject* inlineObject,
BOOL isSideways,
BOOL isRightToLeft,
IUnknown* clientDrawingEffect
);
STDMETHOD(IsPixelSnappingDisabled)(
__maybenull void* clientDrawingContext,
__out BOOL* isDisabled
);
STDMETHOD(GetCurrentTransform)(
__maybenull void* clientDrawingContext,
__out DWRITE_MATRIX* transform
);
STDMETHOD(GetPixelsPerDip)(
__maybenull void* clientDrawingContext,
__out FLOAT* pixelsPerDip
);
public:
unsigned long STDMETHODCALLTYPE AddRef();
unsigned long STDMETHODCALLTYPE Release();
HRESULT STDMETHODCALLTYPE QueryInterface(
IID const& riid,
void** ppvObject
);
private:
unsigned long cRefCount_;
D2D1_COLOR_F sFillColor_;
D2D1_COLOR_F sOutlineColor_;
FLOAT fOutlineWidth;
BOOL bShowOutline_;
D2D1_LINE_JOIN nOutlineJoin_;
ID2D1Factory* pD2DFactory_;
ID2D1HwndRenderTarget* pRT_;
ID2D1SolidColorBrush* pBrush_;
};
// Òì³£
class Exception
{
public:
Exception() throw();
explicit Exception(const String& message) throw();
Exception(Exception const& other) throw();
virtual ~Exception() throw();
Exception& operator=(Exception const& other) throw();
// »ñÈ¡Òì³£ÐÅÏ¢
virtual String msg() const;
private:
String _message;
};
// ϵͳÒì³£
class SystemException
: public Exception
{
public:
SystemException() throw();
explicit SystemException(const String& message) throw();
};
}