2018-04-21 23:09:59 +08:00
|
|
|
|
#pragma once
|
2018-09-05 13:33:39 +08:00
|
|
|
|
#include "e2dutil.h"
|
2018-04-21 23:09:59 +08:00
|
|
|
|
|
|
|
|
|
|
namespace e2d
|
|
|
|
|
|
{
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
class Music;
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
// <20><>Դ<EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
class VoiceCallback
|
|
|
|
|
|
: public IXAudio2VoiceCallback
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
VoiceCallback();
|
2018-08-12 12:06:06 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
~VoiceCallback();
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) {}
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) {}
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnStreamEnd) (THIS);
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) {}
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext);
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext);
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {}
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, SetCallbackOnStreamEnd) (THIS_ const Function& func);
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
STDMETHOD_(void, SetCallbackOnLoopEnd) (THIS_ const Function& func);
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
protected:
|
|
|
|
|
|
Function loop_end_callback_;
|
|
|
|
|
|
Function stream_end_callback_;
|
|
|
|
|
|
};
|
2018-05-22 11:58:45 +08:00
|
|
|
|
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>
|
|
|
|
|
|
class E2DTextRenderer
|
|
|
|
|
|
: public IDWriteTextRenderer
|
|
|
|
|
|
{
|
|
|
|
|
|
private:
|
|
|
|
|
|
E2DTextRenderer();
|
|
|
|
|
|
|
|
|
|
|
|
~E2DTextRenderer();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
static HRESULT Create(
|
|
|
|
|
|
E2DTextRenderer** ppTextRenderer,
|
|
|
|
|
|
ID2D1Factory* pD2DFactory,
|
|
|
|
|
|
ID2D1HwndRenderTarget* pRT,
|
|
|
|
|
|
ID2D1SolidColorBrush* pBrush
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
STDMETHOD_(void, SetTextStyle)(
|
|
|
|
|
|
CONST D2D1_COLOR_F &fillColor,
|
|
|
|
|
|
BOOL outline,
|
|
|
|
|
|
CONST D2D1_COLOR_F &outline_color,
|
|
|
|
|
|
FLOAT outline_width,
|
|
|
|
|
|
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_;
|
|
|
|
|
|
ID2D1Factory* pD2DFactory_;
|
|
|
|
|
|
ID2D1HwndRenderTarget* pRT_;
|
|
|
|
|
|
ID2D1SolidColorBrush* pBrush_;
|
|
|
|
|
|
ID2D1StrokeStyle * pCurrStrokeStyle_;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20>쳣
|
|
|
|
|
|
class Exception
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
Exception() E2D_NOEXCEPT;
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
explicit Exception(const char * message) E2D_NOEXCEPT;
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
Exception(Exception const& other) E2D_NOEXCEPT;
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
virtual ~Exception() E2D_NOEXCEPT;
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
Exception& operator=(Exception const& other) E2D_NOEXCEPT;
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD>쳣<EFBFBD><ECB3A3>Ϣ
|
|
|
|
|
|
virtual const char * GetMsg() const;
|
2018-05-24 00:58:16 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
private:
|
|
|
|
|
|
const char * message_;
|
|
|
|
|
|
};
|
2018-04-21 23:09:59 +08:00
|
|
|
|
|
2018-05-24 12:24:39 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
// ϵͳ<CFB5>쳣
|
|
|
|
|
|
class SystemException
|
|
|
|
|
|
: public Exception
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
SystemException() E2D_NOEXCEPT;
|
2018-05-24 12:24:39 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
explicit SystemException(const char * message) E2D_NOEXCEPT;
|
|
|
|
|
|
};
|
2018-05-24 12:24:39 +08:00
|
|
|
|
|
2018-08-15 00:06:03 +08:00
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
template<class Interface>
|
|
|
|
|
|
inline void SafeRelease(Interface*& p)
|
2018-08-15 00:06:03 +08:00
|
|
|
|
{
|
2018-09-05 13:38:30 +08:00
|
|
|
|
if (p != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
p->Release();
|
|
|
|
|
|
p = nullptr;
|
|
|
|
|
|
}
|
2018-08-15 00:06:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-05 13:38:30 +08:00
|
|
|
|
inline void ThrowIfFailed(HRESULT hr)
|
2018-08-15 00:06:03 +08:00
|
|
|
|
{
|
2018-09-05 13:38:30 +08:00
|
|
|
|
if (FAILED(hr))
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD>öϵ<C3B6><CFB5>Բ<EFBFBD><D4B2><EFBFBD> D2D API <20>쳣.
|
|
|
|
|
|
static char s_str[64] = {};
|
|
|
|
|
|
sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast<unsigned int>(hr));
|
|
|
|
|
|
throw SystemException(s_str);
|
|
|
|
|
|
}
|
2018-08-15 00:06:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-04-21 23:09:59 +08:00
|
|
|
|
}
|