From 67aeffc5fd6573074a450826fe0c000ca2177451 Mon Sep 17 00:00:00 2001
From: chai <chaifix@163.com>
Date: Mon, 17 Sep 2018 08:09:12 +0800
Subject: *update

---
 build/04Network/04Network.vcxproj.user |   4 +
 build/05Font/05Font.vcxproj            | 134 +++++++++++++++++++++++++++++++++
 build/05Font/05Font.vcxproj.filters    |  22 ++++++
 build/05Font/05Font.vcxproj.user       |   4 +
 build/Debug/SDL2.dll                   | Bin 0 -> 996352 bytes
 build/libjin.sln                       |  27 ++++---
 build/libjin/libjin.vcxproj            |  27 ++-----
 build/libjin/libjin.vcxproj.filters    | 126 ++++++-------------------------
 test/05Font/main.cpp                   |  76 +++++++++++++++++++
 9 files changed, 283 insertions(+), 137 deletions(-)
 create mode 100644 build/04Network/04Network.vcxproj.user
 create mode 100644 build/05Font/05Font.vcxproj
 create mode 100644 build/05Font/05Font.vcxproj.filters
 create mode 100644 build/05Font/05Font.vcxproj.user
 create mode 100644 build/Debug/SDL2.dll
 create mode 100644 test/05Font/main.cpp

diff --git a/build/04Network/04Network.vcxproj.user b/build/04Network/04Network.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/build/04Network/04Network.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+</Project>
\ No newline at end of file
diff --git a/build/05Font/05Font.vcxproj b/build/05Font/05Font.vcxproj
new file mode 100644
index 0000000..aa5d125
--- /dev/null
+++ b/build/05Font/05Font.vcxproj
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <VCProjectVersion>15.0</VCProjectVersion>
+    <ProjectGuid>{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}</ProjectGuid>
+    <RootNamespace>My05Font</RootNamespace>
+    <WindowsTargetPlatformVersion>10.0.14393.0</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\libjin\;$(SolutionDir)\lib\SDL2-2.0.5\include\</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(SolutionDir)\lib\SDL2-2.0.5\lib\x86\</AdditionalLibraryDirectories>
+      <AdditionalDependencies>SDL2main.lib;SDL2.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\libjin\;$(SolutionDir)\lib\SDL2-2.0.5\include\</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(SolutionDir)\lib\SDL2-2.0.5\lib\x86\</AdditionalLibraryDirectories>
+      <AdditionalDependencies>SDL2main.lib;SDL2.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\test\05Font\main.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\libjin\libjin.vcxproj">
+      <Project>{407e9199-d39c-4460-b218-0c29ab42483b}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/build/05Font/05Font.vcxproj.filters b/build/05Font/05Font.vcxproj.filters
new file mode 100644
index 0000000..71e0cf9
--- /dev/null
+++ b/build/05Font/05Font.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="源文件">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="头文件">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
+    </Filter>
+    <Filter Include="资源文件">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\test\05Font\main.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/build/05Font/05Font.vcxproj.user b/build/05Font/05Font.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/build/05Font/05Font.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+</Project>
\ No newline at end of file
diff --git a/build/Debug/SDL2.dll b/build/Debug/SDL2.dll
new file mode 100644
index 0000000..c21f747
Binary files /dev/null and b/build/Debug/SDL2.dll differ
diff --git a/build/libjin.sln b/build/libjin.sln
index 89d9ab5..05a6517 100644
--- a/build/libjin.sln
+++ b/build/libjin.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.28010.2019
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjin", "libjin\libjin.vcxproj", "{407E9199-D39C-4460-B218-0C29AB42483B}"
 EndProject
@@ -15,7 +15,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "04Network", "04Network\04Ne
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{D401F737-EEF5-4EA3-8CEA-A15523AE68AD}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "05Font", "05Font\05Font.vcxproj", "{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "05Font", "05Font\05Font.vcxproj", "{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -65,14 +65,14 @@ Global
 		{85071432-24B6-46D4-98D8-DAA63183093C}.Release|x64.Build.0 = Release|x64
 		{85071432-24B6-46D4-98D8-DAA63183093C}.Release|x86.ActiveCfg = Release|Win32
 		{85071432-24B6-46D4-98D8-DAA63183093C}.Release|x86.Build.0 = Release|Win32
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Debug|x64.ActiveCfg = Debug|x64
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Debug|x64.Build.0 = Debug|x64
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Debug|x86.ActiveCfg = Debug|Win32
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Debug|x86.Build.0 = Debug|Win32
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Release|x64.ActiveCfg = Release|x64
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Release|x64.Build.0 = Release|x64
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Release|x86.ActiveCfg = Release|Win32
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0}.Release|x86.Build.0 = Release|Win32
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Debug|x64.ActiveCfg = Debug|x64
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Debug|x64.Build.0 = Debug|x64
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Debug|x86.ActiveCfg = Debug|Win32
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Debug|x86.Build.0 = Debug|Win32
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Release|x64.ActiveCfg = Release|x64
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Release|x64.Build.0 = Release|x64
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Release|x86.ActiveCfg = Release|Win32
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97}.Release|x86.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -82,6 +82,9 @@ Global
 		{A2D75980-B0AC-498C-B507-4727B4A38E83} = {D401F737-EEF5-4EA3-8CEA-A15523AE68AD}
 		{0E49D105-2032-4825-9FA1-54B1B94E3655} = {D401F737-EEF5-4EA3-8CEA-A15523AE68AD}
 		{85071432-24B6-46D4-98D8-DAA63183093C} = {D401F737-EEF5-4EA3-8CEA-A15523AE68AD}
-		{82AA8AA6-C309-4797-8CA8-D0CADCA8D4E0} = {D401F737-EEF5-4EA3-8CEA-A15523AE68AD}
+		{D1953718-E728-4A86-9CCF-8BEC1F5C5F97} = {D401F737-EEF5-4EA3-8CEA-A15523AE68AD}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {310E7948-2690-4896-9579-19E6AC4D405B}
 	EndGlobalSection
 EndGlobal
diff --git a/build/libjin/libjin.vcxproj b/build/libjin/libjin.vcxproj
index b91de18..b1edd9e 100644
--- a/build/libjin/libjin.vcxproj
+++ b/build/libjin/libjin.vcxproj
@@ -37,6 +37,7 @@
     <ClCompile Include="..\..\libjin\Graphics\Color.cpp" />
     <ClCompile Include="..\..\libjin\Graphics\Drawable.cpp" />
     <ClCompile Include="..\..\libjin\Graphics\Font.cpp" />
+    <ClCompile Include="..\..\libjin\Graphics\FontData.cpp" />
     <ClCompile Include="..\..\libjin\Graphics\Shader.cpp" />
     <ClCompile Include="..\..\libjin\Graphics\Shapes.cpp" />
     <ClCompile Include="..\..\libjin\Graphics\Texture.cpp" />
@@ -46,17 +47,12 @@
     <ClCompile Include="..\..\libjin\Input\Keyboard.cpp" />
     <ClCompile Include="..\..\libjin\Input\Mouse.cpp" />
     <ClCompile Include="..\..\libjin\Math\Matrix.cpp" />
-    <ClCompile Include="..\..\libjin\Math\Vector.cpp" />
     <ClCompile Include="..\..\libjin\Net\Net.cpp" />
     <ClCompile Include="..\..\libjin\Net\Socket.cpp" />
     <ClCompile Include="..\..\libjin\Thread\Thread.cpp" />
-    <ClCompile Include="..\..\libjin\Tilemap\Tilemap.cpp" />
     <ClCompile Include="..\..\libjin\Time\Timer.cpp" />
-    <ClCompile Include="..\..\libjin\Utils\CSV\CSV.cpp" />
-    <ClCompile Include="..\..\libjin\Utils\Json\Json.cpp" />
     <ClCompile Include="..\..\libjin\Utils\Log.cpp" />
     <ClCompile Include="..\..\libjin\Utils\unittest.cpp" />
-    <ClCompile Include="..\..\libjin\Utils\XML\XML.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\libjin\3rdparty\GLee\GLee.h" />
@@ -71,6 +67,8 @@
     <ClInclude Include="..\..\libjin\Audio\SDL\SDLAudio.h" />
     <ClInclude Include="..\..\libjin\Audio\SDL\SDLSource.h" />
     <ClInclude Include="..\..\libjin\Audio\Source.h" />
+    <ClInclude Include="..\..\libjin\Common\Array.hpp" />
+    <ClInclude Include="..\..\libjin\Common\common.h" />
     <ClInclude Include="..\..\libjin\Common\Data.h" />
     <ClInclude Include="..\..\libjin\Common\Object.h" />
     <ClInclude Include="..\..\libjin\Common\Singleton.hpp" />
@@ -78,8 +76,6 @@
     <ClInclude Include="..\..\libjin\Common\Subsystem.hpp" />
     <ClInclude Include="..\..\libjin\Common\types.h" />
     <ClInclude Include="..\..\libjin\Common\utf8.h" />
-    <ClInclude Include="..\..\libjin\Debug\Debug.h" />
-    <ClInclude Include="..\..\libjin\Debug\Log.h" />
     <ClInclude Include="..\..\libjin\Filesystem\Buffer.h" />
     <ClInclude Include="..\..\libjin\Filesystem\Filesystem.h" />
     <ClInclude Include="..\..\libjin\Game\Game.h" />
@@ -89,6 +85,7 @@
     <ClInclude Include="..\..\libjin\Graphics\Color.h" />
     <ClInclude Include="..\..\libjin\Graphics\Drawable.h" />
     <ClInclude Include="..\..\libjin\Graphics\Font.h" />
+    <ClInclude Include="..\..\libjin\Graphics\FontData.h" />
     <ClInclude Include="..\..\libjin\Graphics\Graphics.h" />
     <ClInclude Include="..\..\libjin\Graphics\jin_opengl.h" />
     <ClInclude Include="..\..\libjin\Graphics\Shader.h" />
@@ -105,28 +102,18 @@
     <ClInclude Include="..\..\libjin\Math\Math.h" />
     <ClInclude Include="..\..\libjin\Math\Matrix.h" />
     <ClInclude Include="..\..\libjin\Math\Quad.h" />
-    <ClInclude Include="..\..\libjin\Math\Vector.h" />
     <ClInclude Include="..\..\libjin\jin_configuration.h" />
+    <ClInclude Include="..\..\libjin\Math\Vector2.hpp" />
+    <ClInclude Include="..\..\libjin\Math\Vector3.hpp" />
+    <ClInclude Include="..\..\libjin\Math\Vector4.hpp" />
     <ClInclude Include="..\..\libjin\Net\Net.h" />
     <ClInclude Include="..\..\libjin\Net\Socket.h" />
-    <ClInclude Include="..\..\libjin\Physics\Physics.h" />
-    <ClInclude Include="..\..\libjin\Physics\Rigid.h" />
     <ClInclude Include="..\..\libjin\Thread\Thread.h" />
-    <ClInclude Include="..\..\libjin\Tilemap\Tilemap.h" />
     <ClInclude Include="..\..\libjin\Time\Timer.h" />
-    <ClInclude Include="..\..\libjin\UI\UI.h" />
-    <ClInclude Include="..\..\libjin\Utils\Component\Component.h" />
-    <ClInclude Include="..\..\libjin\Utils\Component\GameObject.h" />
-    <ClInclude Include="..\..\libjin\Utils\CSV\CSV.h" />
     <ClInclude Include="..\..\libjin\Utils\endian.h" />
-    <ClInclude Include="..\..\libjin\Utils\EventMsgCenter\EventMsgCenter.h" />
-    <ClInclude Include="..\..\libjin\Utils\EventMsgCenter\Events.h" />
-    <ClInclude Include="..\..\libjin\Utils\Json\Json.h" />
     <ClInclude Include="..\..\libjin\Utils\Log.h" />
     <ClInclude Include="..\..\libjin\Utils\macros.h" />
-    <ClInclude Include="..\..\libjin\Utils\Proxy\lock.h" />
     <ClInclude Include="..\..\libjin\Utils\utils.h" />
-    <ClInclude Include="..\..\libjin\Utils\XML\XML.h" />
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\libjin\README.md" />
diff --git a/build/libjin/libjin.vcxproj.filters b/build/libjin/libjin.vcxproj.filters
index 1fa6de6..1235bd3 100644
--- a/build/libjin/libjin.vcxproj.filters
+++ b/build/libjin/libjin.vcxproj.filters
@@ -25,9 +25,6 @@
     <Filter Include="Common">
       <UniqueIdentifier>{2277fe39-88f2-4009-94ba-80c093d01a84}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Debug">
-      <UniqueIdentifier>{fe7b76de-1e3e-427f-9885-19f6d54d79e1}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Filesystem">
       <UniqueIdentifier>{09c8db1c-dd68-4f0e-80a8-93bdb79cfd39}</UniqueIdentifier>
     </Filter>
@@ -43,18 +40,9 @@
     <Filter Include="Net">
       <UniqueIdentifier>{d0a63eea-6b3e-488e-97f7-8d4fcf48d8ea}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Physics">
-      <UniqueIdentifier>{ceca90bd-f033-4f44-a535-d44f81c1ce5e}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Thread">
       <UniqueIdentifier>{27b1eb0d-f333-4ce6-9b45-1331a57ccb6b}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Tilemap">
-      <UniqueIdentifier>{ea9c11c8-1d83-441b-a1aa-e7fb85abd615}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="UI">
-      <UniqueIdentifier>{32b0ca98-fc83-411a-8668-e65fb2ac3381}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Utils">
       <UniqueIdentifier>{f1e40195-cb8e-478b-9c36-379005ff6c31}</UniqueIdentifier>
     </Filter>
@@ -64,39 +52,6 @@
     <Filter Include="Time">
       <UniqueIdentifier>{53e06a65-a5ba-41d8-a1f6-6fb5680207ba}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Utils\Component">
-      <UniqueIdentifier>{4d34f3cf-9165-41c5-9070-10442e9fed73}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Utils\CSV">
-      <UniqueIdentifier>{fc249b2b-dbab-41f0-b507-331ce4db0899}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Utils\EventMsgCenter">
-      <UniqueIdentifier>{bd893cbe-82a4-4c49-a398-a126a312d4fb}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Utils\Json">
-      <UniqueIdentifier>{5b6076d6-40ea-4ca3-a427-77def412d945}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Utils\XML">
-      <UniqueIdentifier>{5b1e81c7-866a-414e-a976-48aebfd57225}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="3rdparty\Box2D">
-      <UniqueIdentifier>{bbb4cecd-f074-46eb-93bb-b66e5b953da5}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="3rdparty\Box2D\Collision">
-      <UniqueIdentifier>{2b872284-f186-4f97-935d-76c0ea464791}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="3rdparty\Box2D\Dynamics">
-      <UniqueIdentifier>{8f32efc4-0800-4d24-b915-faee1cdb7279}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="3rdparty\Box2D\Rope">
-      <UniqueIdentifier>{5d2bf6f9-0f2a-4a25-829c-ed54ed280aa6}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="3rdparty\Box2D\Common">
-      <UniqueIdentifier>{5de638b5-bb1a-4b71-aaee-1ca813ce3a95}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Utils\Proxy">
-      <UniqueIdentifier>{84e2ae2f-5cec-4904-9611-330a0362a288}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Game">
       <UniqueIdentifier>{0de74e8c-939d-4275-a4d6-a1c075b8eeb2}</UniqueIdentifier>
     </Filter>
@@ -162,9 +117,6 @@
     <ClCompile Include="..\..\libjin\Math\Matrix.cpp">
       <Filter>Math</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\libjin\Math\Vector.cpp">
-      <Filter>Math</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\libjin\Net\Net.cpp">
       <Filter>Net</Filter>
     </ClCompile>
@@ -180,24 +132,12 @@
     <ClCompile Include="..\..\libjin\Time\Timer.cpp">
       <Filter>Time</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\libjin\Tilemap\Tilemap.cpp">
-      <Filter>Tilemap</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\libjin\Common\Object.cpp">
       <Filter>Common</Filter>
     </ClCompile>
     <ClCompile Include="..\..\libjin\Common\utf8.cpp">
       <Filter>Common</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\libjin\Utils\CSV\CSV.cpp">
-      <Filter>Utils\CSV</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libjin\Utils\Json\Json.cpp">
-      <Filter>Utils\Json</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libjin\Utils\XML\XML.cpp">
-      <Filter>Utils\XML</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\libjin\Net\Socket.cpp">
       <Filter>Net</Filter>
     </ClCompile>
@@ -216,6 +156,9 @@
     <ClCompile Include="..\..\libjin\Game\Game.cpp">
       <Filter>Game</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\libjin\Graphics\FontData.cpp">
+      <Filter>Graphics</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\libjin\3rdparty\GLee\GLee.h">
@@ -257,12 +200,6 @@
     <ClInclude Include="..\..\libjin\Common\Data.h">
       <Filter>Common</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\libjin\Debug\Debug.h">
-      <Filter>Debug</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Debug\Log.h">
-      <Filter>Debug</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\libjin\Filesystem\Buffer.h">
       <Filter>Filesystem</Filter>
     </ClInclude>
@@ -317,9 +254,6 @@
     <ClInclude Include="..\..\libjin\Math\Quad.h">
       <Filter>Math</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\libjin\Math\Vector.h">
-      <Filter>Math</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\libjin\Net\Net.h">
       <Filter>Net</Filter>
     </ClInclude>
@@ -335,21 +269,9 @@
     <ClInclude Include="..\..\libjin\Utils\utils.h">
       <Filter>Utils</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\libjin\UI\UI.h">
-      <Filter>UI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Tilemap\Tilemap.h">
-      <Filter>Tilemap</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\libjin\Thread\Thread.h">
       <Filter>Thread</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\libjin\Physics\Physics.h">
-      <Filter>Physics</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Physics\Rigid.h">
-      <Filter>Physics</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\libjin\jin.h" />
     <ClInclude Include="..\..\libjin\Time\Timer.h">
       <Filter>Time</Filter>
@@ -369,30 +291,6 @@
     <ClInclude Include="..\..\libjin\Common\StringMap.hpp">
       <Filter>Common</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\Component\Component.h">
-      <Filter>Utils\Component</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\Component\GameObject.h">
-      <Filter>Utils\Component</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\CSV\CSV.h">
-      <Filter>Utils\CSV</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\EventMsgCenter\EventMsgCenter.h">
-      <Filter>Utils\EventMsgCenter</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\EventMsgCenter\Events.h">
-      <Filter>Utils\EventMsgCenter</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\Json\Json.h">
-      <Filter>Utils\Json</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\XML\XML.h">
-      <Filter>Utils\XML</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libjin\Utils\Proxy\lock.h">
-      <Filter>Utils\Proxy</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\libjin\Net\Socket.h">
       <Filter>Net</Filter>
     </ClInclude>
@@ -418,6 +316,24 @@
     <ClInclude Include="..\..\libjin\Common\types.h">
       <Filter>Common</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\libjin\Common\Array.hpp">
+      <Filter>Common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libjin\Common\common.h">
+      <Filter>Common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libjin\Math\Vector2.hpp">
+      <Filter>Math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libjin\Math\Vector3.hpp">
+      <Filter>Math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libjin\Math\Vector4.hpp">
+      <Filter>Math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libjin\Graphics\FontData.h">
+      <Filter>Graphics</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\libjin\README.md" />
diff --git a/test/05Font/main.cpp b/test/05Font/main.cpp
new file mode 100644
index 0000000..30b0e3d
--- /dev/null
+++ b/test/05Font/main.cpp
@@ -0,0 +1,76 @@
+#include <iostream>
+#include "jin.h"
+
+using namespace jin::core;
+using namespace jin::graphics;
+using namespace jin::input;
+using namespace jin::audio;
+using namespace jin::filesystem;
+Font* font = nullptr;
+Canvas* canvas;
+FontData* data = nullptr;
+void onLoad()
+{
+    Filesystem* fs = Filesystem::get();
+    fs->mount("D:/Documents/VisualStudio2017/Projects/Jin/libjin/min/build/Debug");
+    Buffer buffer;
+    fs->read("SIMYOU.TTF", &buffer);
+    data = FontData::createFontData((const unsigned char*)buffer.data, buffer.size);
+    font = Font::createFont(data, 15);
+    //canvas = Canvas::createCanvas(100, 100);
+}
+
+void onEvent(jin::input::Event* e)
+{
+    static Game* game = Game::get();
+    if (e->type == EventType::QUIT)
+        game->stop();
+}
+
+void onUpdate(int ms)
+{
+
+}
+
+void onDraw()
+{
+    glColor4f(32 / 255.f, 32 / 255.f, 32 / 255.f, 1);
+    rect(FILL, 0, 0, 500, 500);
+    glColor4f(1, 1, 1, 1);
+    //Canvas::bind(canvas);
+    if (font != nullptr)
+    {
+        font->print(u8"hello, worldjqp", 0, 0);
+    }
+    //Canvas::unbind();
+    //canvas->draw(0, 0, 2, 2, 0);
+}
+
+int main(int argc, char* argv[])
+{
+    Game* game = Game::get();
+    Game::Setting setting;
+    setting.loader = onLoad;
+    setting.eventHandler = onEvent;
+    setting.updater = onUpdate;
+    setting.drawer = onDraw;
+    game->init(&setting);
+
+    Window* wnd = Window::get();
+    Window::Setting wndSetting;
+    wndSetting.width = 600;
+    wndSetting.height = 512;
+    wndSetting.title = "test";
+    wndSetting.fps = 60;
+    wndSetting.vsync = false;
+    wndSetting.fullscreen = false;
+    wndSetting.resizable = false;
+    wnd->init(&wndSetting);
+
+    game->run();
+
+    game->quit();
+    wnd->quit();
+
+    return 0;
+}
\ No newline at end of file
-- 
cgit v1.1-26-g67d0