From 50d9575631ed6bc5a8e0d531784b32e49a6fa86d Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Fri, 13 Oct 2017 11:42:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EEMsgManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + Demo/Demo.vcxproj | 156 +++++++++++ Demo/Demo.vcxproj.filters | 22 ++ Demo/main.cpp | 24 ++ Easy2D.sln | 26 +- Easy2D/Action/Action.cpp | 85 ------ Easy2D/Action/ActionCallback.cpp | 31 --- Easy2D/Action/ActionDelay.cpp | 39 --- Easy2D/Action/ActionFrames.cpp | 83 ------ Easy2D/Action/ActionMoveBy.cpp | 51 ---- Easy2D/Action/ActionMoveTo.cpp | 27 -- Easy2D/Action/ActionNeverStop.cpp | 39 --- Easy2D/Action/ActionOpacityBy.cpp | 50 ---- Easy2D/Action/ActionOpacityTo.cpp | 27 -- Easy2D/Action/ActionScaleBy.cpp | 52 ---- Easy2D/Action/ActionScaleTo.cpp | 29 -- Easy2D/Action/ActionSequence.cpp | 105 -------- Easy2D/Action/ActionTwo.cpp | 70 ----- Easy2D/Action/Animation.cpp | 45 ---- Easy2D/Base/EApp.cpp | 152 ++++++----- Easy2D/Base/EScene.cpp | 9 +- Easy2D/Easy2D.vcxproj | 191 +------------ Easy2D/Easy2D.vcxproj.filters | 73 ++--- Easy2D/EasyX/easyx.h | 321 ---------------------- Easy2D/EasyX/x64/EasyXa.lib | Bin 261406 -> 0 bytes Easy2D/EasyX/x64/EasyXw.lib | Bin 263840 -> 0 bytes Easy2D/EasyX/x86/EasyXa.lib | Bin 184974 -> 0 bytes Easy2D/EasyX/x86/EasyXw.lib | Bin 187270 -> 0 bytes Easy2D/Msg/KeyMsg.cpp | 314 ---------------------- Easy2D/Msg/MouseMsg.cpp | 223 --------------- Easy2D/Node/BatchNode.cpp | 190 ------------- Easy2D/Node/BatchSprite.cpp | 260 ------------------ Easy2D/Node/Button/Button.cpp | 80 ------ Easy2D/Node/Button/ImageButton.cpp | 172 ------------ Easy2D/Node/Button/TextButton.cpp | 172 ------------ Easy2D/Node/ENode.cpp | 15 +- Easy2D/Node/Image.cpp | 251 ----------------- Easy2D/Node/Layer.cpp | 27 -- Easy2D/Node/MouseNode.cpp | 174 ------------ Easy2D/Node/RectNode.cpp | 139 ---------- Easy2D/Node/Shape/Circle.cpp | 43 --- Easy2D/Node/Shape/Rectangle.cpp | 58 ---- Easy2D/Node/Shape/Shape.cpp | 64 ----- Easy2D/Node/Sprite.cpp | 147 ---------- Easy2D/Node/Text.cpp | 91 ------- Easy2D/Style/Color.cpp | 56 ---- Easy2D/Style/FillStyle.cpp | 1 - Easy2D/Style/FontStyle.cpp | 103 ------- Easy2D/Style/LineStyle.cpp | 1 - Easy2D/Tool/ActionManager.cpp | 200 -------------- Easy2D/Tool/EMouseListener.cpp | 1 + Easy2D/Tool/EMsgManager.cpp | 86 ++++++ Easy2D/Tool/FileUtils.cpp | 168 ------------ Easy2D/Tool/Math.cpp | 9 - Easy2D/Tool/MusicUtils.cpp | 417 ----------------------------- Easy2D/Tool/Timer.cpp | 223 --------------- Easy2D/Win/winbase.cpp | 12 +- Easy2D/Win/winbase.h | 1 + Easy2D/easy2d.h | 35 +-- Easy2D/ebase.h | 7 +- Easy2D/emacros.h | 22 ++ Easy2D/enodes.h | 2 +- Easy2D/etools.h | 62 ++++- 63 files changed, 553 insertions(+), 4982 deletions(-) create mode 100644 Demo/Demo.vcxproj create mode 100644 Demo/Demo.vcxproj.filters create mode 100644 Demo/main.cpp delete mode 100644 Easy2D/Action/Action.cpp delete mode 100644 Easy2D/Action/ActionCallback.cpp delete mode 100644 Easy2D/Action/ActionDelay.cpp delete mode 100644 Easy2D/Action/ActionFrames.cpp delete mode 100644 Easy2D/Action/ActionMoveBy.cpp delete mode 100644 Easy2D/Action/ActionMoveTo.cpp delete mode 100644 Easy2D/Action/ActionNeverStop.cpp delete mode 100644 Easy2D/Action/ActionOpacityBy.cpp delete mode 100644 Easy2D/Action/ActionOpacityTo.cpp delete mode 100644 Easy2D/Action/ActionScaleBy.cpp delete mode 100644 Easy2D/Action/ActionScaleTo.cpp delete mode 100644 Easy2D/Action/ActionSequence.cpp delete mode 100644 Easy2D/Action/ActionTwo.cpp delete mode 100644 Easy2D/Action/Animation.cpp delete mode 100644 Easy2D/EasyX/easyx.h delete mode 100644 Easy2D/EasyX/x64/EasyXa.lib delete mode 100644 Easy2D/EasyX/x64/EasyXw.lib delete mode 100644 Easy2D/EasyX/x86/EasyXa.lib delete mode 100644 Easy2D/EasyX/x86/EasyXw.lib delete mode 100644 Easy2D/Msg/KeyMsg.cpp delete mode 100644 Easy2D/Msg/MouseMsg.cpp delete mode 100644 Easy2D/Node/BatchNode.cpp delete mode 100644 Easy2D/Node/BatchSprite.cpp delete mode 100644 Easy2D/Node/Button/Button.cpp delete mode 100644 Easy2D/Node/Button/ImageButton.cpp delete mode 100644 Easy2D/Node/Button/TextButton.cpp delete mode 100644 Easy2D/Node/Image.cpp delete mode 100644 Easy2D/Node/Layer.cpp delete mode 100644 Easy2D/Node/MouseNode.cpp delete mode 100644 Easy2D/Node/RectNode.cpp delete mode 100644 Easy2D/Node/Shape/Circle.cpp delete mode 100644 Easy2D/Node/Shape/Rectangle.cpp delete mode 100644 Easy2D/Node/Shape/Shape.cpp delete mode 100644 Easy2D/Node/Sprite.cpp delete mode 100644 Easy2D/Node/Text.cpp delete mode 100644 Easy2D/Style/Color.cpp delete mode 100644 Easy2D/Style/FillStyle.cpp delete mode 100644 Easy2D/Style/FontStyle.cpp delete mode 100644 Easy2D/Style/LineStyle.cpp delete mode 100644 Easy2D/Tool/ActionManager.cpp create mode 100644 Easy2D/Tool/EMouseListener.cpp create mode 100644 Easy2D/Tool/EMsgManager.cpp delete mode 100644 Easy2D/Tool/FileUtils.cpp delete mode 100644 Easy2D/Tool/Math.cpp delete mode 100644 Easy2D/Tool/MusicUtils.cpp delete mode 100644 Easy2D/Tool/Timer.cpp diff --git a/.gitignore b/.gitignore index c0da8165..86bb91a8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ Easy2D/Win32/ Easy2D/x64/ /Win32/ /x64/ +Debug/ +Release/ backup/ *.lnk .vs \ No newline at end of file diff --git a/Demo/Demo.vcxproj b/Demo/Demo.vcxproj new file mode 100644 index 00000000..98bd4630 --- /dev/null +++ b/Demo/Demo.vcxproj @@ -0,0 +1,156 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C} + Win32Proj + Demo + 10.0.15063.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(MSBuildProjectDirectory)\..\Win32;$(LibraryPath) + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + + + Level3 + Disabled + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + + + Level3 + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + + + Level3 + MaxSpeed + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/Demo/Demo.vcxproj.filters b/Demo/Demo.vcxproj.filters new file mode 100644 index 00000000..203a71c4 --- /dev/null +++ b/Demo/Demo.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + \ No newline at end of file diff --git a/Demo/main.cpp b/Demo/main.cpp new file mode 100644 index 00000000..22db1191 --- /dev/null +++ b/Demo/main.cpp @@ -0,0 +1,24 @@ +#include "..\Easy2D\easy2d.h" +#pragma comment(lib, "d2d1.lib") + + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + EApp app; + + if (app.init(L"Easy2D Demo", 640, 480)) + { + auto scene = new EScene(); + + auto node = new ENode(); + node->setPos(50, 80); + node->setSize(30, 180); + scene->add(node); + + app.enterScene(scene); + + app.run(); + } + + return 0; +} diff --git a/Easy2D.sln b/Easy2D.sln index 6b3b67bc..2c6780c3 100644 --- a/Easy2D.sln +++ b/Easy2D.sln @@ -1,38 +1,38 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.12 +VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Easy2D", "Easy2D\Easy2D.vcxproj", "{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Demo", "Demo\Demo.vcxproj", "{9D85A92F-BCCE-4EF0-BAD3-601C0086661C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - DebugW|x64 = DebugW|x64 - DebugW|x86 = DebugW|x86 Release|x64 = Release|x64 Release|x86 = Release|x86 - ReleaseW|x64 = ReleaseW|x64 - ReleaseW|x86 = ReleaseW|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x64.ActiveCfg = Debug|x64 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x64.Build.0 = Debug|x64 + {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x64.Deploy.0 = Debug|x64 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x86.ActiveCfg = Debug|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x86.Build.0 = Debug|Win32 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.DebugW|x64.ActiveCfg = DebugW|x64 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.DebugW|x64.Build.0 = DebugW|x64 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.DebugW|x86.ActiveCfg = DebugW|Win32 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.DebugW|x86.Build.0 = DebugW|Win32 + {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x86.Deploy.0 = Debug|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.ActiveCfg = Release|x64 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.Build.0 = Release|x64 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x86.ActiveCfg = Release|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x86.Build.0 = Release|Win32 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.ReleaseW|x64.ActiveCfg = ReleaseW|x64 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.ReleaseW|x64.Build.0 = ReleaseW|x64 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.ReleaseW|x86.ActiveCfg = ReleaseW|Win32 - {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.ReleaseW|x86.Build.0 = ReleaseW|Win32 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Debug|x64.ActiveCfg = Debug|x64 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Debug|x64.Build.0 = Debug|x64 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Debug|x86.ActiveCfg = Debug|Win32 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Debug|x86.Build.0 = Debug|Win32 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Release|x64.ActiveCfg = Release|x64 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Release|x64.Build.0 = Release|x64 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Release|x86.ActiveCfg = Release|Win32 + {9D85A92F-BCCE-4EF0-BAD3-601C0086661C}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Easy2D/Action/Action.cpp b/Easy2D/Action/Action.cpp deleted file mode 100644 index 1d99e527..00000000 --- a/Easy2D/Action/Action.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "..\easy2d.h" -#include - -Action::Action() : - m_bRunning(true), - m_bWaiting(false), - m_bEnding(false), - m_bInit(false), - m_pTargetSprite(nullptr), - m_pParentScene(nullptr) -{ - // Ĭ϶ 15ms һ - setInterval(15); -} - -Action::~Action() -{ -} - -bool Action::isRunning() -{ - return m_bRunning && !m_bWaiting; -} - -bool Action::isEnding() -{ - return m_bEnding; -} - -void Action::start() -{ - m_bRunning = true; -} - -void Action::resume() -{ - m_bRunning = true; -} - -void Action::pause() -{ - m_bRunning = false; -} - -void Action::stop() -{ - m_bEnding = true; -} -void Action::wait() -{ - m_bWaiting = true; -} - -void Action::notify() -{ - m_bWaiting = false; -} - -void Action::setInterval(LONGLONG milliSeconds) -{ - // öʱ - m_nAnimationInterval = milliSeconds; -} - -Action * Action::reverse() const -{ - assert(0); - return nullptr; -} - -Sprite * Action::getTarget() -{ - return m_pTargetSprite; -} - -void Action::_init() -{ - m_bInit = true; -} - -void Action::_reset() -{ - m_bInit = false; - m_bEnding = false; -} diff --git a/Easy2D/Action/ActionCallback.cpp b/Easy2D/Action/ActionCallback.cpp deleted file mode 100644 index c1cf46e1..00000000 --- a/Easy2D/Action/ActionCallback.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "..\easy2d.h" - -ActionCallback::ActionCallback(const std::function& callback) : - m_Callback(callback) -{ -} - -ActionCallback::~ActionCallback() -{ -} - -ActionCallback * ActionCallback::copy() const -{ - return new ActionCallback(m_Callback); -} - -void ActionCallback::_init() -{ - Action::_init(); -} - -void ActionCallback::_exec(std::chrono::steady_clock::time_point nNow) -{ - m_Callback(); - this->stop(); -} - -void ActionCallback::_reset() -{ - Action::_reset(); -} diff --git a/Easy2D/Action/ActionDelay.cpp b/Easy2D/Action/ActionDelay.cpp deleted file mode 100644 index 4e5c8b6a..00000000 --- a/Easy2D/Action/ActionDelay.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -ActionDelay::ActionDelay(float duration) -{ - setInterval(LONGLONG(duration * 1000)); -} - -ActionDelay::~ActionDelay() -{ -} - -ActionDelay * ActionDelay::copy() const -{ - return new ActionDelay(m_nAnimationInterval / 1000.0f); -} - -void ActionDelay::_init() -{ - Action::_init(); - // ¼ǰʱ - m_nLast = steady_clock::now(); -} - -void ActionDelay::_exec(steady_clock::time_point nNow) -{ - // жʱǷ㹻 - if (duration_cast(nNow - m_nLast).count() > m_nAnimationInterval) - { - this->stop(); - } -} - -void ActionDelay::_reset() -{ - Action::_reset(); - // ¼ǰʱ - m_nLast = steady_clock::now(); -} diff --git a/Easy2D/Action/ActionFrames.cpp b/Easy2D/Action/ActionFrames.cpp deleted file mode 100644 index 582bf48b..00000000 --- a/Easy2D/Action/ActionFrames.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -ActionFrames::ActionFrames() : - m_nFrameIndex(0) -{ - // ֡Ĭ .5s ˢһ - setInterval(500); -} - -ActionFrames::ActionFrames(LONGLONG frameDelay) : - m_nFrameIndex(0) -{ - setInterval(frameDelay); -} - -ActionFrames::~ActionFrames() -{ - for (auto frame : m_vFrames) - { - frame->autoRelease(); - frame->release(); - } -} - -void ActionFrames::_init() -{ - Action::_init(); - // ¼ǰʱ - m_nLast = steady_clock::now(); -} - -void ActionFrames::_exec(steady_clock::time_point nNow) -{ - // жʱǷ㹻 - while (duration_cast(nNow - m_nLast).count() > m_nAnimationInterval) - { - // ¼¼ʱ - m_nLast += milliseconds(m_nAnimationInterval); - m_pTargetSprite->setImage(m_vFrames[m_nFrameIndex]); - m_nFrameIndex++; - // ж϶Ƿ - if (m_nFrameIndex == m_vFrames.size()) - { - this->stop(); - break; - } - } -} - -void ActionFrames::_reset() -{ - Action::_reset(); - m_nFrameIndex = 0; - // ¼ǰʱ - m_nLast = steady_clock::now(); -} - -void ActionFrames::addFrame(Image * frame) -{ - if (frame) - { - m_vFrames.push_back(frame); - frame->retain(); - } -} - -ActionFrames * ActionFrames::copy() const -{ - auto a = new ActionFrames(this->m_nAnimationInterval); - for (auto f : m_vFrames) - { - a->addFrame(f); - } - return a; -} - -ActionFrames * ActionFrames::reverse() const -{ - auto a = this->copy(); - a->m_vFrames.reserve(m_vFrames.size()); - return a; -} diff --git a/Easy2D/Action/ActionMoveBy.cpp b/Easy2D/Action/ActionMoveBy.cpp deleted file mode 100644 index ebc83a66..00000000 --- a/Easy2D/Action/ActionMoveBy.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -ActionMoveBy::ActionMoveBy(float duration, CVector vec) : - Animation(duration) -{ - m_MoveVector = vec; -} - -ActionMoveBy::~ActionMoveBy() -{ -} - -void ActionMoveBy::_init() -{ - Animation::_init(); - m_BeginPos = m_pTargetSprite->getPos(); -} - -void ActionMoveBy::_exec(steady_clock::time_point nNow) -{ - while (Animation::_isDelayEnough(nNow)) - { - // ƶλ - float scale = float(m_nDuration) / m_nTotalDuration; - // ƶ Sprite - m_pTargetSprite->setPos(int(m_BeginPos.x + m_MoveVector.x * scale), - int(m_BeginPos.y + m_MoveVector.y * scale)); - // ж϶Ƿ - if (_isEnd()) - { - this->stop(); - break; - } - } -} - -void ActionMoveBy::_reset() -{ - Animation::_reset(); -} - -ActionMoveBy * ActionMoveBy::copy() const -{ - return new ActionMoveBy(m_nAnimationInterval / 1000.0f, m_MoveVector); -} - -ActionMoveBy * ActionMoveBy::reverse() const -{ - return new ActionMoveBy(m_nTotalDuration / 1000.0f, CVector(-m_MoveVector.x, -m_MoveVector.y)); -} \ No newline at end of file diff --git a/Easy2D/Action/ActionMoveTo.cpp b/Easy2D/Action/ActionMoveTo.cpp deleted file mode 100644 index c4249317..00000000 --- a/Easy2D/Action/ActionMoveTo.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\easy2d.h" - -ActionMoveTo::ActionMoveTo(float duration, CPoint pos) : - ActionMoveBy(duration, CVector()) -{ - m_EndPos = pos; -} - -ActionMoveTo::~ActionMoveTo() -{ -} - -ActionMoveTo * ActionMoveTo::copy() const -{ - return new ActionMoveTo(m_nAnimationInterval / 1000.0f, m_EndPos); -} - -void ActionMoveTo::_init() -{ - ActionMoveBy::_init(); - m_MoveVector = m_EndPos - m_BeginPos; -} - -void ActionMoveTo::_reset() -{ - ActionMoveBy::_reset(); -} diff --git a/Easy2D/Action/ActionNeverStop.cpp b/Easy2D/Action/ActionNeverStop.cpp deleted file mode 100644 index ac11b65c..00000000 --- a/Easy2D/Action/ActionNeverStop.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "..\easy2d.h" - -ActionNeverStop::ActionNeverStop(Action * action) : - m_Action(action) -{ - m_Action->retain(); -} - -ActionNeverStop::~ActionNeverStop() -{ - SafeRelease(m_Action); -} - -ActionNeverStop * ActionNeverStop::copy() const -{ - return new ActionNeverStop(m_Action->copy()); -} - -void ActionNeverStop::_init() -{ - Action::_init(); - m_Action->m_pTargetSprite = m_pTargetSprite; - m_Action->_init(); -} - -void ActionNeverStop::_exec(std::chrono::steady_clock::time_point nNow) -{ - m_Action->_exec(nNow); - - if (m_Action->isEnding()) - { - m_Action->_reset(); - } -} - -void ActionNeverStop::_reset() -{ - Action::_reset(); -} diff --git a/Easy2D/Action/ActionOpacityBy.cpp b/Easy2D/Action/ActionOpacityBy.cpp deleted file mode 100644 index 2d9ea7c0..00000000 --- a/Easy2D/Action/ActionOpacityBy.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -ActionOpacityBy::ActionOpacityBy(float duration, float opacity) : - Animation(duration) -{ - m_nVariation = opacity; -} - -ActionOpacityBy::~ActionOpacityBy() -{ -} - -void ActionOpacityBy::_init() -{ - Animation::_init(); - m_nBeginVal = m_pTargetSprite->getOpacity(); -} - -void ActionOpacityBy::_exec(steady_clock::time_point nNow) -{ - while (Animation::_isDelayEnough(nNow)) - { - // ƶλ - float scale = float(m_nDuration) / m_nTotalDuration; - // ƶ Sprite - m_pTargetSprite->setOpacity(m_nBeginVal + m_nVariation * scale); - // ж϶Ƿ - if (_isEnd()) - { - this->stop(); - break; - } - } -} - -void ActionOpacityBy::_reset() -{ - Animation::_reset(); -} - -ActionOpacityBy * ActionOpacityBy::copy() const -{ - return new ActionOpacityBy(m_nAnimationInterval / 1000.0f, m_nVariation); -} - -ActionOpacityBy * ActionOpacityBy::reverse() const -{ - return new ActionOpacityBy(m_nTotalDuration / 1000.0f, -m_nVariation); -} \ No newline at end of file diff --git a/Easy2D/Action/ActionOpacityTo.cpp b/Easy2D/Action/ActionOpacityTo.cpp deleted file mode 100644 index 5bd7c001..00000000 --- a/Easy2D/Action/ActionOpacityTo.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\easy2d.h" - -ActionOpacityTo::ActionOpacityTo(float duration, float opacity) : - ActionOpacityBy(duration, 0) -{ - m_nEndVal = opacity; -} - -ActionOpacityTo::~ActionOpacityTo() -{ -} - -ActionOpacityTo * ActionOpacityTo::copy() const -{ - return new ActionOpacityTo(m_nAnimationInterval / 1000.0f, m_nEndVal); -} - -void ActionOpacityTo::_init() -{ - ActionOpacityBy::_init(); - m_nVariation = m_nEndVal - m_nBeginVal; -} - -void ActionOpacityTo::_reset() -{ - ActionOpacityBy::_reset(); -} diff --git a/Easy2D/Action/ActionScaleBy.cpp b/Easy2D/Action/ActionScaleBy.cpp deleted file mode 100644 index b86f0f5c..00000000 --- a/Easy2D/Action/ActionScaleBy.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -ActionScaleBy::ActionScaleBy(float duration, float scaleX, float scaleY) : - Animation(duration) -{ - m_nVariationX = scaleX; - m_nVariationY = scaleY; -} - -ActionScaleBy::~ActionScaleBy() -{ -} - -void ActionScaleBy::_init() -{ - Animation::_init(); - m_nBeginScaleX = m_pTargetSprite->getScaleX(); - m_nBeginScaleY = m_pTargetSprite->getScaleY(); -} - -void ActionScaleBy::_exec(steady_clock::time_point nNow) -{ - while (Animation::_isDelayEnough(nNow)) - { - // ƶλ - float scale = float(m_nDuration) / m_nTotalDuration; - // ƶ Sprite - m_pTargetSprite->setScale(m_nBeginScaleX + m_nVariationX * scale, m_nBeginScaleX + m_nVariationX * scale); - // ж϶Ƿ - if (_isEnd()) - { - this->stop(); - break; - } - } -} - -void ActionScaleBy::_reset() -{ - Animation::_reset(); -} - -ActionScaleBy * ActionScaleBy::copy() const -{ - return new ActionScaleBy(m_nAnimationInterval / 1000.0f, m_nVariationX, m_nVariationY); -} - -ActionScaleBy * ActionScaleBy::reverse() const -{ - return new ActionScaleBy(m_nTotalDuration / 1000.0f, -m_nVariationX, -m_nVariationY); -} \ No newline at end of file diff --git a/Easy2D/Action/ActionScaleTo.cpp b/Easy2D/Action/ActionScaleTo.cpp deleted file mode 100644 index 76b8fdcc..00000000 --- a/Easy2D/Action/ActionScaleTo.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "..\easy2d.h" - -ActionScaleTo::ActionScaleTo(float duration, float scaleX, float scaleY) : - ActionScaleBy(duration, 0, 0) -{ - m_nEndScaleX = scaleX; - m_nEndScaleY = scaleY; -} - -ActionScaleTo::~ActionScaleTo() -{ -} - -ActionScaleTo * ActionScaleTo::copy() const -{ - return new ActionScaleTo(m_nAnimationInterval / 1000.0f, m_nEndScaleX, m_nEndScaleY); -} - -void ActionScaleTo::_init() -{ - ActionScaleBy::_init(); - m_nVariationX = m_nEndScaleX - m_nBeginScaleX; - m_nVariationY = m_nEndScaleY - m_nBeginScaleY; -} - -void ActionScaleTo::_reset() -{ - ActionScaleBy::_reset(); -} diff --git a/Easy2D/Action/ActionSequence.cpp b/Easy2D/Action/ActionSequence.cpp deleted file mode 100644 index 911dfde9..00000000 --- a/Easy2D/Action/ActionSequence.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "..\easy2d.h" -#include - -ActionSequence::ActionSequence() : - m_nActionIndex(0) -{ -} - -ActionSequence::ActionSequence(int number, Action * action1, ...) : - m_nActionIndex(0) -{ - va_list params; - va_start(params, number); - - while (number > 0) - { - this->addAction(va_arg(params, Action*)); - number--; - } - - va_end(params); -} - -ActionSequence::~ActionSequence() -{ - for (auto action : m_vActions) - { - SafeRelease(action); - } -} - -void ActionSequence::_init() -{ - Action::_init(); - // жĿ - for (auto action : m_vActions) - { - action->m_pTargetSprite = m_pTargetSprite; - } - // ʼһ - m_vActions[0]->_init(); -} - -void ActionSequence::_exec(std::chrono::steady_clock::time_point nNow) -{ - m_vActions[m_nActionIndex]->_exec(nNow); - - if (m_vActions[m_nActionIndex]->isEnding()) - { - m_nActionIndex++; - if (m_nActionIndex == m_vActions.size()) - { - this->stop(); - } - else - { - m_vActions[m_nActionIndex]->_init(); - } - } -} - -void ActionSequence::_reset() -{ - Action::_reset(); - for (auto action : m_vActions) - { - action->_reset(); - } - m_nActionIndex = 0; -} - -void ActionSequence::addAction(Action * action) -{ - m_vActions.push_back(action); - action->retain(); -} - -ActionSequence * ActionSequence::copy() const -{ - auto a = new ActionSequence(); - for (auto action : m_vActions) - { - a->addAction(action->copy()); - } - return a; -} - -ActionSequence * ActionSequence::reverse(bool actionReverse) const -{ - auto a = new ActionSequence(); - for (auto action : a->m_vActions) - { - if (actionReverse) - { - a->addAction(action->reverse()); - } - else - { - a->addAction(action->copy()); - } - } - // ˳ - a->m_vActions.reserve(m_vActions.size()); - return a; -} \ No newline at end of file diff --git a/Easy2D/Action/ActionTwo.cpp b/Easy2D/Action/ActionTwo.cpp deleted file mode 100644 index 669ebcd4..00000000 --- a/Easy2D/Action/ActionTwo.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "..\easy2d.h" - -ActionTwo::ActionTwo(Action * actionFirst, Action * actionSecond) : - m_FirstAction(actionFirst), - m_SecondAction(actionSecond) -{ - m_FirstAction->retain(); - m_SecondAction->retain(); -} - -ActionTwo::~ActionTwo() -{ - SafeRelease(m_FirstAction); - SafeRelease(m_SecondAction); -} - -ActionTwo * ActionTwo::copy() const -{ - return new ActionTwo(m_FirstAction->copy(), m_SecondAction->copy()); -} - -ActionTwo * ActionTwo::reverse(bool actionReverse) const -{ - if (actionReverse) - { - return new ActionTwo(m_SecondAction->reverse(), m_FirstAction->reverse()); - } - else - { - return new ActionTwo(m_SecondAction->copy(), m_FirstAction->copy()); - } -} - -void ActionTwo::_init() -{ - Action::_init(); - m_FirstAction->m_pTargetSprite = m_pTargetSprite; - m_SecondAction->m_pTargetSprite = m_pTargetSprite; - - m_FirstAction->_init(); -} - -void ActionTwo::_exec(std::chrono::steady_clock::time_point nNow) -{ - if (!m_FirstAction->isEnding()) - { - m_FirstAction->_exec(nNow); - if (m_FirstAction->isEnding()) - { - // true ʾһѾ - m_SecondAction->_init(); - } - } - else if (!m_SecondAction->isEnding()) - { - m_SecondAction->_exec(nNow); - } - else - { - this->stop(); - } -} - -void ActionTwo::_reset() -{ - Action::_reset(); - - m_FirstAction->_reset(); - m_SecondAction->_reset(); -} diff --git a/Easy2D/Action/Animation.cpp b/Easy2D/Action/Animation.cpp deleted file mode 100644 index 0ad44d20..00000000 --- a/Easy2D/Action/Animation.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -Animation::Animation(float duration) -{ - m_nDuration = 0; - m_nTotalDuration = UINT(duration * 1000); -} - -Animation::~Animation() -{ -} - -bool Animation::_isEnd() const -{ - return m_nDuration >= m_nTotalDuration; -} - -void Animation::_init() -{ - Action::_init(); - // ¼ǰʱ - m_nLast = steady_clock::now(); -} - -bool Animation::_isDelayEnough(steady_clock::time_point nNow) -{ - // жʱǷ㹻 - if (duration_cast(nNow - m_nLast).count() > m_nAnimationInterval) - { - // ¼¼ʱ - m_nLast += milliseconds(m_nAnimationInterval); - m_nDuration += m_nAnimationInterval; - return true; - } - return false; -} - -void Animation::_reset() -{ - Action::_reset(); - m_nDuration = 0; - // ¼ǰʱ - m_nLast = steady_clock::now(); -} diff --git a/Easy2D/Base/EApp.cpp b/Easy2D/Base/EApp.cpp index b19cb5e7..622ae220 100644 --- a/Easy2D/Base/EApp.cpp +++ b/Easy2D/Base/EApp.cpp @@ -1,5 +1,6 @@ #include "..\ebase.h" #include "..\Win\winbase.h" +#include "..\etools.h" #include #include #include @@ -18,7 +19,7 @@ std::stack s_SceneStack; e2d::EApp::EApp() : m_bRunning(false) - , m_ClearColor(EColor::White) + , m_ClearColor(EColor::Black) , m_bSaveScene(true) , m_pCurrentScene(nullptr) , m_pNextScene(nullptr) @@ -46,72 +47,74 @@ bool e2d::EApp::init(e2d::EString title, e2d::ESize size, bool bShowConsole /* = bool e2d::EApp::init(e2d::EString title, UINT32 width, UINT32 height, bool bShowConsole /* = false */) { - m_sTitle = title; - HRESULT hr; hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { - // رտ̨. - if (bShowConsole) + // رտ̨ + if (!bShowConsole) { - HWND hwnd = FindWindow(L"ConsoleWindowClass", NULL); + HWND consoleHWnd = FindWindow(L"ConsoleWindowClass", NULL); - if (hwnd) + if (consoleHWnd) { - ShowWindow(hwnd, SW_HIDE); + ShowWindow(consoleHWnd, SW_HIDE); } } + + // ʼ device-indpendent Դ + // Direct2D factory. + hr = _createDeviceIndependentResources(); } if (SUCCEEDED(hr)) { - // ʼ device-indpendent Դ - // Direct2D factory. - hr = _createDeviceIndependentResources(); + // עᴰ + WNDCLASSEX wcex = { sizeof(WNDCLASSEX) }; + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = EApp::WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = sizeof(LONG_PTR); + wcex.hInstance = HINST_THISCOMPONENT; + wcex.hbrBackground = NULL; + wcex.lpszMenuName = NULL; + wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION); + wcex.lpszClassName = L"E2DApp"; - if (SUCCEEDED(hr)) + RegisterClassEx(&wcex); + + + // Because the CreateWindow function takes its size in pixels, + // obtain the system DPI and use it to scale the window size. + FLOAT dpiX, dpiY; + + // The factory returns the current system DPI. This is also the value it will use + // to create its own windows. + GetFactory()->GetDesktopDpi(&dpiX, &dpiY); + + m_sTitle = title; + + // Create the window. + GetHWnd() = CreateWindow( + L"E2DApp", + m_sTitle.c_str(), + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, + CW_USEDEFAULT, + static_cast(ceil(width * dpiX / 96.f)), + static_cast(ceil(height * dpiY / 96.f)), + NULL, + NULL, + HINST_THISCOMPONENT, + this + ); + + hr = GetHWnd() ? S_OK : E_FAIL; + if (FAILED(hr)) { - // עᴰ - WNDCLASSEX wcex = { sizeof(WNDCLASSEX) }; - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = EApp::WndProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = sizeof(LONG_PTR); - wcex.hInstance = HINST_THISCOMPONENT; - wcex.hbrBackground = NULL; - wcex.lpszMenuName = NULL; - wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION); - wcex.lpszClassName = L"E2DApp"; - - RegisterClassEx(&wcex); - - - // Because the CreateWindow function takes its size in pixels, - // obtain the system DPI and use it to scale the window size. - FLOAT dpiX, dpiY; - - // The factory returns the current system DPI. This is also the value it will use - // to create its own windows. - GetFactory()->GetDesktopDpi(&dpiX, &dpiY); - - - // Create the window. - GetHWnd() = CreateWindow( - L"E2DApp", - m_sTitle.c_str(), - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, - CW_USEDEFAULT, - static_cast(ceil(width * dpiX / 96.f)), - static_cast(ceil(height * dpiY / 96.f)), - NULL, - NULL, - HINST_THISCOMPONENT, - this - ); - hr = GetHWnd() ? S_OK : E_FAIL; + UnregisterClass(L"E2DApp", HINST_THISCOMPONENT); + MessageBox(nullptr, L"Create Window Failed!", L"Error", MB_OK); } } @@ -126,6 +129,9 @@ bool e2d::EApp::init(e2d::EString title, UINT32 width, UINT32 height, bool bShow // Ϸ void e2d::EApp::run() { + ASSERT(m_pNextScene != nullptr); + // һ + _enterNextScene(); // ʾ ShowWindow(GetHWnd(), SW_SHOWNORMAL); UpdateWindow(GetHWnd()); @@ -181,7 +187,7 @@ void e2d::EApp::_mainLoop() { // ¼ǰʱ nLast = nNow; - // + // ִϷ _onControl(); // ˢϷ _onRender(); @@ -213,7 +219,7 @@ void e2d::EApp::_onControl() //KeyMsg::__exec(); // ̰ //Timer::__exec(); // ʱִг //ActionManager::__exec(); // ִг - //EObjectManager::__flush(); // ˢڴ + EObjectManager::__flush(); // ˢڴ } // This method discards device-specific @@ -233,7 +239,7 @@ bool e2d::EApp::_onRender() GetRenderTarget()->Clear(D2D1::ColorF(m_ClearColor)); - m_pCurrentScene->_onDraw(); // Ƶǰ + m_pCurrentScene->_onRender(); // Ƶǰ hr = GetRenderTarget()->EndDraw(); } @@ -474,7 +480,7 @@ HRESULT e2d::EApp::_createDeviceIndependentResources() if (FAILED(hr)) { - MessageBox(nullptr, L"Create Device Independent Resources Fail!", L"Error", MB_OK); + MessageBox(nullptr, L"Create Device Independent Resources Failed!", L"Error", MB_OK); } return hr; @@ -506,6 +512,11 @@ HRESULT e2d::EApp::_createDeviceResources() ); } + if (FAILED(hr)) + { + MessageBox(nullptr, L"Create Device Resources Failed!", L"Error", MB_OK); + } + return hr; } @@ -537,10 +548,10 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam if (message == WM_CREATE) { LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam; - EApp *pEApp = (EApp *)pcs->lpCreateParams; + e2d::EApp *pEApp = (e2d::EApp *)pcs->lpCreateParams; ::SetWindowLongPtrW( - GetHWnd(), + hWnd, GWLP_USERDATA, PtrToUlong(pEApp) ); @@ -549,9 +560,9 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam } else { - EApp *pEApp = reinterpret_cast(static_cast( + e2d::EApp *pEApp = reinterpret_cast(static_cast( ::GetWindowLongPtrW( - GetHWnd(), + hWnd, GWLP_USERDATA ))); @@ -572,6 +583,23 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam } while (msg.wParam != WA_ACTIVE); } }*/ + case WM_LBUTTONUP: + case WM_LBUTTONDOWN: + case WM_LBUTTONDBLCLK: + case WM_MBUTTONUP: + case WM_MBUTTONDOWN: + case WM_MBUTTONDBLCLK: + case WM_RBUTTONUP: + case WM_RBUTTONDOWN: + case WM_RBUTTONDBLCLK: + case WM_MOUSEMOVE: + case WM_MOUSEWHEEL: + { + EMsgManager::setMouseMsg(message); + } + result = 0; + break; + case WM_SIZE: { UINT width = LOWORD(lParam); @@ -584,7 +612,7 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam case WM_DISPLAYCHANGE: { - InvalidateRect(GetHWnd(), NULL, FALSE); + InvalidateRect(hWnd, NULL, FALSE); } result = 0; wasHandled = true; @@ -593,7 +621,7 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam case WM_PAINT: { pEApp->_onRender(); - ValidateRect(GetHWnd(), NULL); + ValidateRect(hWnd, NULL); } result = 0; wasHandled = true; @@ -611,7 +639,7 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam if (!wasHandled) { - result = DefWindowProc(GetHWnd(), message, wParam, lParam); + result = DefWindowProc(hWnd, message, wParam, lParam); } } diff --git a/Easy2D/Base/EScene.cpp b/Easy2D/Base/EScene.cpp index a33dc05d..2de8ed04 100644 --- a/Easy2D/Base/EScene.cpp +++ b/Easy2D/Base/EScene.cpp @@ -25,12 +25,12 @@ void e2d::EScene::_exec() } } -void e2d::EScene::_onDraw() +void e2d::EScene::_onRender() { // нڵ for (auto child : m_vChildren) { - child->_onDraw(); + child->_onRender(); } } @@ -46,7 +46,7 @@ void e2d::EScene::onExit() { } -void e2d::EScene::add(ENode * child, int zOrder) +void e2d::EScene::add(ENode * child, int zOrder /* = 0 */) { // ӵĽڵǿ ASSERT(child != nullptr); @@ -80,7 +80,7 @@ void e2d::EScene::add(ENode * child, int zOrder) } } -bool e2d::EScene::del(ENode * child) +bool e2d::EScene::del(ENode * child, bool autoRelease /* = true */) { if (child == nullptr) return false; @@ -91,6 +91,7 @@ bool e2d::EScene::del(ENode * child) // ҵͬڵ if (*iter == child) { + if (autoRelease) (*iter)->autoRelease(); // üһ (*iter)->release(); // ȥýڵ diff --git a/Easy2D/Easy2D.vcxproj b/Easy2D/Easy2D.vcxproj index 4315f90b..410a9fdb 100644 --- a/Easy2D/Easy2D.vcxproj +++ b/Easy2D/Easy2D.vcxproj @@ -1,34 +1,18 @@  - - DebugW - Win32 - - - DebugW - x64 - Debug Win32 - - ReleaseW - Win32 - - - ReleaseW - x64 - - - Release - Win32 - Debug x64 + + Release + Win32 + Release x64 @@ -43,25 +27,12 @@ - StaticLibrary - true - v141 - MultiByte - - StaticLibrary true v141 Unicode - StaticLibrary - false - v141 - false - MultiByte - - StaticLibrary false v141 @@ -69,25 +40,12 @@ Unicode - StaticLibrary - true - v141 - MultiByte - - StaticLibrary true v141 Unicode - StaticLibrary - false - v141 - false - MultiByte - - StaticLibrary false v141 @@ -99,74 +57,38 @@ - + - + - + - - - - - - - - - - - - - + - true - Easy2Dd - $(SolutionDir)$(Platform)\ - $(Platform)\$(Configuration)\ - - true Easy2Ddw $(SolutionDir)$(Platform)\ $(Platform)\$(Configuration)\ - true - Easy2Dd - $(SolutionDir)$(Platform)\ - $(Platform)\$(Configuration)\ - - true Easy2Ddw $(SolutionDir)$(Platform)\ $(Platform)\$(Configuration)\ - false - Easy2D - $(SolutionDir)$(Platform)\ - $(Platform)\$(Configuration)\ - - false Easy2Dw $(SolutionDir)$(Platform)\ $(Platform)\$(Configuration)\ - false - Easy2D - $(SolutionDir)$(Platform)\ - $(Platform)\$(Configuration)\ - - false Easy2Dw $(SolutionDir)$(Platform)\ @@ -179,31 +101,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - None - false - - - Console - true - - - false - - - - - - - - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - None + EditAndContinue false @@ -223,27 +121,6 @@ - - NotUsing - Level3 - Disabled - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - None - false - - - Console - true - - - - - - - - - NotUsing Level3 @@ -265,30 +142,6 @@ - - NotUsing - Level3 - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - None - - - Console - true - true - true - - - - - - - - - NotUsing Level3 @@ -315,30 +168,6 @@ - - NotUsing - Level3 - MaxSpeed - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - None - - - Console - true - true - true - - - - - - - - - NotUsing Level3 @@ -367,6 +196,8 @@ + + diff --git a/Easy2D/Easy2D.vcxproj.filters b/Easy2D/Easy2D.vcxproj.filters index a6bbd9f1..cdc50456 100644 --- a/Easy2D/Easy2D.vcxproj.filters +++ b/Easy2D/Easy2D.vcxproj.filters @@ -1,72 +1,57 @@  - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - {261633d3-3814-40c7-bd6d-201ede6c6ade} - - + {2f0f3d30-bfc2-4aea-a170-258bbaacaa79} - + + {42d46a92-c043-4667-8c20-358319e5c313} + + {51864c81-02ee-4043-bf09-9ce3cbe5b6da} - - {42d46a92-c043-4667-8c20-358319e5c313} + + {261633d3-3814-40c7-bd6d-201ede6c6ade} + + + {bdc55351-669e-4ee5-ba0b-ee0e4b628fea} - 源文件\Win + Win - 源文件\Base + Base - 源文件\Base + Base - 源文件\Node + Node - 源文件\Tool + Tool - 源文件\Base + Base + + + Tool + + + Tool\Listener - - 头文件 - - - 头文件 - - - 头文件 - - 源文件\Win - - - 头文件 - - - 头文件 - - - 头文件 + Win + + + + + + \ No newline at end of file diff --git a/Easy2D/EasyX/easyx.h b/Easy2D/EasyX/easyx.h deleted file mode 100644 index d5a35fac..00000000 --- a/Easy2D/EasyX/easyx.h +++ /dev/null @@ -1,321 +0,0 @@ -/****************************************************** - * EasyX Library for C++ (Ver:20170827(beta)) - * http://www.easyx.cn - * - * EasyX.h - * VC ʵּ򵥵Ļͼ - ******************************************************/ - -#pragma once - -#ifndef WINVER -#define WINVER 0x0400 // Specifies that the minimum required platform is Windows 95 and Windows NT 4.0. -#endif - -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0500 // Specifies that the minimum required platform is Windows 2000. -#endif - -#ifndef _WIN32_WINDOWS -#define _WIN32_WINDOWS 0x0410 // Specifies that the minimum required platform is Windows 98. -#endif - - -#ifndef __cplusplus -#error EasyX is only for C++ -#endif - - -#include -#include - -// ͼڳʼ -#define SHOWCONSOLE 1 // ͼδʱ̨ʾ -#define NOCLOSE 2 // ûйرչ -#define NOMINIMIZE 4 // ûС - -// ɫ -#define BLACK 0 -#define BLUE 0xAA0000 -#define GREEN 0x00AA00 -#define CYAN 0xAAAA00 -#define RED 0x0000AA -#define MAGENTA 0xAA00AA -#define BROWN 0x0055AA -#define LIGHTGRAY 0xAAAAAA -#define DARKGRAY 0x555555 -#define LIGHTBLUE 0xFF5555 -#define LIGHTGREEN 0x55FF55 -#define LIGHTCYAN 0xFFFF55 -#define LIGHTRED 0x5555FF -#define LIGHTMAGENTA 0xFF55FF -#define YELLOW 0x55FFFF -#define WHITE 0xFFFFFF - -// ɫת -#define BGR(color) ( (((color) & 0xFF) << 16) | ((color) & 0xFF00FF00) | (((color) & 0xFF0000) >> 16) ) - - -class IMAGE; - -// ߵʽ -class LINESTYLE -{ -public: - LINESTYLE(); - LINESTYLE(const LINESTYLE &style); - LINESTYLE& operator = (const LINESTYLE &style); // ֵغ - virtual ~LINESTYLE(); - - DWORD style; - DWORD thickness; - DWORD *puserstyle; - DWORD userstylecount; -}; - -class FILLSTYLE -{ -public: - FILLSTYLE(); - FILLSTYLE(const FILLSTYLE &style); - FILLSTYLE& operator = (const FILLSTYLE &style); // ֵغ - virtual ~FILLSTYLE(); - - int style; // ʽ - long hatch; // ͼʽ - IMAGE* ppattern; // ͼ -}; - -// ͼ -class IMAGE -{ -public: - int getwidth() const; // ȡĿ - int getheight() const; // ȡĸ߶ - -private: - int width, height; // Ŀ - HBITMAP m_hBmp; - HDC m_hMemDC; - int m_MemCurX; // ǰX - int m_MemCurY; // ǰY - float m_data[6]; - COLORREF m_LineColor; // ǰɫ - COLORREF m_FillColor; // ǰɫ - COLORREF m_TextColor; // ǰɫ - COLORREF m_BkColor; // ǰɫ - DWORD* m_pBuffer; // ͼڴ - - LINESTYLE m_LineStyle; // ʽ - FILLSTYLE m_FillStyle; // ʽ - - virtual void SetDefault(); // ΪĬ״̬ - -public: - IMAGE(int _width = 0, int _height = 0); // ͼ - IMAGE(const IMAGE &img); // 캯 - IMAGE& operator = (const IMAGE &img); // ֵغ - virtual ~IMAGE(); - virtual void Resize(int _width, int _height); // ߴ -}; - - - -// ͼģʽغ - -HWND initgraph(int width, int height, int flag = NULL); // ʼͼλ -void closegraph(); // رͼλ - -// ͼ - -void cleardevice(); // -void setcliprgn(HRGN hrgn); // õǰͼ豸IJü -void clearcliprgn(); // üĻ - -void getlinestyle(LINESTYLE* pstyle); // ȡǰʽ -void setlinestyle(const LINESTYLE* pstyle); // õǰʽ -void setlinestyle(int style, int thickness = 1, const DWORD *puserstyle = NULL, DWORD userstylecount = 0); // õǰʽ -void getfillstyle(FILLSTYLE* pstyle); // ȡǰʽ -void setfillstyle(const FILLSTYLE* pstyle); // õǰʽ -void setfillstyle(int style, long hatch = NULL, IMAGE* ppattern = NULL); // õǰʽ -void setfillstyle(BYTE* ppattern8x8); // õǰʽ - -void setorigin(int x, int y); // ԭ -void getaspectratio(float *pxasp, float *pyasp); // ȡǰ -void setaspectratio(float xasp, float yasp); // õǰ - -int getrop2(); // ȡǰĶԪդģʽ -void setrop2(int mode); // ǰĶԪդģʽ -int getpolyfillmode(); // ȡģʽ -void setpolyfillmode(int mode); // öģʽ - -void graphdefaults(); // лͼΪĬֵ - -COLORREF getlinecolor(); // ȡǰɫ -void setlinecolor(COLORREF color); // õǰɫ -COLORREF gettextcolor(); // ȡǰɫ -void settextcolor(COLORREF color); // õǰɫ -COLORREF getfillcolor(); // ȡǰɫ -void setfillcolor(COLORREF color); // õǰɫ -COLORREF getbkcolor(); // ȡǰͼɫ -void setbkcolor(COLORREF color); // õǰͼɫ -int getbkmode(); // ȡģʽ -void setbkmode(int mode); // ñģʽ - -// ɫģת -COLORREF RGBtoGRAY(COLORREF rgb); -void RGBtoHSL(COLORREF rgb, float *H, float *S, float *L); -void RGBtoHSV(COLORREF rgb, float *H, float *S, float *V); -COLORREF HSLtoRGB(float H, float S, float L); -COLORREF HSVtoRGB(float H, float S, float V); - - -// ͼ - -COLORREF getpixel(int x, int y); // ȡɫ -void putpixel(int x, int y, COLORREF color); // - -void moveto(int x, int y); // ƶǰ() -void moverel(int dx, int dy); // ƶǰ() - -void line(int x1, int y1, int x2, int y2); // -void linerel(int dx, int dy); // () -void lineto(int x, int y); // () - -void rectangle (int left, int top, int right, int bottom); // -void fillrectangle (int left, int top, int right, int bottom); // (б߿) -void solidrectangle(int left, int top, int right, int bottom); // (ޱ߿) -void clearrectangle(int left, int top, int right, int bottom); // վ - -void circle (int x, int y, int radius); // Բ -void fillcircle (int x, int y, int radius); // Բ(б߿) -void solidcircle(int x, int y, int radius); // Բ(ޱ߿) -void clearcircle(int x, int y, int radius); // Բ - -void ellipse (int left, int top, int right, int bottom); // Բ -void fillellipse (int left, int top, int right, int bottom); // Բ(б߿) -void solidellipse(int left, int top, int right, int bottom); // Բ(ޱ߿) -void clearellipse(int left, int top, int right, int bottom); // Բ - -void roundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // ԲǾ -void fillroundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // ԲǾ(б߿) -void solidroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // ԲǾ(ޱ߿) -void clearroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // ԲǾ - -void arc (int left, int top, int right, int bottom, double stangle, double endangle); // Բ(ʼǶȺֹǶΪ) -void pie (int left, int top, int right, int bottom, double stangle, double endangle); // Բ(ʼǶȺֹǶΪ) -void fillpie (int left, int top, int right, int bottom, double stangle, double endangle); // Բ(б߿) -void solidpie(int left, int top, int right, int bottom, double stangle, double endangle); // Բ(ޱ߿) -void clearpie(int left, int top, int right, int bottom, double stangle, double endangle); // Բ - -void polyline (const POINT *points, int num); // -void polygon (const POINT *points, int num); // -void fillpolygon (const POINT *points, int num); // Ķ(б߿) -void solidpolygon(const POINT *points, int num); // Ķ(ޱ߿) -void clearpolygon(const POINT *points, int num); // ն - -void floodfill(int x, int y, int border); // - - - -// غ - -void outtext(LPCTSTR str); // ڵǰλַ -void outtext(TCHAR c); // ڵǰλַ -void outtextxy(int x, int y, LPCTSTR str); // ָλַ -void outtextxy(int x, int y, TCHAR c); // ָλַ -int textwidth(LPCTSTR str); // ȡַռõؿ -int textwidth(TCHAR c); // ȡַռõؿ -int textheight(LPCTSTR str); // ȡַռõظ -int textheight(TCHAR c); // ȡַռõظ -int drawtext(LPCTSTR str, RECT* pRect, UINT uFormat); // ָָʽַ -int drawtext(TCHAR c, RECT* pRect, UINT uFormat); // ָָʽַ - -// õǰʽ() -// nHeight: ַƽ߶ȣ -// nWidth: ַƽ(0 ʾӦ) -// lpszFace: ƣ -// nEscapement: ַдǶ(λ 0.1 ) -// nOrientation: ÿַдǶ(λ 0.1 ) -// nWeight: ַıʻϸ(0 ʾĬϴϸ) -// bItalic: Ƿб壻 -// bUnderline: Ƿ»ߣ -// bStrikeOut: Ƿɾߣ -// fbCharSet: ַָ -// fbOutPrecision: ֵָȣ -// fbClipPrecision: ֵָļȣ -// fbQuality: ֵָ -// fbPitchAndFamily: ָԳ淽ʽϵС -void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace); -void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut); -void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily); -void settextstyle(const LOGFONT *font); // õǰʽ -void gettextstyle(LOGFONT *font); // ȡǰʽ - - - -// ͼ -void loadimage(IMAGE *pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false); // ͼƬļȡͼ(bmp/jpg/gif/emf/wmf) -void loadimage(IMAGE *pDstImg, LPCTSTR pResType, LPCTSTR pResName, int nWidth = 0, int nHeight = 0, bool bResize = false); // Դļȡͼ(bmp/jpg/gif/emf/wmf) -void saveimage(LPCTSTR pImgFile, IMAGE* pImg = NULL); // ͼ -void getimage(IMAGE *pDstImg, int srcX, int srcY, int srcWidth, int srcHeight); // ӵǰͼ豸ȡͼ -void putimage(int dstX, int dstY, const IMAGE *pSrcImg, DWORD dwRop = SRCCOPY); // ͼĻ -void putimage(int dstX, int dstY, int dstWidth, int dstHeight, const IMAGE *pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY); // ͼĻ(ָ) -void rotateimage(IMAGE *dstimg, IMAGE *srcimg, double radian, COLORREF bkcolor = BLACK, bool autosize = false, bool highquality = true);// תͼ -void Resize(IMAGE* pImg, int width, int height); // ͼ豸ĴС -DWORD* GetImageBuffer(IMAGE* pImg = NULL); // ȡͼ豸Դָ -IMAGE* GetWorkingImage(); // ȡǰͼ豸 -void SetWorkingImage(IMAGE* pImg = NULL); // õǰͼ豸 -HDC GetImageHDC(IMAGE* pImg = NULL); // ȡͼ豸(HDC) - - -// - -int getwidth(); // ȡͼ -int getheight(); // ȡͼ߶ -int getx(); // ȡǰ x -int gety(); // ȡǰ y - -void BeginBatchDraw(); // ʼ -void FlushBatchDraw(); // ִδɵĻ -void FlushBatchDraw(int left, int top, int right, int bottom); // ִָδɵĻ -void EndBatchDraw(); // ƣִδɵĻ -void EndBatchDraw(int left, int top, int right, int bottom); // ƣִָδɵĻ - -HWND GetHWnd(); // ȡͼھ(HWND) -TCHAR* GetEasyXVer(); // ȡ EasyX ǰ汾 - -// ȡû -bool InputBox(LPTSTR pString, int nMaxCount, LPCTSTR pPrompt = NULL, LPCTSTR pTitle = NULL, LPCTSTR pDefault = NULL, int width = 0, int height = 0, bool bOnlyOK = true); - - - -// Ϣ -// ֧Ϣ -// WM_MOUSEMOVE ƶ -// WM_MOUSEWHEEL ֲ -// WM_LBUTTONDOWN -// WM_LBUTTONUP -// WM_LBUTTONDBLCLK ˫ -// WM_MBUTTONDOWN м -// WM_MBUTTONUP м -// WM_MBUTTONDBLCLK м˫ -// WM_RBUTTONDOWN Ҽ -// WM_RBUTTONUP Ҽ -// WM_RBUTTONDBLCLK Ҽ˫ -struct MOUSEMSG -{ - UINT uMsg; // ǰϢ - bool mkCtrl; // Ctrl Ƿ - bool mkShift; // Shift Ƿ - bool mkLButton; // Ƿ - bool mkMButton; // мǷ - bool mkRButton; // ҼǷ - short x; // ǰ x - short y; // ǰ y - short wheel; // ֵֹ (120 ı) -}; - -bool MouseHit(); // ǷϢ -MOUSEMSG GetMouseMsg(); // ȡһϢûУ͵ȴ -void FlushMouseMsgBuffer(); // Ϣ diff --git a/Easy2D/EasyX/x64/EasyXa.lib b/Easy2D/EasyX/x64/EasyXa.lib deleted file mode 100644 index d1c996b242f81a7467746f6d92b522a548b635ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261406 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 diff --git a/Easy2D/EasyX/x64/EasyXw.lib b/Easy2D/EasyX/x64/EasyXw.lib deleted file mode 100644 index f47b4075f0aa5158eb2064e5a408c09cb35e5590..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263840 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 diff --git a/Easy2D/EasyX/x86/EasyXa.lib b/Easy2D/EasyX/x86/EasyXa.lib deleted file mode 100644 index db14e5bf1bffcd96f82dced386dea49c6646b92b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184974 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 diff --git a/Easy2D/Msg/KeyMsg.cpp b/Easy2D/Msg/KeyMsg.cpp deleted file mode 100644 index b3a76b14..00000000 --- a/Easy2D/Msg/KeyMsg.cpp +++ /dev/null @@ -1,314 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" -#include - -// ص -static std::vector s_vListeners; - -// ֵĶ -const VK_KEY KeyMsg::A = 'A'; -const VK_KEY KeyMsg::B = 'B'; -const VK_KEY KeyMsg::C = 'C'; -const VK_KEY KeyMsg::D = 'D'; -const VK_KEY KeyMsg::E = 'E'; -const VK_KEY KeyMsg::F = 'F'; -const VK_KEY KeyMsg::G = 'G'; -const VK_KEY KeyMsg::H = 'H'; -const VK_KEY KeyMsg::I = 'I'; -const VK_KEY KeyMsg::J = 'J'; -const VK_KEY KeyMsg::K = 'K'; -const VK_KEY KeyMsg::L = 'L'; -const VK_KEY KeyMsg::M = 'M'; -const VK_KEY KeyMsg::N = 'N'; -const VK_KEY KeyMsg::O = 'O'; -const VK_KEY KeyMsg::P = 'P'; -const VK_KEY KeyMsg::Q = 'Q'; -const VK_KEY KeyMsg::R = 'R'; -const VK_KEY KeyMsg::S = 'S'; -const VK_KEY KeyMsg::T = 'T'; -const VK_KEY KeyMsg::U = 'U'; -const VK_KEY KeyMsg::V = 'V'; -const VK_KEY KeyMsg::W = 'W'; -const VK_KEY KeyMsg::X = 'X'; -const VK_KEY KeyMsg::Y = 'Y'; -const VK_KEY KeyMsg::Z = 'Z'; -const VK_KEY KeyMsg::NUM_0 = '0'; -const VK_KEY KeyMsg::NUM_1 = '1'; -const VK_KEY KeyMsg::NUM_2 = '2'; -const VK_KEY KeyMsg::NUM_3 = '3'; -const VK_KEY KeyMsg::NUM_4 = '4'; -const VK_KEY KeyMsg::NUM_5 = '5'; -const VK_KEY KeyMsg::NUM_6 = '6'; -const VK_KEY KeyMsg::NUM_7 = '7'; -const VK_KEY KeyMsg::NUM_8 = '8'; -const VK_KEY KeyMsg::NUM_9 = '9'; -const VK_KEY KeyMsg::NUMPAD_0 = VK_NUMPAD0; -const VK_KEY KeyMsg::NUMPAD_1 = VK_NUMPAD1; -const VK_KEY KeyMsg::NUMPAD_2 = VK_NUMPAD2; -const VK_KEY KeyMsg::NUMPAD_3 = VK_NUMPAD3; -const VK_KEY KeyMsg::NUMPAD_4 = VK_NUMPAD4; -const VK_KEY KeyMsg::NUMPAD_5 = VK_NUMPAD5; -const VK_KEY KeyMsg::NUMPAD_6 = VK_NUMPAD6; -const VK_KEY KeyMsg::NUMPAD_7 = VK_NUMPAD7; -const VK_KEY KeyMsg::NUMPAD_8 = VK_NUMPAD8; -const VK_KEY KeyMsg::NUMPAD_9 = VK_NUMPAD9; -const VK_KEY KeyMsg::Enter = VK_RETURN; -const VK_KEY KeyMsg::Space = VK_SPACE; -const VK_KEY KeyMsg::Ctrl = VK_CONTROL; -const VK_KEY KeyMsg::LCtrl = VK_LCONTROL; -const VK_KEY KeyMsg::RCtrl = VK_RCONTROL; -const VK_KEY KeyMsg::Shift = VK_SHIFT; -const VK_KEY KeyMsg::LShift = VK_LSHIFT; -const VK_KEY KeyMsg::RShift = VK_RSHIFT; -const VK_KEY KeyMsg::Up = VK_UP; -const VK_KEY KeyMsg::Down = VK_DOWN; -const VK_KEY KeyMsg::Left = VK_LEFT; -const VK_KEY KeyMsg::Right = VK_RIGHT; -const VK_KEY KeyMsg::Esc = VK_ESCAPE; -const VK_KEY KeyMsg::F1 = VK_F1; -const VK_KEY KeyMsg::F2 = VK_F2; -const VK_KEY KeyMsg::F3 = VK_F3; -const VK_KEY KeyMsg::F4 = VK_F4; -const VK_KEY KeyMsg::F5 = VK_F5; -const VK_KEY KeyMsg::F6 = VK_F6; -const VK_KEY KeyMsg::F7 = VK_F7; -const VK_KEY KeyMsg::F8 = VK_F8; -const VK_KEY KeyMsg::F9 = VK_F9; -const VK_KEY KeyMsg::F10 = VK_F10; -const VK_KEY KeyMsg::F11 = VK_F11; -const VK_KEY KeyMsg::F12 = VK_F12; - -static VK_KEY convert(int ascii); - -KeyMsg::KeyMsg(TString name, const KEY_CALLBACK & callback) : - m_sName(name), - m_callback(callback), - m_pParentScene(nullptr), - m_bRunning(true), - m_bWaiting(false) -{ -} - -KeyMsg::~KeyMsg() -{ -} - -void KeyMsg::onKbHit(VK_KEY key) -{ - m_callback(key); -} - -void KeyMsg::start() -{ - m_bRunning = true; -} - -void KeyMsg::stop() -{ - m_bRunning = false; -} - -void KeyMsg::wait() -{ - m_bWaiting = true; -} - -void KeyMsg::notify() -{ - m_bWaiting = false; -} - -void KeyMsg::__exec() -{ - if (_kbhit()) // ްϢ - { - VK_KEY key = convert(_getch()); // ȡϢ - - for (auto l : s_vListeners) // ַϢ - { - if (!l->m_bWaiting && l->m_bRunning) - { - l->onKbHit(key); // ִаص - } - } - } -} - -void KeyMsg::addListener(TString name, const KEY_CALLBACK & callback) -{ - // µļ - auto listener = new KeyMsg(name, callback); - // ڳ - listener->m_pParentScene = EApp::getLoadingScene(); - // µİص - s_vListeners.push_back(listener); -} - -void KeyMsg::startListener(TString name) -{ - // ͬļ - for (auto l : s_vListeners) - { - if (l->m_sName == name && l->m_pParentScene == EApp::getCurrentScene()) - { - l->start(); - } - } -} - -void KeyMsg::stopListener(TString name) -{ - // ͬļ - for (auto l : s_vListeners) - { - if (l->m_sName == name && l->m_pParentScene == EApp::getCurrentScene()) - { - l->stop(); - } - } -} - -void KeyMsg::delListener(TString name) -{ - // - std::vector::iterator iter; - // ѭм - for (iter = s_vListeners.begin(); iter != s_vListeners.end();) - { - // ͬƵļ - if ((*iter)->m_sName == name && (*iter)->m_pParentScene == EApp::getCurrentScene()) - { - // ɾöʱ - delete (*iter); - iter = s_vListeners.erase(iter); - } - else - { - iter++; - } - } -} - -void KeyMsg::notifyAllSceneListeners(EScene * scene) -{ - for (auto l : s_vListeners) - { - if (l->m_pParentScene == scene) - { - l->notify(); - } - } -} - -void KeyMsg::waitAllSceneListeners(EScene * scene) -{ - for (auto l : s_vListeners) - { - if (l->m_pParentScene == scene) - { - l->wait(); - } - } -} - -void KeyMsg::clearAllSceneListeners(EScene * scene) -{ - // - std::vector::iterator iter; - // ѭм - for (iter = s_vListeners.begin(); iter != s_vListeners.end();) - { - // ͬƵļ - if ((*iter)->m_pParentScene == scene) - { - // ɾöʱ - delete (*iter); - iter = s_vListeners.erase(iter); - } - else - { - iter++; - } - } -} - -void KeyMsg::clearAllListeners() -{ - // ɾм - for (auto l : s_vListeners) - { - delete l; - } - // - s_vListeners.clear(); -} - -bool KeyMsg::isKeyDown(VK_KEY key) -{ - // ȡ key İ - return (GetAsyncKeyState(key) & 0x8000); -} - - -VK_KEY convert(int ascii) -{ - // ĸ - if (ascii >= 'a' && ascii <= 'z') - { - return VK_KEY(ascii - ('a' - 'A')); - } - else if (ascii >= 'A' && ascii <= 'Z') - { - return VK_KEY(ascii); - } - // ּ - else if (ascii >= '0' && ascii <= '9') - { - return VK_KEY(ascii); - } - // سոEsc - else if (ascii == 0x0D || ascii == 0x20 || ascii == 0x1B) - { - return VK_KEY(ascii); - } - // ܼ - else if (ascii == 0 || ascii == 0xE0) - { - switch (_getch()) - { - case 72: - return KeyMsg::Up; - case 75: - return KeyMsg::Left; - case 77: - return KeyMsg::Right; - case 80: - return KeyMsg::Down; - case 59: - return KeyMsg::F1; - case 60: - return KeyMsg::F2; - case 61: - return KeyMsg::F3; - case 62: - return KeyMsg::F4; - case 63: - return KeyMsg::F5; - case 64: - return KeyMsg::F6; - case 65: - return KeyMsg::F7; - case 66: - return KeyMsg::F8; - case 67: - return KeyMsg::F9; - case 133: - return KeyMsg::F10; - case 134: - return KeyMsg::F11; - default: - return 0; - } - } - return 0; -} \ No newline at end of file diff --git a/Easy2D/Msg/MouseMsg.cpp b/Easy2D/Msg/MouseMsg.cpp deleted file mode 100644 index 8234e7ef..00000000 --- a/Easy2D/Msg/MouseMsg.cpp +++ /dev/null @@ -1,223 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" - -// ص -static std::vector s_vListeners; - -// Ϣ -static MOUSEMSG s_mouseMsg; - -void MouseMsg::__exec() -{ - // ȡϢ - while (MouseHit()) - { - // ȡϢ - s_mouseMsg = GetMouseMsg(); - // ִг - EApp::get()->getCurrentScene()->_exec(); - // ִص - for (auto l : s_vListeners) // ѭе - { - if (!l->m_bWaiting && l->m_bRunning) - { - l->onMouseMsg(); // ִлص - } - } - } -} - -MouseMsg::MouseMsg() : - m_callback([]() {}), - m_pParentScene(nullptr), - m_bRunning(true), - m_bWaiting(false) -{ -} - -MouseMsg::MouseMsg(TString name, const MOUSE_CALLBACK & callback) : - m_sName(name), - m_callback(callback), - m_pParentScene(nullptr), - m_bRunning(true), - m_bWaiting(false) -{ -} - -MouseMsg::~MouseMsg() -{ -} - -void MouseMsg::onMouseMsg() -{ - m_callback(); -} - -void MouseMsg::addListener(TString name, const MOUSE_CALLBACK & callback) -{ - // µļ - auto listener = new MouseMsg(name, callback); - // ڳ - listener->m_pParentScene = EApp::getLoadingScene(); - // µİص - s_vListeners.push_back(listener); -} - -void MouseMsg::startListener(TString name) -{ - // ͬļ - for (auto l : s_vListeners) - { - if (l->m_sName == name && l->m_pParentScene == EApp::getCurrentScene()) - { - l->start(); - } - } -} - -void MouseMsg::stopListener(TString name) -{ - // ͬļ - for (auto l : s_vListeners) - { - if (l->m_sName == name && l->m_pParentScene == EApp::getCurrentScene()) - { - l->stop(); - } - } -} - -void MouseMsg::delListener(TString name) -{ - // - std::vector::iterator iter; - // ѭм - for (iter = s_vListeners.begin(); iter != s_vListeners.end();) - { - // ͬƵļ - if ((*iter)->m_sName == name && (*iter)->m_pParentScene == EApp::getCurrentScene()) - { - // ɾöʱ - delete (*iter); - iter = s_vListeners.erase(iter); - } - else - { - iter++; - } - } -} - -void MouseMsg::start() -{ - m_bRunning = true; -} - -void MouseMsg::stop() -{ - m_bRunning = false; -} - -void MouseMsg::wait() -{ - m_bWaiting = true; -} - -void MouseMsg::notify() -{ - m_bWaiting = false; -} - -void MouseMsg::clearAllListeners() -{ - // ɾм - for (auto l : s_vListeners) - { - delete l; - } - // - s_vListeners.clear(); -} - -void MouseMsg::notifyAllSceneListeners(EScene * scene) -{ - for (auto l : s_vListeners) - { - if (l->m_pParentScene == scene) - { - l->notify(); - } - } -} - -void MouseMsg::waitAllSceneListeners(EScene * scene) -{ - for (auto l : s_vListeners) - { - if (l->m_pParentScene == scene) - { - l->wait(); - } - } -} - -void MouseMsg::clearAllSceneListeners(EScene * scene) -{ - // - std::vector::iterator iter; - // ѭм - for (iter = s_vListeners.begin(); iter != s_vListeners.end();) - { - // ͬƵļ - if ((*iter)->m_pParentScene == scene) - { - // ɾöʱ - delete (*iter); - iter = s_vListeners.erase(iter); - } - else - { - iter++; - } - } -} - -bool MouseMsg::isLButtonDown() -{ - return s_mouseMsg.mkLButton; -} - -bool MouseMsg::isRButtonDown() -{ - return s_mouseMsg.mkRButton; -} - -bool MouseMsg::isMButtonDown() -{ - return s_mouseMsg.mkMButton; -} - -int MouseMsg::getX() -{ - return s_mouseMsg.x; -} - -int MouseMsg::getY() -{ - return s_mouseMsg.y; -} - -CPoint MouseMsg::getPos() -{ - return CPoint(s_mouseMsg.x, s_mouseMsg.y); -} - -int MouseMsg::getWheel() -{ - return s_mouseMsg.wheel; -} - -MouseMsg::MESSAGE MouseMsg::getMsg() -{ - return MESSAGE(s_mouseMsg.uMsg); -} diff --git a/Easy2D/Node/BatchNode.cpp b/Easy2D/Node/BatchNode.cpp deleted file mode 100644 index 63716580..00000000 --- a/Easy2D/Node/BatchNode.cpp +++ /dev/null @@ -1,190 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" - -BatchNode::BatchNode() -{ -} - - -BatchNode::~BatchNode() -{ - clearAllChildren(); -} - -bool BatchNode::_exec(bool active) -{ - // ڵǷʾ - if (!m_bDisplay) - { - return false; - } - // ӽڵ - for (int i = int(m_vChildren.size() - 1); i >= 0; i--) - { - if (m_vChildren[i]->_exec(active)) - { - active = false; - } - } - // ӽڵȡ˻潹㣬ýڵҲȡ˽ - return !active; -} - -void BatchNode::_onDraw() -{ - // ڵǷʾ - if (!m_bDisplay) - { - return; - } - - for (auto child : m_vChildren) - { - // ӽڵ - child->_onDraw(); - } -} - -void BatchNode::add(Node * child, int z_Order) -{ - if (child == nullptr) return; - - // ýڵĸ - child->setParentScene(this->getParentScene()); - // ýڵڵе z ˳ - child->setZOrder(z_Order); - // üһ - child->retain(); - // ޸ӽڵλ - child->move(getPos()); - - // z ˳ڵ - size_t size = m_vChildren.size(); - for (unsigned i = 0; i <= size; i++) - { - if (i != size) - { - if (z_Order < m_vChildren.at(i)->getZOrder()) - { - m_vChildren.insert(m_vChildren.begin() + i, child); - break; - } - } - else - { - m_vChildren.push_back(child); - break; - } - } -} - -bool BatchNode::del(Node * child) -{ - if (child == nullptr) return false; - - // ѰǷͬڵ - std::vector::iterator iter; - for (iter = m_vChildren.begin(); iter != m_vChildren.end(); iter++) - { - // ҵͬڵ - if ((*iter) == child) - { - // üһ - (*iter)->release(); - // ȥýڵ - m_vChildren.erase(iter); - return true; - } - } - return false; -} - -int BatchNode::getCount() -{ - return (int)m_vChildren.size(); -} - -std::vector& BatchNode::getChildren() -{ - return m_vChildren; -} - -void BatchNode::clearAllChildren() -{ - // нڵüһ - for (auto child : m_vChildren) - { - child->autoRelease(); - child->release(); - } - // մڵ - m_vChildren.clear(); -} - -void BatchNode::setX(int x) -{ - // ƶλ - int var = x - getX(); - // ƶӽڵλ - for (auto child : m_vChildren) - { - child->move(var, 0); - } - Node::setX(x); -} - -void BatchNode::setY(int y) -{ - // ƶλ - int var = y - getY(); - // ƶӽڵλ - for (auto child : m_vChildren) - { - child->move(0, var); - } - Node::setY(y); -} - -void BatchNode::setPos(int x, int y) -{ - // ƶλ - CPoint var(x - getX(), y - getY()); - // ƶӽڵλ - for (auto child : m_vChildren) - { - child->move(var); - } - Node::setPos(x, y); -} - -void BatchNode::setPos(CPoint p) -{ - // ƶλ - CPoint var(p - getPos()); - // ƶӽڵλ - for (auto child : m_vChildren) - { - child->move(var); - } - Node::setPos(p); -} - -void BatchNode::move(int x, int y) -{ - // ƶӽڵλ - for (auto child : m_vChildren) - { - child->move(x, y); - } - Node::move(x, y); -} - -void BatchNode::move(CVector v) -{ - // ƶӽڵλ - for (auto child : m_vChildren) - { - child->move(v); - } - Node::move(v); -} diff --git a/Easy2D/Node/BatchSprite.cpp b/Easy2D/Node/BatchSprite.cpp deleted file mode 100644 index edbb9e84..00000000 --- a/Easy2D/Node/BatchSprite.cpp +++ /dev/null @@ -1,260 +0,0 @@ -#include "..\easy2d.h" - -BatchSprite::BatchSprite() -{ -} - -BatchSprite::~BatchSprite() -{ -} - -void BatchSprite::addSprite(Sprite * sprite, int z_Order) -{ - if (sprite == nullptr) return; - - // ýڵĸ - sprite->setParentScene(this->getParentScene()); - // ýڵڵе z ˳ - sprite->setZOrder(z_Order); - // üһ - sprite->retain(); - - // z ˳ڵ - size_t size = m_vSprites.size(); - for (unsigned i = 0; i <= size; i++) - { - if (i != size) - { - if (z_Order < m_vSprites.at(i)->getZOrder()) - { - m_vSprites.insert(m_vSprites.begin() + i, sprite); - break; - } - } - else - { - m_vSprites.push_back(sprite); - break; - } - } -} - -bool BatchSprite::delSprite(Sprite * sprite) -{ - if (sprite == nullptr) return false; - - // ѰǷͬڵ - std::vector::iterator iter; - for (iter = m_vSprites.begin(); iter != m_vSprites.end(); iter++) - { - // ҵͬڵ - if ((*iter) == sprite) - { - // üһ - (*iter)->release(); - // ȥýڵ - m_vSprites.erase(iter); - return true; - } - } - return false; -} - -int BatchSprite::getCount() -{ - return (int)m_vSprites.size(); -} - -std::vector& BatchSprite::getChildren() -{ - return m_vSprites; -} - -void BatchSprite::clearAllSprites() -{ - // нڵüһ - for (auto s : m_vSprites) - { - s->release(); - } - // մڵ - m_vSprites.clear(); -} - -bool BatchSprite::_exec(bool active) -{ - // ڵǷʾ - if (!m_bDisplay) - { - return false; - } - // ӽڵ - for (int i = int(m_vSprites.size() - 1); i >= 0; i--) - { - if (m_vSprites[i]->_exec(active)) - { - active = false; - } - } - // ӽڵȡ˻潹㣬ýڵҲȡ˽ - return !active; -} - -void BatchSprite::_onDraw() -{ - // ڵǷʾ - if (!m_bDisplay) - { - return; - } - - // λûӽڵ - for (auto sprite : m_vSprites) - { - // ӽڵƶλ - sprite->move(getX(), getY()); - // ӽڵ - sprite->_onDraw(); - // ӽڵƻԭλ - sprite->move(-getX(), -getY()); - } -} - -Sprite * BatchSprite::isCollisionWith(Sprite * sprite) -{ - for (int i = int(m_vSprites.size() - 1); i >= 0; i--) - { - if (m_vSprites[i]->isCollisionWith(sprite)) - { - return m_vSprites[i]; - } - } - return nullptr; -} - -Sprite * BatchSprite::isPointIn(CPoint point) -{ - for (int i = int(m_vSprites.size() - 1); i >= 0; i--) - { - if (m_vSprites[i]->isPointIn(point)) - { - return m_vSprites[i]; - } - } - return nullptr; -} - -void BatchSprite::addAction(Action * action) -{ - Sprite::addAction(action); -} - -float BatchSprite::getScaleX() const -{ - return m_fScaleX; -} - -float BatchSprite::getScaleY() const -{ - return m_fScaleY; -} - -float BatchSprite::getOpacity() const -{ - return m_nAlpha / 255.0f; -} - -void BatchSprite::setScale(float scaleX, float scaleY) -{ - m_fScaleX = scaleX; - m_fScaleY = scaleY; - for (auto s : m_vSprites) - { - s->setScale(scaleX, scaleY); - } -} - -void BatchSprite::setOpacity(float opacity) -{ - m_nAlpha = BYTE(min(max(opacity, 0), 1) * 255); - for (auto s : m_vSprites) - { - s->setOpacity(opacity); - } -} - -void BatchSprite::setImage(Image * image) -{ - for (auto s : m_vSprites) - { - s->setImage(image); - } -} - -void BatchSprite::setX(int x) -{ - // ƶλ - int var = x - getX(); - // ƶӽڵλ - for (auto s : m_vSprites) - { - s->move(var, 0); - } - RectNode::setX(x); -} - -void BatchSprite::setY(int y) -{ - // ƶλ - int var = y - getY(); - // ƶӽڵλ - for (auto s : m_vSprites) - { - s->move(0, var); - } - RectNode::setY(y); -} - -void BatchSprite::setPos(int x, int y) -{ - // ƶλ - CPoint var(x - getX(), y - getY()); - // ƶӽڵλ - for (auto s : m_vSprites) - { - s->move(var); - } - RectNode::setPos(x, y); -} - -void BatchSprite::setPos(CPoint p) -{ - // ƶλ - CPoint var(p - getPos()); - // ƶӽڵλ - for (auto s : m_vSprites) - { - s->move(var); - } - RectNode::setPos(p); -} - -void BatchSprite::move(int x, int y) -{ - // ƶӽڵλ - for (auto s : m_vSprites) - { - s->move(x, y); - } - RectNode::move(x, y); -} - -void BatchSprite::move(CVector v) -{ - // ƶӽڵλ - for (auto s : m_vSprites) - { - s->move(v); - } - RectNode::move(v); -} \ No newline at end of file diff --git a/Easy2D/Node/Button/Button.cpp b/Easy2D/Node/Button/Button.cpp deleted file mode 100644 index 8044d691..00000000 --- a/Easy2D/Node/Button/Button.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "..\..\easy2d.h" -#include "..\..\EasyX\easyx.h" - - -Button::Button() : - m_bEnable(true) -{ -} - -Button::~Button() -{ -} - -bool Button::_exec(bool active) -{ - // ťǷ - if (!m_bEnable) - { - return false; - } - return MouseNode::_exec(active); -} - -void Button::_onDraw() -{ - // ťǷ - if (!m_bEnable) - { - // δʱ Disable ״̬ - _onDisable(); - return; - } - MouseNode::_onDraw(); -} - -bool Button::isEnable() -{ - return m_bEnable; -} - -void Button::setEnable(bool enable) -{ - m_bEnable = enable; -} - -void Button::setX(int x) -{ - MouseNode::setX(x); - _resetPosition(); -} - -void Button::setY(int y) -{ - MouseNode::setY(y); - _resetPosition(); -} - -void Button::setPos(int x, int y) -{ - MouseNode::setPos(x, y); - _resetPosition(); -} - -void Button::setPos(CPoint p) -{ - MouseNode::setPos(p); - _resetPosition(); -} - -void Button::move(int x, int y) -{ - MouseNode::move(x, y); - _resetPosition(); -} - -void Button::move(CVector v) -{ - MouseNode::move(v); - _resetPosition(); -} diff --git a/Easy2D/Node/Button/ImageButton.cpp b/Easy2D/Node/Button/ImageButton.cpp deleted file mode 100644 index 824b8113..00000000 --- a/Easy2D/Node/Button/ImageButton.cpp +++ /dev/null @@ -1,172 +0,0 @@ -#include "..\..\easy2d.h" - - -ImageButton::ImageButton() : - m_pNormalImage(nullptr), - m_pMouseInImage(nullptr), - m_pSelectedImage(nullptr), - m_pUnableImage(nullptr) -{ -} - -ImageButton::ImageButton(LPCTSTR image) : - ImageButton() -{ - setNormal(new Image(image)); // ðť״̬ʱͼƬ -} - -ImageButton::ImageButton(Image * image) : - ImageButton() -{ - setNormal(image); // ðť״̬ʱͼƬ -} - -ImageButton::~ImageButton() -{ - // ͼƬüһ - SafeRelease(m_pNormalImage); - SafeRelease(m_pMouseInImage); - SafeRelease(m_pSelectedImage); - SafeRelease(m_pUnableImage); -} - -void ImageButton::_setStatus(Status status) -{ - if (m_eStatus != status) - { - if (status == MOUSEIN) - { - if (m_pMouseInImage) setRect(m_pMouseInImage->getRect()); - } - else if (status == SELECTED) - { - if (m_pSelectedImage) setRect(m_pSelectedImage->getRect()); - } - else - { - setRect(m_pNormalImage->getRect()); - } - } - MouseNode::_setStatus(status); -} - -void ImageButton::_onNormal() -{ - if (m_pNormalImage) - { - m_pNormalImage->_onDraw(); - } -} - -void ImageButton::_onMouseIn() -{ - if (m_pMouseInImage) - { - m_pMouseInImage->_onDraw(); - } - else - { - _onNormal(); - } -} - -void ImageButton::_onSelected() -{ - if (m_pSelectedImage) - { - m_pSelectedImage->_onDraw(); - } - else - { - _onNormal(); - } -} - -void ImageButton::_onDisable() -{ - if (m_pUnableImage) - { - m_pUnableImage->_onDraw(); - } - else - { - _onNormal(); - } -} - -void ImageButton::setNormal(Image * image) -{ - if (image) - { - // ԭͼƬüһ - SafeRelease(m_pNormalImage); - // ޸ͼƬ - m_pNormalImage = image; - // ͼƬüһ - m_pNormalImage->retain(); - // ͼƬ趨ťС - setSize(m_pNormalImage->getSize()); - // ¼ͼƬλ - _resetPosition(); - } -} - -void ImageButton::setMouseIn(Image * image) -{ - if (image) - { - SafeRelease(m_pMouseInImage); - m_pMouseInImage = image; - m_pMouseInImage->retain(); - _resetPosition(); - } -} - -void ImageButton::setSelected(Image * image) -{ - if (image) - { - SafeRelease(m_pSelectedImage); - m_pSelectedImage = image; - m_pSelectedImage->retain(); - _resetPosition(); - } -} - -void ImageButton::setUnable(Image * image) -{ - if (image) - { - SafeRelease(m_pUnableImage); - m_pUnableImage = image; - m_pUnableImage->retain(); - _resetPosition(); - } -} - -void ImageButton::_resetPosition() -{ - if (m_pNormalImage) - { - // ݰťλúͼƬͼƬλþʾ - m_pNormalImage->setPos(getX(), getY()); - } - if (m_pMouseInImage) - { - m_pMouseInImage->setPos( - getX() + (getWidth() - m_pMouseInImage->getWidth()) / 2, - getY() + (getHeight() - m_pMouseInImage->getHeight()) / 2); - } - if (m_pSelectedImage) - { - m_pSelectedImage->setPos( - getX() + (getWidth() - m_pSelectedImage->getWidth()) / 2, - getY() + (getHeight() - m_pSelectedImage->getHeight()) / 2); - } - if (m_pUnableImage) - { - m_pUnableImage->setPos( - getX() + (getWidth() - m_pUnableImage->getWidth()) / 2, - getY() + (getHeight() - m_pUnableImage->getHeight()) / 2); - } -} diff --git a/Easy2D/Node/Button/TextButton.cpp b/Easy2D/Node/Button/TextButton.cpp deleted file mode 100644 index fcebafad..00000000 --- a/Easy2D/Node/Button/TextButton.cpp +++ /dev/null @@ -1,172 +0,0 @@ -#include "..\..\easy2d.h" - - -TextButton::TextButton() : - m_pNormalText(nullptr), - m_pMouseInText(nullptr), - m_pSelectedText(nullptr), - m_pUnableText(nullptr) -{ -} - -TextButton::TextButton(TString text) : - TextButton() -{ - setNormal(new Text(text)); // ðť״̬ʱ -} - -TextButton::TextButton(Text * text) : - TextButton() -{ - setNormal(text); // ðť״̬ʱ -} - -TextButton::~TextButton() -{ - // ıüһ - SafeRelease(m_pNormalText); - SafeRelease(m_pMouseInText); - SafeRelease(m_pSelectedText); - SafeRelease(m_pUnableText); -} - -void TextButton::_setStatus(Status status) -{ - if (m_eStatus != status) - { - if (status == MOUSEIN) - { - if (m_pMouseInText) setRect(m_pMouseInText->getRect()); - } - else if (status == SELECTED) - { - if (m_pSelectedText) setRect(m_pSelectedText->getRect()); - } - else - { - setRect(m_pNormalText->getRect()); - } - } - MouseNode::_setStatus(status); -} - -void TextButton::_onNormal() -{ - if (m_pNormalText) - { - m_pNormalText->_onDraw(); - } -} - -void TextButton::_onMouseIn() -{ - if (m_pMouseInText) - { - m_pMouseInText->_onDraw(); - } - else - { - _onNormal(); - } -} - -void TextButton::_onSelected() -{ - if (m_pSelectedText) - { - m_pSelectedText->_onDraw(); - } - else - { - _onNormal(); - } -} - -void TextButton::_onDisable() -{ - if (m_pUnableText) - { - m_pUnableText->_onDraw(); - } - else - { - _onNormal(); - } -} - -void TextButton::setNormal(Text * text) -{ - if (text) - { - // ԭıüһ - SafeRelease(m_pNormalText); - // ޸ı - m_pNormalText = text; - // ıüһ - m_pNormalText->retain(); - // ֿ趨ťС - setSize(m_pNormalText->getSize()); - // ¼ıλ - _resetPosition(); - } -} - -void TextButton::setMouseIn(Text * text) -{ - if (text) - { - SafeRelease(m_pMouseInText); - m_pMouseInText = text; - m_pMouseInText->retain(); - _resetPosition(); - } -} - -void TextButton::setSelected(Text * text) -{ - if (text) - { - SafeRelease(m_pSelectedText); - m_pSelectedText = text; - m_pSelectedText->retain(); - _resetPosition(); - } -} - -void TextButton::setUnable(Text * text) -{ - if (text) - { - SafeRelease(m_pUnableText); - m_pUnableText = text; - m_pUnableText->retain(); - _resetPosition(); - } -} - -void TextButton::_resetPosition() -{ - if (m_pNormalText) - { - // ݰťλúֿλþʾ - m_pNormalText->setPos(getX() , getY()); - } - if (m_pMouseInText) - { - m_pMouseInText->setPos( - getX() + (getWidth() - m_pMouseInText->getWidth()) / 2, - getY() + (getHeight() - m_pMouseInText->getHeight()) / 2); - } - if (m_pSelectedText) - { - m_pSelectedText->setPos( - getX() + (getWidth() - m_pSelectedText->getWidth()) / 2, - getY() + (getHeight() - m_pSelectedText->getHeight()) / 2); - } - if (m_pUnableText) - { - m_pUnableText->setPos( - getX() + (getWidth() - m_pUnableText->getWidth()) / 2, - getY() + (getHeight() - m_pUnableText->getHeight()) / 2); - } -} diff --git a/Easy2D/Node/ENode.cpp b/Easy2D/Node/ENode.cpp index 8f6eea95..10b7b256 100644 --- a/Easy2D/Node/ENode.cpp +++ b/Easy2D/Node/ENode.cpp @@ -1,4 +1,5 @@ #include "..\enodes.h" +#include "..\Win\winbase.h" e2d::ENode::ENode() : m_nZOrder(0) @@ -27,8 +28,20 @@ bool e2d::ENode::_exec(bool active) return false; } -void e2d::ENode::_onDraw() +void e2d::ENode::_onRender() { + D2D1_RECT_F rectangle = D2D1::RectF( + m_Rect.left, + m_Rect.top, + m_Rect.right, + m_Rect.bottom + ); + ID2D1SolidColorBrush* m_pLightSlateGrayBrush; + GetRenderTarget()->CreateSolidColorBrush( + D2D1::ColorF(D2D1::ColorF::LightSlateGray), + &m_pLightSlateGrayBrush + ); + GetRenderTarget()->FillRectangle(&rectangle, m_pLightSlateGrayBrush); } int e2d::ENode::getX() const diff --git a/Easy2D/Node/Image.cpp b/Easy2D/Node/Image.cpp deleted file mode 100644 index 83b8a0b7..00000000 --- a/Easy2D/Node/Image.cpp +++ /dev/null @@ -1,251 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" -#include -using namespace std; - -// ͼƬ -static map s_mCImages; -// ͼƬжȡͼƬ -static CImage* GetCImage(TString name, bool fromRes = false); -// PNG ͼת -static void CrossImage(CImage &img); - - -Image::Image() : - m_pCImage(nullptr), - m_nAlpha(255), - m_fScaleX(1), - m_fScaleY(1) -{ -} - -Image::Image(LPCTSTR ImageFile) : - Image() -{ - setImage(ImageFile); // ͼƬԴ -} - -Image::Image(LPCTSTR ImageFile, int x, int y, int width, int height) : - Image() -{ - setImage(ImageFile, x, y, width, height); // ͼƬԴͲüС -} - -Image::~Image() -{ -} - -void Image::_onDraw() -{ - // display Ϊ falseδͼƬԴʱƸͼƬ - if (!m_bDisplay || !m_pCImage) - { - return; - } - // ͼƬ - if (m_pCImage->GetBPP() == 32) - { - m_pCImage->AlphaBlend(GetImageHDC(), m_Rect, m_SrcRect, m_nAlpha, AC_SRC_OVER); - } - else - { - m_pCImage->Draw(GetImageHDC(), m_Rect, m_SrcRect); - } -} - -float Image::getScaleX() const -{ - return m_fScaleX; -} - -float Image::getScaleY() const -{ - return m_fScaleY; -} - -float Image::getOpacity() const -{ - return m_nAlpha / 255.0f; -} - -bool Image::setImage(LPCTSTR ImageFile) -{ - m_pCImage = GetCImage(ImageFile); - if (m_pCImage) - { - reset(); - return true; - } - return false; -} - -bool Image::setImage(LPCTSTR ImageFile, int x, int y, int width, int height) -{ - if (!setImage(ImageFile)) - { - return false; - } - // üͼƬС - crop(x, y, width, height); - - return true; -} - -bool Image::setImageFromRes(LPCTSTR pResName) -{ - m_pCImage = GetCImage(pResName, true); - if (m_pCImage) - { - reset(); - return true; - } - return false; -} - -bool Image::setImageFromRes(LPCTSTR pResName, int x, int y, int width, int height) -{ - if (!setImageFromRes(pResName)) - { - return false; - } - // üͼƬС - crop(x, y, width, height); - - return true; -} - -void Image::crop(int x, int y, int width, int height) -{ - width = min(max(width, 0), m_pCImage->GetWidth() - x); - height = min(max(height, 0), m_pCImage->GetHeight() - y); - // ԴελúʹСڲü - m_SrcRect.SetRect(x, y, x + width, y + height); - // ĿΣƵڵλúʹС - setSize(int(width * m_fScaleX), int(height * m_fScaleY)); -} - -void Image::stretch(int width, int height) -{ - // ĿελúʹСƵڵλúʹСͼƬ - setSize(max(width, 0), max(height, 0)); - // ñ - m_fScaleX = 1; - m_fScaleY = 1; -} - -void Image::setScale(float scaleX, float scaleY) -{ - m_fScaleX = max(scaleX, 0); - m_fScaleY = max(scaleY, 0); - setSize(int(m_SrcRect.Width() * scaleX), int(m_SrcRect.Height() * scaleY)); -} - -void Image::setOpacity(float value) -{ - if (m_pCImage->GetBPP() == 32) - { - m_nAlpha = BYTE(min(max(value, 0), 1) * 255); - } -} - -void Image::setTransparentColor(COLORREF value) -{ - // ͸ɫ - m_pCImage->SetTransparentColor(value); -} - -void Image::reset() -{ - // ĿΣƵڵλúʹС - setSize(m_pCImage->GetWidth(), m_pCImage->GetHeight()); - // ԴΣȡͼƬĴС - m_SrcRect.SetRect(0, 0, m_pCImage->GetWidth(), m_pCImage->GetHeight()); - // - m_fScaleX = 1; - m_fScaleY = 1; - // ͸ - m_nAlpha = 255; -} - -bool Image::preload(LPCTSTR fileName, bool fromRes) -{ - // жͼƬǷѾ - if (s_mCImages.find(fileName) != s_mCImages.end()) - { - return true; - } - // ͼƬ - CImage* cImage = nullptr; - if (fromRes) - { - cImage = new CImage(); - // ԴͼƬ֧ PNG - cImage->LoadFromResource(GetModuleHandle(NULL), fileName); - } - else - { - //жͼƬ·Ƿ - if (!PathFileExists(fileName)) - { - return false; - } - cImage = new CImage(); - cImage->Load(fileName); - } - // ʧ - if (!cImage || cImage->IsNull()) - { - return false; - } - // ȷϸͼ Alpha ͨ - if (cImage->GetBPP() == 32) - { - // ͸ͼƬ - CrossImage(*cImage); - } - s_mCImages.insert(map::value_type(fileName, cImage)); - - return true; -} - -void Image::saveScreenshot() -{ - TString savePath; - // ȡλ - if (FileUtils::getSaveFilePath(savePath, _T("ͼ浽"), _T("jpg"))) - { - // 洰ڽͼ - IMAGE image; - getimage(&image, 0, 0, EApp::getWidth(), EApp::getHeight()); - saveimage(savePath.c_str(), &image); - } -} - - -// PNG ͼת -void CrossImage(CImage &img) -{ - // ת - for (int i = 0; i < img.GetWidth(); i++) - { - for (int j = 0; j < img.GetHeight(); j++) - { - UCHAR *cr = (UCHAR*)img.GetPixelAddress(i, j); - cr[0] = cr[0] * cr[3] / 255; - cr[1] = cr[1] * cr[3] / 255; - cr[2] = cr[2] * cr[3] / 255; - } - } -} - -CImage* GetCImage(TString name, bool fromRes) -{ - if (Image::preload(name.c_str())) - { - return s_mCImages.at(name); - } - else - { - return nullptr; - } -} \ No newline at end of file diff --git a/Easy2D/Node/Layer.cpp b/Easy2D/Node/Layer.cpp deleted file mode 100644 index 85c5e2e1..00000000 --- a/Easy2D/Node/Layer.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\easy2d.h" - - -Layer::Layer() : - m_bBlock(true) -{ -} - -Layer::~Layer() -{ -} - -int Layer::getBlock() const -{ - return m_bBlock; -} - -void Layer::setBlock(bool block) -{ - m_bBlock = block; -} - -bool Layer::_exec(bool active) -{ - // ͼϢԶȡû潹 - return BatchNode::_exec(active) || m_bBlock; -} diff --git a/Easy2D/Node/MouseNode.cpp b/Easy2D/Node/MouseNode.cpp deleted file mode 100644 index 3ef74b2d..00000000 --- a/Easy2D/Node/MouseNode.cpp +++ /dev/null @@ -1,174 +0,0 @@ -#include "..\easy2d.h" - - -MouseNode::MouseNode() : - m_bBlock(true), - m_bTarget(false), - m_ClickCallback([]() {}), - m_OnMouseInCallback([]() {}), - m_OnMouseOutCallback([]() {}), - m_OnSelectCallback([]() {}), - m_OnUnselectCallback([]() {}) -{ -} - -MouseNode::~MouseNode() -{ -} - -bool MouseNode::_exec(bool active) -{ - // display Ϊ false˳ - if (!m_bDisplay) - { - return false; - } - // ȡý㣬ðťԲ˳ - if (!active) - { - reset(); - return false; - } - // жϽڵ㵱ǰ״̬ - // ڵδȡý㣬жϽڵ״̬ - if (!m_bTarget) - { - // λڽڵڵľ - if (_isMouseIn()) - { - // ״̬Ϊ MOUSEIN - _setStatus(MOUSEIN); - // ʱ - if (MouseMsg::getMsg() == MouseMsg::LBUTTON_DOWN) - { - m_bTarget = true; // ȡý - _setStatus(SELECTED); // ״̬Ϊ SELECTED - } - // ڵϢȡû潹 - if (m_bBlock) return true; - } - else - { - reset(); // ָĬ״̬ - } - } - else - { - // ڵȡýʱ̧ - if (MouseMsg::getMsg() == MouseMsg::LBUTTON_UP) - { - // ̧ʱڽڵ - if (_isMouseIn()) - { - m_ClickCallback(); // ִлص - } - reset(); // ָĬ״̬ - } - // ڵϢȡû潹 - if (m_bBlock) return true; - } - return false; -} - -void MouseNode::_onDraw() -{ - // ڵǷʾ - if (!m_bDisplay) - { - return; - } - // ڵǷѡ - if (m_eStatus == SELECTED) - { - _onSelected(); - } - else - { - // Ƿڽڵ - if (m_eStatus == MOUSEIN) - { - _onMouseIn(); - } - else - { - _onNormal(); - } - } -} - -bool MouseNode::_isMouseIn() -{ - return isPointIn(MouseMsg::getPos()); -} - -void MouseNode::_setStatus(Status status) -{ - if (m_eStatus != status) - { - // ˳ij״̬Ļص - if (m_eStatus == MOUSEIN) - { - m_OnMouseOutCallback(); - } - else if (m_eStatus == SELECTED) - { - m_OnUnselectCallback(); - } - // ij״̬Ļص - if (status == MOUSEIN) - { - m_OnMouseInCallback(); - } - else if (status == SELECTED) - { - m_OnSelectCallback(); - } - m_eStatus = status; - } -} - -bool MouseNode::isMouseIn() -{ - return m_eStatus == MOUSEIN || m_eStatus == SELECTED; -} - -bool MouseNode::isSelected() -{ - return m_eStatus == SELECTED; -} - -void MouseNode::setClickedCallback(const CLICK_CALLBACK & callback) -{ - m_ClickCallback = callback; -} - -void MouseNode::setMouseInCallback(const CLICK_CALLBACK & callback) -{ - m_OnMouseInCallback = callback; -} - -void MouseNode::setMouseOutCallback(const CLICK_CALLBACK & callback) -{ - m_OnMouseOutCallback = callback; -} - -void MouseNode::setSelectCallback(const CLICK_CALLBACK & callback) -{ - m_OnSelectCallback = callback; -} - -void MouseNode::setUnselectCallback(const CLICK_CALLBACK & callback) -{ - m_OnUnselectCallback = callback; -} - -void MouseNode::reset() -{ - m_bTarget = false; // ʧȥ - _setStatus(NORMAL); // ָĬ״̬ -} - -void MouseNode::setBlock(bool block) -{ - m_bBlock = block; -} diff --git a/Easy2D/Node/RectNode.cpp b/Easy2D/Node/RectNode.cpp deleted file mode 100644 index ba5854da..00000000 --- a/Easy2D/Node/RectNode.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "..\easy2d.h" - -RectNode::RectNode() : - m_Rect(0, 0, 0, 0) -{ - -} - -RectNode::~RectNode() -{ -} - -bool RectNode::isCollisionWith(RectNode * rectNode) const -{ - static CRect rt; - return IntersectRect(&rt, &m_Rect, &rectNode->m_Rect); -} - -bool RectNode::isPointIn(CPoint p) const -{ - return m_Rect.PtInRect(p); -} - -void RectNode::setWindowCenterX() -{ - setX((EApp::getWidth() - getWidth()) / 2); -} - -void RectNode::setWindowCenterY() -{ - setY((EApp::getHeight() - getHeight()) / 2); -} - -void RectNode::setWindowCenter() -{ - setWindowCenterX(); - setWindowCenterY(); -} - -int RectNode::getX() const -{ - return m_Rect.left; -} - -int RectNode::getY() const -{ - return m_Rect.top; -} - -CPoint RectNode::getPos() const -{ - return m_Rect.TopLeft(); -} - -int RectNode::getWidth() const -{ - return m_Rect.Width(); // ο -} - -int RectNode::getHeight() const -{ - return m_Rect.Height(); // θ߶ -} - -CSize RectNode::getSize() const -{ - return m_Rect.Size(); -} - -CRect RectNode::getRect() const -{ - return m_Rect; -} - -void RectNode::setX(int x) -{ - m_Rect.MoveToX(x); -} - -void RectNode::setY(int y) -{ - m_Rect.MoveToY(y); -} - -void RectNode::setPos(int x, int y) -{ - m_Rect.MoveToXY(x, y); // ޸ľλ -} - -void RectNode::setPos(CPoint p) -{ - m_Rect.MoveToXY(p); // ޸ľλ -} - -void RectNode::move(int x, int y) -{ - m_Rect.OffsetRect(x, y); // ƶ -} - -void RectNode::move(CVector v) -{ - m_Rect.OffsetRect(v); // ƶ -} - -void RectNode::setWidth(int width) -{ - m_Rect.right = max(m_Rect.left + width, 0); -} - -void RectNode::setHeight(int height) -{ - m_Rect.bottom = max(m_Rect.top + height, 0); -} - -void RectNode::setSize(int width, int height) -{ - setWidth(width); - setHeight(height); -} - -void RectNode::setSize(CSize size) -{ - setSize(size.cx, size.cy); -} - -void RectNode::setRect(int x1, int y1, int x2, int y2) -{ - m_Rect.SetRect(x1, y1, x2, y2); -} - -void RectNode::setRect(CPoint leftTop, CPoint rightBottom) -{ - m_Rect.SetRect(leftTop, rightBottom); -} - -void RectNode::setRect(CRect rect) -{ - m_Rect.CopyRect(&rect); -} diff --git a/Easy2D/Node/Shape/Circle.cpp b/Easy2D/Node/Shape/Circle.cpp deleted file mode 100644 index a8e1c3e6..00000000 --- a/Easy2D/Node/Shape/Circle.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "..\..\easy2d.h" -#include "..\..\EasyX\easyx.h" - - -Circle::Circle() : - m_nRadius(0) -{ -} - -Circle::Circle(int x, int y, int radius) : - m_nRadius(radius) -{ - setPos(x, y); -} - -Circle::~Circle() -{ -} - -void Circle::solidShape() -{ - solidcircle(getX(), getY(), m_nRadius); -} - -void Circle::fillShape() -{ - fillcircle(getX(), getY(), m_nRadius); -} - -void Circle::roundShape() -{ - circle(getX(), getY(), m_nRadius); -} - -int Circle::getRadius() const -{ - return m_nRadius; -} - -void Circle::setRadius(int r) -{ - m_nRadius = r; -} \ No newline at end of file diff --git a/Easy2D/Node/Shape/Rectangle.cpp b/Easy2D/Node/Shape/Rectangle.cpp deleted file mode 100644 index 854163d2..00000000 --- a/Easy2D/Node/Shape/Rectangle.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "..\..\easy2d.h" -#include "..\..\EasyX\easyx.h" - - -Rect::Rect() -{ -} - -Rect::Rect(int x, int y, int width, int height) : - m_Size(width, height) -{ - setPos(x, y); -} - -Rect::~Rect() -{ -} - -void Rect::solidShape() -{ - solidrectangle(getX(), getY(), getX() + m_Size.cx, getY() + m_Size.cy); -} - -void Rect::fillShape() -{ - fillrectangle(getX(), getY(), getX() + m_Size.cx, getY() + m_Size.cy); -} - -void Rect::roundShape() -{ - rectangle(getX(), getY(), getX() + m_Size.cx, getY() + m_Size.cy); -} - -int Rect::getWidth() const -{ - return m_Size.cx; -} - -int Rect::getHeight() const -{ - return m_Size.cy; -} - -void Rect::setWidth(int width) -{ - m_Size.cx = width; -} - -void Rect::setHeight(int height) -{ - m_Size.cy = height; -} - -void Rect::setSize(int width, int height) -{ - m_Size.cx = width; - m_Size.cy = height; -} \ No newline at end of file diff --git a/Easy2D/Node/Shape/Shape.cpp b/Easy2D/Node/Shape/Shape.cpp deleted file mode 100644 index f0747499..00000000 --- a/Easy2D/Node/Shape/Shape.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "..\..\easy2d.h" -#include "..\..\EasyX\easyx.h" - -Shape::Shape() : - lineColor(Color::black), - fillColor(Color::white), - m_eStyle(SOLID) -{ -} - -Shape::~Shape() -{ -} - -void Shape::_onDraw() -{ - // ״Ƿʾ - if (!m_bDisplay) - { - return; - } - // ɫ - setlinecolor(lineColor); - setfillcolor(fillColor); - - // ״ʽвͬĻ - if (m_eStyle == Shape::STYLE::ROUND) - { - roundShape(); - } - else if (m_eStyle == Shape::STYLE::SOLID) - { - solidShape(); - } - else if (m_eStyle == Shape::STYLE::FILL) - { - fillShape(); - } -} - -inline COLORREF Shape::getFillColor() const -{ - return fillColor; -} - -inline COLORREF Shape::getLineColor() const -{ - return lineColor; -} - -void Shape::setFillColor(COLORREF color) -{ - fillColor = color; -} - -void Shape::setLineColor(COLORREF color) -{ - lineColor = color; -} - -void Shape::setStyle(STYLE style) -{ - m_eStyle = style; -} diff --git a/Easy2D/Node/Sprite.cpp b/Easy2D/Node/Sprite.cpp deleted file mode 100644 index 870dd868..00000000 --- a/Easy2D/Node/Sprite.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" - -Sprite::Sprite() : - m_nAlpha(255), - m_fScaleX(1), - m_fScaleY(1), - m_pImage(nullptr) -{ - -} - -Sprite::Sprite(Image * image) : - Sprite() -{ - setImage(image); -} - -Sprite::Sprite(LPCTSTR imageFileName) : - Sprite() -{ - setImage(new Image(imageFileName)); -} - -Sprite::~Sprite() -{ - SafeRelease(m_pImage); -} - -bool Sprite::_exec(bool active) -{ - return false; -} - -void Sprite::_onDraw() -{ - // display Ϊ falseδͼƬԴʱƸͼƬ - if (!m_bDisplay || !m_pImage || !m_pImage->m_pCImage) - { - return; - } - // ͼƬ - if (m_pImage->m_pCImage->GetBPP() == 32) - { - m_pImage->m_pCImage->AlphaBlend(GetImageHDC(), getRect(), m_pImage->m_SrcRect, m_nAlpha, AC_SRC_OVER); - } - else - { - m_pImage->m_pCImage->Draw(GetImageHDC(), getRect(), m_pImage->m_SrcRect); - } -} - -void Sprite::setImage(Image * image) -{ - SafeRelease(m_pImage); - m_pImage = image; - setSize(int(m_pImage->getWidth() * m_fScaleX), int(m_pImage->getHeight() * m_fScaleY)); - m_pImage->retain(); -} - -bool Sprite::isCollisionWith(Sprite * sprite) -{ - static CRect rt; - return IntersectRect(&rt, &getRect(), &sprite->getRect()); -} - -void Sprite::addAction(Action * action) -{ - if (action) - { - // Sprite - action->m_pTargetSprite = this; - // 붯ᴦ - ActionManager::addAction(action); - } -} - -void Sprite::runAction(Action * action) -{ - addAction(action); -} - -void Sprite::resumeAction(Action * action) -{ - if (action->getTarget() == this) - { - ActionManager::resumeAction(action); - } -} - -void Sprite::pauseAction(Action * action) -{ - if (action->getTarget() == this) - { - ActionManager::pauseAction(action); - } -} - -void Sprite::stopAction(Action * action) -{ - if (action->getTarget() == this) - { - ActionManager::stopAction(action); - } -} - -void Sprite::pauseAllActions() -{ - ActionManager::pauseSpriteAllActions(this); -} - -void Sprite::resumeAllActions() -{ - ActionManager::resumeSpriteAllActions(this); -} - -void Sprite::stopAllActions() -{ - ActionManager::stopSpriteAllActions(this); -} - -float Sprite::getScaleX() const -{ - return m_fScaleX; -} - -float Sprite::getScaleY() const -{ - return m_fScaleY; -} - -float Sprite::getOpacity() const -{ - return m_nAlpha / 255.0f; -} - -void Sprite::setScale(float scaleX, float scaleY) -{ - m_fScaleX = max(scaleX, 0); - m_fScaleY = max(scaleY, 0); - setSize(int(m_pImage->getWidth() * scaleX), int(m_pImage->getHeight() * scaleY)); -} - -void Sprite::setOpacity(float opacity) -{ - m_nAlpha = BYTE(min(max(opacity, 0), 1) * 255); -} diff --git a/Easy2D/Node/Text.cpp b/Easy2D/Node/Text.cpp deleted file mode 100644 index 607eb328..00000000 --- a/Easy2D/Node/Text.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" - - -Text::Text() : - m_sText(_T("")), - m_color(Color::white), - m_pFontStyle(FontStyle::getDefault()) -{ - m_pFontStyle->retain(); // üһ -} - -Text::Text(TString text, COLORREF color, FontStyle * font) : - m_color(color), - m_pFontStyle(font) -{ - setText(text); - m_pFontStyle->retain(); // üһ -} - -Text::Text(int x, int y, TString text, COLORREF color, FontStyle * font) : - m_color(color), - m_pFontStyle(font) -{ - setText(text); - setPos(x, y); - m_pFontStyle->retain(); // üһ -} - -Text::~Text() -{ - SafeRelease(m_pFontStyle); // üһ -} - -void Text::_onDraw() -{ - // display Ϊ falseı - if (!m_bDisplay) - { - return; - } - // - settextstyle(&m_pFontStyle->m_font); - // ıɫ - settextcolor(m_color); - // - outtextxy(getX(), getY(), m_sText.c_str()); -} - -COLORREF Text::getColor() const -{ - return m_color; -} - -TString Text::getText() const -{ - return m_sText; -} - -FontStyle * Text::getFontStyle() -{ - return m_pFontStyle; -} - -bool Text::isEmpty() const -{ - return m_sText.empty(); // ıǷΪ -} - -void Text::setText(TString text) -{ - m_sText = text; - // 壬ȻȡıڸµĿȺ͸߶ - settextstyle(&m_pFontStyle->m_font); - setSize(textwidth(getText().c_str()), textheight(getText().c_str())); -} - -void Text::setColor(COLORREF color) -{ - m_color = color; -} - -void Text::setFontStyle(FontStyle * style) -{ - SafeRelease(m_pFontStyle); // ԭüһ - m_pFontStyle = style; // ޸ - m_pFontStyle->retain(); // üһ - // 壬ȻȡıڸµĿȺ͸߶ - settextstyle(&m_pFontStyle->m_font); - setSize(textwidth(getText().c_str()), textheight(getText().c_str())); -} diff --git a/Easy2D/Style/Color.cpp b/Easy2D/Style/Color.cpp deleted file mode 100644 index c14aa401..00000000 --- a/Easy2D/Style/Color.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" - -// ɫֵĶ -const COLORREF Color::black = BLACK; -const COLORREF Color::blue = BLUE; -const COLORREF Color::green = GREEN; -const COLORREF Color::cyan = CYAN; -const COLORREF Color::red = RED; -const COLORREF Color::magenta = MAGENTA; -const COLORREF Color::brown = BROWN; -const COLORREF Color::lightgray = LIGHTGRAY; -const COLORREF Color::darkgray = DARKGRAY; -const COLORREF Color::lightblue = LIGHTBLUE; -const COLORREF Color::lightgreen = LIGHTGREEN; -const COLORREF Color::lightcyan = LIGHTCYAN; -const COLORREF Color::lightred = LIGHTRED; -const COLORREF Color::lightmagenta = LIGHTMAGENTA; -const COLORREF Color::yellow = YELLOW; -const COLORREF Color::white = WHITE; - - -COLORREF Color::getFromRGB(BYTE r, BYTE g, BYTE b) -{ - return RGB(r, g, b); // (r, g, b) ɫֵתΪɫ -} - -COLORREF Color::getFromHSL(float H, float S, float L) -{ - return HSLtoRGB(H, S, L); -} - -COLORREF Color::getFromHSV(float H, float S, float V) -{ - return HSVtoRGB(H, S, V); -} - -BYTE Color::getRValue(COLORREF color) -{ - return GetRValue(color); // ɫеĺɫֵ -} - -BYTE Color::getGValue(COLORREF color) -{ - return GetGValue(color); // ɫеɫֵ -} - -BYTE Color::getBValue(COLORREF color) -{ - return GetBValue(color); // ɫеɫֵ -} - -COLORREF Color::getGray(COLORREF color) -{ - return RGBtoGRAY(color); // ȡɫеĻҶֵ -} diff --git a/Easy2D/Style/FillStyle.cpp b/Easy2D/Style/FillStyle.cpp deleted file mode 100644 index 498580d5..00000000 --- a/Easy2D/Style/FillStyle.cpp +++ /dev/null @@ -1 +0,0 @@ -/* FillStyle EasyX е࣬Ŀǰδʵ */ \ No newline at end of file diff --git a/Easy2D/Style/FontStyle.cpp b/Easy2D/Style/FontStyle.cpp deleted file mode 100644 index 2c5c69ba..00000000 --- a/Easy2D/Style/FontStyle.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "..\easy2d.h" - -// ϸֵĶ -const LONG FontWeight::dontcare = 0; -const LONG FontWeight::thin = 100; -const LONG FontWeight::extraLight = 200; -const LONG FontWeight::light = 300; -const LONG FontWeight::normal = 400; -const LONG FontWeight::regular = 400; -const LONG FontWeight::medium = 500; -const LONG FontWeight::demiBlod = 600; -const LONG FontWeight::blod = 700; -const LONG FontWeight::extraBold = 800; -const LONG FontWeight::black = 900; -const LONG FontWeight::heavy = 900; - - -FontStyle::FontStyle() -{ - setFontFamily(_T("")); - m_font.lfWeight = 18; - m_font.lfHeight = 0; - m_font.lfWidth = 0; - m_font.lfItalic = 0; - m_font.lfUnderline = 0; - m_font.lfStrikeOut = 0; - m_font.lfEscapement = 0; - m_font.lfOrientation = 0; - setQuality(true); -} - -FontStyle::FontStyle(LPCTSTR fontfamily, LONG height, LONG weight, LONG width, bool italic, bool underline, bool strikeout, LONG escapement, LONG orientation, bool quality) -{ - setFontFamily(fontfamily); - m_font.lfWeight = weight; - m_font.lfHeight = height; - m_font.lfWidth = width; - m_font.lfItalic = italic; - m_font.lfUnderline = underline; - m_font.lfStrikeOut = strikeout; - m_font.lfEscapement = escapement; - m_font.lfOrientation = orientation; - setQuality(quality); -} - -FontStyle::~FontStyle() -{ -} - -FontStyle * FontStyle::getDefault() -{ - return new FontStyle(_T(""), 18, FontWeight::normal); -} - -void FontStyle::setHeight(LONG value) -{ - m_font.lfHeight = value; -} - -void FontStyle::setWidth(LONG value) -{ - m_font.lfWidth = value; -} - -void FontStyle::setFontFamily(LPCTSTR value) -{ - _tcscpy_s(m_font.lfFaceName, 32, value); -} - -void FontStyle::setEscapement(LONG value) -{ - m_font.lfEscapement = value; -} - -void FontStyle::setOrientation(LONG value) -{ - m_font.lfOrientation = value; -} - -void FontStyle::setQuality(bool value) -{ - m_font.lfQuality = value ? ANTIALIASED_QUALITY : DEFAULT_QUALITY; -} - -void FontStyle::setWeight(LONG value) -{ - m_font.lfWeight = value; -} - -void FontStyle::setItalic(bool value) -{ - m_font.lfItalic = value; -} - -void FontStyle::setUnderline(bool value) -{ - m_font.lfUnderline = value; -} - -void FontStyle::setStrikeOut(bool value) -{ - m_font.lfStrikeOut = value; -} \ No newline at end of file diff --git a/Easy2D/Style/LineStyle.cpp b/Easy2D/Style/LineStyle.cpp deleted file mode 100644 index 1b613360..00000000 --- a/Easy2D/Style/LineStyle.cpp +++ /dev/null @@ -1 +0,0 @@ -/* LineStyle EasyX е࣬Ŀǰδʵ */ \ No newline at end of file diff --git a/Easy2D/Tool/ActionManager.cpp b/Easy2D/Tool/ActionManager.cpp deleted file mode 100644 index f9f62b6e..00000000 --- a/Easy2D/Tool/ActionManager.cpp +++ /dev/null @@ -1,200 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" -#include - -static std::vector s_vActions; - -void ActionManager::__exec() -{ - // ʱָ - static Action * action; - // ѭеĶ - for (size_t i = 0; i < s_vActions.size(); i++) - { - action = s_vActions[i]; - // ȡ״̬ - if (action->isRunning()) - { - if (action->isEnding()) - { - // Ѿ - action->autoRelease(); - action->release(); - s_vActions.erase(s_vActions.begin() + i); - } - else - { - // ʼ - if (!action->m_bInit) - { - action->_init(); - } - // ִж - action->_exec(GetNow()); - } - } - } -} - -void ActionManager::addAction(Action * action) -{ - if (action) - { -#ifdef _DEBUG - for (auto a : s_vActions) - { - assert(a != action); - } -#endif - action->m_pParentScene = EApp::getLoadingScene(); - s_vActions.push_back(action); - } -} - -void ActionManager::notifyAllSceneActions(EScene * scene) -{ - for (auto action : s_vActions) - { - if (action->m_pParentScene == scene) - { - action->notify(); - } - } -} - -void ActionManager::waitAllSceneActions(EScene * scene) -{ - for (auto action : s_vActions) - { - if (action->m_pParentScene == scene) - { - action->wait(); - } - } -} - -void ActionManager::stopAllSceneActions(EScene * scene) -{ - for (auto action : s_vActions) - { - if (action->m_pParentScene == scene) - { - action->stop(); - } - } -} - -void ActionManager::startAction(Action * action) -{ - resumeAction(action); -} - -void ActionManager::resumeAction(Action * action) -{ - for (auto act : s_vActions) - { - if (act == action) - { - act->resume(); - } - } -} - -void ActionManager::pauseAction(Action * action) -{ - for (auto act : s_vActions) - { - if (act == action) - { - act->pause(); - } - } -} - -void ActionManager::stopAction(Action * action) -{ - for (auto act : s_vActions) - { - if (act == action) - { - act->stop(); - } - } -} - -void ActionManager::startSpriteAllActions(Sprite * sprite) -{ - resumeSpriteAllActions(sprite); -} - -void ActionManager::resumeSpriteAllActions(Sprite * sprite) -{ - for (auto action : s_vActions) - { - if (action->m_pTargetSprite == sprite) - { - action->resume(); - } - } -} - -void ActionManager::pauseSpriteAllActions(Sprite * sprite) -{ - for (auto action : s_vActions) - { - if (action->m_pTargetSprite == sprite) - { - action->pause(); - } - } -} - -void ActionManager::stopSpriteAllActions(Sprite * sprite) -{ - for (auto action : s_vActions) - { - if (action->m_pTargetSprite == sprite) - { - action->stop(); - } - } -} - -void ActionManager::startAllActions() -{ - resumeAllActions(); -} - -void ActionManager::resumeAllActions() -{ - for (auto action : s_vActions) - { - action->resume(); - } -} - -void ActionManager::pauseAllActions() -{ - for (auto action : s_vActions) - { - action->pause(); - } -} - -void ActionManager::stopAllActions() -{ - for (auto action : s_vActions) - { - action->stop(); - } -} - -void ActionManager::clearAllActions() -{ - for (auto action : s_vActions) - { - action->autoRelease(); - action->release(); - } - s_vActions.clear(); -} diff --git a/Easy2D/Tool/EMouseListener.cpp b/Easy2D/Tool/EMouseListener.cpp new file mode 100644 index 00000000..08fb0b33 --- /dev/null +++ b/Easy2D/Tool/EMouseListener.cpp @@ -0,0 +1 @@ +#include "..\etools.h" \ No newline at end of file diff --git a/Easy2D/Tool/EMsgManager.cpp b/Easy2D/Tool/EMsgManager.cpp new file mode 100644 index 00000000..99f0cf95 --- /dev/null +++ b/Easy2D/Tool/EMsgManager.cpp @@ -0,0 +1,86 @@ +#include "..\etools.h" +#include "..\Win\winbase.h" +#include + +static POINT p; +static e2d::EMouseMsg mouseMsg; + +std::vector m_vMouseListeners; + +void e2d::EMsgManager::setMouseMsg(UINT message) +{ + mouseMsg.m_nMsg = message; + + switch (message) + { + case WM_LBUTTONUP: + mouseMsg.m_bLButtonDown = false; + break; + + case WM_LBUTTONDOWN: + mouseMsg.m_bLButtonDown = true; + break; + + case WM_LBUTTONDBLCLK: + mouseMsg.m_bLButtonDown = true; + break; + + case WM_MBUTTONUP: + mouseMsg.m_bMButtonDown = false; + break; + + case WM_MBUTTONDOWN: + mouseMsg.m_bMButtonDown = true; + break; + + case WM_MBUTTONDBLCLK: + mouseMsg.m_bMButtonDown = true; + break; + + case WM_RBUTTONUP: + mouseMsg.m_bRButtonDown = false; + break; + + case WM_RBUTTONDOWN: + mouseMsg.m_bRButtonDown = true; + break; + + case WM_RBUTTONDBLCLK: + mouseMsg.m_bRButtonDown = true; + break; + + case WM_MOUSEMOVE: + { + GetCursorPos(&p); + ScreenToClient(GetHWnd(), &p); + mouseMsg.m_Pos = p; + break; + } + + case WM_MOUSEWHEEL: + break; + } + + for (auto mlistener : m_vMouseListeners) + { + //mlistener-> + } +} + +e2d::EMouseMsg::MESSAGE e2d::EMsgManager::getMouseMsg() +{ + return e2d::EMouseMsg::MESSAGE(mouseMsg.m_nMsg); +} + +void e2d::EMsgManager::addListener(e2d::EMouseListener * listener) +{ + if (listener) + { + listener->retain(); + m_vMouseListeners.push_back(listener); + } +} + +void e2d::EMsgManager::__exec() +{ +} diff --git a/Easy2D/Tool/FileUtils.cpp b/Easy2D/Tool/FileUtils.cpp deleted file mode 100644 index 0c14dec6..00000000 --- a/Easy2D/Tool/FileUtils.cpp +++ /dev/null @@ -1,168 +0,0 @@ -#include "..\easy2d.h" -#include "..\EasyX\easyx.h" -#include -#pragma comment(lib, "shell32.lib") -#include -#include - -#ifndef UNICODE - #include - #include -#endif - -TString FileUtils::getLocalAppDataPath() -{ - TCHAR m_lpszDefaultDir[MAX_PATH] = { 0 }; - TCHAR szDocument[MAX_PATH] = { 0 }; - - // ȡ AppData\Local ļе ID - LPITEMIDLIST pidl = NULL; - SHGetSpecialFolderLocation(NULL, CSIDL_LOCAL_APPDATA, &pidl); - if (pidl && SHGetPathFromIDList(pidl, szDocument)) - { - // ȡļ· - GetShortPathName(szDocument, m_lpszDefaultDir, _MAX_PATH); - } - - return m_lpszDefaultDir; -} - -TString FileUtils::getDefaultSavePath() -{ - TCHAR m_lpszDefaultDir[MAX_PATH] = { 0 }; - TCHAR szDocument[MAX_PATH] = { 0 }; - - // ȡ AppData\Local ļе ID - LPITEMIDLIST pidl = NULL; - SHGetSpecialFolderLocation(NULL, CSIDL_LOCAL_APPDATA, &pidl); - if (pidl && SHGetPathFromIDList(pidl, szDocument)) - { - // ȡļ· - GetShortPathName(szDocument, m_lpszDefaultDir, _MAX_PATH); - } - - TString path = m_lpszDefaultDir; - path.append(_T("\\")); - path.append(EApp::getAppName()); - -#ifdef UNICODE - if (_waccess(path.c_str(), 0) == -1) - { - _wmkdir(path.c_str()); - } -#else - if (_access(path.c_str(), 0) == -1) - { - _mkdir(path.c_str()); - } -#endif - - path.append(_T("\\DefaultData.ini")); - - return path; -} - -void FileUtils::saveInt(LPCTSTR key, int value) -{ -#ifdef UNICODE - std::wstringstream ss; -#else - std::stringstream ss; -#endif - ss << value; - ::WritePrivateProfileString(_T("Default"), key, ss.str().c_str(), getDefaultSavePath().c_str()); -} - -void FileUtils::saveDouble(LPCTSTR key, double value) -{ -#ifdef UNICODE - std::wstringstream ss; -#else - std::stringstream ss; -#endif - ss << value; - ::WritePrivateProfileString(_T("Default"), key, ss.str().c_str(), getDefaultSavePath().c_str()); -} - -void FileUtils::saveString(LPCTSTR key, TString value) -{ - ::WritePrivateProfileString(_T("Default"), key, value.c_str(), getDefaultSavePath().c_str()); -} - -int FileUtils::getInt(LPCTSTR key, int default) -{ - return ::GetPrivateProfileInt(_T("Default"), key, default, getDefaultSavePath().c_str()); -} -#include -using namespace std; -double FileUtils::getDouble(LPCTSTR key, double default) -{ - // default תΪַ -#ifdef UNICODE - std::wstringstream ss; -#else - std::stringstream ss; -#endif - ss << default; - // ȡ - TCHAR temp[128] = { 0 }; - ::GetPrivateProfileString(_T("Default"), key, ss.str().c_str(), temp, 128, getDefaultSavePath().c_str()); - // תΪַ - ss.str(_T("")); - ss << temp; - // ַתΪ double -#ifdef UNICODE - double d = _wtof(ss.str().c_str()); -#else - double d = atof(ss.str().c_str()); -#endif - return d; -} - -TString FileUtils::geTString(LPCTSTR key, TString default) -{ - TCHAR temp[128] = { 0 }; - ::GetPrivateProfileString(_T("Default"), key, default.c_str(), temp, 128, getDefaultSavePath().c_str()); - return TString(temp); -} - -TString FileUtils::getFileExtension(const TString & filePath) -{ - TString fileExtension; - // ҵļеһ '.' λ - size_t pos = filePath.find_last_of('.'); - // ж pos ǷǸЧλ - if (pos != TString::npos) - { - // ȡչ - fileExtension = filePath.substr(pos, filePath.length()); - // תΪСдĸ - std::transform(fileExtension.begin(), fileExtension.end(), fileExtension.begin(), ::tolower); - } - - return fileExtension; -} - -bool FileUtils::getSaveFilePath(TString& path, LPCTSTR title, LPCTSTR defExt) -{ - // Ի - OPENFILENAME ofn = { 0 }; - TCHAR strFilename[MAX_PATH] = { 0 }; // ڽļ - ofn.lStructSize = sizeof(OPENFILENAME); // ṹС - ofn.hwndOwner = GetHWnd(); // ӵŴھNULL ʾԻǷģ̬ - ofn.lpstrFilter = _T("ļ\0*.*\0\0"); // ù - ofn.nFilterIndex = 1; // - ofn.lpstrFile = strFilename; // շصļ·ļ - ofn.nMaxFile = sizeof(strFilename); // - ofn.lpstrInitialDir = NULL; // ʼĿ¼ΪĬ - ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;// Ŀ¼ڣļǰ - ofn.lpstrTitle = title; // ʹϵͳĬϱռ - ofn.lpstrDefExt = defExt; // Ĭ׷ӵչ - - if (GetSaveFileName(&ofn)) - { - path = strFilename; - return true; - } - return false; -} diff --git a/Easy2D/Tool/Math.cpp b/Easy2D/Tool/Math.cpp deleted file mode 100644 index 2d0a3821..00000000 --- a/Easy2D/Tool/Math.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "..\easy2d.h" - - -std::default_random_engine &Math::getEngine() -{ - static std::random_device device; - static std::default_random_engine engine(device()); - return engine; -} diff --git a/Easy2D/Tool/MusicUtils.cpp b/Easy2D/Tool/MusicUtils.cpp deleted file mode 100644 index f374b3b1..00000000 --- a/Easy2D/Tool/MusicUtils.cpp +++ /dev/null @@ -1,417 +0,0 @@ -#include "..\easy2d.h" -#include -#pragma comment(lib , "winmm.lib") - -#include -#include - -//////////////////////////////////////////////////////////////////// -// MciPlayer -//////////////////////////////////////////////////////////////////// - -class MciPlayer -{ -public: - MciPlayer(); - ~MciPlayer(); - - void close(); - void open(TString pFileName, UINT uId); - void play(bool bLoop = false); - void pause(); - void resume(); - void stop(); - void rewind(); - void setVolume(float volume); - bool isPlaying(); - UINT getSoundID(); - -private: - void _sendCommand(int nCommand, DWORD_PTR param1 = 0, DWORD_PTR parma2 = 0); - - MCIDEVICEID m_dev; - UINT m_nSoundID; - bool m_bPlaying; - bool m_bLoop; - TString m_sExt; -}; - - -MciPlayer::MciPlayer() : - m_dev(0L), - m_nSoundID(0), - m_bPlaying(false), - m_bLoop(false), - m_sExt(_T("")) -{ -} - -MciPlayer::~MciPlayer() -{ - close(); // رղ -} - -void MciPlayer::open(TString pFileName, UINT uId) -{ - // Բڵļ - if (pFileName.empty() || !PathFileExists(pFileName.c_str())) return; - // ȡļ׺ - m_sExt = FileUtils::getFileExtension(pFileName); - // ֹͣǰ - close(); - - // MCI_OPEN_PARMS - MCI_OPEN_PARMS mciOpen = { 0 }; - mciOpen.lpstrDeviceType = (LPCTSTR)-1; // device ID for "all devices" - mciOpen.lpstrElementName = pFileName.c_str(); - - // ļ - MCIERROR mciError; - mciError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, reinterpret_cast(&mciOpen)); - // ִʱβ - if (mciError) return; - - // 豸Ϣ - m_dev = mciOpen.wDeviceID; - m_nSoundID = uId; - m_bPlaying = false; -} - -void MciPlayer::play(bool bLoop) -{ - // 豸Ϊʱβ - if (!m_dev) - { - return; - } - // òŲ - MCI_PLAY_PARMS mciPlay = { 0 }; - MCIERROR s_mciError; - // - s_mciError = mciSendCommand(m_dev, MCI_PLAY, MCI_FROM | (bLoop ? MCI_DGV_PLAY_REPEAT : 0), reinterpret_cast(&mciPlay)); - // δʱ m_bPlaying Ϊ true - if (!s_mciError) - { - m_bPlaying = true; - m_bLoop = bLoop; - } -} - -void MciPlayer::close() -{ - // ֹͣ - if (m_bPlaying) - { - stop(); - } - // ر豸 - if (m_dev) - { - _sendCommand(MCI_CLOSE); - } - // ָĬ - m_dev = 0; - m_bPlaying = false; -} - -void MciPlayer::pause() -{ - // ͣ - _sendCommand(MCI_PAUSE); - m_bPlaying = false; -} - -void MciPlayer::resume() -{ - // - if (m_sExt == _T(".mid")) - { - // midi ֧ MCI_RESUME Ӧʹ MCI_FROM òʼλ - // ȡ MCI ״̬ - MCI_STATUS_PARMS mciStatusParms; - mciStatusParms.dwItem = MCI_STATUS_POSITION; - _sendCommand(MCI_STATUS, MCI_STATUS_ITEM, reinterpret_cast(&mciStatusParms)); - // òʼλãʼ - MCI_PLAY_PARMS mciPlayParms; - mciPlayParms.dwFrom = (DWORD)mciStatusParms.dwReturn; - _sendCommand(MCI_PLAY, MCI_FROM, reinterpret_cast(&mciPlayParms)); - } - else - { - // - _sendCommand(MCI_RESUME); - m_bPlaying = true; - } -} - -void MciPlayer::stop() -{ - // ֹͣ - _sendCommand(MCI_STOP); - m_bPlaying = false; -} - -void MciPlayer::rewind() -{ - // 豸Ϊʱβ - if (!m_dev) - { - return; - } - // òλ - mciSendCommand(m_dev, MCI_SEEK, MCI_SEEK_TO_START, 0); - // - MCI_PLAY_PARMS mciPlay = { 0 }; - m_bPlaying = mciSendCommand(m_dev, MCI_PLAY, (m_bLoop ? MCI_DGV_PLAY_REPEAT : 0), reinterpret_cast(&mciPlay)) ? false : true; -} - -void MciPlayer::setVolume(float volume) -{ - volume = min(max(volume, 0), 1); - MCI_DGV_SETAUDIO_PARMS mciSetAudioPara = { 0 }; - mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME; - mciSetAudioPara.dwValue = DWORD(1000 * volume); - mciSendCommand(m_dev, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD_PTR)&mciSetAudioPara); -} - -bool MciPlayer::isPlaying() -{ - return m_bPlaying; -} - -UINT MciPlayer::getSoundID() -{ - return m_nSoundID; -} - -void MciPlayer::_sendCommand(int nCommand, DWORD_PTR param1, DWORD_PTR parma2) -{ - // 豸ʱβ - if (!m_dev) - { - return; - } - // ǰ豸Ͳ - mciSendCommand(m_dev, nCommand, param1, parma2); -} - - - - -//////////////////////////////////////////////////////////////////// -// MusicUtils -//////////////////////////////////////////////////////////////////// - - -typedef std::map MusicList; -typedef std::pair Music; - -static unsigned int _Hash(TString key); - - -static MusicList& getMciPlayerList() -{ - static MusicList s_List; - return s_List; -} - -static MciPlayer& getBgMciPlayer() -{ - static MciPlayer s_Music; - return s_Music; -} - -void MusicUtils::end() -{ - // ֹͣ - getBgMciPlayer().close(); - // ֹͣ - for (auto& iter : getMciPlayerList()) - { - SafeDelete(iter.second); - } - // б - getMciPlayerList().clear(); - return; -} - -void MusicUtils::setVolume(float volume) -{ - // ñ - getBgMciPlayer().setVolume(volume); - // - for (auto& iter : getMciPlayerList()) - { - iter.second->setVolume(volume); - } -} - -void MusicUtils::setVolume(TString pszFilePath, float volume) -{ - unsigned int nRet = ::_Hash(pszFilePath); - - MusicList::iterator p = getMciPlayerList().find(nRet); - if (p != getMciPlayerList().end()) - { - p->second->setVolume(volume); - } -} - -void MusicUtils::playBackgroundMusic(TString pszFilePath, bool bLoop) -{ - if (pszFilePath.empty()) - { - return; - } - - getBgMciPlayer().open(pszFilePath, ::_Hash(pszFilePath)); - getBgMciPlayer().play(bLoop); -} - -void MusicUtils::stopBackgroundMusic(bool bReleaseData) -{ - if (bReleaseData) - { - getBgMciPlayer().close(); - } - else - { - getBgMciPlayer().stop(); - } -} - -void MusicUtils::pauseBackgroundMusic() -{ - getBgMciPlayer().pause(); -} - -void MusicUtils::resumeBackgroundMusic() -{ - getBgMciPlayer().resume(); -} - -void MusicUtils::rewindBackgroundMusic() -{ - getBgMciPlayer().rewind(); -} - -bool MusicUtils::isBackgroundMusicPlaying() -{ - return getBgMciPlayer().isPlaying(); -} - -void MusicUtils::setBackgroundMusicVolume(float volume) -{ - getBgMciPlayer().setVolume(volume); -} - -unsigned int MusicUtils::playMusic(TString pszFilePath, bool bLoop) -{ - unsigned int nRet = ::_Hash(pszFilePath); - - preloadMusic(pszFilePath); - - MusicList::iterator p = getMciPlayerList().find(nRet); - if (p != getMciPlayerList().end()) - { - p->second->play(bLoop); - } - return nRet; -} - -void MusicUtils::stopMusic(unsigned int nSoundId) -{ - MusicList::iterator p = getMciPlayerList().find(nSoundId); - if (p != getMciPlayerList().end()) - { - p->second->stop(); - } -} - -void MusicUtils::preloadMusic(TString pszFilePath) -{ - if (pszFilePath.empty()) return; - - int nRet = ::_Hash(pszFilePath); - - if (getMciPlayerList().end() != getMciPlayerList().find(nRet)) return; - - getMciPlayerList().insert(Music(nRet, new MciPlayer())); - MciPlayer * pPlayer = getMciPlayerList()[nRet]; - pPlayer->open(pszFilePath, nRet); - - if (nRet == pPlayer->getSoundID()) return; - - delete pPlayer; - getMciPlayerList().erase(nRet); - nRet = 0; -} - -void MusicUtils::pauseMusic(unsigned int nSoundId) -{ - MusicList::iterator p = getMciPlayerList().find(nSoundId); - if (p != getMciPlayerList().end()) - { - p->second->pause(); - } -} - -void MusicUtils::pauseAllMusics() -{ - for (auto& iter : getMciPlayerList()) - { - iter.second->pause(); - } -} - -void MusicUtils::resumeMusic(unsigned int nSoundId) -{ - MusicList::iterator p = getMciPlayerList().find(nSoundId); - if (p != getMciPlayerList().end()) - { - p->second->resume(); - } -} - -void MusicUtils::resumeAllMusics() -{ - for (auto& iter : getMciPlayerList()) - { - iter.second->resume(); - } -} - -void MusicUtils::stopAllMusics() -{ - for (auto& iter : getMciPlayerList()) - { - iter.second->stop(); - } -} - -void MusicUtils::unloadMusic(LPCTSTR pszFilePath) -{ - unsigned int nID = ::_Hash(pszFilePath); - - MusicList::iterator p = getMciPlayerList().find(nID); - if (p != getMciPlayerList().end()) - { - SafeDelete(p->second); - getMciPlayerList().erase(nID); - } -} - - - -unsigned int _Hash(TString key) -{ - unsigned int len = unsigned(key.size()); - unsigned int hash = 0; - - for (unsigned i = 0; i < len; i++) - { - hash *= 16777619; - hash ^= (unsigned int)(unsigned char)toupper(key[i]); - } - return (hash); -} \ No newline at end of file diff --git a/Easy2D/Tool/Timer.cpp b/Easy2D/Tool/Timer.cpp deleted file mode 100644 index e3c44ce7..00000000 --- a/Easy2D/Tool/Timer.cpp +++ /dev/null @@ -1,223 +0,0 @@ -#include "..\easy2d.h" -#include "..\Win\winbase.h" - -// жʱ -static std::vector s_vTimers; - -Timer::Timer(TString name, LONGLONG milliSeconds, const TIMER_CALLBACK & callback) : - m_sName(name), - m_bRunning(false), - m_bWaiting(false), - m_callback(callback), - m_pParentScene(nullptr) -{ - setInterval(milliSeconds); // öʱʱ -} - -Timer::~Timer() -{ -} - -void Timer::start() -{ - // ־öʱ - m_bRunning = true; - // ¼ǰʱ - m_nLast = steady_clock::now(); -} - -void Timer::stop() -{ - m_bRunning = false; // ־öʱֹͣ -} - -void Timer::wait() -{ - m_bWaiting = true; -} - -void Timer::notify() -{ - m_bWaiting = false; -} - -bool Timer::isRunning() -{ - return m_bRunning && !m_bWaiting; // ȡöʱ״̬ -} - -void Timer::setInterval(LONGLONG milliSeconds) -{ - // öʱʱ - m_nAnimationInterval = milliSeconds; -} - -void Timer::setCallback(const TIMER_CALLBACK & callback) -{ - m_callback = callback; // ص -} - -void Timer::setName(TString name) -{ - m_sName = name; // ޸Ķʱ -} - -LONGLONG Timer::getInterval() const -{ - return m_nAnimationInterval;// ȡʱʱ -} - -TString Timer::getName() const -{ - return m_sName; // ȡʱ -} - -void Timer::__exec() -{ - // ʱΪ - if (!s_vTimers.size()) - { - return; - } - // ѭеĶʱ - for (auto timer : s_vTimers) - { - // ʱδУʱ - if (!timer->isRunning()) - { - continue; - } - // жʱǷ㹻 - while (duration_cast(GetNow() - timer->m_nLast).count() > timer->m_nAnimationInterval) - { - // ¼¼ʱ - timer->m_nLast += milliseconds(timer->m_nAnimationInterval); - // лص - timer->m_callback(); - } - } -} - -void Timer::addTimer(Timer * timer) -{ - // ʱ - timer->start(); - // ڳ - timer->m_pParentScene = EApp::getLoadingScene(); - // öʱ - s_vTimers.push_back(timer); -} - -void Timer::addTimer(TString name, const TIMER_CALLBACK & callback) -{ - addTimer(name, 20, callback); -} - -void Timer::addTimer(TString name, LONGLONG milliSeconds, const TIMER_CALLBACK & callback) -{ - // ʱ - auto timer = new Timer(name, milliSeconds, callback); - // Ӷʱ - addTimer(timer); -} - -void Timer::startTimer(TString name) -{ - // ͬĶʱ - for (auto timer : s_vTimers) - { - if (timer->m_sName == name && timer->m_pParentScene == EApp::getCurrentScene()) - { - // ʱ - timer->start(); - } - } -} - -void Timer::stopTimer(TString name) -{ - // ͬĶʱ - for (auto timer : s_vTimers) - { - if (timer->m_sName == name && timer->m_pParentScene == EApp::getCurrentScene()) - { - // ֹͣʱ - timer->stop(); - } - } -} - -void Timer::delTimer(TString name) -{ - // - std::vector::iterator iter; - // ѭжʱ - for (iter = s_vTimers.begin(); iter != s_vTimers.end();) - { - // ͬƵĶʱ - if ((*iter)->m_sName == name && (*iter)->m_pParentScene == EApp::getCurrentScene()) - { - // ɾöʱ - delete (*iter); - iter = s_vTimers.erase(iter); - } - else - { - iter++; - } - } -} - -void Timer::clearAllTimers() -{ - // ɾжʱ - for (auto t : s_vTimers) - { - delete t; - } - // - s_vTimers.clear(); -} - -void Timer::notifyAllSceneTimers(EScene * scene) -{ - for (auto t : s_vTimers) - { - if (t->m_pParentScene == scene) - { - t->notify(); - } - } -} - -void Timer::waitAllSceneTimers(EScene * scene) -{ - for (auto t : s_vTimers) - { - if (t->m_pParentScene == scene) - { - t->wait(); - } - } -} - -void Timer::clearAllSceneTimers(EScene * scene) -{ - // - std::vector::iterator iter; - // ѭжʱ - for (iter = s_vTimers.begin(); iter != s_vTimers.end();) - { - // ͬƵĶʱ - if ((*iter)->m_pParentScene == scene) - { - // ɾöʱ - delete (*iter); - iter = s_vTimers.erase(iter); - } - else - { - iter++; - } - } -} diff --git a/Easy2D/Win/winbase.cpp b/Easy2D/Win/winbase.cpp index 17a13d67..48fbea8f 100644 --- a/Easy2D/Win/winbase.cpp +++ b/Easy2D/Win/winbase.cpp @@ -1,24 +1,24 @@ #include "winbase.h" #include "..\emacros.h" -HWND m_hwnd = nullptr; -ID2D1Factory * m_pDirect2dFactory = nullptr; -ID2D1HwndRenderTarget * m_pRenderTarget = nullptr; +HWND hwnd = nullptr; +ID2D1Factory * pDirect2dFactory = nullptr; +ID2D1HwndRenderTarget * pRenderTarget = nullptr; HWND &GetHWnd() { - return m_hwnd; + return hwnd; } ID2D1Factory * &GetFactory() { - return m_pDirect2dFactory; + return pDirect2dFactory; } ID2D1HwndRenderTarget * &GetRenderTarget() { - return m_pRenderTarget; + return pRenderTarget; } void WindowCenter(HWND hWnd) diff --git a/Easy2D/Win/winbase.h b/Easy2D/Win/winbase.h index cfaf4ba8..aae0f32d 100644 --- a/Easy2D/Win/winbase.h +++ b/Easy2D/Win/winbase.h @@ -1,4 +1,5 @@ #pragma once +#include "..\emacros.h" #include #include #include diff --git a/Easy2D/easy2d.h b/Easy2D/easy2d.h index 199ac9a7..0114b253 100644 --- a/Easy2D/easy2d.h +++ b/Easy2D/easy2d.h @@ -16,45 +16,18 @@ #endif -// Modify the following defines if you have to target a platform prior to the ones specified below. -// Refer to MSDN for the latest info on corresponding values for different platforms. -#ifndef WINVER // Allow use of features specific to Windows 7 or later. -#define WINVER 0x0700 // Change this to the appropriate value to target other versions of Windows. -#endif - -#ifndef _WIN32_WINNT // Allow use of features specific to Windows 7 or later. -#define _WIN32_WINNT 0x0700 // Change this to the appropriate value to target other versions of Windows. -#endif - -#ifndef UNICODE -#define UNICODE -#endif - -// Exclude rarely-used items from Windows headers. -#define WIN32_LEAN_AND_MEAN - -// Windows Header Files: -#include - -// C RunTime Header Files: -#include - #include "emacros.h" #include "ecommon.h" #include "ebase.h" +#include "enodes.h" +#include "etools.h" -#if defined(UNICODE) && (_DEBUG) +#if defined(DEBUG) || defined(_DEBUG) #pragma comment(lib, "Easy2Ddw.lib") -#elif !defined(UNICODE) && (_DEBUG) - #pragma comment(lib, "Easy2Dd.lib") -#elif defined(UNICODE) +#else #pragma comment(lib, "Easy2Dw.lib") -#elif !defined(UNICODE) - #pragma comment(lib, "Easy2D.lib") #endif -// Functions Declare - using namespace e2d; \ No newline at end of file diff --git a/Easy2D/ebase.h b/Easy2D/ebase.h index 176eed1c..33208d5d 100644 --- a/Easy2D/ebase.h +++ b/Easy2D/ebase.h @@ -3,6 +3,7 @@ #include "ecommon.h" #include + // Base Classes namespace e2d @@ -188,7 +189,8 @@ public: // ɾӳԱ bool del( - e2d::ENode * child + e2d::ENode * child, + bool autoRelease = true ); // ȡӽڵ @@ -202,9 +204,10 @@ protected: std::vector m_vChildren; protected: + // void _exec(); - void _onDraw(); + void _onRender(); }; diff --git a/Easy2D/emacros.h b/Easy2D/emacros.h index dedf3f0e..2c2b2337 100644 --- a/Easy2D/emacros.h +++ b/Easy2D/emacros.h @@ -1,6 +1,28 @@ #pragma once +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef WINVER // Allow use of features specific to Windows 7 or later. +#define WINVER 0x0700 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Allow use of features specific to Windows 7 or later. +#define _WIN32_WINNT 0x0700 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef UNICODE +#define UNICODE +#endif + +// Exclude rarely-used items from Windows headers. +#define WIN32_LEAN_AND_MEAN + +// Windows Header Files: +#include + + + #ifndef ASSERT_IF #if defined( DEBUG ) || defined( _DEBUG ) #define ASSERT(b) do {if (!(b)) { OutputDebugStringA("Assert: " #b "\n"); }} while(0) diff --git a/Easy2D/enodes.h b/Easy2D/enodes.h index 2a374487..859266a1 100644 --- a/Easy2D/enodes.h +++ b/Easy2D/enodes.h @@ -158,7 +158,7 @@ protected: virtual bool _exec(bool active); - virtual void _onDraw() = 0; + virtual void _onRender(); }; } \ No newline at end of file diff --git a/Easy2D/etools.h b/Easy2D/etools.h index 8c41cc10..280aa0aa 100644 --- a/Easy2D/etools.h +++ b/Easy2D/etools.h @@ -8,7 +8,9 @@ class EObjectManager { public: // һڵͷų - static void add(e2d::EObject * nptr); + static void add( + e2d::EObject * nptr + ); // ɾнڵ static void clearAllObjects(); @@ -20,4 +22,62 @@ private: static void __flush(); }; + +class EMouseMsg +{ +public: + // Ϣ + enum MESSAGE + { + MOVE = 0x0200, // ƶ + LBUTTON_DOWN, // + LBUTTON_UP, // ̧ + LBUTTON_DBLCLK, // ˫ + RBUTTON_DOWN, // Ҽ + RBUTTON_UP, // Ҽ̧ + RBUTTON_DBLCLK, // Ҽ˫ + MBUTTON_DOWN, // м + MBUTTON_UP, // м̧ + MBUTTON_DBLCLK, // м˫ + WHEEL // + }; + +public: + EPoint m_Pos; + UINT m_nMsg = 0; + bool m_bLButtonDown = false; + bool m_bRButtonDown = false; + bool m_bMButtonDown = false; +}; + + +class EMouseListener : + public EObject +{ +protected: + friend EMsgManager; + e2d::EString name; + +}; + + +class EMsgManager +{ +public: + static void setMouseMsg( + UINT message + ); + + static e2d::EMouseMsg::MESSAGE getMouseMsg(); + + static void addListener( + EMouseListener * listener + ); + +private: + friend EApp; + + static void __exec(); +}; + } \ No newline at end of file