refactoring
This commit is contained in:
parent
3b5704ee22
commit
de4751c2d3
|
|
@ -36,21 +36,19 @@
|
||||||
<ClInclude Include="..\..\src\core\Factory.h" />
|
<ClInclude Include="..\..\src\core\Factory.h" />
|
||||||
<ClInclude Include="..\..\src\core\Font.hpp" />
|
<ClInclude Include="..\..\src\core\Font.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\Frames.h" />
|
<ClInclude Include="..\..\src\core\Frames.h" />
|
||||||
<ClInclude Include="..\..\src\core\Game.h" />
|
<ClInclude Include="..\..\src\core\Application.h" />
|
||||||
<ClInclude Include="..\..\src\core\Geometry.h" />
|
<ClInclude Include="..\..\src\core\Geometry.h" />
|
||||||
<ClInclude Include="..\..\src\core\GeometryNode.h" />
|
<ClInclude Include="..\..\src\core\GeometryNode.h" />
|
||||||
<ClInclude Include="..\..\src\core\helper.hpp" />
|
<ClInclude Include="..\..\src\core\helper.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\Image.h" />
|
<ClInclude Include="..\..\src\core\Image.h" />
|
||||||
<ClInclude Include="..\..\src\core\include-forwards.h" />
|
<ClInclude Include="..\..\src\core\include-forwards.h" />
|
||||||
<ClInclude Include="..\..\src\core\Input.h" />
|
<ClInclude Include="..\..\src\core\Input.h" />
|
||||||
<ClInclude Include="..\..\src\core\intrusive\List.hpp" />
|
<ClInclude Include="..\..\src\core\IntrusiveList.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\intrusive\SmartPtr.hpp" />
|
<ClInclude Include="..\..\src\core\IntrusivePtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\KeyEvent.hpp" />
|
|
||||||
<ClInclude Include="..\..\src\core\keys.hpp" />
|
<ClInclude Include="..\..\src\core\keys.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\logs.h" />
|
<ClInclude Include="..\..\src\core\logs.h" />
|
||||||
<ClInclude Include="..\..\src\core\macros.h" />
|
<ClInclude Include="..\..\src\core\macros.h" />
|
||||||
<ClInclude Include="..\..\src\core\modules.h" />
|
<ClInclude Include="..\..\src\core\modules.h" />
|
||||||
<ClInclude Include="..\..\src\core\MouseEvent.hpp" />
|
|
||||||
<ClInclude Include="..\..\src\core\Music.h" />
|
<ClInclude Include="..\..\src\core\Music.h" />
|
||||||
<ClInclude Include="..\..\src\core\Node.h" />
|
<ClInclude Include="..\..\src\core\Node.h" />
|
||||||
<ClInclude Include="..\..\src\core\noncopyable.hpp" />
|
<ClInclude Include="..\..\src\core\noncopyable.hpp" />
|
||||||
|
|
@ -102,7 +100,7 @@
|
||||||
<ClCompile Include="..\..\src\core\EventListener.cpp" />
|
<ClCompile Include="..\..\src\core\EventListener.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Factory.cpp" />
|
<ClCompile Include="..\..\src\core\Factory.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Frames.cpp" />
|
<ClCompile Include="..\..\src\core\Frames.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Game.cpp" />
|
<ClCompile Include="..\..\src\core\Application.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Geometry.cpp" />
|
<ClCompile Include="..\..\src\core\Geometry.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\GeometryNode.cpp" />
|
<ClCompile Include="..\..\src\core\GeometryNode.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Image.cpp" />
|
<ClCompile Include="..\..\src\core\Image.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,6 @@
|
||||||
<ClInclude Include="..\..\src\core\Color.h">
|
<ClInclude Include="..\..\src\core\Color.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\Game.h">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\Image.h">
|
<ClInclude Include="..\..\src\core\Image.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -125,12 +122,6 @@
|
||||||
<ClInclude Include="..\..\src\core\Font.hpp">
|
<ClInclude Include="..\..\src\core\Font.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\intrusive\List.hpp">
|
|
||||||
<Filter>core\intrusive</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\intrusive\SmartPtr.hpp">
|
|
||||||
<Filter>core\intrusive</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\Transform.hpp">
|
<ClInclude Include="..\..\src\core\Transform.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -167,15 +158,6 @@
|
||||||
<ClInclude Include="..\..\src\core\EventDispatcher.h">
|
<ClInclude Include="..\..\src\core\EventDispatcher.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\Event.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\KeyEvent.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\MouseEvent.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\EventListener.h">
|
<ClInclude Include="..\..\src\core\EventListener.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -203,6 +185,18 @@
|
||||||
<ClInclude Include="..\..\src\utils\ResLoader.h">
|
<ClInclude Include="..\..\src\utils\ResLoader.h">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\Application.h">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\Event.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\IntrusiveList.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\IntrusivePtr.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="core">
|
<Filter Include="core">
|
||||||
|
|
@ -217,9 +211,6 @@
|
||||||
<Filter Include="ui">
|
<Filter Include="ui">
|
||||||
<UniqueIdentifier>{07b6d541-4a1b-472a-aae0-daf9d082fe84}</UniqueIdentifier>
|
<UniqueIdentifier>{07b6d541-4a1b-472a-aae0-daf9d082fe84}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="core\intrusive">
|
|
||||||
<UniqueIdentifier>{0f508149-735a-43da-ab16-36cc1e9ab63a}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\core\ActionCombined.cpp">
|
<ClCompile Include="..\..\src\core\ActionCombined.cpp">
|
||||||
|
|
@ -237,9 +228,6 @@
|
||||||
<ClCompile Include="..\..\src\core\Color.cpp">
|
<ClCompile Include="..\..\src\core\Color.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\core\Game.cpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\core\Image.cpp">
|
<ClCompile Include="..\..\src\core\Image.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -354,5 +342,8 @@
|
||||||
<ClCompile Include="..\..\src\utils\ResLoader.cpp">
|
<ClCompile Include="..\..\src\utils\ResLoader.cpp">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\core\Application.cpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -36,21 +36,19 @@
|
||||||
<ClInclude Include="..\..\src\core\Factory.h" />
|
<ClInclude Include="..\..\src\core\Factory.h" />
|
||||||
<ClInclude Include="..\..\src\core\Font.hpp" />
|
<ClInclude Include="..\..\src\core\Font.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\Frames.h" />
|
<ClInclude Include="..\..\src\core\Frames.h" />
|
||||||
<ClInclude Include="..\..\src\core\Game.h" />
|
<ClInclude Include="..\..\src\core\Application.h" />
|
||||||
<ClInclude Include="..\..\src\core\Geometry.h" />
|
<ClInclude Include="..\..\src\core\Geometry.h" />
|
||||||
<ClInclude Include="..\..\src\core\GeometryNode.h" />
|
<ClInclude Include="..\..\src\core\GeometryNode.h" />
|
||||||
<ClInclude Include="..\..\src\core\helper.hpp" />
|
<ClInclude Include="..\..\src\core\helper.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\Image.h" />
|
<ClInclude Include="..\..\src\core\Image.h" />
|
||||||
<ClInclude Include="..\..\src\core\include-forwards.h" />
|
<ClInclude Include="..\..\src\core\include-forwards.h" />
|
||||||
<ClInclude Include="..\..\src\core\Input.h" />
|
<ClInclude Include="..\..\src\core\Input.h" />
|
||||||
<ClInclude Include="..\..\src\core\intrusive\List.hpp" />
|
<ClInclude Include="..\..\src\core\IntrusiveList.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\intrusive\SmartPtr.hpp" />
|
<ClInclude Include="..\..\src\core\IntrusivePtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\KeyEvent.hpp" />
|
|
||||||
<ClInclude Include="..\..\src\core\keys.hpp" />
|
<ClInclude Include="..\..\src\core\keys.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\logs.h" />
|
<ClInclude Include="..\..\src\core\logs.h" />
|
||||||
<ClInclude Include="..\..\src\core\macros.h" />
|
<ClInclude Include="..\..\src\core\macros.h" />
|
||||||
<ClInclude Include="..\..\src\core\modules.h" />
|
<ClInclude Include="..\..\src\core\modules.h" />
|
||||||
<ClInclude Include="..\..\src\core\MouseEvent.hpp" />
|
|
||||||
<ClInclude Include="..\..\src\core\Music.h" />
|
<ClInclude Include="..\..\src\core\Music.h" />
|
||||||
<ClInclude Include="..\..\src\core\Node.h" />
|
<ClInclude Include="..\..\src\core\Node.h" />
|
||||||
<ClInclude Include="..\..\src\core\noncopyable.hpp" />
|
<ClInclude Include="..\..\src\core\noncopyable.hpp" />
|
||||||
|
|
@ -102,7 +100,7 @@
|
||||||
<ClCompile Include="..\..\src\core\EventListener.cpp" />
|
<ClCompile Include="..\..\src\core\EventListener.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Factory.cpp" />
|
<ClCompile Include="..\..\src\core\Factory.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Frames.cpp" />
|
<ClCompile Include="..\..\src\core\Frames.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Game.cpp" />
|
<ClCompile Include="..\..\src\core\Application.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Geometry.cpp" />
|
<ClCompile Include="..\..\src\core\Geometry.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\GeometryNode.cpp" />
|
<ClCompile Include="..\..\src\core\GeometryNode.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Image.cpp" />
|
<ClCompile Include="..\..\src\core\Image.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,6 @@
|
||||||
<ClInclude Include="..\..\src\core\Color.h">
|
<ClInclude Include="..\..\src\core\Color.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\Game.h">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\Image.h">
|
<ClInclude Include="..\..\src\core\Image.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -125,12 +122,6 @@
|
||||||
<ClInclude Include="..\..\src\core\Font.hpp">
|
<ClInclude Include="..\..\src\core\Font.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\intrusive\List.hpp">
|
|
||||||
<Filter>core\intrusive</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\intrusive\SmartPtr.hpp">
|
|
||||||
<Filter>core\intrusive</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\Transform.hpp">
|
<ClInclude Include="..\..\src\core\Transform.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -167,15 +158,6 @@
|
||||||
<ClInclude Include="..\..\src\core\EventDispatcher.h">
|
<ClInclude Include="..\..\src\core\EventDispatcher.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\Event.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\KeyEvent.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\MouseEvent.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\EventListener.h">
|
<ClInclude Include="..\..\src\core\EventListener.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -203,6 +185,18 @@
|
||||||
<ClInclude Include="..\..\src\utils\ResLoader.h">
|
<ClInclude Include="..\..\src\utils\ResLoader.h">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\Application.h">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\Event.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\IntrusiveList.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\IntrusivePtr.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="core">
|
<Filter Include="core">
|
||||||
|
|
@ -217,9 +211,6 @@
|
||||||
<Filter Include="ui">
|
<Filter Include="ui">
|
||||||
<UniqueIdentifier>{07b6d541-4a1b-472a-aae0-daf9d082fe84}</UniqueIdentifier>
|
<UniqueIdentifier>{07b6d541-4a1b-472a-aae0-daf9d082fe84}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="core\intrusive">
|
|
||||||
<UniqueIdentifier>{0f508149-735a-43da-ab16-36cc1e9ab63a}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\core\ActionCombined.cpp">
|
<ClCompile Include="..\..\src\core\ActionCombined.cpp">
|
||||||
|
|
@ -237,9 +228,6 @@
|
||||||
<ClCompile Include="..\..\src\core\Color.cpp">
|
<ClCompile Include="..\..\src\core\Color.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\core\Game.cpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\core\Image.cpp">
|
<ClCompile Include="..\..\src\core\Image.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -354,5 +342,8 @@
|
||||||
<ClCompile Include="..\..\src\utils\ResLoader.cpp">
|
<ClCompile Include="..\..\src\utils\ResLoader.cpp">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\core\Application.cpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -36,21 +36,19 @@
|
||||||
<ClInclude Include="..\..\src\core\Factory.h" />
|
<ClInclude Include="..\..\src\core\Factory.h" />
|
||||||
<ClInclude Include="..\..\src\core\Font.hpp" />
|
<ClInclude Include="..\..\src\core\Font.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\Frames.h" />
|
<ClInclude Include="..\..\src\core\Frames.h" />
|
||||||
<ClInclude Include="..\..\src\core\Game.h" />
|
<ClInclude Include="..\..\src\core\Application.h" />
|
||||||
<ClInclude Include="..\..\src\core\Geometry.h" />
|
<ClInclude Include="..\..\src\core\Geometry.h" />
|
||||||
<ClInclude Include="..\..\src\core\GeometryNode.h" />
|
<ClInclude Include="..\..\src\core\GeometryNode.h" />
|
||||||
<ClInclude Include="..\..\src\core\helper.hpp" />
|
<ClInclude Include="..\..\src\core\helper.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\Image.h" />
|
<ClInclude Include="..\..\src\core\Image.h" />
|
||||||
<ClInclude Include="..\..\src\core\include-forwards.h" />
|
<ClInclude Include="..\..\src\core\include-forwards.h" />
|
||||||
<ClInclude Include="..\..\src\core\Input.h" />
|
<ClInclude Include="..\..\src\core\Input.h" />
|
||||||
<ClInclude Include="..\..\src\core\intrusive\List.hpp" />
|
<ClInclude Include="..\..\src\core\IntrusiveList.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\intrusive\SmartPtr.hpp" />
|
<ClInclude Include="..\..\src\core\IntrusivePtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\KeyEvent.hpp" />
|
|
||||||
<ClInclude Include="..\..\src\core\keys.hpp" />
|
<ClInclude Include="..\..\src\core\keys.hpp" />
|
||||||
<ClInclude Include="..\..\src\core\logs.h" />
|
<ClInclude Include="..\..\src\core\logs.h" />
|
||||||
<ClInclude Include="..\..\src\core\macros.h" />
|
<ClInclude Include="..\..\src\core\macros.h" />
|
||||||
<ClInclude Include="..\..\src\core\modules.h" />
|
<ClInclude Include="..\..\src\core\modules.h" />
|
||||||
<ClInclude Include="..\..\src\core\MouseEvent.hpp" />
|
|
||||||
<ClInclude Include="..\..\src\core\Music.h" />
|
<ClInclude Include="..\..\src\core\Music.h" />
|
||||||
<ClInclude Include="..\..\src\core\Node.h" />
|
<ClInclude Include="..\..\src\core\Node.h" />
|
||||||
<ClInclude Include="..\..\src\core\noncopyable.hpp" />
|
<ClInclude Include="..\..\src\core\noncopyable.hpp" />
|
||||||
|
|
@ -102,7 +100,7 @@
|
||||||
<ClCompile Include="..\..\src\core\EventListener.cpp" />
|
<ClCompile Include="..\..\src\core\EventListener.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Factory.cpp" />
|
<ClCompile Include="..\..\src\core\Factory.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Frames.cpp" />
|
<ClCompile Include="..\..\src\core\Frames.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Game.cpp" />
|
<ClCompile Include="..\..\src\core\Application.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Geometry.cpp" />
|
<ClCompile Include="..\..\src\core\Geometry.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\GeometryNode.cpp" />
|
<ClCompile Include="..\..\src\core\GeometryNode.cpp" />
|
||||||
<ClCompile Include="..\..\src\core\Image.cpp" />
|
<ClCompile Include="..\..\src\core\Image.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,6 @@
|
||||||
<ClInclude Include="..\..\src\core\Color.h">
|
<ClInclude Include="..\..\src\core\Color.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\Game.h">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\Image.h">
|
<ClInclude Include="..\..\src\core\Image.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -125,12 +122,6 @@
|
||||||
<ClInclude Include="..\..\src\core\Font.hpp">
|
<ClInclude Include="..\..\src\core\Font.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\intrusive\List.hpp">
|
|
||||||
<Filter>core\intrusive</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\intrusive\SmartPtr.hpp">
|
|
||||||
<Filter>core\intrusive</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\Transform.hpp">
|
<ClInclude Include="..\..\src\core\Transform.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -167,15 +158,6 @@
|
||||||
<ClInclude Include="..\..\src\core\EventDispatcher.h">
|
<ClInclude Include="..\..\src\core\EventDispatcher.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\core\Event.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\KeyEvent.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\MouseEvent.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\core\EventListener.h">
|
<ClInclude Include="..\..\src\core\EventListener.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -203,6 +185,18 @@
|
||||||
<ClInclude Include="..\..\src\utils\ResLoader.h">
|
<ClInclude Include="..\..\src\utils\ResLoader.h">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\Application.h">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\Event.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\IntrusiveList.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\core\IntrusivePtr.hpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="core">
|
<Filter Include="core">
|
||||||
|
|
@ -217,9 +211,6 @@
|
||||||
<Filter Include="ui">
|
<Filter Include="ui">
|
||||||
<UniqueIdentifier>{07b6d541-4a1b-472a-aae0-daf9d082fe84}</UniqueIdentifier>
|
<UniqueIdentifier>{07b6d541-4a1b-472a-aae0-daf9d082fe84}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="core\intrusive">
|
|
||||||
<UniqueIdentifier>{0f508149-735a-43da-ab16-36cc1e9ab63a}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\core\ActionCombined.cpp">
|
<ClCompile Include="..\..\src\core\ActionCombined.cpp">
|
||||||
|
|
@ -237,9 +228,6 @@
|
||||||
<ClCompile Include="..\..\src\core\Color.cpp">
|
<ClCompile Include="..\..\src\core\Color.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\core\Game.cpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\core\Image.cpp">
|
<ClCompile Include="..\..\src\core\Image.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -354,5 +342,8 @@
|
||||||
<ClCompile Include="..\..\src\utils\ResLoader.cpp">
|
<ClCompile Include="..\..\src\utils\ResLoader.cpp">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\core\Application.cpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -22,21 +22,21 @@
|
||||||
#include "include-forwards.h"
|
#include "include-forwards.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "noncopyable.hpp"
|
#include "noncopyable.hpp"
|
||||||
#include "intrusive/List.hpp"
|
#include "IntrusiveList.hpp"
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
class ActionManager;
|
class ActionManager;
|
||||||
|
|
||||||
class Action
|
class Action
|
||||||
: public Object
|
: public virtual Object
|
||||||
, protected intrusive::ListItem<ActionPtr>
|
, protected IntrusiveListItem<ActionPtr>
|
||||||
{
|
{
|
||||||
friend class ActionManager;
|
friend class ActionManager;
|
||||||
friend class Loop;
|
friend class Loop;
|
||||||
friend class Sequence;
|
friend class Sequence;
|
||||||
friend class Spawn;
|
friend class Spawn;
|
||||||
friend class intrusive::List<ActionPtr>;
|
friend class IntrusiveList<ActionPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Action() : running_(false), done_(false), initialized_(false) {}
|
Action() : running_(false), done_(false), initialized_(false) {}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
class ActionManager
|
class ActionManager
|
||||||
{
|
{
|
||||||
using Actions = intrusive::List<ActionPtr>;
|
using Actions = IntrusiveList<ActionPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 执行动作
|
// 执行动作
|
||||||
|
|
|
||||||
|
|
@ -18,15 +18,14 @@
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include "Game.h"
|
#include "Application.h"
|
||||||
#include "logs.h"
|
#include "logs.h"
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
#include "Factory.h"
|
#include "Factory.h"
|
||||||
|
#include "Event.hpp"
|
||||||
#include "Scene.h"
|
#include "Scene.h"
|
||||||
#include "DebugNode.h"
|
#include "DebugNode.h"
|
||||||
#include "Transition.h"
|
#include "Transition.h"
|
||||||
#include "KeyEvent.hpp"
|
|
||||||
#include "MouseEvent.hpp"
|
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
#include <imm.h>
|
#include <imm.h>
|
||||||
|
|
||||||
|
|
@ -34,29 +33,24 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
Game::Game()
|
Application::Application(String const& app_name)
|
||||||
: active_(false)
|
: active_(false)
|
||||||
, debug_(false)
|
, debug_(false)
|
||||||
, curr_scene_(nullptr)
|
, curr_scene_(nullptr)
|
||||||
, next_scene_(nullptr)
|
, next_scene_(nullptr)
|
||||||
, transition_(nullptr)
|
, transition_(nullptr)
|
||||||
, time_scale_(1.f)
|
, time_scale_(1.f)
|
||||||
|
, app_name_(app_name)
|
||||||
{
|
{
|
||||||
::CoInitialize(nullptr);
|
::CoInitialize(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::Game(Options const & options)
|
Application::~Application()
|
||||||
: Game()
|
|
||||||
{
|
|
||||||
Init(options);
|
|
||||||
}
|
|
||||||
|
|
||||||
Game::~Game()
|
|
||||||
{
|
{
|
||||||
::CoUninitialize();
|
::CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Init(const Options& options)
|
void Application::Init(const Options& options)
|
||||||
{
|
{
|
||||||
debug_ = options.debug;
|
debug_ = options.debug;
|
||||||
|
|
||||||
|
|
@ -70,7 +64,7 @@ namespace easy2d
|
||||||
options.width,
|
options.width,
|
||||||
options.height,
|
options.height,
|
||||||
options.icon,
|
options.icon,
|
||||||
Game::WndProc,
|
Application::WndProc,
|
||||||
debug_
|
debug_
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -78,7 +72,7 @@ namespace easy2d
|
||||||
HWND hwnd = Window::Instance()->GetHandle();
|
HWND hwnd = Window::Instance()->GetHandle();
|
||||||
|
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
Graphics::Instance()->Init(
|
RenderSystem::Instance()->Init(
|
||||||
hwnd,
|
hwnd,
|
||||||
options.vsync,
|
options.vsync,
|
||||||
debug_
|
debug_
|
||||||
|
|
@ -126,11 +120,13 @@ namespace easy2d
|
||||||
::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
|
::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// use Game instance in message loop
|
// use Application instance in message loop
|
||||||
::SetWindowLongW(hwnd, GWLP_USERDATA, PtrToUlong(this));
|
::SetWindowLongW(hwnd, GWLP_USERDATA, PtrToUlong(this));
|
||||||
|
|
||||||
|
Setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Run()
|
void Application::Run()
|
||||||
{
|
{
|
||||||
HWND hwnd = Window::Instance()->GetHandle();
|
HWND hwnd = Window::Instance()->GetHandle();
|
||||||
|
|
||||||
|
|
@ -148,14 +144,14 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Quit()
|
void Application::Quit()
|
||||||
{
|
{
|
||||||
Window::Instance()->Destroy();
|
Window::Instance()->Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::EnterScene(ScenePtr const & scene)
|
void Application::EnterScene(ScenePtr const & scene)
|
||||||
{
|
{
|
||||||
E2D_ASSERT(scene && "Game::EnterScene failed, NULL pointer exception");
|
E2D_ASSERT(scene && "Application::EnterScene failed, NULL pointer exception");
|
||||||
|
|
||||||
if (curr_scene_ == scene || next_scene_ == scene)
|
if (curr_scene_ == scene || next_scene_ == scene)
|
||||||
return;
|
return;
|
||||||
|
|
@ -163,7 +159,7 @@ namespace easy2d
|
||||||
next_scene_ = scene;
|
next_scene_ = scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::EnterScene(ScenePtr const& scene, TransitionPtr const& transition)
|
void Application::EnterScene(ScenePtr const& scene, TransitionPtr const& transition)
|
||||||
{
|
{
|
||||||
EnterScene(scene);
|
EnterScene(scene);
|
||||||
|
|
||||||
|
|
@ -178,17 +174,17 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScenePtr const& Game::GetCurrentScene()
|
ScenePtr const& Application::GetCurrentScene()
|
||||||
{
|
{
|
||||||
return curr_scene_;
|
return curr_scene_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::SetTimeScale(float scale)
|
void Application::SetTimeScale(float scale)
|
||||||
{
|
{
|
||||||
time_scale_ = scale;
|
time_scale_ = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Update()
|
void Application::Update()
|
||||||
{
|
{
|
||||||
static auto last = time::Now();
|
static auto last = time::Now();
|
||||||
|
|
||||||
|
|
@ -229,12 +225,12 @@ namespace easy2d
|
||||||
DebugNode::Instance()->Update(dt);
|
DebugNode::Instance()->Update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Render(HWND hwnd)
|
void Application::Render(HWND hwnd)
|
||||||
{
|
{
|
||||||
auto graphics = Graphics::Instance();
|
auto rt = RenderSystem::Instance();
|
||||||
|
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
graphics->BeginDraw(hwnd)
|
rt->BeginDraw(hwnd)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (transition_)
|
if (transition_)
|
||||||
|
|
@ -250,27 +246,18 @@ namespace easy2d
|
||||||
DebugNode::Instance()->Render();
|
DebugNode::Instance()->Render();
|
||||||
|
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
graphics->EndDraw()
|
rt->EndDraw()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (active_)
|
if (active_)
|
||||||
::InvalidateRect(hwnd, NULL, FALSE);
|
::InvalidateRect(hwnd, NULL, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Dispatch(Event * event)
|
LRESULT CALLBACK Application::WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||||
{
|
{
|
||||||
if (transition_)
|
Application * app = reinterpret_cast<Application*>(::GetWindowLongW(hwnd, GWLP_USERDATA));
|
||||||
return;
|
|
||||||
|
|
||||||
if (curr_scene_)
|
if (!app)
|
||||||
curr_scene_->DispatchEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT CALLBACK Game::WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
|
||||||
{
|
|
||||||
Game * game = reinterpret_cast<Game*>(::GetWindowLongW(hwnd, GWLP_USERDATA));
|
|
||||||
|
|
||||||
if (!game)
|
|
||||||
return ::DefWindowProcW(hwnd, msg, wparam, lparam);
|
return ::DefWindowProcW(hwnd, msg, wparam, lparam);
|
||||||
|
|
||||||
switch (msg)
|
switch (msg)
|
||||||
|
|
@ -280,8 +267,8 @@ namespace easy2d
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
::BeginPaint(hwnd, &ps);
|
::BeginPaint(hwnd, &ps);
|
||||||
|
|
||||||
game->Update();
|
app->Update();
|
||||||
game->Render(hwnd);
|
app->Render(hwnd);
|
||||||
|
|
||||||
::EndPaint(hwnd, &ps);
|
::EndPaint(hwnd, &ps);
|
||||||
|
|
||||||
|
|
@ -289,11 +276,25 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
case WM_KEYUP:
|
||||||
|
{
|
||||||
|
if (!app->transition_ && app->curr_scene_)
|
||||||
|
{
|
||||||
|
Event evt((msg == WM_KEYDOWN) ? KeyboardEvent::Down : KeyboardEvent::Up);
|
||||||
|
evt.key.code = KeyCode(wparam);
|
||||||
|
evt.key.count = static_cast<int>(lparam & 0xFF);
|
||||||
|
|
||||||
|
app->curr_scene_->Dispatch(evt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
//case WM_LBUTTONDBLCLK:
|
//case WM_LBUTTONDBLCLK:
|
||||||
//case WM_MBUTTONUP:
|
case WM_MBUTTONUP:
|
||||||
//case WM_MBUTTONDOWN:
|
case WM_MBUTTONDOWN:
|
||||||
//case WM_MBUTTONDBLCLK:
|
//case WM_MBUTTONDBLCLK:
|
||||||
case WM_RBUTTONUP:
|
case WM_RBUTTONUP:
|
||||||
case WM_RBUTTONDOWN:
|
case WM_RBUTTONDOWN:
|
||||||
|
|
@ -301,70 +302,36 @@ namespace easy2d
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
case WM_MOUSEWHEEL:
|
case WM_MOUSEWHEEL:
|
||||||
{
|
{
|
||||||
float x = GET_X_LPARAM(lparam) * Window::Instance()->GetContentScaleX();
|
if (!app->transition_ && app->curr_scene_)
|
||||||
float y = GET_Y_LPARAM(lparam) * Window::Instance()->GetContentScaleY();
|
{
|
||||||
float wheel_delta = 0.f;
|
Event evt;
|
||||||
|
|
||||||
MouseEvent::Type type;
|
evt.mouse.x = GET_X_LPARAM(lparam) * Window::Instance()->GetContentScaleX();
|
||||||
if (msg == WM_LBUTTONDOWN || msg == WM_RBUTTONDOWN)
|
evt.mouse.y = GET_Y_LPARAM(lparam) * Window::Instance()->GetContentScaleY();
|
||||||
type = MouseEvent::Down;
|
evt.mouse.left_btn_down = !!(wparam & MK_LBUTTON);
|
||||||
else if (msg == WM_LBUTTONUP || msg == WM_RBUTTONUP)
|
evt.mouse.left_btn_down = !!(wparam & MK_RBUTTON);
|
||||||
type = MouseEvent::Up;
|
|
||||||
else if (msg == WM_MOUSEMOVE)
|
if (msg == WM_MOUSEMOVE)
|
||||||
type = MouseEvent::Move;
|
evt.type = MouseEvent::Move;
|
||||||
|
else if (msg == WM_LBUTTONDOWN || msg == WM_RBUTTONDOWN || msg == WM_MBUTTONDOWN)
|
||||||
|
evt.type = MouseEvent::Down;
|
||||||
|
else if (msg == WM_LBUTTONUP || msg == WM_RBUTTONUP || msg == WM_MBUTTONUP)
|
||||||
|
evt.type = MouseEvent::Up;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
type = MouseEvent::Wheel;
|
evt.type = MouseEvent::Wheel;
|
||||||
wheel_delta = GET_WHEEL_DELTA_WPARAM(wparam) / 120.f;
|
evt.mouse.wheel_delta = GET_WHEEL_DELTA_WPARAM(wparam) / 120.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseEvent event(type, x, y, wheel_delta);
|
if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONUP)
|
||||||
|
evt.mouse.button = MouseButton::Left;
|
||||||
|
else if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONUP)
|
||||||
|
evt.mouse.button = MouseButton::Right;
|
||||||
|
else if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONUP)
|
||||||
|
evt.mouse.button = MouseButton::Middle;
|
||||||
|
|
||||||
if (wparam & MK_LBUTTON || wparam & MK_RBUTTON)
|
app->curr_scene_->Dispatch(evt);
|
||||||
event.button_down = true;
|
|
||||||
|
|
||||||
game->Dispatch(&event);
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_KEYDOWN:
|
|
||||||
case WM_KEYUP:
|
|
||||||
{
|
|
||||||
KeyEvent event(msg, KeyCode(wparam));
|
|
||||||
game->Dispatch(&event);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_DISPLAYCHANGE:
|
|
||||||
{
|
|
||||||
E2D_LOG(L"The display resolution has changed");
|
|
||||||
|
|
||||||
::InvalidateRect(hwnd, nullptr, FALSE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_CLOSE:
|
|
||||||
{
|
|
||||||
E2D_LOG(L"Received a message to close the window");
|
|
||||||
|
|
||||||
SysEvent event(SysEvent::WindowClose);
|
|
||||||
game->Dispatch(&event);
|
|
||||||
|
|
||||||
if (game->OnClose())
|
|
||||||
{
|
|
||||||
::DestroyWindow(hwnd);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_DESTROY:
|
|
||||||
{
|
|
||||||
E2D_LOG(L"Window was destroyed");
|
|
||||||
|
|
||||||
game->OnExit();
|
|
||||||
::PostQuitMessage(0);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -372,13 +339,13 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
if (SIZE_MAXHIDE == wparam || SIZE_MINIMIZED == wparam)
|
if (SIZE_MAXHIDE == wparam || SIZE_MINIMIZED == wparam)
|
||||||
{
|
{
|
||||||
game->active_ = false;
|
app->active_ = false;
|
||||||
|
|
||||||
E2D_LOG(L"Window minimized");
|
E2D_LOG(L"Window minimized");
|
||||||
}
|
}
|
||||||
else if (SIZE_RESTORED == wparam)
|
else if (SIZE_RESTORED == wparam)
|
||||||
{
|
{
|
||||||
game->active_ = true;
|
app->active_ = true;
|
||||||
::InvalidateRect(hwnd, nullptr, FALSE);
|
::InvalidateRect(hwnd, nullptr, FALSE);
|
||||||
|
|
||||||
E2D_LOG(L"Window restored");
|
E2D_LOG(L"Window restored");
|
||||||
|
|
@ -390,7 +357,7 @@ namespace easy2d
|
||||||
// 如果程序接收到一个 WM_SIZE 消息,这个方法将调整渲染
|
// 如果程序接收到一个 WM_SIZE 消息,这个方法将调整渲染
|
||||||
// 目标的大小。它可能会调用失败,但是这里可以忽略有可能的
|
// 目标的大小。它可能会调用失败,但是这里可以忽略有可能的
|
||||||
// 错误,因为这个错误将在下一次调用 EndDraw 时产生
|
// 错误,因为这个错误将在下一次调用 EndDraw 时产生
|
||||||
Graphics::Instance()->Resize(width, height);
|
RenderSystem::Instance()->Resize(width, height);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -401,15 +368,21 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Window activated");
|
E2D_LOG(L"Window activated");
|
||||||
|
|
||||||
SysEvent event(SysEvent::WindowActivate);
|
if (app->curr_scene_)
|
||||||
game->Dispatch(&event);
|
{
|
||||||
|
Event evt(WindowEvent::Activate);
|
||||||
|
app->curr_scene_->Dispatch(evt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Window deactivated");
|
E2D_LOG(L"Window deactivated");
|
||||||
|
|
||||||
SysEvent event(SysEvent::WindowDeavtivate);
|
if (app->curr_scene_)
|
||||||
game->Dispatch(&event);
|
{
|
||||||
|
Event evt(WindowEvent::Deavtivate);
|
||||||
|
app->curr_scene_->Dispatch(evt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -425,6 +398,37 @@ namespace easy2d
|
||||||
E2D_LOG(L"Window icon changed");
|
E2D_LOG(L"Window icon changed");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_DISPLAYCHANGE:
|
||||||
|
{
|
||||||
|
E2D_LOG(L"The display resolution has changed");
|
||||||
|
|
||||||
|
::InvalidateRect(hwnd, nullptr, FALSE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_CLOSE:
|
||||||
|
{
|
||||||
|
E2D_LOG(L"Received a message to close the window");
|
||||||
|
|
||||||
|
if (app->curr_scene_)
|
||||||
|
{
|
||||||
|
Event evt(WindowEvent::Closing);
|
||||||
|
app->curr_scene_->Dispatch(evt);
|
||||||
|
}
|
||||||
|
::DestroyWindow(hwnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
{
|
||||||
|
E2D_LOG(L"Window was destroyed");
|
||||||
|
|
||||||
|
::PostQuitMessage(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::DefWindowProcW(hwnd, msg, wparam, lparam);
|
return ::DefWindowProcW(hwnd, msg, wparam, lparam);
|
||||||
|
|
@ -25,7 +25,6 @@
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "Event.hpp"
|
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
@ -49,23 +48,18 @@ namespace easy2d
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Game
|
class Application
|
||||||
: protected Noncopyable
|
: protected Noncopyable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Game();
|
Application(
|
||||||
|
String const& app_name = L"Easy2dGame"
|
||||||
Game(
|
|
||||||
Options const& options
|
|
||||||
);
|
);
|
||||||
|
|
||||||
virtual ~Game();
|
virtual ~Application();
|
||||||
|
|
||||||
// 退出游戏
|
// 启动
|
||||||
virtual void OnExit() {}
|
virtual void Setup() {}
|
||||||
|
|
||||||
// 窗口关闭
|
|
||||||
virtual bool OnClose() { return true; }
|
|
||||||
|
|
||||||
// ³õʼ»¯
|
// ³õʼ»¯
|
||||||
void Init(
|
void Init(
|
||||||
|
|
@ -100,16 +94,13 @@ namespace easy2d
|
||||||
|
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
void Dispatch(
|
|
||||||
Event* event
|
|
||||||
);
|
|
||||||
|
|
||||||
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool debug_;
|
bool debug_;
|
||||||
bool active_;
|
bool active_;
|
||||||
float time_scale_;
|
float time_scale_;
|
||||||
|
String app_name_;
|
||||||
ScenePtr curr_scene_;
|
ScenePtr curr_scene_;
|
||||||
ScenePtr next_scene_;
|
ScenePtr next_scene_;
|
||||||
TransitionPtr transition_;
|
TransitionPtr transition_;
|
||||||
|
|
@ -32,7 +32,7 @@ namespace easy2d
|
||||||
, stroke_width_(1.0f)
|
, stroke_width_(1.0f)
|
||||||
{
|
{
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
Graphics::Instance()->CreateBitmapRenderTarget(render_target_)
|
RenderSystem::Instance()->CreateBitmapRenderTarget(render_target_)
|
||||||
);
|
);
|
||||||
|
|
||||||
auto properties = D2D1::BrushProperties();
|
auto properties = D2D1::BrushProperties();
|
||||||
|
|
@ -105,7 +105,7 @@ namespace easy2d
|
||||||
|
|
||||||
if (bitmap_cached_)
|
if (bitmap_cached_)
|
||||||
{
|
{
|
||||||
Graphics::Instance()->DrawBitmap(bitmap_cached_);
|
RenderSystem::Instance()->DrawBitmap(bitmap_cached_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -224,8 +224,6 @@ namespace easy2d
|
||||||
D2DBitmapPtr const& GetBitmap() const;
|
D2DBitmapPtr const& GetBitmap() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
mutable bool cache_expired_;
|
|
||||||
mutable D2DBitmapPtr bitmap_cached_;
|
|
||||||
float stroke_width_;
|
float stroke_width_;
|
||||||
Font text_font_;
|
Font text_font_;
|
||||||
TextStyle text_style_;
|
TextStyle text_style_;
|
||||||
|
|
@ -237,5 +235,8 @@ namespace easy2d
|
||||||
D2DSolidColorBrushPtr text_brush_;
|
D2DSolidColorBrushPtr text_brush_;
|
||||||
D2DTextRendererPtr text_renderer_;
|
D2DTextRendererPtr text_renderer_;
|
||||||
D2DBitmapRenderTargetPtr render_target_;
|
D2DBitmapRenderTargetPtr render_target_;
|
||||||
|
|
||||||
|
mutable bool cache_expired_;
|
||||||
|
mutable D2DBitmapPtr bitmap_cached_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -28,8 +28,7 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
DebugNode::DebugNode()
|
||||||
DebugNodeImpl::DebugNodeImpl()
|
|
||||||
{
|
{
|
||||||
debug_text_ = new Text();
|
debug_text_ = new Text();
|
||||||
debug_text_->SetPosition(15, 15);
|
debug_text_->SetPosition(15, 15);
|
||||||
|
|
@ -46,11 +45,11 @@ namespace easy2d
|
||||||
debug_text_->SetStyle(style);
|
debug_text_->SetStyle(style);
|
||||||
}
|
}
|
||||||
|
|
||||||
DebugNodeImpl::~DebugNodeImpl()
|
DebugNode::~DebugNode()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebugNodeImpl::AddDebugText(String const & text)
|
void DebugNode::AddDebugText(String const & text)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -61,29 +60,29 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebugNodeImpl::ClearDebugText()
|
void DebugNode::ClearDebugText()
|
||||||
{
|
{
|
||||||
texts_.clear();
|
texts_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebugNodeImpl::OnRender()
|
void DebugNode::OnRender()
|
||||||
{
|
{
|
||||||
auto graphics = Graphics::Instance();
|
auto rt = RenderSystem::Instance();
|
||||||
|
|
||||||
graphics->SetTransform(Matrix{});
|
rt->SetTransform(Matrix{});
|
||||||
|
|
||||||
graphics->GetSolidBrush()->SetColor(Color(0.0f, 0.0f, 0.0f, 0.5f));
|
rt->GetSolidBrush()->SetColor(Color(0.0f, 0.0f, 0.0f, 0.5f));
|
||||||
|
|
||||||
graphics->GetRenderTarget()->FillRoundedRectangle(
|
rt->GetRenderTarget()->FillRoundedRectangle(
|
||||||
D2D1::RoundedRect(
|
D2D1::RoundedRect(
|
||||||
D2D1_RECT_F{ 10, 10, 200, 120 },
|
D2D1_RECT_F{ 10, 10, 200, 120 },
|
||||||
6.f,
|
6.f,
|
||||||
6.f),
|
6.f),
|
||||||
graphics->GetSolidBrush().Get()
|
rt->GetSolidBrush().Get()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebugNodeImpl::OnUpdate(Duration const & dt)
|
void DebugNode::OnUpdate(Duration const & dt)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -106,9 +105,9 @@ namespace easy2d
|
||||||
ss << "Objects: " << Object::__GetTracingObjects().size() << std::endl;
|
ss << "Objects: " << Object::__GetTracingObjects().size() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ss << "Render: " << Graphics::Instance()->GetStatus().duration.Milliseconds() << "ms" << std::endl;
|
ss << "Render: " << RenderSystem::Instance()->GetStatus().duration.Milliseconds() << "ms" << std::endl;
|
||||||
|
|
||||||
ss << "Primitives / sec: " << Graphics::Instance()->GetStatus().primitives * frame_time_.size() << std::endl;
|
ss << "Primitives / sec: " << RenderSystem::Instance()->GetStatus().primitives * frame_time_.size() << std::endl;
|
||||||
|
|
||||||
PROCESS_MEMORY_COUNTERS_EX pmc;
|
PROCESS_MEMORY_COUNTERS_EX pmc;
|
||||||
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));
|
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));
|
||||||
|
|
|
||||||
|
|
@ -25,15 +25,16 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
class DebugNodeImpl
|
class DebugNode
|
||||||
: public Node
|
: public Node
|
||||||
|
, public ISingleton<DebugNode>
|
||||||
{
|
{
|
||||||
E2D_DECLARE_SINGLETON(DebugNodeImpl);
|
E2D_DECLARE_SINGLETON(DebugNode);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DebugNodeImpl();
|
DebugNode();
|
||||||
|
|
||||||
virtual ~DebugNodeImpl();
|
virtual ~DebugNode();
|
||||||
|
|
||||||
void AddDebugText(String const& text);
|
void AddDebugText(String const& text);
|
||||||
|
|
||||||
|
|
@ -48,6 +49,4 @@ namespace easy2d
|
||||||
Array<TimePoint> frame_time_;
|
Array<TimePoint> frame_time_;
|
||||||
Array<String> texts_;
|
Array<String> texts_;
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(DebugNodeImpl, DebugNode);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,39 +20,116 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "keys.hpp"
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
typedef UINT EventType;
|
typedef UINT EventType;
|
||||||
|
|
||||||
class Event
|
// 鼠标事件
|
||||||
|
struct MouseEvent
|
||||||
{
|
{
|
||||||
public:
|
enum Type : EventType
|
||||||
Event(EventType type) : type(type), has_target(false) {}
|
{
|
||||||
|
First = WM_MOUSEFIRST,
|
||||||
|
|
||||||
virtual ~Event() {}
|
Move, // 移动
|
||||||
|
Down, // 按下
|
||||||
|
Up, // 抬起
|
||||||
|
Wheel, // 滚轮滚动
|
||||||
|
|
||||||
EventType type;
|
Hover, // 鼠标移入
|
||||||
bool has_target;
|
Out, // 鼠标移出
|
||||||
|
Click, // 鼠标点击
|
||||||
|
|
||||||
|
Last // 结束标志
|
||||||
};
|
};
|
||||||
|
|
||||||
class SysEvent
|
float x;
|
||||||
: public Event
|
float y;
|
||||||
{
|
bool left_btn_down; // 左键是否按下
|
||||||
public:
|
bool right_btn_down; // 右键是否按下
|
||||||
enum Type
|
|
||||||
{
|
|
||||||
First = WM_NULL,
|
|
||||||
|
|
||||||
WindowActivate, // 窗口获得焦点
|
struct
|
||||||
WindowDeavtivate, // 窗口失去焦点
|
{
|
||||||
WindowClose, // 关闭窗口
|
MouseButton button; // 仅当消息类型为 Down | Up | Click 时有效
|
||||||
|
};
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
float wheel_delta; // 仅当消息类型为 Wheel 时有效
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline bool Check(EventType type)
|
||||||
|
{
|
||||||
|
return type > Type::First && type < Type::Last;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 键盘事件
|
||||||
|
struct KeyboardEvent
|
||||||
|
{
|
||||||
|
enum Type : UINT
|
||||||
|
{
|
||||||
|
First = WM_KEYFIRST,
|
||||||
|
|
||||||
|
Down, // 键按下
|
||||||
|
Up, // 键抬起
|
||||||
|
|
||||||
Last
|
Last
|
||||||
};
|
};
|
||||||
|
|
||||||
SysEvent(EventType type) : Event(type) {}
|
KeyCode code;
|
||||||
|
int count;
|
||||||
|
|
||||||
static bool Check(Event* e) { return e->type > Type::First && e->type < Type::Last; }
|
static inline bool Check(UINT type)
|
||||||
|
{
|
||||||
|
return type > Type::First && type < Type::Last;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 窗口事件
|
||||||
|
struct WindowEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Type : EventType
|
||||||
|
{
|
||||||
|
First = WM_NULL,
|
||||||
|
|
||||||
|
Activate, // 窗口获得焦点
|
||||||
|
Deavtivate, // 窗口失去焦点
|
||||||
|
Closing, // 关闭窗口
|
||||||
|
|
||||||
|
Last
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline bool Check(EventType type)
|
||||||
|
{
|
||||||
|
return type > Type::First && type < Type::Last;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 事件
|
||||||
|
struct Event
|
||||||
|
{
|
||||||
|
EventType type;
|
||||||
|
bool has_target;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
MouseEvent mouse;
|
||||||
|
KeyboardEvent key;
|
||||||
|
WindowEvent win;
|
||||||
|
};
|
||||||
|
|
||||||
|
Event()
|
||||||
|
: type(0)
|
||||||
|
, has_target(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
Event(EventType type)
|
||||||
|
: type(type)
|
||||||
|
, has_target(false)
|
||||||
|
{}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
void EventDispatcher::DispatchEvent(Event* e)
|
void EventDispatcher::Dispatch(Event& evt)
|
||||||
{
|
{
|
||||||
if (listeners_.IsEmpty())
|
if (listeners_.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
@ -33,9 +33,9 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
next = listener->NextItem();
|
next = listener->NextItem();
|
||||||
|
|
||||||
if (listener->type_ == e->type)
|
if (listener->type_ == evt.type)
|
||||||
{
|
{
|
||||||
listener->callback_(e);
|
listener->callback_(evt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
class EventDispatcher
|
class EventDispatcher
|
||||||
{
|
{
|
||||||
using Listeners = intrusive::List<EventListenerPtr>;
|
using Listeners = IntrusiveList<EventListenerPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 添加监听器
|
// 添加监听器
|
||||||
|
|
@ -70,7 +70,7 @@ namespace easy2d
|
||||||
EventType type
|
EventType type
|
||||||
);
|
);
|
||||||
|
|
||||||
virtual void DispatchEvent(Event* e);
|
virtual void Dispatch(Event& evt);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Listeners listeners_;
|
Listeners listeners_;
|
||||||
|
|
|
||||||
|
|
@ -20,22 +20,21 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "include-forwards.h"
|
#include "include-forwards.h"
|
||||||
#include "intrusive/List.hpp"
|
#include "IntrusiveList.hpp"
|
||||||
#include "Event.hpp"
|
#include "Event.hpp"
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
typedef std::function<void(Event*)> EventCallback;
|
using EventCallback = std::function<void(Event const&)>;
|
||||||
|
|
||||||
|
|
||||||
class EventDispatcher;
|
class EventDispatcher;
|
||||||
|
|
||||||
class EventListener
|
class EventListener
|
||||||
: public Object
|
: public virtual Object
|
||||||
, protected intrusive::ListItem<EventListenerPtr>
|
, protected IntrusiveListItem<EventListenerPtr>
|
||||||
{
|
{
|
||||||
friend class EventDispatcher;
|
friend class EventDispatcher;
|
||||||
friend class intrusive::List<EventListenerPtr>;
|
friend class IntrusiveList<EventListenerPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EventListener(
|
EventListener(
|
||||||
|
|
|
||||||
|
|
@ -25,18 +25,18 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
FactoryImpl::FactoryImpl()
|
Factory::Factory()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
FactoryImpl::~FactoryImpl()
|
Factory::~Factory()
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Destroying device independent resources");
|
E2D_LOG(L"Destroying device-independent resources");
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::Init(bool debug)
|
HRESULT Factory::Init(bool debug)
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Creating device independent resources");
|
E2D_LOG(L"Creating device-independent resources");
|
||||||
|
|
||||||
D2D1_FACTORY_OPTIONS fact_options;
|
D2D1_FACTORY_OPTIONS fact_options;
|
||||||
fact_options.debugLevel = debug ? D2D1_DEBUG_LEVEL_INFORMATION : D2D1_DEBUG_LEVEL_NONE;
|
fact_options.debugLevel = debug ? D2D1_DEBUG_LEVEL_INFORMATION : D2D1_DEBUG_LEVEL_NONE;
|
||||||
|
|
@ -111,7 +111,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateHwndRenderTarget(D2DHwndRenderTargetPtr & hwnd_render_target, D2D1_RENDER_TARGET_PROPERTIES const & properties, D2D1_HWND_RENDER_TARGET_PROPERTIES const & hwnd_rt_properties) const
|
HRESULT Factory::CreateHwndRenderTarget(D2DHwndRenderTargetPtr & hwnd_render_target, D2D1_RENDER_TARGET_PROPERTIES const & properties, D2D1_HWND_RENDER_TARGET_PROPERTIES const & hwnd_rt_properties) const
|
||||||
{
|
{
|
||||||
if (!factory_)
|
if (!factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -128,7 +128,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateTextRenderer(
|
HRESULT Factory::CreateTextRenderer(
|
||||||
D2DTextRendererPtr& text_renderer,
|
D2DTextRendererPtr& text_renderer,
|
||||||
D2DRenderTargetPtr const& render_target,
|
D2DRenderTargetPtr const& render_target,
|
||||||
D2DSolidColorBrushPtr const& brush
|
D2DSolidColorBrushPtr const& brush
|
||||||
|
|
@ -150,20 +150,18 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateBitmapFromFile(D2DBitmapPtr & bitmap, D2DRenderTargetPtr const & rt, String const & file_path)
|
HRESULT Factory::CreateBitmapFromFile(D2DBitmapPtr & bitmap, D2DRenderTargetPtr const & rt, String const & file_path)
|
||||||
{
|
{
|
||||||
if (imaging_factory_ == nullptr)
|
if (imaging_factory_ == nullptr)
|
||||||
{
|
{
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace intrusive;
|
IntrusivePtr<IWICBitmapDecoder> decoder;
|
||||||
|
IntrusivePtr<IWICBitmapFrameDecode> source;
|
||||||
SmartPtr<IWICBitmapDecoder> decoder;
|
IntrusivePtr<IWICStream> stream;
|
||||||
SmartPtr<IWICBitmapFrameDecode> source;
|
IntrusivePtr<IWICFormatConverter> converter;
|
||||||
SmartPtr<IWICStream> stream;
|
IntrusivePtr<ID2D1Bitmap> bitmap_tmp;
|
||||||
SmartPtr<IWICFormatConverter> converter;
|
|
||||||
SmartPtr<ID2D1Bitmap> bitmap_tmp;
|
|
||||||
|
|
||||||
HRESULT hr = imaging_factory_->CreateDecoderFromFilename(
|
HRESULT hr = imaging_factory_->CreateDecoderFromFilename(
|
||||||
file_path.c_str(),
|
file_path.c_str(),
|
||||||
|
|
@ -211,20 +209,18 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateBitmapFromResource(D2DBitmapPtr & bitmap, D2DRenderTargetPtr const & rt, Resource const & res)
|
HRESULT Factory::CreateBitmapFromResource(D2DBitmapPtr & bitmap, D2DRenderTargetPtr const & rt, Resource const & res)
|
||||||
{
|
{
|
||||||
if (imaging_factory_ == nullptr)
|
if (imaging_factory_ == nullptr)
|
||||||
{
|
{
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace intrusive;
|
IntrusivePtr<IWICBitmapDecoder> decoder;
|
||||||
|
IntrusivePtr<IWICBitmapFrameDecode> source;
|
||||||
SmartPtr<IWICBitmapDecoder> decoder;
|
IntrusivePtr<IWICStream> stream;
|
||||||
SmartPtr<IWICBitmapFrameDecode> source;
|
IntrusivePtr<IWICFormatConverter> converter;
|
||||||
SmartPtr<IWICStream> stream;
|
IntrusivePtr<ID2D1Bitmap> bitmap_tmp;
|
||||||
SmartPtr<IWICFormatConverter> converter;
|
|
||||||
SmartPtr<ID2D1Bitmap> bitmap_tmp;
|
|
||||||
|
|
||||||
// ¼ÓÔØ×ÊÔ´
|
// ¼ÓÔØ×ÊÔ´
|
||||||
LPVOID buffer;
|
LPVOID buffer;
|
||||||
|
|
@ -294,7 +290,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateRectangleGeometry(D2DRectangleGeometryPtr & geo, Rect const& rect) const
|
HRESULT Factory::CreateRectangleGeometry(D2DRectangleGeometryPtr & geo, Rect const& rect) const
|
||||||
{
|
{
|
||||||
if (!factory_)
|
if (!factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -310,7 +306,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateRoundedRectangleGeometry(D2DRoundedRectangleGeometryPtr & geo, Rect const & rect, float radius_x, float radius_y) const
|
HRESULT Factory::CreateRoundedRectangleGeometry(D2DRoundedRectangleGeometryPtr & geo, Rect const & rect, float radius_x, float radius_y) const
|
||||||
{
|
{
|
||||||
if (!factory_)
|
if (!factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -330,7 +326,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateEllipseGeometry(D2DEllipseGeometryPtr & geo, Point const & center, float radius_x, float radius_y) const
|
HRESULT Factory::CreateEllipseGeometry(D2DEllipseGeometryPtr & geo, Point const & center, float radius_x, float radius_y) const
|
||||||
{
|
{
|
||||||
if (!factory_)
|
if (!factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -350,7 +346,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateTransformedGeometry(
|
HRESULT Factory::CreateTransformedGeometry(
|
||||||
D2DTransformedGeometryPtr& transformed,
|
D2DTransformedGeometryPtr& transformed,
|
||||||
Matrix const& matrix,
|
Matrix const& matrix,
|
||||||
D2DGeometryPtr const& geo
|
D2DGeometryPtr const& geo
|
||||||
|
|
@ -373,7 +369,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreatePathGeometry(D2DPathGeometryPtr & geometry) const
|
HRESULT Factory::CreatePathGeometry(D2DPathGeometryPtr & geometry) const
|
||||||
{
|
{
|
||||||
if (!factory_)
|
if (!factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -381,7 +377,7 @@ namespace easy2d
|
||||||
return factory_->CreatePathGeometry(&geometry);
|
return factory_->CreatePathGeometry(&geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateTextFormat(D2DTextFormatPtr & text_format, Font const & font, TextStyle const & text_style) const
|
HRESULT Factory::CreateTextFormat(D2DTextFormatPtr & text_format, Font const & font, TextStyle const & text_style) const
|
||||||
{
|
{
|
||||||
if (!write_factory_)
|
if (!write_factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -419,7 +415,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FactoryImpl::CreateTextLayout(D2DTextLayoutPtr & text_layout, Size& layout_size, String const & text, D2DTextFormatPtr const& text_format, TextStyle const & text_style) const
|
HRESULT Factory::CreateTextLayout(D2DTextLayoutPtr & text_layout, Size& layout_size, String const & text, D2DTextFormatPtr const& text_format, TextStyle const & text_style) const
|
||||||
{
|
{
|
||||||
if (!write_factory_)
|
if (!write_factory_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -497,7 +493,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
D2DStrokeStylePtr const& FactoryImpl::GetStrokeStyle(StrokeStyle stroke) const
|
D2DStrokeStylePtr const& Factory::GetStrokeStyle(StrokeStyle stroke) const
|
||||||
{
|
{
|
||||||
switch (stroke)
|
switch (stroke)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,13 @@
|
||||||
#include "Resource.h"
|
#include "Resource.h"
|
||||||
#include "TextRenderer.h"
|
#include "TextRenderer.h"
|
||||||
#include "TextStyle.hpp"
|
#include "TextStyle.hpp"
|
||||||
#include "../math/Matrix.hpp"
|
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
class FactoryImpl
|
class Factory
|
||||||
: protected Noncopyable
|
: public ISingleton<Factory>
|
||||||
{
|
{
|
||||||
E2D_DECLARE_SINGLETON(FactoryImpl);
|
E2D_DECLARE_SINGLETON(Factory);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HRESULT Init(bool debug);
|
HRESULT Init(bool debug);
|
||||||
|
|
@ -109,9 +108,9 @@ namespace easy2d
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FactoryImpl();
|
Factory();
|
||||||
|
|
||||||
~FactoryImpl();
|
~Factory();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
D2DFactoryPtr factory_;
|
D2DFactoryPtr factory_;
|
||||||
|
|
@ -121,6 +120,4 @@ namespace easy2d
|
||||||
D2DStrokeStylePtr bevel_stroke_style_;
|
D2DStrokeStylePtr bevel_stroke_style_;
|
||||||
D2DStrokeStylePtr round_stroke_style_;
|
D2DStrokeStylePtr round_stroke_style_;
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(FactoryImpl, Factory);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
// Ö¡¼¯ºÏ
|
// Ö¡¼¯ºÏ
|
||||||
class Frames
|
class Frames
|
||||||
: public Object
|
: public virtual Object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Frames();
|
Frames();
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
// 섯부녜蹶
|
// 섯부녜蹶
|
||||||
class Geometry
|
class Geometry
|
||||||
: public RefCounter
|
: public virtual Object
|
||||||
{
|
{
|
||||||
friend class Canvas;
|
friend class Canvas;
|
||||||
friend class GeometryNode;
|
friend class GeometryNode;
|
||||||
|
|
|
||||||
|
|
@ -70,14 +70,14 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
if (geometry_ && geometry_->geo_)
|
if (geometry_ && geometry_->geo_)
|
||||||
{
|
{
|
||||||
auto graphics = Graphics::Instance();
|
auto rt = RenderSystem::Instance();
|
||||||
|
|
||||||
graphics->FillGeometry(
|
rt->FillGeometry(
|
||||||
geometry_->geo_,
|
geometry_->geo_,
|
||||||
fill_color_
|
fill_color_
|
||||||
);
|
);
|
||||||
|
|
||||||
graphics->DrawGeometry(
|
rt->DrawGeometry(
|
||||||
geometry_->geo_,
|
geometry_->geo_,
|
||||||
stroke_color_,
|
stroke_color_,
|
||||||
stroke_width_,
|
stroke_width_,
|
||||||
|
|
|
||||||
|
|
@ -67,11 +67,11 @@ namespace easy2d
|
||||||
logs::Warningln(L"Image file '%s' not found!", res.GetFileName());
|
logs::Warningln(L"Image file '%s' not found!", res.GetFileName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
hr = Graphics::Instance()->CreateBitmapFromFile(bitmap, res.GetFileName());
|
hr = RenderSystem::Instance()->CreateBitmapFromFile(bitmap, res.GetFileName());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hr = Graphics::Instance()->CreateBitmapFromResource(bitmap, res);
|
hr = RenderSystem::Instance()->CreateBitmapFromResource(bitmap, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
// ͼƬ
|
// ͼƬ
|
||||||
class Image
|
class Image
|
||||||
: public Object
|
: public virtual Object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Image();
|
Image();
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
InputDevice::InputDevice()
|
Input::Input()
|
||||||
: hwnd_(nullptr)
|
: hwnd_(nullptr)
|
||||||
, scale_x_(1.f)
|
, scale_x_(1.f)
|
||||||
, scale_y_(1.f)
|
, scale_y_(1.f)
|
||||||
|
|
@ -33,12 +33,12 @@ namespace easy2d
|
||||||
ZeroMemory(keys_cache_, sizeof(keys_cache_));
|
ZeroMemory(keys_cache_, sizeof(keys_cache_));
|
||||||
}
|
}
|
||||||
|
|
||||||
InputDevice::~InputDevice()
|
Input::~Input()
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Destroying input device");
|
E2D_LOG(L"Destroying input device");
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT InputDevice::Init(HWND hwnd, float scale_x, float scale_y, bool debug)
|
HRESULT Input::Init(HWND hwnd, float scale_x, float scale_y, bool debug)
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Initing input device");
|
E2D_LOG(L"Initing input device");
|
||||||
|
|
||||||
|
|
@ -49,47 +49,47 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputDevice::Update()
|
void Input::Update()
|
||||||
{
|
{
|
||||||
memcpy(keys_cache_, keys_, sizeof(keys_cache_));
|
memcpy(keys_cache_, keys_, sizeof(keys_cache_));
|
||||||
GetKeyboardState(keys_);
|
GetKeyboardState(keys_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDevice::IsDown(KeyCode code)
|
bool Input::IsDown(KeyCode code)
|
||||||
{
|
{
|
||||||
return !!(keys_[static_cast<int>(code)] & 0x80);
|
return !!(keys_[static_cast<int>(code)] & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDevice::IsDown(MouseButton btn)
|
bool Input::IsDown(MouseButton btn)
|
||||||
{
|
{
|
||||||
return !!(keys_[static_cast<int>(btn)] & 0x80);
|
return !!(keys_[static_cast<int>(btn)] & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDevice::WasPressed(KeyCode code)
|
bool Input::WasPressed(KeyCode code)
|
||||||
{
|
{
|
||||||
return !(keys_cache_[static_cast<int>(code)] & 0x80)
|
return !(keys_cache_[static_cast<int>(code)] & 0x80)
|
||||||
&& (keys_[static_cast<int>(code)] & 0x80);
|
&& (keys_[static_cast<int>(code)] & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDevice::WasPressed(MouseButton btn)
|
bool Input::WasPressed(MouseButton btn)
|
||||||
{
|
{
|
||||||
return !(keys_cache_[static_cast<int>(btn)] & 0x80)
|
return !(keys_cache_[static_cast<int>(btn)] & 0x80)
|
||||||
&& (keys_[static_cast<int>(btn)] & 0x80);
|
&& (keys_[static_cast<int>(btn)] & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDevice::WasReleased(KeyCode code)
|
bool Input::WasReleased(KeyCode code)
|
||||||
{
|
{
|
||||||
return (keys_cache_[static_cast<int>(code)] & 0x80)
|
return (keys_cache_[static_cast<int>(code)] & 0x80)
|
||||||
&& !(keys_[static_cast<int>(code)] & 0x80);
|
&& !(keys_[static_cast<int>(code)] & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDevice::WasReleased(MouseButton btn)
|
bool Input::WasReleased(MouseButton btn)
|
||||||
{
|
{
|
||||||
return (keys_cache_[static_cast<int>(btn)] & 0x80)
|
return (keys_cache_[static_cast<int>(btn)] & 0x80)
|
||||||
&& !(keys_[static_cast<int>(btn)] & 0x80);
|
&& !(keys_[static_cast<int>(btn)] & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
float InputDevice::GetMouseX()
|
float Input::GetMouseX()
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
::GetCursorPos(&pos);
|
::GetCursorPos(&pos);
|
||||||
|
|
@ -97,7 +97,7 @@ namespace easy2d
|
||||||
return pos.x * scale_x_;
|
return pos.x * scale_x_;
|
||||||
}
|
}
|
||||||
|
|
||||||
float InputDevice::GetMouseY()
|
float Input::GetMouseY()
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
::GetCursorPos(&pos);
|
::GetCursorPos(&pos);
|
||||||
|
|
@ -105,7 +105,7 @@ namespace easy2d
|
||||||
return pos.y * scale_y_;
|
return pos.y * scale_y_;
|
||||||
}
|
}
|
||||||
|
|
||||||
Point InputDevice::GetMousePos()
|
Point Input::GetMousePos()
|
||||||
{
|
{
|
||||||
POINT pos;
|
POINT pos;
|
||||||
::GetCursorPos(&pos);
|
::GetCursorPos(&pos);
|
||||||
|
|
|
||||||
|
|
@ -25,19 +25,10 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
// 報炎囚峙
|
class Input
|
||||||
enum class MouseButton : int
|
: public ISingleton<Input>
|
||||||
{
|
{
|
||||||
Left = VK_LBUTTON, // 報炎恣囚
|
E2D_DECLARE_SINGLETON(Input);
|
||||||
Right = VK_RBUTTON, // 報炎嘔囚
|
|
||||||
Middle = VK_MBUTTON // 報炎嶄囚
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class InputDevice
|
|
||||||
: protected Noncopyable
|
|
||||||
{
|
|
||||||
E2D_DECLARE_SINGLETON(InputDevice);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HRESULT Init(HWND hwnd, float scale_x, float scale_y, bool debug);
|
HRESULT Init(HWND hwnd, float scale_x, float scale_y, bool debug);
|
||||||
|
|
@ -84,9 +75,9 @@ namespace easy2d
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
InputDevice();
|
Input();
|
||||||
|
|
||||||
~InputDevice();
|
~Input();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HWND hwnd_;
|
HWND hwnd_;
|
||||||
|
|
@ -95,6 +86,4 @@ namespace easy2d
|
||||||
BYTE keys_[256];
|
BYTE keys_[256];
|
||||||
BYTE keys_cache_[256];
|
BYTE keys_cache_[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(InputDevice, Input);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,254 @@
|
||||||
|
// Copyright (c) 2016-2018 Easy2D - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "macros.h"
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
#undef DEBUG_CHECK_LIST
|
||||||
|
#ifdef E2D_DEBUG
|
||||||
|
# define DEBUG_CHECK_LIST(list_ptr) list_ptr->Check()
|
||||||
|
#else
|
||||||
|
# define DEBUG_CHECK_LIST __noop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace easy2d
|
||||||
|
{
|
||||||
|
template <typename T> class IntrusiveList;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class IntrusiveListItem
|
||||||
|
{
|
||||||
|
T prev_;
|
||||||
|
T next_;
|
||||||
|
|
||||||
|
template <typename U>
|
||||||
|
friend class IntrusiveList;
|
||||||
|
|
||||||
|
public:
|
||||||
|
using ItemType = T;
|
||||||
|
|
||||||
|
IntrusiveListItem() : prev_(), next_() {}
|
||||||
|
|
||||||
|
T const& PrevItem() const { return prev_; }
|
||||||
|
|
||||||
|
T& PrevItem() { return prev_; }
|
||||||
|
|
||||||
|
T const& NextItem() const { return next_; }
|
||||||
|
|
||||||
|
T& NextItem() { return next_; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class IntrusiveList
|
||||||
|
{
|
||||||
|
T first_;
|
||||||
|
T last_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
using ItemType = T;
|
||||||
|
|
||||||
|
IntrusiveList() : first_(), last_() {}
|
||||||
|
|
||||||
|
~IntrusiveList() { Clear(); }
|
||||||
|
|
||||||
|
T const& First() const { return first_; }
|
||||||
|
|
||||||
|
T& First() { return first_; }
|
||||||
|
|
||||||
|
T const& Last() const { return last_; }
|
||||||
|
|
||||||
|
T& Last() { return last_; }
|
||||||
|
|
||||||
|
bool IsEmpty() const { return !first_; }
|
||||||
|
|
||||||
|
void PushBack(T const& child)
|
||||||
|
{
|
||||||
|
if (child->prev_)
|
||||||
|
child->prev_->next_ = child->next_;
|
||||||
|
if (child->next_)
|
||||||
|
child->next_->prev_ = child->prev_;
|
||||||
|
|
||||||
|
child->prev_ = last_;
|
||||||
|
child->next_ = nullptr;
|
||||||
|
|
||||||
|
if (first_)
|
||||||
|
{
|
||||||
|
last_->next_ = child;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
first_ = child;
|
||||||
|
}
|
||||||
|
|
||||||
|
last_ = child;
|
||||||
|
|
||||||
|
DEBUG_CHECK_LIST(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PushFront(T const& child)
|
||||||
|
{
|
||||||
|
if (child->prev_)
|
||||||
|
child->prev_->next_ = child->next_;
|
||||||
|
if (child->next_)
|
||||||
|
child->next_->prev_ = child->prev_;
|
||||||
|
|
||||||
|
child->prev_ = nullptr;
|
||||||
|
child->next_ = first_;
|
||||||
|
|
||||||
|
if (first_)
|
||||||
|
{
|
||||||
|
first_->prev_ = child;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last_ = child;
|
||||||
|
}
|
||||||
|
|
||||||
|
first_ = child;
|
||||||
|
|
||||||
|
DEBUG_CHECK_LIST(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InsertBefore(T const& child, T const& before)
|
||||||
|
{
|
||||||
|
if (child->prev_)
|
||||||
|
child->prev_->next_ = child->next_;
|
||||||
|
if (child->next_)
|
||||||
|
child->next_->prev_ = child->prev_;
|
||||||
|
|
||||||
|
if (before->prev_)
|
||||||
|
before->prev_->next_ = child;
|
||||||
|
else
|
||||||
|
first_ = child;
|
||||||
|
|
||||||
|
child->prev_ = before->prev_;
|
||||||
|
child->next_ = before;
|
||||||
|
before->prev_ = child;
|
||||||
|
|
||||||
|
DEBUG_CHECK_LIST(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InsertAfter(T const& child, T const& after)
|
||||||
|
{
|
||||||
|
if (child->prev_)
|
||||||
|
child->prev_->next_ = child->next_;
|
||||||
|
if (child->next_)
|
||||||
|
child->next_->prev_ = child->prev_;
|
||||||
|
|
||||||
|
if (after->next_)
|
||||||
|
after->next_->prev_ = child;
|
||||||
|
else
|
||||||
|
last_ = child;
|
||||||
|
|
||||||
|
child->next_ = after->next_;
|
||||||
|
child->prev_ = after;
|
||||||
|
after->next_ = child;
|
||||||
|
|
||||||
|
DEBUG_CHECK_LIST(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Remove(T const& child)
|
||||||
|
{
|
||||||
|
#ifdef E2D_DEBUG
|
||||||
|
T tmp = first_;
|
||||||
|
while (tmp != child)
|
||||||
|
{
|
||||||
|
if (tmp == last_)
|
||||||
|
E2D_ASSERT(false && "The node to be removed is not in this list");
|
||||||
|
tmp = tmp->next_;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (child->next_)
|
||||||
|
{
|
||||||
|
child->next_->prev_ = child->prev_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last_ = child->prev_;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (child->prev_)
|
||||||
|
{
|
||||||
|
child->prev_->next_ = child->next_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
first_ = child->next_;
|
||||||
|
}
|
||||||
|
|
||||||
|
child->prev_ = nullptr;
|
||||||
|
child->next_ = nullptr;
|
||||||
|
|
||||||
|
DEBUG_CHECK_LIST(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Clear()
|
||||||
|
{
|
||||||
|
T p = first_;
|
||||||
|
while (p)
|
||||||
|
{
|
||||||
|
T tmp = p;
|
||||||
|
p = p->next_;
|
||||||
|
if (tmp)
|
||||||
|
{
|
||||||
|
tmp->next_ = nullptr;
|
||||||
|
tmp->prev_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
first_ = nullptr;
|
||||||
|
last_ = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef E2D_DEBUG
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Check()
|
||||||
|
{
|
||||||
|
if (!first_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int pos = 0;
|
||||||
|
T p = first_;
|
||||||
|
T tmp = p;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
tmp = p;
|
||||||
|
p = p->next_;
|
||||||
|
++pos;
|
||||||
|
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
E2D_ASSERT(p->prev_ == tmp && "Check list failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
E2D_ASSERT(tmp == last_ && "Check list failed");
|
||||||
|
}
|
||||||
|
} while (p);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef DEBUG_CHECK_LIST
|
||||||
|
|
@ -0,0 +1,201 @@
|
||||||
|
// Copyright (c) 2016-2018 Easy2D - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining lhs copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "macros.h"
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
namespace easy2d
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
class IntrusivePtr
|
||||||
|
{
|
||||||
|
T* ptr_{ nullptr };
|
||||||
|
|
||||||
|
public:
|
||||||
|
using Type = T;
|
||||||
|
|
||||||
|
IntrusivePtr() E2D_NOEXCEPT {}
|
||||||
|
|
||||||
|
IntrusivePtr(nullptr_t) E2D_NOEXCEPT {}
|
||||||
|
|
||||||
|
IntrusivePtr(Type* p) E2D_NOEXCEPT : ptr_(p)
|
||||||
|
{
|
||||||
|
IntrusivePtrAddRef(ptr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
IntrusivePtr(const IntrusivePtr& other) E2D_NOEXCEPT
|
||||||
|
: ptr_(other.ptr_)
|
||||||
|
{
|
||||||
|
IntrusivePtrAddRef(ptr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename U>
|
||||||
|
IntrusivePtr(const IntrusivePtr<U>& other) E2D_NOEXCEPT
|
||||||
|
: ptr_(other.Get())
|
||||||
|
{
|
||||||
|
IntrusivePtrAddRef(ptr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
IntrusivePtr(IntrusivePtr&& other) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
ptr_ = other.ptr_;
|
||||||
|
other.ptr_ = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
~IntrusivePtr() E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
IntrusivePtrRelease(ptr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Type* Get() const E2D_NOEXCEPT { return ptr_; }
|
||||||
|
|
||||||
|
inline void Swap(IntrusivePtr& other) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
std::swap(ptr_, other.ptr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Type* operator ->() const
|
||||||
|
{
|
||||||
|
E2D_ASSERT(ptr_ != nullptr && "Invalid pointer");
|
||||||
|
return ptr_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Type& operator *() const
|
||||||
|
{
|
||||||
|
E2D_ASSERT(ptr_ != nullptr && "Invalid pointer");
|
||||||
|
return *ptr_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Type** operator &()
|
||||||
|
{
|
||||||
|
E2D_ASSERT(ptr_ == nullptr && "Memory leak");
|
||||||
|
return &ptr_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline operator bool() const E2D_NOEXCEPT { return ptr_ != nullptr; }
|
||||||
|
|
||||||
|
inline bool operator !() const E2D_NOEXCEPT { return ptr_ == 0; }
|
||||||
|
|
||||||
|
inline IntrusivePtr& operator =(const IntrusivePtr& other) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (other.ptr_ != ptr_)
|
||||||
|
IntrusivePtr(other).Swap(*this);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline IntrusivePtr& operator =(IntrusivePtr&& other) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
IntrusivePtrRelease(ptr_);
|
||||||
|
ptr_ = other.ptr_;
|
||||||
|
other.ptr_ = nullptr;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline IntrusivePtr& operator =(Type* p) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (p != ptr_)
|
||||||
|
IntrusivePtr(p).Swap(*this);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline IntrusivePtr& operator =(nullptr_t) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (nullptr != ptr_)
|
||||||
|
IntrusivePtr{}.Swap(*this);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T, class U>
|
||||||
|
inline bool operator==(IntrusivePtr<T> const& lhs, IntrusivePtr<U> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs.Get() == rhs.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T, class U>
|
||||||
|
inline bool operator!=(IntrusivePtr<T> const& lhs, IntrusivePtr<U> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs.Get() != rhs.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T, class U>
|
||||||
|
inline bool operator<(IntrusivePtr<T> const& lhs, IntrusivePtr<U> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs.Get() < rhs.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator==(IntrusivePtr<T> const& lhs, T* rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs.Get() == rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator!=(IntrusivePtr<T> const& lhs, T* rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs.Get() != rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator==(T* lhs, IntrusivePtr<T> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs == rhs.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator!=(T* lhs, IntrusivePtr<T> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return lhs != rhs.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator==(IntrusivePtr<T> const& lhs, nullptr_t) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return !static_cast<bool>(lhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator!=(IntrusivePtr<T> const& lhs, nullptr_t) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return static_cast<bool>(lhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator==(nullptr_t, IntrusivePtr<T> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return !static_cast<bool>(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline bool operator!=(nullptr_t, IntrusivePtr<T> const& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
return static_cast<bool>(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// template class cannot specialize std::swap,
|
||||||
|
// so implement a swap function in easy2d namespace
|
||||||
|
template<class T>
|
||||||
|
inline void swap(IntrusivePtr<T>& lhs, IntrusivePtr<T>& rhs) E2D_NOEXCEPT
|
||||||
|
{
|
||||||
|
lhs.Swap(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
// Copyright (c) 2016-2018 Easy2D - Nomango
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "Event.hpp"
|
|
||||||
#include "keys.hpp"
|
|
||||||
|
|
||||||
namespace easy2d
|
|
||||||
{
|
|
||||||
class KeyEvent
|
|
||||||
: public Event
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum Type
|
|
||||||
{
|
|
||||||
First = WM_KEYFIRST,
|
|
||||||
|
|
||||||
Down, // ¼ü°´ÏÂ
|
|
||||||
Up, // ¼ü̧Æð
|
|
||||||
|
|
||||||
Last // ½áÊø±êÖ¾
|
|
||||||
};
|
|
||||||
|
|
||||||
KeyEvent(EventType type, KeyCode key) : Event(type), key(key) {}
|
|
||||||
|
|
||||||
static bool Check(Event* e) { return e->type > Type::First && e->type < Type::Last; }
|
|
||||||
|
|
||||||
KeyCode key;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
// Copyright (c) 2016-2018 Easy2D - Nomango
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "Event.hpp"
|
|
||||||
#include "helper.hpp"
|
|
||||||
|
|
||||||
namespace easy2d
|
|
||||||
{
|
|
||||||
class MouseEvent
|
|
||||||
: public Event
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum Type
|
|
||||||
{
|
|
||||||
First = WM_MOUSEFIRST,
|
|
||||||
|
|
||||||
Move, // 移动
|
|
||||||
Down, // 按下
|
|
||||||
Up, // 抬起
|
|
||||||
Wheel, // 滚轮滚动
|
|
||||||
|
|
||||||
Hover, // 鼠标移入
|
|
||||||
Out, // 鼠标移出
|
|
||||||
Click, // 鼠标点击
|
|
||||||
|
|
||||||
Last // 结束标志
|
|
||||||
};
|
|
||||||
|
|
||||||
MouseEvent(EventType type, float x, float y, float wheel_delta) : Event(type), position(x, y), wheel_delta(wheel_delta), button_down(false) {}
|
|
||||||
|
|
||||||
static bool Check(Event* e) { return e->type > Type::First && e->type < Type::Last; }
|
|
||||||
|
|
||||||
Point position;
|
|
||||||
float wheel_delta;
|
|
||||||
bool button_down;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
// 稜있
|
// 稜있
|
||||||
class Music
|
class Music
|
||||||
: public Object
|
: public virtual Object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Music();
|
Music();
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@
|
||||||
#include "Factory.h"
|
#include "Factory.h"
|
||||||
#include "Scene.h"
|
#include "Scene.h"
|
||||||
#include "Task.h"
|
#include "Task.h"
|
||||||
#include "MouseEvent.hpp"
|
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
#include "logs.h"
|
#include "logs.h"
|
||||||
|
|
||||||
|
|
@ -31,18 +30,19 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
float default_pivot_x = 0.f;
|
float default_anchor_x = 0.f;
|
||||||
float default_pivot_y = 0.f;
|
float default_anchor_y = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::SetDefaultPivot(float pivot_x, float pivot_y)
|
void Node::SetDefaultAnchor(float anchor_x, float anchor_y)
|
||||||
{
|
{
|
||||||
default_pivot_x = pivot_x;
|
default_anchor_x = anchor_x;
|
||||||
default_pivot_y = pivot_y;
|
default_anchor_y = anchor_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
Node::Node()
|
Node::Node()
|
||||||
: visible_(true)
|
: visible_(true)
|
||||||
|
, pause_(false)
|
||||||
, dirty_transform_(false)
|
, dirty_transform_(false)
|
||||||
, dirty_transform_inverse_(false)
|
, dirty_transform_inverse_(false)
|
||||||
, parent_(nullptr)
|
, parent_(nullptr)
|
||||||
|
|
@ -50,12 +50,15 @@ namespace easy2d
|
||||||
, z_order_(0)
|
, z_order_(0)
|
||||||
, opacity_(1.f)
|
, opacity_(1.f)
|
||||||
, display_opacity_(1.f)
|
, display_opacity_(1.f)
|
||||||
, pivot_(default_pivot_x, default_pivot_y)
|
, anchor_(default_anchor_x, default_anchor_y)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::Update(Duration const & dt)
|
void Node::Update(Duration const & dt)
|
||||||
{
|
{
|
||||||
|
if (pause_)
|
||||||
|
return;
|
||||||
|
|
||||||
OnUpdate(dt);
|
OnUpdate(dt);
|
||||||
UpdateActions(this, dt);
|
UpdateActions(this, dt);
|
||||||
UpdateTasks(dt);
|
UpdateTasks(dt);
|
||||||
|
|
@ -78,12 +81,12 @@ namespace easy2d
|
||||||
|
|
||||||
UpdateTransform();
|
UpdateTransform();
|
||||||
|
|
||||||
auto graphics = Graphics::Instance();
|
auto rt = RenderSystem::Instance();
|
||||||
|
|
||||||
if (children_.IsEmpty())
|
if (children_.IsEmpty())
|
||||||
{
|
{
|
||||||
graphics->SetTransform(transform_matrix_);
|
rt->SetTransform(transform_matrix_);
|
||||||
graphics->SetOpacity(display_opacity_);
|
rt->SetOpacity(display_opacity_);
|
||||||
|
|
||||||
OnRender();
|
OnRender();
|
||||||
}
|
}
|
||||||
|
|
@ -100,8 +103,8 @@ namespace easy2d
|
||||||
child = child->NextItem().Get();
|
child = child->NextItem().Get();
|
||||||
}
|
}
|
||||||
|
|
||||||
graphics->SetTransform(transform_matrix_);
|
rt->SetTransform(transform_matrix_);
|
||||||
graphics->SetOpacity(display_opacity_);
|
rt->SetOpacity(display_opacity_);
|
||||||
|
|
||||||
OnRender();
|
OnRender();
|
||||||
|
|
||||||
|
|
@ -113,7 +116,7 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::DispatchEvent(Event * e)
|
void Node::Dispatch(Event& evt)
|
||||||
{
|
{
|
||||||
if (!visible_)
|
if (!visible_)
|
||||||
return;
|
return;
|
||||||
|
|
@ -122,26 +125,24 @@ namespace easy2d
|
||||||
for (auto child = children_.Last(); child; child = prev)
|
for (auto child = children_.Last(); child; child = prev)
|
||||||
{
|
{
|
||||||
prev = child->PrevItem();
|
prev = child->PrevItem();
|
||||||
child->DispatchEvent(e);
|
child->Dispatch(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MouseEvent::Check(e))
|
if (MouseEvent::Check(evt.type))
|
||||||
{
|
{
|
||||||
MouseEvent* me = static_cast<MouseEvent*>(e);
|
if (evt.type == MouseEvent::Move)
|
||||||
|
|
||||||
if (me->type == MouseEvent::Move)
|
|
||||||
{
|
{
|
||||||
if (!me->has_target && ContainsPoint(me->position))
|
if (!evt.has_target && ContainsPoint(Point{ evt.mouse.x, evt.mouse.y }))
|
||||||
{
|
{
|
||||||
me->has_target = true;
|
evt.has_target = true;
|
||||||
|
|
||||||
if (!hover_)
|
if (!hover_)
|
||||||
{
|
{
|
||||||
hover_ = true;
|
hover_ = true;
|
||||||
|
|
||||||
MouseEvent hover = *me;
|
Event hover = evt;
|
||||||
hover.type = MouseEvent::Hover;
|
hover.type = MouseEvent::Hover;
|
||||||
DispatchEvent(&hover);
|
Dispatch(hover);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (hover_)
|
else if (hover_)
|
||||||
|
|
@ -149,28 +150,38 @@ namespace easy2d
|
||||||
hover_ = false;
|
hover_ = false;
|
||||||
pressed_ = false;
|
pressed_ = false;
|
||||||
|
|
||||||
MouseEvent hover = *me;
|
Event out = evt;
|
||||||
hover.type = MouseEvent::Out;
|
out.type = MouseEvent::Out;
|
||||||
DispatchEvent(&hover);
|
Dispatch(out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (me->type == MouseEvent::Down && hover_)
|
if (evt.type == MouseEvent::Down && hover_)
|
||||||
{
|
{
|
||||||
pressed_ = true;
|
pressed_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (me->type == MouseEvent::Up && pressed_)
|
if (evt.type == MouseEvent::Up && pressed_)
|
||||||
{
|
{
|
||||||
pressed_ = false;
|
pressed_ = false;
|
||||||
|
|
||||||
MouseEvent click = *me;
|
Event click = evt;
|
||||||
click.type = MouseEvent::Click;
|
click.type = MouseEvent::Click;
|
||||||
DispatchEvent(&click);
|
Dispatch(click);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EventDispatcher::DispatchEvent(e);
|
EventDispatcher::Dispatch(evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Node::PauseUpdating()
|
||||||
|
{
|
||||||
|
pause_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Node::ResumeUpdating()
|
||||||
|
{
|
||||||
|
pause_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Matrix const & Node::GetTransformMatrix() const
|
Matrix const & Node::GetTransformMatrix() const
|
||||||
|
|
@ -214,7 +225,7 @@ namespace easy2d
|
||||||
* Matrix::Rotation(transform_.rotation)
|
* Matrix::Rotation(transform_.rotation)
|
||||||
* Matrix::Translation(transform_.position);
|
* Matrix::Translation(transform_.position);
|
||||||
|
|
||||||
Point offset{ -size_.x * pivot_.x, -size_.y * pivot_.y };
|
Point offset{ -size_.x * anchor_.x, -size_.y * anchor_.y };
|
||||||
transform_matrix_.Translate(offset);
|
transform_matrix_.Translate(offset);
|
||||||
|
|
||||||
if (parent_)
|
if (parent_)
|
||||||
|
|
@ -290,23 +301,23 @@ namespace easy2d
|
||||||
UpdateOpacity();
|
UpdateOpacity();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::SetPivotX(float pivot_x)
|
void Node::SetAnchorX(float anchor_x)
|
||||||
{
|
{
|
||||||
this->SetPivot(pivot_x, pivot_.y);
|
this->SetAnchor(anchor_x, anchor_.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::SetPivotY(float pivot_y)
|
void Node::SetAnchorY(float anchor_y)
|
||||||
{
|
{
|
||||||
this->SetPivot(pivot_.x, pivot_y);
|
this->SetAnchor(anchor_.x, anchor_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::SetPivot(float pivot_x, float pivot_y)
|
void Node::SetAnchor(float anchor_x, float anchor_y)
|
||||||
{
|
{
|
||||||
if (pivot_.x == pivot_x && pivot_.y == pivot_y)
|
if (anchor_.x == anchor_x && anchor_.y == anchor_y)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pivot_.x = pivot_x;
|
anchor_.x = anchor_x;
|
||||||
pivot_.y = pivot_y;
|
anchor_.y = anchor_y;
|
||||||
dirty_transform_ = true;
|
dirty_transform_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,26 +25,26 @@
|
||||||
#include "TaskManager.h"
|
#include "TaskManager.h"
|
||||||
#include "ActionManager.h"
|
#include "ActionManager.h"
|
||||||
#include "EventDispatcher.h"
|
#include "EventDispatcher.h"
|
||||||
#include "intrusive/List.hpp"
|
#include "IntrusiveList.hpp"
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
class Game;
|
class Application;
|
||||||
|
|
||||||
// 节点
|
// 节点
|
||||||
class Node
|
class Node
|
||||||
: public Object
|
: public virtual Object
|
||||||
, public TaskManager
|
, public TaskManager
|
||||||
, public ActionManager
|
, public ActionManager
|
||||||
, public EventDispatcher
|
, public EventDispatcher
|
||||||
, protected intrusive::ListItem<NodePtr>
|
, protected IntrusiveListItem<NodePtr>
|
||||||
{
|
{
|
||||||
friend class Game;
|
friend class Application;
|
||||||
friend class Scene;
|
friend class Scene;
|
||||||
friend class Transition;
|
friend class Transition;
|
||||||
friend class intrusive::List<NodePtr>;
|
friend class IntrusiveList<NodePtr>;
|
||||||
|
|
||||||
using Children = intrusive::List<NodePtr>;
|
using Children = IntrusiveList<NodePtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Node();
|
Node();
|
||||||
|
|
@ -55,6 +55,9 @@ namespace easy2d
|
||||||
// 渲染节点
|
// 渲染节点
|
||||||
virtual void OnRender() {}
|
virtual void OnRender() {}
|
||||||
|
|
||||||
|
// 事件分发
|
||||||
|
virtual void Dispatch(Event& evt) override;
|
||||||
|
|
||||||
// 获取显示状态
|
// 获取显示状态
|
||||||
bool IsVisible() const { return visible_; }
|
bool IsVisible() const { return visible_; }
|
||||||
|
|
||||||
|
|
@ -109,11 +112,11 @@ namespace easy2d
|
||||||
// 获取缩放后的大小
|
// 获取缩放后的大小
|
||||||
Size GetScaledSize() const { return Size{ GetScaledWidth(), GetScaledHeight() }; }
|
Size GetScaledSize() const { return Size{ GetScaledWidth(), GetScaledHeight() }; }
|
||||||
|
|
||||||
// 获取 x 方向支点
|
// 获取 x 方向锚点
|
||||||
float GetPivotX() const { return pivot_.x; }
|
float GetAnchorX() const { return anchor_.x; }
|
||||||
|
|
||||||
// 获取 y 方向支点
|
// 获取 y 方向锚点
|
||||||
float GetPivotY() const { return pivot_.y; }
|
float GetAnchorY() const { return anchor_.y; }
|
||||||
|
|
||||||
// 获取透明度
|
// 获取透明度
|
||||||
float GetOpacity() const { return opacity_; }
|
float GetOpacity() const { return opacity_; }
|
||||||
|
|
@ -228,23 +231,23 @@ namespace easy2d
|
||||||
float rotation
|
float rotation
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置支点的横向位置
|
// 设置锚点的横向位置
|
||||||
// 默认为 0, 范围 [0, 1]
|
// 默认为 0, 范围 [0, 1]
|
||||||
void SetPivotX(
|
void SetAnchorX(
|
||||||
float pivot_x
|
float anchor_x
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置支点的纵向位置
|
// 设置锚点的纵向位置
|
||||||
// 默认为 0, 范围 [0, 1]
|
// 默认为 0, 范围 [0, 1]
|
||||||
void SetPivotY(
|
void SetAnchorY(
|
||||||
float pivot_y
|
float anchor_y
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置支点位置
|
// 设置锚点位置
|
||||||
// 默认为 (0, 0), 范围 [0, 1]
|
// 默认为 (0, 0), 范围 [0, 1]
|
||||||
void SetPivot(
|
void SetAnchor(
|
||||||
float pivot_x,
|
float anchor_x,
|
||||||
float pivot_y
|
float anchor_y
|
||||||
);
|
);
|
||||||
|
|
||||||
// 修改宽度
|
// 修改宽度
|
||||||
|
|
@ -333,12 +336,16 @@ namespace easy2d
|
||||||
// 从父节点移除
|
// 从父节点移除
|
||||||
void RemoveFromParent();
|
void RemoveFromParent();
|
||||||
|
|
||||||
virtual void DispatchEvent(Event* e) override;
|
// 暂停节点更新
|
||||||
|
void PauseUpdating();
|
||||||
|
|
||||||
// 设置默认支点
|
// 继续节点更新
|
||||||
static void SetDefaultPivot(
|
void ResumeUpdating();
|
||||||
float pivot_x,
|
|
||||||
float pivot_y
|
// 设置默认锚点
|
||||||
|
static void SetDefaultAnchor(
|
||||||
|
float anchor_x,
|
||||||
|
float anchor_y
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -356,13 +363,14 @@ namespace easy2d
|
||||||
bool visible_;
|
bool visible_;
|
||||||
bool hover_;
|
bool hover_;
|
||||||
bool pressed_;
|
bool pressed_;
|
||||||
|
bool pause_;
|
||||||
int z_order_;
|
int z_order_;
|
||||||
float opacity_;
|
float opacity_;
|
||||||
float display_opacity_;
|
float display_opacity_;
|
||||||
String name_;
|
String name_;
|
||||||
size_t hash_name_;
|
size_t hash_name_;
|
||||||
Transform transform_;
|
Transform transform_;
|
||||||
Point pivot_;
|
Point anchor_;
|
||||||
Size size_;
|
Size size_;
|
||||||
Node* parent_;
|
Node* parent_;
|
||||||
Scene* scene_;
|
Scene* scene_;
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
Scene::Scene()
|
Scene::Scene()
|
||||||
{
|
{
|
||||||
AddListener(SysEvent::WindowActivate, std::bind(&Scene::OnActivate, this));
|
AddListener(WindowEvent::Activate, std::bind(&Scene::OnActivate, this));
|
||||||
AddListener(SysEvent::WindowDeavtivate, std::bind(&Scene::OnDeactivate, this));
|
AddListener(WindowEvent::Deavtivate, std::bind(&Scene::OnDeactivate, this));
|
||||||
|
|
||||||
scene_ = this;
|
scene_ = this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace easy2d
|
||||||
return instance_.get();
|
return instance_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
ISingleton() = default;
|
ISingleton() = default;
|
||||||
|
|
||||||
~ISingleton() {}
|
~ISingleton() {}
|
||||||
|
|
@ -53,8 +53,3 @@ namespace easy2d
|
||||||
friend struct ::std::default_delete< type >;\
|
friend struct ::std::default_delete< type >;\
|
||||||
friend class ::easy2d::ISingleton< type >
|
friend class ::easy2d::ISingleton< type >
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef E2D_DECLARE_SINGLETON_TYPE
|
|
||||||
#define E2D_DECLARE_SINGLETON_TYPE( type, singleton_type ) \
|
|
||||||
using singleton_type = ::easy2d::ISingleton< type >
|
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
if (image_)
|
if (image_)
|
||||||
{
|
{
|
||||||
Graphics::Instance()->DrawImage(image_);
|
RenderSystem::Instance()->DrawImage(image_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "include-forwards.h"
|
#include "include-forwards.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "intrusive/List.hpp"
|
#include "IntrusiveList.hpp"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
|
|
@ -30,11 +30,11 @@ namespace easy2d
|
||||||
|
|
||||||
// 定时任务
|
// 定时任务
|
||||||
class Task
|
class Task
|
||||||
: public Object
|
: public virtual Object
|
||||||
, protected intrusive::ListItem<TaskPtr>
|
, protected IntrusiveListItem<TaskPtr>
|
||||||
{
|
{
|
||||||
friend class TaskManager;
|
friend class TaskManager;
|
||||||
friend class intrusive::List<TaskPtr>;
|
friend class IntrusiveList<TaskPtr>;
|
||||||
|
|
||||||
using Callback = std::function<void()>;
|
using Callback = std::function<void()>;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
class TaskManager
|
class TaskManager
|
||||||
{
|
{
|
||||||
using Tasks = intrusive::List<TaskPtr>;
|
using Tasks = IntrusiveList<TaskPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Ìí¼ÓÈÎÎñ
|
// Ìí¼ÓÈÎÎñ
|
||||||
|
|
|
||||||
|
|
@ -295,15 +295,15 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
if (text_layout_)
|
if (text_layout_)
|
||||||
{
|
{
|
||||||
auto graphics = Graphics::Instance();
|
auto rt = RenderSystem::Instance();
|
||||||
graphics->SetTextStyle(
|
rt->SetTextStyle(
|
||||||
style_.color,
|
style_.color,
|
||||||
style_.outline,
|
style_.outline,
|
||||||
style_.outline_color,
|
style_.outline_color,
|
||||||
style_.outline_width,
|
style_.outline_width,
|
||||||
style_.outline_stroke
|
style_.outline_stroke
|
||||||
);
|
);
|
||||||
graphics->DrawTextLayout(text_layout_);
|
rt->DrawTextLayout(text_layout_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,14 +66,14 @@ namespace easy2d
|
||||||
if (in_scene_)
|
if (in_scene_)
|
||||||
{
|
{
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
Graphics::Instance()->CreateLayer(in_layer_)
|
RenderSystem::Instance()->CreateLayer(in_layer_)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (out_scene_)
|
if (out_scene_)
|
||||||
{
|
{
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
Graphics::Instance()->CreateLayer(out_layer_)
|
RenderSystem::Instance()->CreateLayer(out_layer_)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -101,34 +101,34 @@ namespace easy2d
|
||||||
|
|
||||||
void Transition::Render()
|
void Transition::Render()
|
||||||
{
|
{
|
||||||
auto graphics = Graphics::Instance();
|
auto rt = RenderSystem::Instance();
|
||||||
|
|
||||||
if (out_scene_)
|
if (out_scene_)
|
||||||
{
|
{
|
||||||
graphics->PushClip(
|
rt->PushClip(
|
||||||
out_scene_->GetTransformMatrix(),
|
out_scene_->GetTransformMatrix(),
|
||||||
window_size_
|
window_size_
|
||||||
);
|
);
|
||||||
graphics->PushLayer(out_layer_, out_layer_prop_);
|
rt->PushLayer(out_layer_, out_layer_prop_);
|
||||||
|
|
||||||
out_scene_->Render();
|
out_scene_->Render();
|
||||||
|
|
||||||
graphics->PopLayer();
|
rt->PopLayer();
|
||||||
graphics->PopClip();
|
rt->PopClip();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_scene_)
|
if (in_scene_)
|
||||||
{
|
{
|
||||||
graphics->PushClip(
|
rt->PushClip(
|
||||||
in_scene_->GetTransformMatrix(),
|
in_scene_->GetTransformMatrix(),
|
||||||
window_size_
|
window_size_
|
||||||
);
|
);
|
||||||
graphics->PushLayer(in_layer_, in_layer_prop_);
|
rt->PushLayer(in_layer_, in_layer_prop_);
|
||||||
|
|
||||||
in_scene_->Render();
|
in_scene_->Render();
|
||||||
|
|
||||||
graphics->PopLayer();
|
rt->PopLayer();
|
||||||
graphics->PopClip();
|
rt->PopClip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -337,13 +337,13 @@ namespace easy2d
|
||||||
if (out_scene_)
|
if (out_scene_)
|
||||||
{
|
{
|
||||||
out_scene_->SetTransform(transform);
|
out_scene_->SetTransform(transform);
|
||||||
out_scene_->SetPivot(0.5f, 0.5f);
|
out_scene_->SetAnchor(0.5f, 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_scene_)
|
if (in_scene_)
|
||||||
{
|
{
|
||||||
in_scene_->SetTransform(transform);
|
in_scene_->SetTransform(transform);
|
||||||
in_scene_->SetPivot(0.5f, 0.5f);
|
in_scene_->SetAnchor(0.5f, 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
in_layer_prop_.opacity = 0;
|
in_layer_prop_.opacity = 0;
|
||||||
|
|
@ -384,13 +384,13 @@ namespace easy2d
|
||||||
if (out_scene_)
|
if (out_scene_)
|
||||||
{
|
{
|
||||||
out_scene_->SetTransform(Transform{});
|
out_scene_->SetTransform(Transform{});
|
||||||
out_scene_->SetPivot(0.f, 0.f);
|
out_scene_->SetAnchor(0.f, 0.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_scene_)
|
if (in_scene_)
|
||||||
{
|
{
|
||||||
in_scene_->SetTransform(Transform{});
|
in_scene_->SetTransform(Transform{});
|
||||||
in_scene_->SetPivot(0.f, 0.f);
|
in_scene_->SetAnchor(0.f, 0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@ namespace easy2d
|
||||||
|
|
||||||
// 场景过渡
|
// 场景过渡
|
||||||
class Transition
|
class Transition
|
||||||
: public Object
|
: public virtual Object
|
||||||
{
|
{
|
||||||
friend class Game;
|
friend class Application;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Transition(
|
explicit Transition(
|
||||||
|
|
|
||||||
|
|
@ -156,16 +156,16 @@ namespace easy2d
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
// AudioDevice
|
// Audio
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
|
|
||||||
AudioDevice::AudioDevice()
|
Audio::Audio()
|
||||||
: x_audio2_(nullptr)
|
: x_audio2_(nullptr)
|
||||||
, mastering_voice_(nullptr)
|
, mastering_voice_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioDevice::~AudioDevice()
|
Audio::~Audio()
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Destroying audio device");
|
E2D_LOG(L"Destroying audio device");
|
||||||
|
|
||||||
|
|
@ -182,7 +182,7 @@ namespace easy2d
|
||||||
modules::MediaFoundation::Get().MFShutdown();
|
modules::MediaFoundation::Get().MFShutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT AudioDevice::Init(bool debug)
|
HRESULT Audio::Init(bool debug)
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Initing audio device");
|
E2D_LOG(L"Initing audio device");
|
||||||
|
|
||||||
|
|
@ -201,7 +201,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT AudioDevice::CreateVoice(Voice& voice, const WAVEFORMATEX* wfx)
|
HRESULT Audio::CreateVoice(Voice& voice, const WAVEFORMATEX* wfx)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
IXAudio2SourceVoice* source_voice;
|
IXAudio2SourceVoice* source_voice;
|
||||||
|
|
@ -215,12 +215,12 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDevice::DeleteVoice(Voice* voice)
|
void Audio::DeleteVoice(Voice* voice)
|
||||||
{
|
{
|
||||||
voice_cache_.erase(voice);
|
voice_cache_.erase(voice);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDevice::ClearVoiceCache()
|
void Audio::ClearVoiceCache()
|
||||||
{
|
{
|
||||||
for (auto voice : voice_cache_)
|
for (auto voice : voice_cache_)
|
||||||
{
|
{
|
||||||
|
|
@ -229,12 +229,12 @@ namespace easy2d
|
||||||
voice_cache_.clear();
|
voice_cache_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDevice::Open()
|
void Audio::Open()
|
||||||
{
|
{
|
||||||
x_audio2_->StartEngine();
|
x_audio2_->StartEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDevice::Close()
|
void Audio::Close()
|
||||||
{
|
{
|
||||||
x_audio2_->StopEngine();
|
x_audio2_->StopEngine();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,10 @@ namespace easy2d
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class AudioDevice
|
class Audio
|
||||||
: protected Noncopyable
|
: public ISingleton<Audio>
|
||||||
{
|
{
|
||||||
E2D_DECLARE_SINGLETON(AudioDevice);
|
E2D_DECLARE_SINGLETON(Audio);
|
||||||
|
|
||||||
using VoiceMap = UnorderedSet<Voice*>;
|
using VoiceMap = UnorderedSet<Voice*>;
|
||||||
|
|
||||||
|
|
@ -102,15 +102,13 @@ namespace easy2d
|
||||||
void ClearVoiceCache();
|
void ClearVoiceCache();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
AudioDevice();
|
Audio();
|
||||||
|
|
||||||
~AudioDevice();
|
~Audio();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
VoiceMap voice_cache_;
|
VoiceMap voice_cache_;
|
||||||
IXAudio2* x_audio2_;
|
IXAudio2* x_audio2_;
|
||||||
IXAudio2MasteringVoice* mastering_voice_;
|
IXAudio2MasteringVoice* mastering_voice_;
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(AudioDevice, Audio);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,13 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "intrusive/SmartPtr.hpp"
|
#include "IntrusivePtr.hpp"
|
||||||
#include <d2d1.h>
|
#include <d2d1.h>
|
||||||
#include <dwrite.h>
|
#include <dwrite.h>
|
||||||
|
|
||||||
#ifndef E2D_DECLARE_D2D_SMART_PTR
|
#ifndef E2D_DECLARE_D2D_SMART_PTR
|
||||||
#define E2D_DECLARE_D2D_SMART_PTR(class_name, sp_name)\
|
#define E2D_DECLARE_D2D_SMART_PTR(class_name, sp_name)\
|
||||||
using sp_name = ::easy2d::intrusive::SmartPtr< class_name >
|
using sp_name = ::easy2d::IntrusivePtr< class_name >
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "RefCounter.hpp"
|
#include "RefCounter.hpp"
|
||||||
#include "intrusive/SmartPtr.hpp"
|
#include "IntrusivePtr.hpp"
|
||||||
#include "../math/vector.hpp"
|
#include "../math/vector.hpp"
|
||||||
#include "../math/Rect.hpp"
|
#include "../math/Rect.hpp"
|
||||||
#include "../math/Matrix.hpp"
|
#include "../math/Matrix.hpp"
|
||||||
|
|
@ -34,13 +34,13 @@
|
||||||
#ifndef E2D_DECLARE_SMART_PTR
|
#ifndef E2D_DECLARE_SMART_PTR
|
||||||
#define E2D_DECLARE_SMART_PTR(class_name)\
|
#define E2D_DECLARE_SMART_PTR(class_name)\
|
||||||
class class_name;\
|
class class_name;\
|
||||||
using class_name##Ptr = ::easy2d::intrusive::SmartPtr< class_name >
|
using class_name##Ptr = ::easy2d::IntrusivePtr< class_name >
|
||||||
|
|
||||||
#define E2D_DECLARE_NS_SMART_PTR(ns_name, class_name)\
|
#define E2D_DECLARE_NS_SMART_PTR(ns_name, class_name)\
|
||||||
namespace ns_name\
|
namespace ns_name\
|
||||||
{\
|
{\
|
||||||
class class_name; \
|
class class_name; \
|
||||||
using class_name##Ptr = ::easy2d::intrusive::SmartPtr< class_name >;\
|
using class_name##Ptr = ::easy2d::IntrusivePtr< class_name >;\
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -76,9 +76,10 @@ namespace easy2d
|
||||||
E2D_DECLARE_SMART_PTR(Image);
|
E2D_DECLARE_SMART_PTR(Image);
|
||||||
E2D_DECLARE_SMART_PTR(Music);
|
E2D_DECLARE_SMART_PTR(Music);
|
||||||
E2D_DECLARE_SMART_PTR(Task);
|
E2D_DECLARE_SMART_PTR(Task);
|
||||||
E2D_DECLARE_SMART_PTR(EventListener);
|
|
||||||
E2D_DECLARE_SMART_PTR(Frames);
|
E2D_DECLARE_SMART_PTR(Frames);
|
||||||
|
|
||||||
|
E2D_DECLARE_SMART_PTR(EventListener);
|
||||||
|
|
||||||
E2D_DECLARE_SMART_PTR(Geometry);
|
E2D_DECLARE_SMART_PTR(Geometry);
|
||||||
E2D_DECLARE_SMART_PTR(LineGeometry);
|
E2D_DECLARE_SMART_PTR(LineGeometry);
|
||||||
E2D_DECLARE_SMART_PTR(RectangleGeometry);
|
E2D_DECLARE_SMART_PTR(RectangleGeometry);
|
||||||
|
|
@ -141,9 +142,9 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline intrusive::SmartPtr<T> operator- (T* ptr) const
|
inline IntrusivePtr<T> operator- (T* ptr) const
|
||||||
{
|
{
|
||||||
return intrusive::SmartPtr<T>(ptr);
|
return IntrusivePtr<T>(ptr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,257 +0,0 @@
|
||||||
// Copyright (c) 2016-2018 Easy2D - Nomango
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "../macros.h"
|
|
||||||
#include <functional>
|
|
||||||
|
|
||||||
#undef DEBUG_CHECK_LIST
|
|
||||||
#ifdef E2D_DEBUG
|
|
||||||
# define DEBUG_CHECK_LIST(list_ptr) list_ptr->Check()
|
|
||||||
#else
|
|
||||||
# define DEBUG_CHECK_LIST __noop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace easy2d
|
|
||||||
{
|
|
||||||
namespace intrusive
|
|
||||||
{
|
|
||||||
template <typename T> class List;
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
class ListItem
|
|
||||||
{
|
|
||||||
T prev_;
|
|
||||||
T next_;
|
|
||||||
|
|
||||||
template <typename U>
|
|
||||||
friend class List;
|
|
||||||
|
|
||||||
public:
|
|
||||||
using ItemType = T;
|
|
||||||
|
|
||||||
ListItem() : prev_(), next_() {}
|
|
||||||
|
|
||||||
T const& PrevItem() const { return prev_; }
|
|
||||||
|
|
||||||
T& PrevItem() { return prev_; }
|
|
||||||
|
|
||||||
T const& NextItem() const { return next_; }
|
|
||||||
|
|
||||||
T& NextItem() { return next_; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
class List
|
|
||||||
{
|
|
||||||
T first_;
|
|
||||||
T last_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
using ItemType = T;
|
|
||||||
|
|
||||||
List() : first_(), last_() {}
|
|
||||||
|
|
||||||
~List() { Clear(); }
|
|
||||||
|
|
||||||
T const& First() const { return first_; }
|
|
||||||
|
|
||||||
T& First() { return first_; }
|
|
||||||
|
|
||||||
T const& Last() const { return last_; }
|
|
||||||
|
|
||||||
T& Last() { return last_; }
|
|
||||||
|
|
||||||
bool IsEmpty() const { return !first_; }
|
|
||||||
|
|
||||||
void PushBack(T const& child)
|
|
||||||
{
|
|
||||||
if (child->prev_)
|
|
||||||
child->prev_->next_ = child->next_;
|
|
||||||
if (child->next_)
|
|
||||||
child->next_->prev_ = child->prev_;
|
|
||||||
|
|
||||||
child->prev_ = last_;
|
|
||||||
child->next_ = nullptr;
|
|
||||||
|
|
||||||
if (first_)
|
|
||||||
{
|
|
||||||
last_->next_ = child;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
first_ = child;
|
|
||||||
}
|
|
||||||
|
|
||||||
last_ = child;
|
|
||||||
|
|
||||||
DEBUG_CHECK_LIST(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PushFront(T const& child)
|
|
||||||
{
|
|
||||||
if (child->prev_)
|
|
||||||
child->prev_->next_ = child->next_;
|
|
||||||
if (child->next_)
|
|
||||||
child->next_->prev_ = child->prev_;
|
|
||||||
|
|
||||||
child->prev_ = nullptr;
|
|
||||||
child->next_ = first_;
|
|
||||||
|
|
||||||
if (first_)
|
|
||||||
{
|
|
||||||
first_->prev_ = child;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last_ = child;
|
|
||||||
}
|
|
||||||
|
|
||||||
first_ = child;
|
|
||||||
|
|
||||||
DEBUG_CHECK_LIST(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InsertBefore(T const& child, T const& before)
|
|
||||||
{
|
|
||||||
if (child->prev_)
|
|
||||||
child->prev_->next_ = child->next_;
|
|
||||||
if (child->next_)
|
|
||||||
child->next_->prev_ = child->prev_;
|
|
||||||
|
|
||||||
if (before->prev_)
|
|
||||||
before->prev_->next_ = child;
|
|
||||||
else
|
|
||||||
first_ = child;
|
|
||||||
|
|
||||||
child->prev_ = before->prev_;
|
|
||||||
child->next_ = before;
|
|
||||||
before->prev_ = child;
|
|
||||||
|
|
||||||
DEBUG_CHECK_LIST(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InsertAfter(T const& child, T const& after)
|
|
||||||
{
|
|
||||||
if (child->prev_)
|
|
||||||
child->prev_->next_ = child->next_;
|
|
||||||
if (child->next_)
|
|
||||||
child->next_->prev_ = child->prev_;
|
|
||||||
|
|
||||||
if (after->next_)
|
|
||||||
after->next_->prev_ = child;
|
|
||||||
else
|
|
||||||
last_ = child;
|
|
||||||
|
|
||||||
child->next_ = after->next_;
|
|
||||||
child->prev_ = after;
|
|
||||||
after->next_ = child;
|
|
||||||
|
|
||||||
DEBUG_CHECK_LIST(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Remove(T const& child)
|
|
||||||
{
|
|
||||||
#ifdef E2D_DEBUG
|
|
||||||
T tmp = first_;
|
|
||||||
while (tmp != child)
|
|
||||||
{
|
|
||||||
if (tmp == last_)
|
|
||||||
E2D_ASSERT(false && "The node to be removed is not in this list");
|
|
||||||
tmp = tmp->next_;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (child->next_)
|
|
||||||
{
|
|
||||||
child->next_->prev_ = child->prev_;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last_ = child->prev_;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (child->prev_)
|
|
||||||
{
|
|
||||||
child->prev_->next_ = child->next_;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
first_ = child->next_;
|
|
||||||
}
|
|
||||||
|
|
||||||
child->prev_ = nullptr;
|
|
||||||
child->next_ = nullptr;
|
|
||||||
|
|
||||||
DEBUG_CHECK_LIST(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Clear()
|
|
||||||
{
|
|
||||||
T p = first_;
|
|
||||||
while (p)
|
|
||||||
{
|
|
||||||
T tmp = p;
|
|
||||||
p = p->next_;
|
|
||||||
if (tmp)
|
|
||||||
{
|
|
||||||
tmp->next_ = nullptr;
|
|
||||||
tmp->prev_ = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
first_ = nullptr;
|
|
||||||
last_ = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef E2D_DEBUG
|
|
||||||
|
|
||||||
private:
|
|
||||||
void Check()
|
|
||||||
{
|
|
||||||
if (!first_)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int pos = 0;
|
|
||||||
T p = first_;
|
|
||||||
T tmp = p;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
tmp = p;
|
|
||||||
p = p->next_;
|
|
||||||
++pos;
|
|
||||||
|
|
||||||
if (p)
|
|
||||||
{
|
|
||||||
E2D_ASSERT(p->prev_ == tmp && "Check list failed");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
E2D_ASSERT(tmp == last_ && "Check list failed");
|
|
||||||
}
|
|
||||||
} while (p);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef DEBUG_CHECK_LIST
|
|
||||||
|
|
@ -1,204 +0,0 @@
|
||||||
// Copyright (c) 2016-2018 Easy2D - Nomango
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining lhs copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "../macros.h"
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
namespace easy2d
|
|
||||||
{
|
|
||||||
namespace intrusive
|
|
||||||
{
|
|
||||||
template <typename T>
|
|
||||||
class SmartPtr
|
|
||||||
{
|
|
||||||
T* ptr_{ nullptr };
|
|
||||||
|
|
||||||
public:
|
|
||||||
using Type = T;
|
|
||||||
|
|
||||||
SmartPtr() E2D_NOEXCEPT {}
|
|
||||||
|
|
||||||
SmartPtr(nullptr_t) E2D_NOEXCEPT {}
|
|
||||||
|
|
||||||
SmartPtr(Type* p) E2D_NOEXCEPT : ptr_(p)
|
|
||||||
{
|
|
||||||
IntrusivePtrAddRef(ptr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
SmartPtr(const SmartPtr& other) E2D_NOEXCEPT
|
|
||||||
: ptr_(other.ptr_)
|
|
||||||
{
|
|
||||||
IntrusivePtrAddRef(ptr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename U>
|
|
||||||
SmartPtr(const SmartPtr<U>& other) E2D_NOEXCEPT
|
|
||||||
: ptr_(other.Get())
|
|
||||||
{
|
|
||||||
IntrusivePtrAddRef(ptr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
SmartPtr(SmartPtr&& other) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
ptr_ = other.ptr_;
|
|
||||||
other.ptr_ = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
~SmartPtr() E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
IntrusivePtrRelease(ptr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Type* Get() const E2D_NOEXCEPT { return ptr_; }
|
|
||||||
|
|
||||||
inline void Swap(SmartPtr& other) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
std::swap(ptr_, other.ptr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Type* operator ->() const
|
|
||||||
{
|
|
||||||
E2D_ASSERT(ptr_ != nullptr && "Invalid pointer");
|
|
||||||
return ptr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Type& operator *() const
|
|
||||||
{
|
|
||||||
E2D_ASSERT(ptr_ != nullptr && "Invalid pointer");
|
|
||||||
return *ptr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Type** operator &()
|
|
||||||
{
|
|
||||||
E2D_ASSERT(ptr_ == nullptr && "Memory leak");
|
|
||||||
return &ptr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline operator bool() const E2D_NOEXCEPT { return ptr_ != nullptr; }
|
|
||||||
|
|
||||||
inline bool operator !() const E2D_NOEXCEPT { return ptr_ == 0; }
|
|
||||||
|
|
||||||
inline SmartPtr& operator =(const SmartPtr& other) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
if (other.ptr_ != ptr_)
|
|
||||||
SmartPtr(other).Swap(*this);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline SmartPtr& operator =(SmartPtr&& other) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
IntrusivePtrRelease(ptr_);
|
|
||||||
ptr_ = other.ptr_;
|
|
||||||
other.ptr_ = nullptr;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline SmartPtr& operator =(Type* p) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
if (p != ptr_)
|
|
||||||
SmartPtr(p).Swap(*this);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline SmartPtr& operator =(nullptr_t) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
if (nullptr != ptr_)
|
|
||||||
SmartPtr{}.Swap(*this);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T, class U>
|
|
||||||
inline bool operator==(SmartPtr<T> const& lhs, SmartPtr<U> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs.Get() == rhs.Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T, class U>
|
|
||||||
inline bool operator!=(SmartPtr<T> const& lhs, SmartPtr<U> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs.Get() != rhs.Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T, class U>
|
|
||||||
inline bool operator<(SmartPtr<T> const& lhs, SmartPtr<U> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs.Get() < rhs.Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator==(SmartPtr<T> const& lhs, T* rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs.Get() == rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator!=(SmartPtr<T> const& lhs, T* rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs.Get() != rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator==(T* lhs, SmartPtr<T> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs == rhs.Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator!=(T* lhs, SmartPtr<T> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return lhs != rhs.Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator==(SmartPtr<T> const& lhs, nullptr_t) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return !static_cast<bool>(lhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator!=(SmartPtr<T> const& lhs, nullptr_t) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return static_cast<bool>(lhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator==(nullptr_t, SmartPtr<T> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return !static_cast<bool>(rhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline bool operator!=(nullptr_t, SmartPtr<T> const& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
return static_cast<bool>(rhs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// template class cannot specialize std::swap,
|
|
||||||
// so implement a swap function in easy2d namespace
|
|
||||||
template<class T>
|
|
||||||
inline void swap(intrusive::SmartPtr<T>& lhs, intrusive::SmartPtr<T>& rhs) E2D_NOEXCEPT
|
|
||||||
{
|
|
||||||
lhs.Swap(rhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -23,6 +23,15 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
// 報炎梓囚
|
||||||
|
enum class MouseButton : int
|
||||||
|
{
|
||||||
|
Left = VK_LBUTTON, // 報炎恣囚
|
||||||
|
Right = VK_RBUTTON, // 報炎嘔囚
|
||||||
|
Middle = VK_MBUTTON // 報炎嶄囚
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// °´¼ü¼üÖµ
|
// °´¼ü¼üÖµ
|
||||||
enum class KeyCode : int
|
enum class KeyCode : int
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +41,7 @@ namespace easy2d
|
||||||
Right = VK_RIGHT,
|
Right = VK_RIGHT,
|
||||||
Down = VK_DOWN,
|
Down = VK_DOWN,
|
||||||
Enter = VK_RETURN,
|
Enter = VK_RETURN,
|
||||||
acePtr = VK_SPACE,
|
Space = VK_SPACE,
|
||||||
Esc = VK_ESCAPE,
|
Esc = VK_ESCAPE,
|
||||||
Ctrl = VK_CONTROL,
|
Ctrl = VK_CONTROL,
|
||||||
Shift = VK_SHIFT,
|
Shift = VK_SHIFT,
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
|
|
||||||
void Out(std::ostream& stream, const wchar_t* output)
|
void Out(std::wostream& stream, const wchar_t* output)
|
||||||
{
|
{
|
||||||
stream << output;
|
stream << output;
|
||||||
::OutputDebugStringW(output);
|
::OutputDebugStringW(output);
|
||||||
|
|
@ -47,7 +47,7 @@ namespace easy2d
|
||||||
ss << std::put_time(&tmbuf, L"[easy2d] %H:%M:%S ");
|
ss << std::put_time(&tmbuf, L"[easy2d] %H:%M:%S ");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Output(std::ostream& stream, const wchar_t* prompt, const wchar_t* format, va_list args)
|
void Output(std::wostream& stream, const wchar_t* prompt, const wchar_t* format, va_list args)
|
||||||
{
|
{
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
return;
|
return;
|
||||||
|
|
@ -64,7 +64,7 @@ namespace easy2d
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutputLine(std::ostream& stream, const wchar_t* prompt, const wchar_t* format, va_list args)
|
void OutputLine(std::wostream& stream, const wchar_t* prompt, const wchar_t* format, va_list args)
|
||||||
{
|
{
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
return;
|
return;
|
||||||
|
|
@ -89,7 +89,7 @@ namespace easy2d
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
Output(std::cout, L"", format, args);
|
Output(std::wcout, L"", format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +99,7 @@ namespace easy2d
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
OutputLine(std::cout, L"", format, args);
|
OutputLine(std::wcout, L"", format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
@ -109,7 +109,7 @@ namespace easy2d
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
Output(std::cerr, L"Warning: ", format, args);
|
Output(std::wcerr, L"Warning: ", format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +119,7 @@ namespace easy2d
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
OutputLine(std::cerr, L"Warning: ", format, args);
|
OutputLine(std::wcerr, L"Warning: ", format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
@ -129,7 +129,7 @@ namespace easy2d
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
Output(std::cerr, L"Error: ", format, args);
|
Output(std::wcerr, L"Error: ", format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
@ -139,7 +139,7 @@ namespace easy2d
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
OutputLine(std::cerr, L"Error: ", format, args);
|
OutputLine(std::wcerr, L"Error: ", format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
GraphicsDevice::GraphicsDevice()
|
RenderSystem::RenderSystem()
|
||||||
: fps_text_format_(nullptr)
|
: fps_text_format_(nullptr)
|
||||||
, fps_text_layout_(nullptr)
|
, fps_text_layout_(nullptr)
|
||||||
, clear_color_(D2D1::ColorF(D2D1::ColorF::Black))
|
, clear_color_(D2D1::ColorF(D2D1::ColorF::Black))
|
||||||
|
|
@ -39,14 +39,14 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsDevice::~GraphicsDevice()
|
RenderSystem::~RenderSystem()
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Destroying graphics device");
|
E2D_LOG(L"Destroying graphics device");
|
||||||
|
|
||||||
ClearImageCache();
|
ClearImageCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::Init(HWND hwnd, bool vsync, bool debug)
|
HRESULT RenderSystem::Init(HWND hwnd, bool vsync, bool debug)
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Initing graphics device");
|
E2D_LOG(L"Initing graphics device");
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ namespace easy2d
|
||||||
return CreateResources(hwnd);
|
return CreateResources(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::BeginDraw(HWND hwnd)
|
HRESULT RenderSystem::BeginDraw(HWND hwnd)
|
||||||
{
|
{
|
||||||
HRESULT hr = CreateResources(hwnd);
|
HRESULT hr = CreateResources(hwnd);
|
||||||
|
|
||||||
|
|
@ -79,7 +79,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::EndDraw()
|
HRESULT RenderSystem::EndDraw()
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
|
@ -103,22 +103,22 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDevice::ClearImageCache()
|
void RenderSystem::ClearImageCache()
|
||||||
{
|
{
|
||||||
bitmap_cache_.clear();
|
bitmap_cache_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
D2DHwndRenderTargetPtr const & GraphicsDevice::GetRenderTarget() const
|
D2DHwndRenderTargetPtr const & RenderSystem::GetRenderTarget() const
|
||||||
{
|
{
|
||||||
return render_target_;
|
return render_target_;
|
||||||
}
|
}
|
||||||
|
|
||||||
D2DSolidColorBrushPtr const & GraphicsDevice::GetSolidBrush() const
|
D2DSolidColorBrushPtr const & RenderSystem::GetSolidBrush() const
|
||||||
{
|
{
|
||||||
return solid_brush_;
|
return solid_brush_;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::CreateLayer(D2DLayerPtr& layer)
|
HRESULT RenderSystem::CreateLayer(D2DLayerPtr& layer)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -127,7 +127,7 @@ namespace easy2d
|
||||||
return render_target_->CreateLayer(&layer);
|
return render_target_->CreateLayer(&layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::CreateSolidColorBrush(D2DSolidColorBrushPtr & brush) const
|
HRESULT RenderSystem::CreateSolidColorBrush(D2DSolidColorBrushPtr & brush) const
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -139,7 +139,7 @@ namespace easy2d
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::DrawGeometry(
|
HRESULT RenderSystem::DrawGeometry(
|
||||||
D2DGeometryPtr const& geometry,
|
D2DGeometryPtr const& geometry,
|
||||||
Color const& stroke_color,
|
Color const& stroke_color,
|
||||||
float stroke_width,
|
float stroke_width,
|
||||||
|
|
@ -167,7 +167,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::FillGeometry(D2DGeometryPtr const & geometry, const Color & fill_color)
|
HRESULT RenderSystem::FillGeometry(D2DGeometryPtr const & geometry, const Color & fill_color)
|
||||||
{
|
{
|
||||||
if (!solid_brush_ ||
|
if (!solid_brush_ ||
|
||||||
!render_target_)
|
!render_target_)
|
||||||
|
|
@ -187,7 +187,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::DrawImage(ImagePtr const & image)
|
HRESULT RenderSystem::DrawImage(ImagePtr const & image)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -211,7 +211,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::DrawBitmap(
|
HRESULT RenderSystem::DrawBitmap(
|
||||||
D2DBitmapPtr const& bitmap
|
D2DBitmapPtr const& bitmap
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
@ -236,7 +236,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::DrawTextLayout(D2DTextLayoutPtr const& text_layout)
|
HRESULT RenderSystem::DrawTextLayout(D2DTextLayoutPtr const& text_layout)
|
||||||
{
|
{
|
||||||
if (!text_renderer_)
|
if (!text_renderer_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -249,7 +249,7 @@ namespace easy2d
|
||||||
return text_layout->Draw(nullptr, text_renderer_.Get(), 0, 0);
|
return text_layout->Draw(nullptr, text_renderer_.Get(), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::PushClip(const Matrix & clip_matrix, const Size & clip_size)
|
HRESULT RenderSystem::PushClip(const Matrix & clip_matrix, const Size & clip_size)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -265,7 +265,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::PopClip()
|
HRESULT RenderSystem::PopClip()
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -277,7 +277,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::PushLayer(D2DLayerPtr const& layer, LayerProperties const& properties)
|
HRESULT RenderSystem::PushLayer(D2DLayerPtr const& layer, LayerProperties const& properties)
|
||||||
{
|
{
|
||||||
if (!render_target_ ||
|
if (!render_target_ ||
|
||||||
!solid_brush_)
|
!solid_brush_)
|
||||||
|
|
@ -301,7 +301,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::PopLayer()
|
HRESULT RenderSystem::PopLayer()
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -313,7 +313,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::GetSize(Size & size)
|
HRESULT RenderSystem::GetSize(Size & size)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -324,7 +324,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::CreateBitmapFromFile(D2DBitmapPtr& bitmap, String const& file_path)
|
HRESULT RenderSystem::CreateBitmapFromFile(D2DBitmapPtr& bitmap, String const& file_path)
|
||||||
{
|
{
|
||||||
if (render_target_ == nullptr)
|
if (render_target_ == nullptr)
|
||||||
{
|
{
|
||||||
|
|
@ -353,7 +353,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::CreateBitmapFromResource(D2DBitmapPtr& bitmap, Resource const& res)
|
HRESULT RenderSystem::CreateBitmapFromResource(D2DBitmapPtr& bitmap, Resource const& res)
|
||||||
{
|
{
|
||||||
if (render_target_ == nullptr)
|
if (render_target_ == nullptr)
|
||||||
{
|
{
|
||||||
|
|
@ -381,7 +381,7 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::CreateBitmapRenderTarget(D2DBitmapRenderTargetPtr & brt)
|
HRESULT RenderSystem::CreateBitmapRenderTarget(D2DBitmapRenderTargetPtr & brt)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -390,7 +390,7 @@ namespace easy2d
|
||||||
return render_target_->CreateCompatibleRenderTarget(&brt);
|
return render_target_->CreateCompatibleRenderTarget(&brt);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::Resize(UINT32 width, UINT32 height)
|
HRESULT RenderSystem::Resize(UINT32 width, UINT32 height)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -399,7 +399,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::SetTransform(const Matrix & matrix)
|
HRESULT RenderSystem::SetTransform(const Matrix & matrix)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -408,7 +408,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::SetOpacity(float opacity)
|
HRESULT RenderSystem::SetOpacity(float opacity)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -418,7 +418,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::SetTextStyle(
|
HRESULT RenderSystem::SetTextStyle(
|
||||||
Color const& color,
|
Color const& color,
|
||||||
bool has_outline,
|
bool has_outline,
|
||||||
Color const& outline_color,
|
Color const& outline_color,
|
||||||
|
|
@ -440,12 +440,12 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDevice::SetClearColor(const Color& color)
|
void RenderSystem::SetClearColor(const Color& color)
|
||||||
{
|
{
|
||||||
clear_color_ = color;
|
clear_color_ = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::SetAntialiasMode(bool enabled)
|
HRESULT RenderSystem::SetAntialiasMode(bool enabled)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -457,7 +457,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::SetTextAntialiasMode(TextAntialias mode)
|
HRESULT RenderSystem::SetTextAntialiasMode(TextAntialias mode)
|
||||||
{
|
{
|
||||||
if (!render_target_)
|
if (!render_target_)
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
|
@ -485,12 +485,12 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsDevice::Status const & GraphicsDevice::GetStatus() const
|
RenderSystem::Status const & RenderSystem::GetStatus() const
|
||||||
{
|
{
|
||||||
return status_;
|
return status_;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GraphicsDevice::CreateResources(HWND hwnd)
|
HRESULT RenderSystem::CreateResources(HWND hwnd)
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
|
@ -540,9 +540,9 @@ namespace easy2d
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDevice::DiscardResources()
|
void RenderSystem::DiscardResources()
|
||||||
{
|
{
|
||||||
// FIXME! 应通知 Game 类销毁所有节点的 device resources
|
// FIXME! 应通知 Application 类销毁所有节点的 device resources
|
||||||
fps_text_format_ = nullptr;
|
fps_text_format_ = nullptr;
|
||||||
fps_text_layout_ = nullptr;
|
fps_text_layout_ = nullptr;
|
||||||
text_renderer_ = nullptr;
|
text_renderer_ = nullptr;
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,10 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
class GraphicsDevice
|
class RenderSystem
|
||||||
: protected Noncopyable
|
: public ISingleton<RenderSystem>
|
||||||
{
|
{
|
||||||
E2D_DECLARE_SINGLETON(GraphicsDevice);
|
E2D_DECLARE_SINGLETON(RenderSystem);
|
||||||
|
|
||||||
struct Status
|
struct Status
|
||||||
{
|
{
|
||||||
|
|
@ -169,9 +169,9 @@ namespace easy2d
|
||||||
D2DSolidColorBrushPtr const& GetSolidBrush() const;
|
D2DSolidColorBrushPtr const& GetSolidBrush() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
GraphicsDevice();
|
RenderSystem();
|
||||||
|
|
||||||
~GraphicsDevice();
|
~RenderSystem();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool debug_;
|
bool debug_;
|
||||||
|
|
@ -189,6 +189,4 @@ namespace easy2d
|
||||||
D2DTextLayoutPtr fps_text_layout_;
|
D2DTextLayoutPtr fps_text_layout_;
|
||||||
BitmapMap bitmap_cache_;
|
BitmapMap bitmap_cache_;
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(GraphicsDevice, Graphics);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,19 +35,19 @@ namespace easy2d
|
||||||
Rect LocateWindow(int width, int height, float scale_x, float scale_y);
|
Rect LocateWindow(int width, int height, float scale_x, float scale_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowImpl::WindowImpl()
|
Window::Window()
|
||||||
: handle(nullptr)
|
: handle(nullptr)
|
||||||
, scale_x(1.f)
|
, scale_x(1.f)
|
||||||
, scale_y(1.f)
|
, scale_y(1.f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowImpl::~WindowImpl()
|
Window::~Window()
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Destroying window");
|
E2D_LOG(L"Destroying window");
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WindowImpl::Init(String title, int width, int height, LPCWSTR icon, WNDPROC proc, bool debug)
|
HRESULT Window::Init(String title, int width, int height, LPCWSTR icon, WNDPROC proc, bool debug)
|
||||||
{
|
{
|
||||||
E2D_LOG(L"Creating window");
|
E2D_LOG(L"Creating window");
|
||||||
|
|
||||||
|
|
@ -76,6 +76,10 @@ namespace easy2d
|
||||||
LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE
|
LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wcex.hIcon = ::LoadIcon(nullptr, IDI_APPLICATION);
|
||||||
|
}
|
||||||
|
|
||||||
::RegisterClassEx(&wcex);
|
::RegisterClassEx(&wcex);
|
||||||
|
|
||||||
|
|
@ -105,7 +109,7 @@ namespace easy2d
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
String WindowImpl::GetTitle() const
|
String Window::GetTitle() const
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -116,13 +120,13 @@ namespace easy2d
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowImpl::SetTitle(String const& title)
|
void Window::SetTitle(String const& title)
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
::SetWindowText(handle, title.c_str());
|
::SetWindowText(handle, title.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
Size WindowImpl::GetSize() const
|
Size Window::GetSize() const
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -136,17 +140,17 @@ namespace easy2d
|
||||||
return Size{};
|
return Size{};
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowImpl::GetWidth() const
|
float Window::GetWidth() const
|
||||||
{
|
{
|
||||||
return GetSize().x;
|
return GetSize().x;
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowImpl::GetHeight() const
|
float Window::GetHeight() const
|
||||||
{
|
{
|
||||||
return GetSize().y;
|
return GetSize().y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowImpl::SetSize(int width, int height)
|
void Window::SetSize(int width, int height)
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -162,7 +166,7 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowImpl::SetIcon(LPCWSTR icon_resource)
|
void Window::SetIcon(LPCWSTR icon_resource)
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -181,22 +185,22 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND WindowImpl::GetHandle() const
|
HWND Window::GetHandle() const
|
||||||
{
|
{
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowImpl::GetContentScaleX() const
|
float Window::GetContentScaleX() const
|
||||||
{
|
{
|
||||||
return scale_x;
|
return scale_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowImpl::GetContentScaleY() const
|
float Window::GetContentScaleY() const
|
||||||
{
|
{
|
||||||
return scale_y;
|
return scale_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowImpl::Destroy()
|
void Window::Destroy()
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
::DestroyWindow(handle);
|
::DestroyWindow(handle);
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,10 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
class WindowImpl
|
class Window
|
||||||
: protected Noncopyable
|
: public ISingleton<Window>
|
||||||
{
|
{
|
||||||
E2D_DECLARE_SINGLETON(WindowImpl);
|
E2D_DECLARE_SINGLETON(Window);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HRESULT Init(
|
HRESULT Init(
|
||||||
|
|
@ -69,15 +69,13 @@ namespace easy2d
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
WindowImpl();
|
Window();
|
||||||
|
|
||||||
~WindowImpl();
|
~Window();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HWND handle;
|
HWND handle;
|
||||||
float scale_x;
|
float scale_x;
|
||||||
float scale_y;
|
float scale_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(WindowImpl, Window);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,8 @@
|
||||||
|
|
||||||
#include "core/noncopyable.hpp"
|
#include "core/noncopyable.hpp"
|
||||||
#include "core/RefCounter.hpp"
|
#include "core/RefCounter.hpp"
|
||||||
#include "core/intrusive/SmartPtr.hpp"
|
#include "core/IntrusivePtr.hpp"
|
||||||
#include "core/intrusive/List.hpp"
|
#include "core/IntrusiveList.hpp"
|
||||||
|
|
||||||
#include "core/Object.h"
|
#include "core/Object.h"
|
||||||
#include "core/Image.h"
|
#include "core/Image.h"
|
||||||
|
|
@ -66,8 +66,6 @@
|
||||||
#include "core/Transition.h"
|
#include "core/Transition.h"
|
||||||
|
|
||||||
#include "core/Event.hpp"
|
#include "core/Event.hpp"
|
||||||
#include "core/MouseEvent.hpp"
|
|
||||||
#include "core/KeyEvent.hpp"
|
|
||||||
#include "core/EventListener.h"
|
#include "core/EventListener.h"
|
||||||
#include "core/EventDispatcher.h"
|
#include "core/EventDispatcher.h"
|
||||||
|
|
||||||
|
|
@ -80,7 +78,7 @@
|
||||||
#include "core/DebugNode.h"
|
#include "core/DebugNode.h"
|
||||||
|
|
||||||
#include "core/Factory.h"
|
#include "core/Factory.h"
|
||||||
#include "core/Game.h"
|
#include "core/Application.h"
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
namespace math
|
namespace math
|
||||||
{
|
{
|
||||||
class Matrix;
|
struct Matrix;
|
||||||
|
|
||||||
template <typename L, typename R>
|
template <typename L, typename R>
|
||||||
struct MatrixMultiply;
|
struct MatrixMultiply;
|
||||||
|
|
@ -39,7 +39,7 @@ namespace easy2d
|
||||||
operator *(MatrixMultiply<L, R> const& lhs, Matrix const& rhs);
|
operator *(MatrixMultiply<L, R> const& lhs, Matrix const& rhs);
|
||||||
|
|
||||||
|
|
||||||
class Matrix
|
struct Matrix
|
||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -26,16 +26,12 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
namespace math
|
namespace math
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// 矩形
|
// 矩形
|
||||||
//
|
struct Rect
|
||||||
class Rect
|
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
Vector2 origin; // 左上角坐标
|
Vector2 origin; // 左上角坐标
|
||||||
Vector2 size; // 宽度和高度
|
Vector2 size; // 宽度和高度
|
||||||
|
|
||||||
public:
|
|
||||||
Rect() {}
|
Rect() {}
|
||||||
|
|
||||||
Rect(
|
Rect(
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,11 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
namespace math
|
namespace math
|
||||||
{
|
{
|
||||||
class Vector2
|
struct Vector2
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
|
|
||||||
public:
|
|
||||||
Vector2() : x(0.f), y(0.f) {}
|
Vector2() : x(0.f), y(0.f) {}
|
||||||
|
|
||||||
Vector2(float x, float y) : x(x), y(y) {}
|
Vector2(float x, float y) : x(x), y(y) {}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include "Button.h"
|
#include "Button.h"
|
||||||
#include "../core/MouseEvent.hpp"
|
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
@ -97,35 +96,34 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::UpdateStatus(Event * e)
|
void Button::UpdateStatus(Event const& evt)
|
||||||
{
|
{
|
||||||
E2D_ASSERT(MouseEvent::Check(e));
|
E2D_ASSERT(MouseEvent::Check(evt.type));
|
||||||
|
|
||||||
MouseEvent* me = static_cast<MouseEvent*>(e);
|
|
||||||
if (enabled_)
|
if (enabled_)
|
||||||
{
|
{
|
||||||
if (me->type == MouseEvent::Hover)
|
if (evt.type == MouseEvent::Hover)
|
||||||
{
|
{
|
||||||
SetStatus(Status::Hover);
|
SetStatus(Status::Hover);
|
||||||
|
|
||||||
if (mouse_over_callback_)
|
if (mouse_over_callback_)
|
||||||
mouse_over_callback_();
|
mouse_over_callback_();
|
||||||
}
|
}
|
||||||
else if (me->type == MouseEvent::Out)
|
else if (evt.type == MouseEvent::Out)
|
||||||
{
|
{
|
||||||
SetStatus(Status::Normal);
|
SetStatus(Status::Normal);
|
||||||
|
|
||||||
if (mouse_out_callback_)
|
if (mouse_out_callback_)
|
||||||
mouse_out_callback_();
|
mouse_out_callback_();
|
||||||
}
|
}
|
||||||
else if (me->type == MouseEvent::Down && status_ == Status::Hover)
|
else if (evt.type == MouseEvent::Down && status_ == Status::Hover)
|
||||||
{
|
{
|
||||||
SetStatus(Status::Pressed);
|
SetStatus(Status::Pressed);
|
||||||
|
|
||||||
if (pressed_callback_)
|
if (pressed_callback_)
|
||||||
pressed_callback_();
|
pressed_callback_();
|
||||||
}
|
}
|
||||||
else if (me->type == MouseEvent::Up && status_ == Status::Pressed)
|
else if (evt.type == MouseEvent::Up && status_ == Status::Pressed)
|
||||||
{
|
{
|
||||||
SetStatus(Status::Hover);
|
SetStatus(Status::Hover);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ namespace easy2d
|
||||||
Status status
|
Status status
|
||||||
);
|
);
|
||||||
|
|
||||||
void UpdateStatus(Event* e);
|
void UpdateStatus(Event const& evt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool enabled_;
|
bool enabled_;
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,10 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include "ResLoader.h"
|
#include "ResLoader.h"
|
||||||
|
#include "../core/modules.h"
|
||||||
#include "../core/Image.h"
|
#include "../core/Image.h"
|
||||||
#include "../core/Frames.h"
|
#include "../core/Frames.h"
|
||||||
#include "../core/modules.h"
|
#include "../core/Music.h"
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
@ -46,11 +47,9 @@ namespace easy2d
|
||||||
res_.insert(std::make_pair(id, ImagePtr(new Image(path.c_str()))));
|
res_.insert(std::make_pair(id, ImagePtr(new Image(path.c_str()))));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResLoader::AddFrames(String const& id, Array<Resource> const& images, Duration const& interval)
|
void ResLoader::AddFrames(String const& id, Array<Resource> const& images)
|
||||||
{
|
{
|
||||||
auto frames = FramesPtr(new Frames);
|
auto frames = FramesPtr(new Frames);
|
||||||
frames->SetInterval(interval);
|
|
||||||
|
|
||||||
for (const auto& image : images)
|
for (const auto& image : images)
|
||||||
{
|
{
|
||||||
auto path = Search(image.GetFileName(), search_paths_);
|
auto path = Search(image.GetFileName(), search_paths_);
|
||||||
|
|
@ -59,6 +58,12 @@ namespace easy2d
|
||||||
res_.insert(std::make_pair(id, frames));
|
res_.insert(std::make_pair(id, frames));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ResLoader::AddMusic(String const & id, Resource const & music)
|
||||||
|
{
|
||||||
|
auto path = Search(music.GetFileName(), search_paths_);
|
||||||
|
res_.insert(std::make_pair(id, MusicPtr(new Music(path.c_str()))));
|
||||||
|
}
|
||||||
|
|
||||||
void ResLoader::AddObj(String const& id, ObjectPtr const& obj)
|
void ResLoader::AddObj(String const& id, ObjectPtr const& obj)
|
||||||
{
|
{
|
||||||
res_.insert(std::make_pair(id, obj));
|
res_.insert(std::make_pair(id, obj));
|
||||||
|
|
@ -74,6 +79,11 @@ namespace easy2d
|
||||||
return Get<Frames*>(id);
|
return Get<Frames*>(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MusicPtr ResLoader::GetMusic(String const & id) const
|
||||||
|
{
|
||||||
|
return Get<Music*>(id);
|
||||||
|
}
|
||||||
|
|
||||||
ObjectPtr ResLoader::GetObj(String const & id) const
|
ObjectPtr ResLoader::GetObj(String const & id) const
|
||||||
{
|
{
|
||||||
return Get<Object*>(id);
|
return Get<Object*>(id);
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,9 @@ namespace easy2d
|
||||||
public:
|
public:
|
||||||
void AddImage(String const& id, Resource const& image);
|
void AddImage(String const& id, Resource const& image);
|
||||||
|
|
||||||
void AddFrames(String const& id, Array<Resource> const& images, Duration const& interval = 200);
|
void AddFrames(String const& id, Array<Resource> const& images);
|
||||||
|
|
||||||
|
void AddMusic(String const& id, Resource const& music);
|
||||||
|
|
||||||
void AddObj(String const& id, ObjectPtr const& obj);
|
void AddObj(String const& id, ObjectPtr const& obj);
|
||||||
|
|
||||||
|
|
@ -37,6 +39,8 @@ namespace easy2d
|
||||||
|
|
||||||
FramesPtr GetFrames(String const& id) const;
|
FramesPtr GetFrames(String const& id) const;
|
||||||
|
|
||||||
|
MusicPtr GetMusic(String const& id) const;
|
||||||
|
|
||||||
ObjectPtr GetObj(String const& id) const;
|
ObjectPtr GetObj(String const& id) const;
|
||||||
|
|
||||||
void Delete(String const& id);
|
void Delete(String const& id);
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
using namespace intrusive;
|
|
||||||
|
|
||||||
Transcoder::Transcoder()
|
Transcoder::Transcoder()
|
||||||
: wave_format_(nullptr)
|
: wave_format_(nullptr)
|
||||||
{
|
{
|
||||||
|
|
@ -51,7 +49,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
SmartPtr<IMFSourceReader> reader;
|
IntrusivePtr<IMFSourceReader> reader;
|
||||||
|
|
||||||
hr = modules::MediaFoundation::Get().MFCreateSourceReaderFromURL(
|
hr = modules::MediaFoundation::Get().MFCreateSourceReaderFromURL(
|
||||||
file_path,
|
file_path,
|
||||||
|
|
@ -72,9 +70,9 @@ namespace easy2d
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
HINSTANCE hinstance = GetModuleHandle(nullptr);
|
HINSTANCE hinstance = GetModuleHandle(nullptr);
|
||||||
|
|
||||||
SmartPtr<IStream> stream;
|
IntrusivePtr<IStream> stream;
|
||||||
SmartPtr<IMFByteStream> byte_stream;
|
IntrusivePtr<IMFByteStream> byte_stream;
|
||||||
SmartPtr<IMFSourceReader> reader;
|
IntrusivePtr<IMFSourceReader> reader;
|
||||||
|
|
||||||
LPVOID buffer;
|
LPVOID buffer;
|
||||||
DWORD buffer_size;
|
DWORD buffer_size;
|
||||||
|
|
@ -118,8 +116,8 @@ namespace easy2d
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
DWORD max_stream_size = 0;
|
DWORD max_stream_size = 0;
|
||||||
|
|
||||||
SmartPtr<IMFMediaType> partial_type;
|
IntrusivePtr<IMFMediaType> partial_type;
|
||||||
SmartPtr<IMFMediaType> uncompressed_type;
|
IntrusivePtr<IMFMediaType> uncompressed_type;
|
||||||
|
|
||||||
hr = modules::MediaFoundation::Get().MFCreateMediaType(&partial_type);
|
hr = modules::MediaFoundation::Get().MFCreateMediaType(&partial_type);
|
||||||
|
|
||||||
|
|
@ -199,8 +197,8 @@ namespace easy2d
|
||||||
DWORD position = 0;
|
DWORD position = 0;
|
||||||
BYTE* data = new (std::nothrow) BYTE[max_stream_size];
|
BYTE* data = new (std::nothrow) BYTE[max_stream_size];
|
||||||
|
|
||||||
SmartPtr<IMFSample> sample;
|
IntrusivePtr<IMFSample> sample;
|
||||||
SmartPtr<IMFMediaBuffer> buffer;
|
IntrusivePtr<IMFMediaBuffer> buffer;
|
||||||
|
|
||||||
if (data == nullptr)
|
if (data == nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue