部分全局枚举类型修改为类内嵌套枚举

This commit is contained in:
Nomango 2018-05-17 15:22:14 +08:00
parent 084671fa1c
commit c297d7d0e3
23 changed files with 473 additions and 628 deletions

View File

@ -24,7 +24,7 @@ bool e2d::Game::init(const String& name, const String& mutexName)
if (!mutexName.isEmpty()) if (!mutexName.isEmpty())
{ {
// 创建进程互斥体 // 创建进程互斥体
HANDLE hMutex = ::CreateMutex(NULL, TRUE, L"Easy2DApp-" + mutexName); HANDLE hMutex = ::CreateMutex(nullptr, TRUE, L"Easy2DApp-" + mutexName);
if (hMutex == nullptr) if (hMutex == nullptr)
{ {
@ -41,7 +41,7 @@ bool e2d::Game::init(const String& name, const String& mutexName)
} }
// 初始化 COM 组件 // 初始化 COM 组件
CoInitialize(NULL); CoInitialize(nullptr);
// 创建设备无关资源 // 创建设备无关资源
if (!Renderer::__createDeviceIndependentResources()) if (!Renderer::__createDeviceIndependentResources())

View File

@ -165,65 +165,25 @@ bool Input::isKeyRelease(KeyCode key)
return false; return false;
} }
bool Input::isMouseLButtonDown() bool e2d::Input::isMouseDown(MouseCode code)
{ {
if (s_MouseState.rgbButtons[0] & 0x80) if (s_MouseState.rgbButtons[static_cast<int>(code)] & 0x80)
return true; return true;
return false; return false;
} }
bool Input::isMouseRButtonDown() bool e2d::Input::isMousePress(MouseCode code)
{ {
if (s_MouseState.rgbButtons[1] & 0x80) if ((s_MouseState.rgbButtons[static_cast<int>(code)] & 0x80) &&
!(s_MouseRecordState.rgbButtons[static_cast<int>(code)] & 0x80))
return true; return true;
return false; return false;
} }
bool Input::isMouseMButtonDown() bool e2d::Input::isMouseRelease(MouseCode code)
{ {
if (s_MouseState.rgbButtons[2] & 0x80) if (!(s_MouseState.rgbButtons[static_cast<int>(code)] & 0x80) &&
return true; (s_MouseRecordState.rgbButtons[static_cast<int>(code)] & 0x80))
return false;
}
bool Input::isMouseLButtonPress()
{
if ((s_MouseState.rgbButtons[0] & 0x80) && !(s_MouseRecordState.rgbButtons[0] & 0x80))
return true;
return false;
}
bool Input::isMouseRButtonPress()
{
if ((s_MouseState.rgbButtons[1] & 0x80) && !(s_MouseRecordState.rgbButtons[1] & 0x80))
return true;
return false;
}
bool Input::isMouseMButtonPress()
{
if ((s_MouseState.rgbButtons[2] & 0x80) && !(s_MouseRecordState.rgbButtons[2] & 0x80))
return true;
return false;
}
bool Input::isMouseLButtonRelease()
{
if (!(s_MouseState.rgbButtons[0] & 0x80) && (s_MouseRecordState.rgbButtons[0] & 0x80))
return true;
return false;
}
bool Input::isMouseRButtonRelease()
{
if (!(s_MouseState.rgbButtons[1] & 0x80) && (s_MouseRecordState.rgbButtons[1] & 0x80))
return true;
return false;
}
bool Input::isMouseMButtonRelease()
{
if (!(s_MouseState.rgbButtons[2] & 0x80) && (s_MouseRecordState.rgbButtons[2] & 0x80))
return true; return true;
return false; return false;
} }

View File

@ -30,7 +30,7 @@ bool e2d::Renderer::__createDeviceIndependentResources()
// 创建 WIC 绘图工厂,用于统一处理各种格式的图片 // 创建 WIC 绘图工厂,用于统一处理各种格式的图片
hr = CoCreateInstance( hr = CoCreateInstance(
CLSID_WICImagingFactory, CLSID_WICImagingFactory,
NULL, nullptr,
CLSCTX_INPROC_SERVER, CLSCTX_INPROC_SERVER,
IID_IWICImagingFactory, IID_IWICImagingFactory,
reinterpret_cast<void**>(&s_pIWICFactory) reinterpret_cast<void**>(&s_pIWICFactory)
@ -60,7 +60,7 @@ bool e2d::Renderer::__createDeviceIndependentResources()
// 创建文本格式化对象 // 创建文本格式化对象
hr = s_pDWriteFactory->CreateTextFormat( hr = s_pDWriteFactory->CreateTextFormat(
L"", L"",
NULL, nullptr,
DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, DWRITE_FONT_STRETCH_NORMAL,
@ -204,7 +204,7 @@ void e2d::Renderer::__render()
D2D1_LINE_JOIN_ROUND D2D1_LINE_JOIN_ROUND
); );
pTextLayout->Draw(NULL, s_pTextRenderer, 10, 0); pTextLayout->Draw(nullptr, s_pTextRenderer, 10, 0);
SafeReleaseInterface(pTextLayout); SafeReleaseInterface(pTextLayout);
} }
@ -236,7 +236,7 @@ e2d::Color e2d::Renderer::getBackgroundColor()
void e2d::Renderer::setBackgroundColor(Color color) void e2d::Renderer::setBackgroundColor(Color color)
{ {
s_nClearColor = color.toColorF(); s_nClearColor = color.toD2DColorF();
} }
void e2d::Renderer::showFps(bool show) void e2d::Renderer::showFps(bool show)

View File

@ -13,15 +13,15 @@ bool e2d::Window::__init()
WNDCLASSEX wcex = { 0 }; WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX); wcex.cbSize = sizeof(WNDCLASSEX);
wcex.lpszClassName = L"Easy2DApp"; wcex.lpszClassName = L"Easy2DApp";
wcex.hIcon = NULL; wcex.hIcon = nullptr;
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = Window::WndProc; wcex.lpfnWndProc = Window::WndProc;
wcex.cbClsExtra = 0; wcex.cbClsExtra = 0;
wcex.cbWndExtra = sizeof(LONG_PTR); wcex.cbWndExtra = sizeof(LONG_PTR);
wcex.hInstance = HINST_THISCOMPONENT; wcex.hInstance = HINST_THISCOMPONENT;
wcex.hbrBackground = NULL; wcex.hbrBackground = nullptr;
wcex.lpszMenuName = NULL; wcex.lpszMenuName = nullptr;
wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW); wcex.hCursor = ::LoadCursor(nullptr, IDC_ARROW);
RegisterClassEx(&wcex); RegisterClassEx(&wcex);
@ -53,10 +53,10 @@ bool e2d::Window::__init()
dwStyle, dwStyle,
(screenWidth - nWidth) / 2, (screenHeight - nHeight) / 2, (screenWidth - nWidth) / 2, (screenHeight - nHeight) / 2,
nWidth, nHeight, nWidth, nHeight,
NULL, nullptr,
NULL, nullptr,
HINST_THISCOMPONENT, HINST_THISCOMPONENT,
NULL nullptr
); );
HRESULT hr = s_HWnd ? S_OK : E_FAIL; HRESULT hr = s_HWnd ? S_OK : E_FAIL;
@ -105,7 +105,7 @@ void e2d::Window::__poll()
{ {
static MSG msg; static MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) while (::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
{ {
::TranslateMessage(&msg); ::TranslateMessage(&msg);
::DispatchMessage(&msg); ::DispatchMessage(&msg);
@ -182,7 +182,7 @@ void e2d::Window::setTitle(const String& title)
void e2d::Window::setIcon(int iconID) void e2d::Window::setIcon(int iconID)
{ {
HINSTANCE hInstance = ::GetModuleHandle(NULL); HINSTANCE hInstance = ::GetModuleHandle(nullptr);
HICON hIcon = (HICON)::LoadImage(hInstance, MAKEINTRESOURCE(iconID), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); HICON hIcon = (HICON)::LoadImage(hInstance, MAKEINTRESOURCE(iconID), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
// 设置窗口的图标 // 设置窗口的图标
::SendMessage(s_HWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon); ::SendMessage(s_HWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
@ -191,7 +191,7 @@ void e2d::Window::setIcon(int iconID)
void e2d::Window::setCursor(Cursor cursor) void e2d::Window::setCursor(Cursor cursor)
{ {
LPCWSTR pCursorName = NULL; LPCWSTR pCursorName = nullptr;
switch (cursor) switch (cursor)
{ {
case Cursor::NORMAL: case Cursor::NORMAL:
@ -218,7 +218,7 @@ void e2d::Window::setCursor(Cursor cursor)
break; break;
} }
HCURSOR hCursor = ::LoadCursor(NULL, pCursorName); HCURSOR hCursor = ::LoadCursor(nullptr, pCursorName);
::SetCursor(hCursor); ::SetCursor(hCursor);
} }
@ -335,7 +335,7 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
case WM_DISPLAYCHANGE: case WM_DISPLAYCHANGE:
{ {
// 重绘客户区 // 重绘客户区
InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWnd, nullptr, FALSE);
} }
result = 0; result = 0;
hasHandled = true; hasHandled = true;
@ -345,7 +345,7 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
case WM_PAINT: case WM_PAINT:
{ {
e2d::Renderer::__render(); e2d::Renderer::__render();
ValidateRect(hWnd, NULL); ValidateRect(hWnd, nullptr);
} }
result = 0; result = 0;
hasHandled = true; hasHandled = true;

View File

@ -54,13 +54,13 @@ void e2d::Collider::_render()
// 获取纯色画刷 // 获取纯色画刷
ID2D1SolidColorBrush * pBrush = Renderer::getSolidColorBrush(); ID2D1SolidColorBrush * pBrush = Renderer::getSolidColorBrush();
// 设置画刷颜色和透明度 // 设置画刷颜色和透明度
pBrush->SetColor(_color.toColorF()); pBrush->SetColor(_color.toD2DColorF());
// 绘制几何碰撞体 // 绘制几何碰撞体
Renderer::getRenderTarget()->DrawGeometry(_transformed, pBrush); Renderer::getRenderTarget()->DrawGeometry(_transformed, pBrush);
} }
} }
e2d::Relation e2d::Collider::getRelationWith(Collider * pCollider) const e2d::Collider::Relation e2d::Collider::getRelationWith(Collider * pCollider) const
{ {
if (_transformed && pCollider->_transformed) if (_transformed && pCollider->_transformed)
{ {

View File

@ -1,12 +1,12 @@
#include "..\e2dcommon.h" #include "..\e2dcommon.h"
static const UINT32 sc_redShift = 16; static const UINT sc_redShift = 16;
static const UINT32 sc_greenShift = 8; static const UINT sc_greenShift = 8;
static const UINT32 sc_blueShift = 0; static const UINT sc_blueShift = 0;
static const UINT32 sc_redMask = 0xff << sc_redShift; static const UINT sc_redMask = 0xff << sc_redShift;
static const UINT32 sc_greenMask = 0xff << sc_greenShift; static const UINT sc_greenMask = 0xff << sc_greenShift;
static const UINT32 sc_blueMask = 0xff << sc_blueShift; static const UINT sc_blueMask = 0xff << sc_blueShift;
e2d::Color::Color() e2d::Color::Color()
: r(0) : r(0)
@ -32,17 +32,17 @@ e2d::Color::Color(double r, double g, double b, double alpha)
{ {
} }
e2d::Color::Color(UINT32 rgb) e2d::Color::Color(UINT rgb)
{ {
_init(rgb, 1); _init(rgb, 1);
} }
e2d::Color::Color(UINT32 rgb, double alpha) e2d::Color::Color(UINT rgb, double alpha)
{ {
_init(rgb, alpha); _init(rgb, alpha);
} }
void e2d::Color::_init(UINT32 rgb, double alpha) void e2d::Color::_init(UINT rgb, double alpha)
{ {
r = float((rgb & sc_redMask) >> sc_redShift) / 255.f; r = float((rgb & sc_redMask) >> sc_redShift) / 255.f;
g = float((rgb & sc_greenMask) >> sc_greenShift) / 255.f; g = float((rgb & sc_greenMask) >> sc_greenShift) / 255.f;
@ -50,7 +50,7 @@ void e2d::Color::_init(UINT32 rgb, double alpha)
a = float(alpha); a = float(alpha);
} }
D2D1_COLOR_F e2d::Color::toColorF() const D2D1_COLOR_F e2d::Color::toD2DColorF() const
{ {
return D2D1::ColorF(r, g, b, a); return D2D1::ColorF(r, g, b, a);
} }

View File

@ -195,7 +195,7 @@ bool e2d::Image::preload(const String& filePath)
// 创建解码器 // 创建解码器
hr = Renderer::getIWICImagingFactory()->CreateDecoderFromFilename( hr = Renderer::getIWICImagingFactory()->CreateDecoderFromFilename(
filePath, filePath,
NULL, nullptr,
GENERIC_READ, GENERIC_READ,
WICDecodeMetadataCacheOnLoad, WICDecodeMetadataCacheOnLoad,
&pDecoder &pDecoder
@ -221,7 +221,7 @@ bool e2d::Image::preload(const String& filePath)
pSource, pSource,
GUID_WICPixelFormat32bppPBGRA, GUID_WICPixelFormat32bppPBGRA,
WICBitmapDitherTypeNone, WICBitmapDitherTypeNone,
NULL, nullptr,
0.f, 0.f,
WICBitmapPaletteTypeMedianCut WICBitmapPaletteTypeMedianCut
); );
@ -232,7 +232,7 @@ bool e2d::Image::preload(const String& filePath)
// 从 WIC 位图创建一个 Direct2D 位图 // 从 WIC 位图创建一个 Direct2D 位图
hr = Renderer::getRenderTarget()->CreateBitmapFromWicBitmap( hr = Renderer::getRenderTarget()->CreateBitmapFromWicBitmap(
pConverter, pConverter,
NULL, nullptr,
&pBitmap &pBitmap
); );
} }
@ -325,7 +325,7 @@ bool e2d::Image::preload(int resNameId, const String& resType)
// 创建流的解码器 // 创建流的解码器
hr = Renderer::getIWICImagingFactory()->CreateDecoderFromStream( hr = Renderer::getIWICImagingFactory()->CreateDecoderFromStream(
pStream, pStream,
NULL, nullptr,
WICDecodeMetadataCacheOnLoad, WICDecodeMetadataCacheOnLoad,
&pDecoder &pDecoder
); );
@ -351,7 +351,7 @@ bool e2d::Image::preload(int resNameId, const String& resType)
pSource, pSource,
GUID_WICPixelFormat32bppPBGRA, GUID_WICPixelFormat32bppPBGRA,
WICBitmapDitherTypeNone, WICBitmapDitherTypeNone,
NULL, nullptr,
0.f, 0.f,
WICBitmapPaletteTypeMedianCut WICBitmapPaletteTypeMedianCut
); );
@ -362,7 +362,7 @@ bool e2d::Image::preload(int resNameId, const String& resType)
// 从 WIC 位图创建一个 Direct2D 位图 // 从 WIC 位图创建一个 Direct2D 位图
hr = Renderer::getRenderTarget()->CreateBitmapFromWicBitmap( hr = Renderer::getRenderTarget()->CreateBitmapFromWicBitmap(
pConverter, pConverter,
NULL, nullptr,
&pBitmap &pBitmap
); );
} }

View File

@ -78,7 +78,7 @@ e2d::String e2d::String::format(const char * format, ...)
{ {
std::string tmp; std::string tmp;
va_list marker = NULL; va_list marker = nullptr;
va_start(marker, format); va_start(marker, format);
size_t nu_of_chars = _vscprintf(format, marker); size_t nu_of_chars = _vscprintf(format, marker);
@ -100,7 +100,7 @@ e2d::String e2d::String::format(const wchar_t * format, ...)
{ {
std::wstring tmp; std::wstring tmp;
va_list marker = NULL; va_list marker = nullptr;
va_start(marker, format); va_start(marker, format);
size_t nu_of_chars = _vscwprintf(format, marker); size_t nu_of_chars = _vscwprintf(format, marker);

View File

@ -1,53 +0,0 @@
#include "..\e2dnode.h"
e2d::TextStyle::TextStyle()
: fontFamily("")
, fontSize(22)
, color(Color::WHITE)
, fontWeight(FontWeight::NORMAL)
, italic(false)
, alignment(TextAlign::LEFT)
, wrapping(false)
, wrappingWidth(0.0)
, lineSpacing(0.0)
, hasUnderline(false)
, hasStrikethrough(false)
, hasOutline(true)
, outlineColor(Color(Color::BLACK, 0.5))
, outlineWidth(1.0)
, outlineJoin(LineJoin::ROUND)
{}
e2d::TextStyle::TextStyle(
const String& fontFamily,
double fontSize,
Color color,
UINT32 fontWeight,
bool italic,
TextAlign alignment,
bool wrapping,
double wrappingWidth,
double lineSpacing,
bool hasUnderline,
bool hasStrikethrough,
bool hasOutline,
Color outlineColor,
double outlineWidth,
LineJoin outlineJoin
)
: fontFamily(fontFamily)
, fontSize(fontSize)
, color(color)
, fontWeight(fontWeight)
, italic(italic)
, alignment(alignment)
, wrapping(wrapping)
, wrappingWidth(wrappingWidth)
, lineSpacing(lineSpacing)
, hasUnderline(hasUnderline)
, hasStrikethrough(hasStrikethrough)
, hasOutline(hasOutline)
, outlineColor(outlineColor)
, outlineWidth(outlineWidth)
, outlineJoin(outlineJoin)
{}

View File

@ -57,12 +57,12 @@ STDMETHODIMP CustomTextRenderer::DrawGlyphRun(
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
ID2D1PathGeometry* pPathGeometry = NULL; ID2D1PathGeometry* pPathGeometry = nullptr;
hr = pD2DFactory_->CreatePathGeometry( hr = pD2DFactory_->CreatePathGeometry(
&pPathGeometry &pPathGeometry
); );
ID2D1GeometrySink* pSink = NULL; ID2D1GeometrySink* pSink = nullptr;
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = pPathGeometry->Open( hr = pPathGeometry->Open(
@ -95,7 +95,7 @@ STDMETHODIMP CustomTextRenderer::DrawGlyphRun(
baselineOriginX, baselineOriginY baselineOriginX, baselineOriginY
); );
ID2D1TransformedGeometry* pTransformedGeometry = NULL; ID2D1TransformedGeometry* pTransformedGeometry = nullptr;
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = pD2DFactory_->CreateTransformedGeometry( hr = pD2DFactory_->CreateTransformedGeometry(
@ -105,10 +105,9 @@ STDMETHODIMP CustomTextRenderer::DrawGlyphRun(
); );
} }
ID2D1StrokeStyle * pStrokeStyle = NULL; if (SUCCEEDED(hr) && bShowOutline_)
if (SUCCEEDED(hr))
{ {
ID2D1StrokeStyle * pStrokeStyle = nullptr;
hr = Renderer::getID2D1Factory()->CreateStrokeStyle( hr = Renderer::getID2D1Factory()->CreateStrokeStyle(
D2D1::StrokeStyleProperties( D2D1::StrokeStyleProperties(
D2D1_CAP_STYLE_FLAT, D2D1_CAP_STYLE_FLAT,
@ -118,15 +117,12 @@ STDMETHODIMP CustomTextRenderer::DrawGlyphRun(
2.0f, 2.0f,
D2D1_DASH_STYLE_SOLID, D2D1_DASH_STYLE_SOLID,
0.0f), 0.0f),
NULL, nullptr,
0, 0,
&pStrokeStyle &pStrokeStyle
); );
}
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{
if (bShowOutline_)
{ {
pBrush_->SetColor(sOutlineColor_); pBrush_->SetColor(sOutlineColor_);
@ -137,7 +133,10 @@ STDMETHODIMP CustomTextRenderer::DrawGlyphRun(
pStrokeStyle pStrokeStyle
); );
} }
}
if (SUCCEEDED(hr))
{
pBrush_->SetColor(sFillColor_); pBrush_->SetColor(sFillColor_);
pRT_->FillGeometry( pRT_->FillGeometry(
@ -170,7 +169,7 @@ STDMETHODIMP CustomTextRenderer::DrawUnderline(
underline->offset + underline->thickness underline->offset + underline->thickness
); );
ID2D1RectangleGeometry* pRectangleGeometry = NULL; ID2D1RectangleGeometry* pRectangleGeometry = nullptr;
hr = pD2DFactory_->CreateRectangleGeometry( hr = pD2DFactory_->CreateRectangleGeometry(
&rect, &rect,
&pRectangleGeometry &pRectangleGeometry
@ -182,7 +181,7 @@ STDMETHODIMP CustomTextRenderer::DrawUnderline(
baselineOriginX, baselineOriginY baselineOriginX, baselineOriginY
); );
ID2D1TransformedGeometry* pTransformedGeometry = NULL; ID2D1TransformedGeometry* pTransformedGeometry = nullptr;
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = pD2DFactory_->CreateTransformedGeometry( hr = pD2DFactory_->CreateTransformedGeometry(
@ -192,10 +191,9 @@ STDMETHODIMP CustomTextRenderer::DrawUnderline(
); );
} }
ID2D1StrokeStyle * pStrokeStyle = NULL; if (SUCCEEDED(hr) && bShowOutline_)
if (SUCCEEDED(hr))
{ {
ID2D1StrokeStyle * pStrokeStyle = nullptr;
hr = Renderer::getID2D1Factory()->CreateStrokeStyle( hr = Renderer::getID2D1Factory()->CreateStrokeStyle(
D2D1::StrokeStyleProperties( D2D1::StrokeStyleProperties(
D2D1_CAP_STYLE_FLAT, D2D1_CAP_STYLE_FLAT,
@ -205,15 +203,12 @@ STDMETHODIMP CustomTextRenderer::DrawUnderline(
2.0f, 2.0f,
D2D1_DASH_STYLE_SOLID, D2D1_DASH_STYLE_SOLID,
0.0f), 0.0f),
NULL, nullptr,
0, 0,
&pStrokeStyle &pStrokeStyle
); );
}
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{
if (bShowOutline_)
{ {
pBrush_->SetColor(sOutlineColor_); pBrush_->SetColor(sOutlineColor_);
@ -224,7 +219,10 @@ STDMETHODIMP CustomTextRenderer::DrawUnderline(
pStrokeStyle pStrokeStyle
); );
} }
}
if (SUCCEEDED(hr))
{
pBrush_->SetColor(sFillColor_); pBrush_->SetColor(sFillColor_);
pRT_->FillGeometry( pRT_->FillGeometry(
@ -256,7 +254,7 @@ STDMETHODIMP CustomTextRenderer::DrawStrikethrough(
strikethrough->offset + strikethrough->thickness strikethrough->offset + strikethrough->thickness
); );
ID2D1RectangleGeometry* pRectangleGeometry = NULL; ID2D1RectangleGeometry* pRectangleGeometry = nullptr;
hr = pD2DFactory_->CreateRectangleGeometry( hr = pD2DFactory_->CreateRectangleGeometry(
&rect, &rect,
&pRectangleGeometry &pRectangleGeometry
@ -268,7 +266,7 @@ STDMETHODIMP CustomTextRenderer::DrawStrikethrough(
baselineOriginX, baselineOriginY baselineOriginX, baselineOriginY
); );
ID2D1TransformedGeometry* pTransformedGeometry = NULL; ID2D1TransformedGeometry* pTransformedGeometry = nullptr;
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = pD2DFactory_->CreateTransformedGeometry( hr = pD2DFactory_->CreateTransformedGeometry(
@ -278,10 +276,9 @@ STDMETHODIMP CustomTextRenderer::DrawStrikethrough(
); );
} }
ID2D1StrokeStyle * pStrokeStyle = NULL; if (SUCCEEDED(hr) && bShowOutline_)
if (SUCCEEDED(hr))
{ {
ID2D1StrokeStyle * pStrokeStyle = nullptr;
hr = Renderer::getID2D1Factory()->CreateStrokeStyle( hr = Renderer::getID2D1Factory()->CreateStrokeStyle(
D2D1::StrokeStyleProperties( D2D1::StrokeStyleProperties(
D2D1_CAP_STYLE_FLAT, D2D1_CAP_STYLE_FLAT,
@ -291,15 +288,12 @@ STDMETHODIMP CustomTextRenderer::DrawStrikethrough(
2.0f, 2.0f,
D2D1_DASH_STYLE_SOLID, D2D1_DASH_STYLE_SOLID,
0.0f), 0.0f),
NULL, nullptr,
0, 0,
&pStrokeStyle &pStrokeStyle
); );
}
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{
if (bShowOutline_)
{ {
pBrush_->SetColor(sOutlineColor_); pBrush_->SetColor(sOutlineColor_);
@ -310,7 +304,10 @@ STDMETHODIMP CustomTextRenderer::DrawStrikethrough(
pStrokeStyle pStrokeStyle
); );
} }
}
if (SUCCEEDED(hr))
{
pBrush_->SetColor(sFillColor_); pBrush_->SetColor(sFillColor_);
pRT_->FillGeometry( pRT_->FillGeometry(
@ -406,7 +403,7 @@ STDMETHODIMP CustomTextRenderer::QueryInterface(
} }
else else
{ {
*ppvObject = NULL; *ppvObject = nullptr;
return E_FAIL; return E_FAIL;
} }

View File

@ -114,9 +114,9 @@ void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
if (IsCollideWith(pActiveNode, pPassiveNode)) if (IsCollideWith(pActiveNode, pPassiveNode))
{ {
// 判断两碰撞体交集情况 // 判断两碰撞体交集情况
Relation relation = pActiveCollider->getRelationWith(pPassiveCollider); Collider::Relation relation = pActiveCollider->getRelationWith(pPassiveCollider);
// 忽略 UNKNOWN 和 DISJOINT 情况 // 忽略 UNKNOWN 和 DISJOINT 情况
if (relation != Relation::UNKNOWN && relation != Relation::DISJOINT) if (relation != Collider::Relation::UNKNOWN && relation != Collider::Relation::DISJOINT)
{ {
s_pActiveNode = pActiveNode; s_pActiveNode = pActiveNode;
s_pPassiveNode = pPassiveNode; s_pPassiveNode = pPassiveNode;

View File

@ -209,7 +209,7 @@ void e2d::Button::onFixedUpdate()
if (_enable && _visiable && _normal) if (_enable && _visiable && _normal)
{ {
if (Input::isMouseLButtonRelease()) if (Input::isMouseRelease(Input::MouseCode::LEFT))
{ {
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部 // 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
if (_isSelected && if (_isSelected &&
@ -221,7 +221,7 @@ void e2d::Button::onFixedUpdate()
_isSelected = false; _isSelected = false;
} }
if (Input::isMouseLButtonPress()) if (Input::isMousePress(Input::MouseCode::LEFT))
{ {
if (_normal->isPointIn(Input::getMousePos())) if (_normal->isPointIn(Input::getMousePos()))
{ {
@ -231,19 +231,19 @@ void e2d::Button::onFixedUpdate()
} }
} }
if (_isSelected && Input::isMouseLButtonDown()) if (_isSelected && Input::isMouseDown(Input::MouseCode::LEFT))
{ {
if (_normal->isPointIn(Input::getMousePos())) if (_normal->isPointIn(Input::getMousePos()))
{ {
_setState(ButtonState::SELECTED); _setState(ButtonState::SELECTED);
Window::setCursor(Cursor::HAND); Window::setCursor(Window::Cursor::HAND);
return; return;
} }
} }
else if (_normal->isPointIn(Input::getMousePos())) else if (_normal->isPointIn(Input::getMousePos()))
{ {
_setState(ButtonState::MOUSEOVER); _setState(ButtonState::MOUSEOVER);
Window::setCursor(Cursor::HAND); Window::setCursor(Window::Cursor::HAND);
return; return;
} }
@ -252,7 +252,7 @@ void e2d::Button::onFixedUpdate()
if (_visiable && !_enable && _normal && _normal->isPointIn(Input::getMousePos())) if (_visiable && !_enable && _normal && _normal->isPointIn(Input::getMousePos()))
{ {
Window::setCursor(Cursor::NO); Window::setCursor(Window::Cursor::NO);
} }
} }

View File

@ -1,7 +1,6 @@
#include "..\e2dnode.h" #include "..\e2dnode.h"
#include "..\e2dmanager.h" #include "..\e2dmanager.h"
#include "..\e2daction.h" #include "..\e2daction.h"
#include "..\e2dcollider.h"
#include <algorithm> #include <algorithm>
// 默认中心点位置 // 默认中心点位置
@ -337,9 +336,9 @@ double e2d::Node::getOpacity() const
return _realOpacity; return _realOpacity;
} }
e2d::NodeProperty e2d::Node::getProperty() const e2d::Node::Property e2d::Node::getProperty() const
{ {
NodeProperty prop; Property prop;
prop.visable = _visiable; prop.visable = _visiable;
prop.posX = _posX; prop.posX = _posX;
prop.posY = _posY; prop.posY = _posY;
@ -534,7 +533,7 @@ void e2d::Node::setSize(Size size)
this->setSize(size.width, size.height); this->setSize(size.width, size.height);
} }
void e2d::Node::setProperty(NodeProperty prop) void e2d::Node::setProperty(Property prop)
{ {
this->setVisiable(prop.visable); this->setVisiable(prop.visable);
this->setPos(prop.posX, prop.posY); this->setPos(prop.posX, prop.posY);
@ -546,23 +545,23 @@ void e2d::Node::setProperty(NodeProperty prop)
this->setSkew(prop.skewAngleX, prop.skewAngleY); this->setSkew(prop.skewAngleX, prop.skewAngleY);
} }
void e2d::Node::setCollider(ColliderType nColliderType) void e2d::Node::setCollider(Collider::Type type)
{ {
switch (nColliderType) switch (type)
{ {
case ColliderType::RECT: case Collider::Type::RECT:
{ {
this->setCollider(Create<ColliderRect>(this)); this->setCollider(Create<ColliderRect>(this));
break; break;
} }
case ColliderType::CIRCLE: case Collider::Type::CIRCLE:
{ {
this->setCollider(Create<ColliderCircle>(this)); this->setCollider(Create<ColliderCircle>(this));
break; break;
} }
case ColliderType::ELLIPSE: case Collider::Type::ELLIPSE:
{ {
this->setCollider(Create<ColliderEllipse>(this)); this->setCollider(Create<ColliderEllipse>(this));
break; break;
@ -913,9 +912,9 @@ bool e2d::Node::isIntersectWith(const Node * node) const
// 如果存在碰撞体,用碰撞体判断 // 如果存在碰撞体,用碰撞体判断
if (this->_collider && node->_collider) if (this->_collider && node->_collider)
{ {
Relation relation = this->_collider->getRelationWith(node->_collider); Collider::Relation relation = this->_collider->getRelationWith(node->_collider);
if ((relation != Relation::UNKNOWN) && if ((relation != Collider::Relation::UNKNOWN) &&
(relation != Relation::DISJOINT)) (relation != Collider::Relation::DISJOINT))
{ {
return true; return true;
} }

View File

@ -1,7 +1,7 @@
#include "..\..\e2dshape.h" #include "..\..\e2dshape.h"
e2d::Shape::Shape() e2d::Shape::Shape()
: _style(ShapeStyle::SOLID) : _style(Style::SOLID)
, _fillColor(Color::BLUE, 0.3) , _fillColor(Color::BLUE, 0.3)
, _lineColor(Color::BLUE, 0.5) , _lineColor(Color::BLUE, 0.5)
, _strokeWidth(1) , _strokeWidth(1)
@ -19,26 +19,26 @@ void e2d::Shape::onRender()
switch (_style) switch (_style)
{ {
case ShapeStyle::FILL: case Style::FILL:
{ {
pBrush->SetColor(_fillColor.toColorF()); pBrush->SetColor(_fillColor.toD2DColorF());
this->_renderFill(); this->_renderFill();
pBrush->SetColor(_lineColor.toColorF()); pBrush->SetColor(_lineColor.toD2DColorF());
this->_renderLine(); this->_renderLine();
break; break;
} }
case ShapeStyle::ROUND: case Style::ROUND:
{ {
pBrush->SetColor(_lineColor.toColorF()); pBrush->SetColor(_lineColor.toD2DColorF());
this->_renderLine(); this->_renderLine();
break; break;
} }
case ShapeStyle::SOLID: case Style::SOLID:
{ {
pBrush->SetColor(_fillColor.toColorF()); pBrush->SetColor(_fillColor.toD2DColorF());
this->_renderFill(); this->_renderFill();
break; break;
} }
@ -63,7 +63,7 @@ double e2d::Shape::getStrokeWidth() const
return _strokeWidth; return _strokeWidth;
} }
e2d::ShapeStyle e2d::Shape::getStyle() const e2d::Shape::Style e2d::Shape::getStyle() const
{ {
return _style; return _style;
} }
@ -83,7 +83,7 @@ void e2d::Shape::setStrokeWidth(double strokeWidth)
_strokeWidth = float(strokeWidth); _strokeWidth = float(strokeWidth);
} }
void e2d::Shape::setStyle(ShapeStyle style) void e2d::Shape::setStyle(Style style)
{ {
_style = style; _style = style;
} }

View File

@ -1,72 +1,88 @@
#include "..\e2dnode.h" #include "..\e2dnode.h"
e2d::Text::Text() //-------------------------------------------------------
: _style() // Font
, _textLayout(nullptr) //-------------------------------------------------------
, _textFormat(nullptr)
e2d::Text::Font::Font()
: family("")
, size(22)
, weight(Font::Weight::NORMAL)
, italic(false)
{ {
} }
e2d::Text::Text(const String& text) e2d::Text::Font::Font(const String & family, double size, UINT weight, bool italic)
: _style() : family(family)
, _textLayout(nullptr) , size(size)
, _textFormat(nullptr) , weight(weight)
, _text(text) , italic(italic)
{ {
_reset();
} }
e2d::Text::Text(TextStyle textStyle)
: _style(textStyle)
, _textLayout(nullptr)
, _textFormat(nullptr)
{
_reset();
}
e2d::Text::Text(const String& text, TextStyle textStyle) //-------------------------------------------------------
: _style(textStyle) // Style
, _textLayout(nullptr) //-------------------------------------------------------
, _textFormat(nullptr)
, _text(text)
{
_reset();
}
e2d::Text::Text( e2d::Text::Style::Style()
const String& text, : color(Color::WHITE)
const String& fontFamily, , alignment(Align::LEFT)
double fontSize, , wrapping(false)
UINT32 color, , wrappingWidth(0.0)
UINT32 fontWeight, , lineSpacing(0.0)
bool italic, , hasUnderline(false)
TextAlign alignment, , hasStrikethrough(false)
, hasOutline(true)
, outlineColor(Color(Color::BLACK, 0.5))
, outlineWidth(1.0)
, outlineJoin(LineJoin::ROUND)
{}
e2d::Text::Style::Style(
Color color,
Align alignment,
bool wrapping, bool wrapping,
double wrappingWidth, double wrappingWidth,
double lineSpacing, double lineSpacing,
bool hasUnderline, bool hasUnderline,
bool hasStrikethrough, bool hasStrikethrough,
bool hasOutline, bool hasOutline,
UINT32 outlineColor, Color outlineColor,
UINT32 outlineWidth double outlineWidth,
LineJoin outlineJoin
) )
: _style( : color(color)
fontFamily, , alignment(alignment)
fontSize, , wrapping(wrapping)
color, , wrappingWidth(wrappingWidth)
fontWeight, , lineSpacing(lineSpacing)
italic, , hasUnderline(hasUnderline)
alignment, , hasStrikethrough(hasStrikethrough)
wrapping, , hasOutline(hasOutline)
wrappingWidth, , outlineColor(outlineColor)
lineSpacing, , outlineWidth(outlineWidth)
hasUnderline, , outlineJoin(outlineJoin)
hasStrikethrough, {}
hasOutline,
outlineColor,
outlineWidth
) //-------------------------------------------------------
// Text
//-------------------------------------------------------
e2d::Text::Text()
: _font()
, _style()
, _textLayout(nullptr)
, _textFormat(nullptr)
{
}
e2d::Text::Text(const String & text, const Font & font, const Style & style)
: _font(font)
, _style(style)
, _textLayout(nullptr) , _textLayout(nullptr)
, _textFormat(nullptr) , _textFormat(nullptr)
, _text(text) , _text(text)
@ -79,24 +95,9 @@ e2d::Text * e2d::Text::create()
return Create<Text>(); return Create<Text>();
} }
e2d::Text * e2d::Text::create(const String & text) e2d::Text * e2d::Text::create(const String & text, const Font & font, const Style & style)
{ {
return Create<Text>(text); return Create<Text>(text, font, style);
}
e2d::Text * e2d::Text::create(TextStyle textStyle)
{
return Create<Text>(textStyle);
}
e2d::Text * e2d::Text::create(const String & text, TextStyle textStyle)
{
return Create<Text>(text, textStyle);
}
e2d::Text * e2d::Text::create(const String & text, const String & fontFamily, double fontSize, UINT32 color, UINT32 fontWeight, bool italic, TextAlign alignment, bool wrapping, double wrappingWidth, double lineSpacing, bool hasUnderline, bool hasStrikethrough, bool hasOutline, UINT32 outlineColor, UINT32 outlineWidth)
{
return Create<Text>(text, fontFamily, fontSize, color, fontWeight, italic, alignment, wrapping, wrappingWidth, lineSpacing, hasUnderline, hasStrikethrough, hasOutline, outlineColor, outlineWidth);
} }
e2d::Text::~Text() e2d::Text::~Text()
@ -110,24 +111,29 @@ e2d::String e2d::Text::getText() const
return _text; return _text;
} }
e2d::TextStyle e2d::Text::getTextStyle() const e2d::Text::Font e2d::Text::getFont() const
{
return _font;
}
e2d::Text::Style e2d::Text::getStyle() const
{ {
return _style; return _style;
} }
e2d::String e2d::Text::getFontFamily() const e2d::String e2d::Text::getFontFamily() const
{ {
return _style.fontFamily; return _font.family;
} }
double e2d::Text::getFontSize() const double e2d::Text::getFontSize() const
{ {
return _style.fontSize; return _font.size;
} }
UINT32 e2d::Text::getFontWeight() const UINT e2d::Text::getFontWeight() const
{ {
return _style.fontWeight; return _font.weight;
} }
e2d::Color e2d::Text::getColor() const e2d::Color e2d::Text::getColor() const
@ -166,7 +172,7 @@ int e2d::Text::getLineCount() const
bool e2d::Text::isItalic() const bool e2d::Text::isItalic() const
{ {
return _style.italic; return _font.italic;
} }
bool e2d::Text::hasStrikethrough() const bool e2d::Text::hasStrikethrough() const
@ -190,27 +196,33 @@ void e2d::Text::setText(const String& text)
_reset(); _reset();
} }
void e2d::Text::setStyle(const TextStyle& textStyle) void e2d::Text::setStyle(const Style& style)
{ {
_style = textStyle; _style = style;
_reset(); _reset();
} }
void e2d::Text::setFontFamily(const String& fontFamily) void e2d::Text::setFont(const Font & font)
{ {
_style.fontFamily = fontFamily; _font = font;
_reset(); _reset();
} }
void e2d::Text::setFontSize(double fontSize) void e2d::Text::setFontFamily(const String& family)
{ {
_style.fontSize = fontSize; _font.family = family;
_reset(); _reset();
} }
void e2d::Text::setFontWeight(UINT32 fontWeight) void e2d::Text::setFontSize(double size)
{ {
_style.fontWeight = fontWeight; _font.size = size;
_reset();
}
void e2d::Text::setFontWeight(UINT weight)
{
_font.weight = weight;
_reset(); _reset();
} }
@ -221,7 +233,7 @@ void e2d::Text::setColor(Color color)
void e2d::Text::setItalic(bool value) void e2d::Text::setItalic(bool value)
{ {
_style.italic = value; _font.italic = value;
_reset(); _reset();
} }
@ -256,7 +268,7 @@ void e2d::Text::setLineSpacing(double lineSpacing)
} }
} }
void e2d::Text::setAlignment(TextAlign align) void e2d::Text::setAlignment(Align align)
{ {
if (_style.alignment != align) if (_style.alignment != align)
{ {
@ -318,13 +330,13 @@ void e2d::Text::onRender()
// »ñÈ¡Îı¾äÖȾÆ÷ // »ñÈ¡Îı¾äÖȾÆ÷
auto pTextRenderer = Renderer::getCustomTextRenderer(); auto pTextRenderer = Renderer::getCustomTextRenderer();
pTextRenderer->SetTextStyle( pTextRenderer->SetTextStyle(
_style.color.toColorF(), _style.color.toD2DColorF(),
_style.hasOutline, _style.hasOutline,
_style.outlineColor.toColorF(), _style.outlineColor.toD2DColorF(),
float(_style.outlineWidth), float(_style.outlineWidth),
D2D1_LINE_JOIN(_style.outlineJoin) D2D1_LINE_JOIN(_style.outlineJoin)
); );
_textLayout->Draw(NULL, pTextRenderer, 0, 0); _textLayout->Draw(nullptr, pTextRenderer, 0, 0);
} }
} }
@ -341,12 +353,12 @@ void e2d::Text::_createFormat()
SafeReleaseInterface(_textFormat); SafeReleaseInterface(_textFormat);
HRESULT hr = Renderer::getIDWriteFactory()->CreateTextFormat( HRESULT hr = Renderer::getIDWriteFactory()->CreateTextFormat(
_style.fontFamily, _font.family,
NULL, nullptr,
DWRITE_FONT_WEIGHT(_style.fontWeight), DWRITE_FONT_WEIGHT(_font.weight),
_style.italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL, _font.italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, DWRITE_FONT_STRETCH_NORMAL,
float(_style.fontSize), float(_font.size),
L"", L"",
&_textFormat &_textFormat
); );
@ -399,7 +411,7 @@ void e2d::Text::_createLayout()
return; return;
} }
UINT32 length = UINT32(_text.getLength()); UINT32 length = (UINT32)_text.getLength();
// ´´½¨ TextLayout // ´´½¨ TextLayout
HRESULT hr; HRESULT hr;

View File

@ -18,10 +18,10 @@ bool e2d::Path::__init()
// 获取 AppData\Local 文件夹的路径 // 获取 AppData\Local 文件夹的路径
typedef HRESULT(WINAPI* pFunSHGetKnownFolderPath)(const GUID& rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath); typedef HRESULT(WINAPI* pFunSHGetKnownFolderPath)(const GUID& rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
PWSTR pszPath = NULL; PWSTR pszPath = nullptr;
HMODULE hModule = LoadLibrary(L"shell32.dll"); HMODULE hModule = LoadLibrary(L"shell32.dll");
pFunSHGetKnownFolderPath SHGetKnownFolderPath = (pFunSHGetKnownFolderPath)GetProcAddress(hModule, "SHGetKnownFolderPath"); pFunSHGetKnownFolderPath SHGetKnownFolderPath = (pFunSHGetKnownFolderPath)GetProcAddress(hModule, "SHGetKnownFolderPath");
HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &pszPath); HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &pszPath);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
@ -157,7 +157,7 @@ e2d::String e2d::Path::getSaveFilePath(const String& title, const String& defExt
ofn.nFilterIndex = 1; // 过滤器索引 ofn.nFilterIndex = 1; // 过滤器索引
ofn.lpstrFile = strFilename; // 接收返回的文件路径和文件名 ofn.lpstrFile = strFilename; // 接收返回的文件路径和文件名
ofn.nMaxFile = sizeof(strFilename); // 缓冲区长度 ofn.nMaxFile = sizeof(strFilename); // 缓冲区长度
ofn.lpstrInitialDir = NULL; // 初始目录为默认 ofn.lpstrInitialDir = nullptr; // 初始目录为默认
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
ofn.lpstrTitle = title; // 标题 ofn.lpstrTitle = title; // 标题
ofn.lpstrDefExt = defExt; // 默认追加的扩展名 ofn.lpstrDefExt = defExt; // 默认追加的扩展名

View File

@ -51,6 +51,17 @@ class Window
{ {
friend Game; friend Game;
public:
// 鼠标指针样式
enum class Cursor : int
{
NORMAL, /* 默认指针样式 */
HAND, /* 手状指针 */
NO, /* 禁止指针 */
WAIT, /* 沙漏指针 */
ARROW_WAIT /* 默认指针和小沙漏 */
};
public: public:
// 修改窗口大小 // 修改窗口大小
static void setSize( static void setSize(
@ -178,6 +189,76 @@ class Input
{ {
friend Game; friend Game;
public:
// 鼠标键值
enum class MouseCode : int
{
LEFT, /* 鼠标左键 */
RIGHT, /* 鼠标右键 */
MIDDLE /* 鼠标中键 */
};
// 键盘键值
enum class KeyCode : int
{
UP = 0xC8,
LEFT = 0xCB,
RIGHT = 0xCD,
DOWN = 0xD0,
ENTER = 0x1C,
SPACE = 0x39,
ESC = 0x01,
BACK = 0x0E,
TAB = 0x0F,
PAUSE = 0xC5,
Q = 0x10,
W = 0x11,
E = 0x12,
R = 0x13,
T = 0x14,
Y = 0x15,
U = 0x16,
I = 0x17,
O = 0x18,
P = 0x19,
A = 0x1E,
S = 0x1F,
D = 0x20,
F = 0x21,
G = 0x22,
H = 0x23,
J = 0x24,
K = 0x25,
L = 0x26,
Z = 0x2C,
X = 0x2D,
C = 0x2E,
V = 0x2F,
B = 0x30,
N = 0x31,
M = 0x32,
NUM1 = 0x02,
NUM2 = 0x03,
NUM3 = 0x04,
NUM4 = 0x05,
NUM5 = 0x06,
NUM6 = 0x07,
NUM7 = 0x08,
NUM8 = 0x09,
NUM9 = 0x0A,
NUM0 = 0x0B,
NUMPAD7 = 0x47,
NUMPAD8 = 0x48,
NUMPAD9 = 0x49,
NUMPAD4 = 0x4B,
NUMPAD5 = 0x4C,
NUMPAD6 = 0x4D,
NUMPAD1 = 0x4F,
NUMPAD2 = 0x50,
NUMPAD3 = 0x51,
NUMPAD0 = 0x52
};
public: public:
// 检测键盘某按键是否正被按下 // 检测键盘某按键是否正被按下
static bool isKeyDown( static bool isKeyDown(
@ -194,32 +275,20 @@ public:
KeyCode key KeyCode key
); );
// 检测鼠标左键是否正被按下 // 检测鼠标按键是否正被按下
static bool isMouseLButtonDown(); static bool isMouseDown(
MouseCode code
);
// 检测鼠标右键是否正被按下 // 检测鼠标按键是否被点击
static bool isMouseRButtonDown(); static bool isMousePress(
MouseCode code
);
// 检测鼠标中键是否正被按下 // 检测鼠标按键是否正在松开
static bool isMouseMButtonDown(); static bool isMouseRelease(
MouseCode code
// 检测鼠标左键是否被点击 );
static bool isMouseLButtonPress();
// 检测鼠标右键是否被点击
static bool isMouseRButtonPress();
// 检测鼠标中键是否被点击
static bool isMouseMButtonPress();
// 检测鼠标左键是否正在松开
static bool isMouseLButtonRelease();
// 检测鼠标右键是否正在松开
static bool isMouseRButtonRelease();
// 检测鼠标中键是否正在松开
static bool isMouseMButtonRelease();
// 获得鼠标X轴坐标值 // 获得鼠标X轴坐标值
static double getMouseX(); static double getMouseX();

View File

@ -15,6 +15,25 @@ class Collider :
friend ColliderManager; friend ColliderManager;
friend Node; friend Node;
public:
// 碰撞体类别
enum class Type : int
{
RECT, /* 矩形 */
CIRCLE, /* 圆形 */
ELLIPSE /* 椭圆形 */
};
// 碰撞体交集关系
enum class Relation : int
{
UNKNOWN = 0, /* 关系不确定 */
DISJOINT = 1, /* 没有交集 */
IS_CONTAINED = 2, /* 完全被包含 */
CONTAINS = 3, /* 完全包含 */
OVERLAP = 4 /* 部分重叠 */
};
public: public:
Collider(); Collider();

View File

@ -225,43 +225,32 @@ public:
); );
Color( Color(
UINT32 rgb UINT rgb
); );
Color( Color(
UINT32 rgb, UINT rgb,
double alpha double alpha
); );
D2D1_COLOR_F toColorF() const; D2D1_COLOR_F toD2DColorF() const;
public: public:
enum RGB_VALUE : UINT32 enum RGB_VALUE : UINT
{ {
ALICE_BLUE = 0xF0F8FF,
AQUA = 0x00FFFF,
AZURE = 0xF0FFFF,
BEIGE = 0xF5F5DC,
BLACK = 0x000000, BLACK = 0x000000,
BLUE = 0x0000FF, BLUE = 0x0000FF,
BLUE_VIOLET = 0x8A2BE2, BLUE_VIOLET = 0x8A2BE2,
BROWN = 0xA52A2A, BROWN = 0xA52A2A,
CHOCOLATE = 0xD2691E, CHOCOLATE = 0xD2691E,
CYAN = 0x00FFFF,
DARK_BLUE = 0x00008B, DARK_BLUE = 0x00008B,
DARK_CYAN = 0x008B8B,
DARK_GOLDENROD = 0xB8860B,
DARK_GRAY = 0xA9A9A9, DARK_GRAY = 0xA9A9A9,
DARK_GREEN = 0x006400, DARK_GREEN = 0x006400,
DARK_ORANGE = 0xFF8C00, DARK_ORANGE = 0xFF8C00,
DARK_RED = 0x8B0000, DARK_RED = 0x8B0000,
DARK_SEA_GREEN = 0x8FBC8F,
DARK_VIOLET = 0x9400D3, DARK_VIOLET = 0x9400D3,
DEEP_PINK = 0xFF1493,
DEEP_SKY_BLUE = 0x00BFFF,
FOREST_GREEN = 0x228B22, FOREST_GREEN = 0x228B22,
GOLD = 0xFFD700, GOLD = 0xFFD700,
GOLDENROD = 0xDAA520,
GRAY = 0x808080, GRAY = 0x808080,
GREEN = 0x008000, GREEN = 0x008000,
GREEN_YELLOW = 0xADFF2F, GREEN_YELLOW = 0xADFF2F,
@ -275,24 +264,14 @@ public:
LIGHT_SKY_BLUE = 0x87CEFA, LIGHT_SKY_BLUE = 0x87CEFA,
LIGHT_SLATE_GRAY = 0x778899, LIGHT_SLATE_GRAY = 0x778899,
LIGHT_YELLOW = 0xFFFFE0, LIGHT_YELLOW = 0xFFFFE0,
MEDIUM_BLUE = 0x0000CD,
MEDIUM_PURPLE = 0x9370DB,
MEDIUM_SEA_GREEN = 0x3CB371,
MEDIUM_SPRING_GREEN = 0x00FA9A,
MEDUIM_VIOLET_RED = 0xC71585,
MIDNIGHT_BLUE = 0x191970,
ORANGE = 0xFFA500, ORANGE = 0xFFA500,
ORANGE_RED = 0xFF4500, ORANGE_RED = 0xFF4500,
PINK = 0xFFC0CB, PINK = 0xFFC0CB,
PURPLE = 0x800080, PURPLE = 0x800080,
RED = 0xFF0000, RED = 0xFF0000,
SEA_GREEN = 0x2E8B57,
SEA_SHELL = 0xFFF5EE,
SILVER = 0xC0C0C0, SILVER = 0xC0C0C0,
SKY_BLUE = 0x87CEEB, SKY_BLUE = 0x87CEEB,
SNOW = 0xFFFAFA, SNOW = 0xFFFAFA,
SPRING_GREEN = 0x00FF7F,
TOMATO = 0xFF6347,
VIOLET = 0xEE82EE, VIOLET = 0xEE82EE,
WHEAT = 0xF5DEB3, WHEAT = 0xF5DEB3,
WHITE = 0xFFFFFF, WHITE = 0xFFFFFF,
@ -304,7 +283,7 @@ public:
protected: protected:
void _init( void _init(
UINT32 rgb, UINT rgb,
double alpha double alpha
); );
@ -316,115 +295,6 @@ public:
}; };
// 字体粗细值
class FontWeight
{
public:
enum : UINT32
{
THIN = 100,
EXTRA_LIGHT = 200,
ULTRA_LIGHT = 200,
LIGHT = 300,
SEMI_LIGHT = 350,
NORMAL = 400,
REGULAR = 400,
MEDIUM = 500,
DEMI_BOLD = 600,
SEMI_BOLD = 600,
BOLD = 700,
EXTRA_BOLD = 800,
ULTRA_BOLD = 800,
BLACK = 900,
HEAVY = 900,
EXTRA_BLACK = 950,
ULTRA_BLACK = 950
};
};
// 文本对齐方式
enum class TextAlign : int
{
LEFT, /* 左对齐 */
RIGHT, /* 右对齐 */
CENTER /* 居中对齐 */
};
// 键值集合
enum class KeyCode : int
{
UP = 0xC8,
LEFT = 0xCB,
RIGHT = 0xCD,
DOWN = 0xD0,
ENTER = 0x1C,
SPACE = 0x39,
ESC = 0x01,
BACK = 0x0E,
TAB = 0x0F,
PAUSE = 0xC5,
Q = 0x10,
W = 0x11,
E = 0x12,
R = 0x13,
T = 0x14,
Y = 0x15,
U = 0x16,
I = 0x17,
O = 0x18,
P = 0x19,
A = 0x1E,
S = 0x1F,
D = 0x20,
F = 0x21,
G = 0x22,
H = 0x23,
J = 0x24,
K = 0x25,
L = 0x26,
Z = 0x2C,
X = 0x2D,
C = 0x2E,
V = 0x2F,
B = 0x30,
N = 0x31,
M = 0x32,
NUM1 = 0x02,
NUM2 = 0x03,
NUM3 = 0x04,
NUM4 = 0x05,
NUM5 = 0x06,
NUM6 = 0x07,
NUM7 = 0x08,
NUM8 = 0x09,
NUM9 = 0x0A,
NUM0 = 0x0B,
NUMPAD7 = 0x47,
NUMPAD8 = 0x48,
NUMPAD9 = 0x49,
NUMPAD4 = 0x4B,
NUMPAD5 = 0x4C,
NUMPAD6 = 0x4D,
NUMPAD1 = 0x4F,
NUMPAD2 = 0x50,
NUMPAD3 = 0x51,
NUMPAD0 = 0x52
};
// 鼠标指针样式
enum class Cursor : int
{
NORMAL, /* 默认指针样式 */
HAND, /* 手状指针 */
NO, /* 禁止指针 */
WAIT, /* 沙漏指针 */
ARROW_WAIT /* 默认指针和小沙漏 */
};
// 方向 // 方向
enum class Direction : int enum class Direction : int
{ {
@ -435,17 +305,6 @@ enum class Direction : int
}; };
// 物体交集关系
enum class Relation : int
{
UNKNOWN = 0, /* 关系不确定 */
DISJOINT = 1, /* 没有交集 */
IS_CONTAINED = 2, /* 完全被包含 */
CONTAINS = 3, /* 完全包含 */
OVERLAP = 4 /* 部分重叠 */
};
// 线条相交样式 // 线条相交样式
enum class LineJoin : int enum class LineJoin : int
{ {
@ -455,86 +314,6 @@ enum class LineJoin : int
}; };
// 形状样式
enum class ShapeStyle : int
{
SOLID, /* 填充 */
ROUND, /* 轮廓 */
FILL, /* 轮廓 + 填充 */
};
// 碰撞体类别
enum class ColliderType : int
{
RECT, /* 矩形 */
CIRCLE, /* 圆形 */
ELLIPSE /* 椭圆形 */
};
// 文本样式
class TextStyle
{
public:
String fontFamily; // 字体
double fontSize; // 字号
Color color; // 颜色
UINT32 fontWeight; // 粗细值
bool italic; // 斜体
TextAlign alignment; // 对齐方式
bool wrapping; // 打开自动换行
double wrappingWidth; // 自动换行宽度
double lineSpacing; // 行间距
bool hasUnderline; // 下划线
bool hasStrikethrough; // 删除线
bool hasOutline; // 显示描边
Color outlineColor; // 描边颜色
double outlineWidth; // 描边线宽
LineJoin outlineJoin; // 描边线相交样式
public:
TextStyle();
TextStyle(
const String& fontFamily,
double fontSize = 22,
Color color = Color::WHITE,
UINT32 fontWeight = FontWeight::NORMAL,
bool italic = false,
TextAlign alignment = TextAlign::LEFT,
bool wrapping = false,
double wrappingWidth = 0.0,
double lineSpacing = 0.0,
bool hasUnderline = false,
bool hasStrikethrough = false,
bool hasOutline = true,
Color outlineColor = Color(Color::BLACK, 0.5),
double outlineWidth = 1.0,
LineJoin outlineJoin = LineJoin::ROUND
);
};
// 节点属性
struct NodeProperty
{
bool visable; // 可见性
double posX; // X 坐标
double posY; // Y 坐标
double width; // 宽度
double height; // 高度
double opacity; // 透明度
double pivotX; // 中心点 X 坐标
double pivotY; // 中心点 Y 坐标
double scaleX; // 横向缩放
double scaleY; // 纵向缩放
double rotation; // 旋转角度
double skewAngleX; // 横向倾斜角度
double skewAngleY; // 纵向倾斜角度
};
// 函数对象 // 函数对象
class Function class Function
{ {

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include "e2dbase.h" #include "e2dbase.h"
#include "e2dcollider.h"
namespace e2d namespace e2d
{ {
@ -7,7 +8,6 @@ namespace e2d
class Action; class Action;
class Transition; class Transition;
class Collider;
class ColliderManager; class ColliderManager;
class Node : class Node :
@ -18,6 +18,25 @@ class Node :
friend Transition; friend Transition;
friend ColliderManager; friend ColliderManager;
public:
// 节点属性
struct Property
{
bool visable; // 可见性
double posX; // X 坐标
double posY; // Y 坐标
double width; // 宽度
double height; // 高度
double opacity; // 透明度
double pivotX; // 中心点 X 坐标
double pivotY; // 中心点 Y 坐标
double scaleX; // 横向缩放
double scaleY; // 纵向缩放
double rotation; // 旋转角度
double skewAngleX; // 横向倾斜角度
double skewAngleY; // 纵向倾斜角度
};
public: public:
Node(); Node();
@ -114,7 +133,7 @@ public:
virtual double getOpacity() const; virtual double getOpacity() const;
// 获取节点属性 // 获取节点属性
virtual NodeProperty getProperty() const; virtual Property getProperty() const;
// 获取节点碰撞体 // 获取节点碰撞体
virtual Collider * getCollider() const; virtual Collider * getCollider() const;
@ -323,12 +342,12 @@ public:
// 设置节点属性 // 设置节点属性
virtual void setProperty( virtual void setProperty(
NodeProperty prop Property prop
); );
// 设置碰撞体 // 设置碰撞体
virtual void setCollider( virtual void setCollider(
ColliderType nColliderType Collider::Type type
); );
// 设置碰撞体 // 设置碰撞体
@ -590,71 +609,101 @@ protected:
class Text : class Text :
public Node public Node
{ {
public:
// 字体
class Font
{
public:
String family; // 字体族
double size; // 字号
UINT weight; // 粗细值
bool italic; // 斜体
public:
// 字体粗细值
enum Weight : UINT
{
THIN = 100,
EXTRA_LIGHT = 200,
LIGHT = 300,
SEMI_LIGHT = 350,
NORMAL = 400,
MEDIUM = 500,
DEMI_BOLD = 600,
BOLD = 700,
EXTRA_BOLD = 800,
BLACK = 900,
EXTRA_BLACK = 950
};
public:
Font();
Font(
const String& family,
double size = 22,
UINT weight = Font::Weight::NORMAL,
bool italic = false
);
};
// 文本对齐方式
enum class Align : int
{
LEFT, /* 左对齐 */
RIGHT, /* 右对齐 */
CENTER /* 居中对齐 */
};
// 文本样式
class Style
{
public:
Color color; // 颜色
Align alignment; // 对齐方式
bool wrapping; // 打开自动换行
double wrappingWidth; // 自动换行宽度
double lineSpacing; // 行间距
bool hasUnderline; // 下划线
bool hasStrikethrough; // 删除线
bool hasOutline; // 显示描边
Color outlineColor; // 描边颜色
double outlineWidth; // 描边线宽
LineJoin outlineJoin; // 描边线相交样式
public:
Style();
Style(
Color color,
Align alignment = Align::LEFT,
bool wrapping = false,
double wrappingWidth = 0.0,
double lineSpacing = 0.0,
bool hasUnderline = false,
bool hasStrikethrough = false,
bool hasOutline = true,
Color outlineColor = Color(Color::BLACK, 0.5),
double outlineWidth = 1.0,
LineJoin outlineJoin = LineJoin::ROUND
);
};
public: public:
Text(); Text();
Text( Text(
const String& text /* 文字内容 */ const String& text, /* 文字内容 */
); const Font& font = Font(), /* 字体 */
const Style& style = Style() /* 文本样式 */
Text(
TextStyle textStyle /* 文字样式 */
);
Text(
const String& text, /* 文字内容 */
TextStyle textStyle /* 文字样式 */
);
Text(
const String& text, /* 文字内容*/
const String& fontFamily, /* 字体 */
double fontSize = 22, /* 字号 */
UINT32 color = Color::WHITE, /* 颜色 */
UINT32 fontWeight = FontWeight::NORMAL, /* 粗细值 */
bool italic = false, /* 斜体 */
TextAlign alignment = TextAlign::LEFT, /* 对齐方式 */
bool wrapping = false, /* 打开自动换行 */
double wrappingWidth = 0.0, /* 自动换行宽度 */
double lineSpacing = 0.0, /* 行间距 */
bool hasUnderline = false, /* 下划线 */
bool hasStrikethrough = false, /* 删除线 */
bool hasOutline = true, /* 显示描边 */
UINT32 outlineColor = Color::BLACK, /* 描边颜色 */
UINT32 outlineWidth = 1.0 /* 描边线宽 */
); );
static Text * create(); static Text * create();
static Text * create( static Text * create(
const String& text /* 文字内容 */ const String& text, /* 文字内容 */
); const Font& font = Font(), /* 字体 */
const Style& style = Style() /* 文本样式 */
static Text * create(
TextStyle textStyle /* 文字样式 */
);
static Text * create(
const String& text, /* 文字内容 */
TextStyle textStyle /* 文字样式 */
);
static Text * create(
const String& text, /* 文字内容*/
const String& fontFamily, /* 字体 */
double fontSize = 22, /* 字号 */
UINT32 color = Color::WHITE, /* 颜色 */
UINT32 fontWeight = FontWeight::NORMAL, /* 粗细值 */
bool italic = false, /* 斜体 */
TextAlign alignment = TextAlign::LEFT, /* 对齐方式 */
bool wrapping = false, /* 打开自动换行 */
double wrappingWidth = 0.0, /* 自动换行宽度 */
double lineSpacing = 0.0, /* 行间距 */
bool hasUnderline = false, /* 下划线 */
bool hasStrikethrough = false, /* 删除线 */
bool hasOutline = true, /* 显示描边 */
UINT32 outlineColor = Color::BLACK, /* 描边颜色 */
UINT32 outlineWidth = 1.0 /* 描边线宽 */
); );
virtual ~Text(); virtual ~Text();
@ -662,17 +711,20 @@ public:
// 获取文本 // 获取文本
String getText() const; String getText() const;
// 获取文本样式
TextStyle getTextStyle() const;
// 获取字体 // 获取字体
Font getFont() const;
// 获取文本样式
Style getStyle() const;
// 获取字体族
String getFontFamily() const; String getFontFamily() const;
// 获取当前字号 // 获取当前字号
double getFontSize() const; double getFontSize() const;
// 获取当前字体粗细值 // 获取当前字体粗细值
UINT32 getFontWeight() const; UINT getFontWeight() const;
// 获取文字颜色 // 获取文字颜色
Color getColor() const; Color getColor() const;
@ -708,22 +760,27 @@ public:
// 设置文本样式 // 设置文本样式
void setStyle( void setStyle(
const TextStyle& textStyle const Style& style
); );
// 设置字体 // 设置字体
void setFont(
const Font& font
);
// 设置字体族
void setFontFamily( void setFontFamily(
const String& fontFamily const String& family
); );
// 设置字号(默认值为 22 // 设置字号(默认值为 22
void setFontSize( void setFontSize(
double fontSize double size
); );
// 设置字体粗细值(默认值为 FontWeight::NORMAL // 设置字体粗细值(默认值为 Text::Font::Weight::NORMAL
void setFontWeight( void setFontWeight(
UINT32 fontWeight UINT weight
); );
// 设置文字颜色(默认值为 Color::WHITE // 设置文字颜色(默认值为 Color::WHITE
@ -751,9 +808,9 @@ public:
double lineSpacing double lineSpacing
); );
// 设置对齐方式(默认为 TextAlign::LEFT // 设置对齐方式(默认为 Align::LEFT
void setAlignment( void setAlignment(
TextAlign align Align align
); );
// 设置下划线(默认值为 false // 设置下划线(默认值为 false
@ -801,7 +858,8 @@ protected:
protected: protected:
String _text; String _text;
TextStyle _style; Font _font;
Style _style;
IDWriteTextFormat * _textFormat; IDWriteTextFormat * _textFormat;
IDWriteTextLayout * _textLayout; IDWriteTextLayout * _textLayout;
}; };

View File

@ -9,13 +9,22 @@ namespace e2d
class Shape : class Shape :
public Node public Node
{ {
public:
// ÐÎ×´Ñùʽ
enum class Style : int
{
SOLID, /* Ìî³ä */
ROUND, /* ÂÖÀª */
FILL, /* ÂÖÀª + Ìî³ä */
};
public: public:
Shape(); Shape();
virtual ~Shape(); virtual ~Shape();
// »ñÈ¡Ñùʽ // »ñÈ¡Ñùʽ
ShapeStyle getStyle() const; Style getStyle() const;
// »ñÈ¡Ìî³äÑÕÉ« // »ñÈ¡Ìî³äÑÕÉ«
Color getFillColor() const; Color getFillColor() const;
@ -42,7 +51,7 @@ public:
); );
// ÉèÖÃÑùʽ // ÉèÖÃÑùʽ
void setStyle(ShapeStyle style); void setStyle(Style style);
// äÖȾÐÎ×´ // äÖȾÐÎ×´
virtual void onRender() override; virtual void onRender() override;
@ -55,7 +64,7 @@ protected:
virtual void _renderFill() = 0; virtual void _renderFill() = 0;
protected: protected:
ShapeStyle _style; Style _style;
float _strokeWidth; float _strokeWidth;
Color _lineColor; Color _lineColor;
Color _fillColor; Color _fillColor;

View File

@ -226,7 +226,6 @@
<ClCompile Include="..\..\core\Common\Animation.cpp" /> <ClCompile Include="..\..\core\Common\Animation.cpp" />
<ClCompile Include="..\..\core\Common\Color.cpp" /> <ClCompile Include="..\..\core\Common\Color.cpp" />
<ClCompile Include="..\..\core\Common\Function.cpp" /> <ClCompile Include="..\..\core\Common\Function.cpp" />
<ClCompile Include="..\..\core\Common\TextStyle.cpp" />
<ClCompile Include="..\..\core\Common\Object.cpp" /> <ClCompile Include="..\..\core\Common\Object.cpp" />
<ClCompile Include="..\..\core\Common\Point.cpp" /> <ClCompile Include="..\..\core\Common\Point.cpp" />
<ClCompile Include="..\..\core\Common\Scene.cpp" /> <ClCompile Include="..\..\core\Common\Scene.cpp" />

View File

@ -156,9 +156,6 @@
<ClCompile Include="..\..\core\Custom\CustomTextRenderer.cpp"> <ClCompile Include="..\..\core\Custom\CustomTextRenderer.cpp">
<Filter>Custom</Filter> <Filter>Custom</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Common\TextStyle.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Common\Color.cpp"> <ClCompile Include="..\..\core\Common\Color.cpp">
<Filter>Common</Filter> <Filter>Common</Filter>
</ClCompile> </ClCompile>