diff --git a/Aerofoil.sln b/Aerofoil.sln
index 11ea3d3..54ed5ca 100644
--- a/Aerofoil.sln
+++ b/Aerofoil.sln
@@ -54,106 +54,222 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowsUnicodeToolShim", "W
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EmitWiXVersion", "EmitWiXVersion\EmitWiXVersion.vcxproj", "{7EFF1E21-C375-45EA-A069-4E2232C8A72B}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GpShell", "GpShell\GpShell.vcxproj", "{10CF9B5F-61D0-4B5B-89F4-810B58FC053D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GpFontHandler_FreeType2", "GpFontHandler_FreeType2\GpFontHandler_FreeType2.vcxproj", "{4B564030-8985-4975-91E1-E1B2C16AE2A1}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
Release|x64 = Release|x64
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x64.ActiveCfg = Debug|x64
{45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x64.Build.0 = Debug|x64
+ {45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x86.ActiveCfg = Debug|Win32
+ {45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x86.Build.0 = Debug|Win32
{45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x64.ActiveCfg = Release|x64
{45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x64.Build.0 = Release|x64
+ {45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x86.ActiveCfg = Release|Win32
+ {45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x86.Build.0 = Release|Win32
{6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x64.ActiveCfg = Debug|x64
{6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x64.Build.0 = Debug|x64
+ {6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x86.ActiveCfg = Debug|Win32
+ {6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x86.Build.0 = Debug|Win32
{6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x64.ActiveCfg = Release|x64
{6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x64.Build.0 = Release|x64
+ {6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x86.ActiveCfg = Release|Win32
+ {6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x86.Build.0 = Release|Win32
{2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x64.ActiveCfg = Debug|x64
{2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x64.Build.0 = Debug|x64
+ {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x86.ActiveCfg = Debug|Win32
+ {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x86.Build.0 = Debug|Win32
{2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x64.ActiveCfg = Release|x64
{2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x64.Build.0 = Release|x64
+ {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x86.ActiveCfg = Release|Win32
+ {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x86.Build.0 = Release|Win32
{6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x64.ActiveCfg = Debug|x64
{6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x64.Build.0 = Debug|x64
+ {6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x86.ActiveCfg = Debug|Win32
+ {6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x86.Build.0 = Debug|Win32
{6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x64.ActiveCfg = Release|x64
{6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x64.Build.0 = Release|x64
+ {6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x86.ActiveCfg = Release|Win32
+ {6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x86.Build.0 = Release|Win32
{5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x64.ActiveCfg = Debug|x64
{5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x64.Build.0 = Debug|x64
+ {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x86.ActiveCfg = Debug|Win32
+ {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x86.Build.0 = Debug|Win32
{5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x64.ActiveCfg = Release|x64
{5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x64.Build.0 = Release|x64
+ {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x86.ActiveCfg = Release|Win32
+ {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x86.Build.0 = Release|Win32
{99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Debug|x64.ActiveCfg = Debug|x64
{99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Debug|x64.Build.0 = Debug|x64
+ {99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Debug|x86.ActiveCfg = Debug|Win32
+ {99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Debug|x86.Build.0 = Debug|Win32
{99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Release|x64.ActiveCfg = Release|x64
{99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Release|x64.Build.0 = Release|x64
+ {99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Release|x86.ActiveCfg = Release|Win32
+ {99549E56-2B3A-4B0C-9A1F-FBA6395BC96C}.Release|x86.Build.0 = Release|Win32
{E3BDC783-8646-433E-ADF0-8B6390D36669}.Debug|x64.ActiveCfg = Debug|x64
{E3BDC783-8646-433E-ADF0-8B6390D36669}.Debug|x64.Build.0 = Debug|x64
+ {E3BDC783-8646-433E-ADF0-8B6390D36669}.Debug|x86.ActiveCfg = Debug|Win32
+ {E3BDC783-8646-433E-ADF0-8B6390D36669}.Debug|x86.Build.0 = Debug|Win32
{E3BDC783-8646-433E-ADF0-8B6390D36669}.Release|x64.ActiveCfg = Release|x64
{E3BDC783-8646-433E-ADF0-8B6390D36669}.Release|x64.Build.0 = Release|x64
+ {E3BDC783-8646-433E-ADF0-8B6390D36669}.Release|x86.ActiveCfg = Release|Win32
+ {E3BDC783-8646-433E-ADF0-8B6390D36669}.Release|x86.Build.0 = Release|Win32
{A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Debug|x64.ActiveCfg = Debug|x64
{A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Debug|x64.Build.0 = Debug|x64
+ {A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Debug|x86.ActiveCfg = Debug|Win32
+ {A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Debug|x86.Build.0 = Debug|Win32
{A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Release|x64.ActiveCfg = Release|x64
{A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Release|x64.Build.0 = Release|x64
+ {A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Release|x86.ActiveCfg = Release|Win32
+ {A8FCDC5E-729C-4A80-BF9F-B669C52B2AE3}.Release|x86.Build.0 = Release|Win32
{487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Debug|x64.ActiveCfg = Debug|x64
{487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Debug|x64.Build.0 = Debug|x64
+ {487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Debug|x86.ActiveCfg = Debug|Win32
+ {487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Debug|x86.Build.0 = Debug|Win32
{487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Release|x64.ActiveCfg = Release|x64
{487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Release|x64.Build.0 = Release|x64
+ {487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Release|x86.ActiveCfg = Release|Win32
+ {487216D8-16BA-4B4C-B5BF-43FEEDFEE03A}.Release|x86.Build.0 = Release|Win32
{ED2F91E1-673A-4590-82B2-EB157927D3E3}.Debug|x64.ActiveCfg = Debug|x64
{ED2F91E1-673A-4590-82B2-EB157927D3E3}.Debug|x64.Build.0 = Debug|x64
+ {ED2F91E1-673A-4590-82B2-EB157927D3E3}.Debug|x86.ActiveCfg = Debug|Win32
+ {ED2F91E1-673A-4590-82B2-EB157927D3E3}.Debug|x86.Build.0 = Debug|Win32
{ED2F91E1-673A-4590-82B2-EB157927D3E3}.Release|x64.ActiveCfg = Release|x64
{ED2F91E1-673A-4590-82B2-EB157927D3E3}.Release|x64.Build.0 = Release|x64
+ {ED2F91E1-673A-4590-82B2-EB157927D3E3}.Release|x86.ActiveCfg = Release|Win32
+ {ED2F91E1-673A-4590-82B2-EB157927D3E3}.Release|x86.Build.0 = Release|Win32
{B852D549-4020-4477-8BFB-E199FF78B047}.Debug|x64.ActiveCfg = Debug|x64
{B852D549-4020-4477-8BFB-E199FF78B047}.Debug|x64.Build.0 = Debug|x64
+ {B852D549-4020-4477-8BFB-E199FF78B047}.Debug|x86.ActiveCfg = Debug|Win32
+ {B852D549-4020-4477-8BFB-E199FF78B047}.Debug|x86.Build.0 = Debug|Win32
{B852D549-4020-4477-8BFB-E199FF78B047}.Release|x64.ActiveCfg = Release|x64
{B852D549-4020-4477-8BFB-E199FF78B047}.Release|x64.Build.0 = Release|x64
+ {B852D549-4020-4477-8BFB-E199FF78B047}.Release|x86.ActiveCfg = Release|Win32
+ {B852D549-4020-4477-8BFB-E199FF78B047}.Release|x86.Build.0 = Release|Win32
{FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Debug|x64.ActiveCfg = Debug|x64
{FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Debug|x64.Build.0 = Debug|x64
+ {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Debug|x86.ActiveCfg = Debug|Win32
+ {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Debug|x86.Build.0 = Debug|Win32
{FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x64.ActiveCfg = Release|x64
{FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x64.Build.0 = Release|x64
+ {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x86.ActiveCfg = Release|Win32
+ {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x86.Build.0 = Release|Win32
{17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x64.ActiveCfg = Debug|x64
{17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x64.Build.0 = Debug|x64
+ {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x86.ActiveCfg = Debug|Win32
+ {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x86.Build.0 = Debug|Win32
{17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Release|x64.ActiveCfg = Release|x64
{17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Release|x64.Build.0 = Release|x64
+ {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Release|x86.ActiveCfg = Release|Win32
+ {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Release|x86.Build.0 = Release|Win32
{0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x64.ActiveCfg = Debug|x64
{0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x64.Build.0 = Debug|x64
+ {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x86.ActiveCfg = Debug|Win32
+ {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x86.Build.0 = Debug|Win32
{0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x64.ActiveCfg = Release|x64
{0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x64.Build.0 = Release|x64
+ {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x86.ActiveCfg = Release|Win32
+ {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x86.Build.0 = Release|Win32
{07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x64.ActiveCfg = Debug|x64
{07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x64.Build.0 = Debug|x64
+ {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x86.ActiveCfg = Debug|Win32
+ {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x86.Build.0 = Debug|Win32
{07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x64.ActiveCfg = Release|x64
{07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x64.Build.0 = Release|x64
+ {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x86.ActiveCfg = Release|Win32
+ {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x86.Build.0 = Release|Win32
{27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Debug|x64.ActiveCfg = Debug|x64
{27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Debug|x64.Build.0 = Debug|x64
+ {27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Debug|x86.ActiveCfg = Debug|Win32
+ {27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Debug|x86.Build.0 = Debug|Win32
{27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Release|x64.ActiveCfg = Release|x64
{27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Release|x64.Build.0 = Release|x64
+ {27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Release|x86.ActiveCfg = Release|Win32
+ {27B7CA46-ED23-45C2-BF5F-0C126D81AEBF}.Release|x86.Build.0 = Release|Win32
{6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Debug|x64.ActiveCfg = Debug|x64
{6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Debug|x64.Build.0 = Debug|x64
+ {6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Debug|x86.ActiveCfg = Debug|Win32
+ {6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Debug|x86.Build.0 = Debug|Win32
{6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Release|x64.ActiveCfg = Release|x64
{6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Release|x64.Build.0 = Release|x64
+ {6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Release|x86.ActiveCfg = Release|Win32
+ {6AE5C85E-6631-4A12-97A0-A05F812FE9CA}.Release|x86.Build.0 = Release|Win32
{D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Debug|x64.ActiveCfg = Debug|x64
{D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Debug|x64.Build.0 = Debug|x64
+ {D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Debug|x86.ActiveCfg = Debug|Win32
+ {D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Debug|x86.Build.0 = Debug|Win32
{D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Release|x64.ActiveCfg = Release|x64
{D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Release|x64.Build.0 = Release|x64
+ {D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Release|x86.ActiveCfg = Release|Win32
+ {D7BFE702-0667-4155-9B0B-2A54DF9AE60B}.Release|x86.Build.0 = Release|Win32
{9023DF2F-A33D-485A-B13D-0973348B2F9B}.Debug|x64.ActiveCfg = Debug|x64
{9023DF2F-A33D-485A-B13D-0973348B2F9B}.Debug|x64.Build.0 = Debug|x64
+ {9023DF2F-A33D-485A-B13D-0973348B2F9B}.Debug|x86.ActiveCfg = Debug|Win32
+ {9023DF2F-A33D-485A-B13D-0973348B2F9B}.Debug|x86.Build.0 = Debug|Win32
{9023DF2F-A33D-485A-B13D-0973348B2F9B}.Release|x64.ActiveCfg = Release|x64
{9023DF2F-A33D-485A-B13D-0973348B2F9B}.Release|x64.Build.0 = Release|x64
+ {9023DF2F-A33D-485A-B13D-0973348B2F9B}.Release|x86.ActiveCfg = Release|Win32
+ {9023DF2F-A33D-485A-B13D-0973348B2F9B}.Release|x86.Build.0 = Release|Win32
{89F8D13E-F216-4B67-8DE9-7F842D349E94}.Debug|x64.ActiveCfg = Debug|x64
{89F8D13E-F216-4B67-8DE9-7F842D349E94}.Debug|x64.Build.0 = Debug|x64
+ {89F8D13E-F216-4B67-8DE9-7F842D349E94}.Debug|x86.ActiveCfg = Debug|Win32
+ {89F8D13E-F216-4B67-8DE9-7F842D349E94}.Debug|x86.Build.0 = Debug|Win32
{89F8D13E-F216-4B67-8DE9-7F842D349E94}.Release|x64.ActiveCfg = Release|x64
{89F8D13E-F216-4B67-8DE9-7F842D349E94}.Release|x64.Build.0 = Release|x64
+ {89F8D13E-F216-4B67-8DE9-7F842D349E94}.Release|x86.ActiveCfg = Release|Win32
+ {89F8D13E-F216-4B67-8DE9-7F842D349E94}.Release|x86.Build.0 = Release|Win32
{A778D062-DE76-49F6-8D05-EB26852DD605}.Debug|x64.ActiveCfg = Debug|x64
{A778D062-DE76-49F6-8D05-EB26852DD605}.Debug|x64.Build.0 = Debug|x64
+ {A778D062-DE76-49F6-8D05-EB26852DD605}.Debug|x86.ActiveCfg = Debug|Win32
+ {A778D062-DE76-49F6-8D05-EB26852DD605}.Debug|x86.Build.0 = Debug|Win32
{A778D062-DE76-49F6-8D05-EB26852DD605}.Release|x64.ActiveCfg = Release|x64
{A778D062-DE76-49F6-8D05-EB26852DD605}.Release|x64.Build.0 = Release|x64
+ {A778D062-DE76-49F6-8D05-EB26852DD605}.Release|x86.ActiveCfg = Release|Win32
+ {A778D062-DE76-49F6-8D05-EB26852DD605}.Release|x86.Build.0 = Release|Win32
{D26BD501-28A7-4849-8130-FB5EA0A2B82F}.Debug|x64.ActiveCfg = Debug|x64
+ {D26BD501-28A7-4849-8130-FB5EA0A2B82F}.Debug|x86.ActiveCfg = Debug|x64
{D26BD501-28A7-4849-8130-FB5EA0A2B82F}.Release|x64.ActiveCfg = Release|x64
+ {D26BD501-28A7-4849-8130-FB5EA0A2B82F}.Release|x86.ActiveCfg = Release|x64
{15009625-1120-405E-8BBA-69A16CD6713D}.Debug|x64.ActiveCfg = Debug|x64
{15009625-1120-405E-8BBA-69A16CD6713D}.Debug|x64.Build.0 = Debug|x64
+ {15009625-1120-405E-8BBA-69A16CD6713D}.Debug|x86.ActiveCfg = Debug|Win32
+ {15009625-1120-405E-8BBA-69A16CD6713D}.Debug|x86.Build.0 = Debug|Win32
{15009625-1120-405E-8BBA-69A16CD6713D}.Release|x64.ActiveCfg = Release|x64
{15009625-1120-405E-8BBA-69A16CD6713D}.Release|x64.Build.0 = Release|x64
+ {15009625-1120-405E-8BBA-69A16CD6713D}.Release|x86.ActiveCfg = Release|Win32
+ {15009625-1120-405E-8BBA-69A16CD6713D}.Release|x86.Build.0 = Release|Win32
{7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Debug|x64.ActiveCfg = Debug|x64
{7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Debug|x64.Build.0 = Debug|x64
+ {7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Debug|x86.ActiveCfg = Debug|Win32
+ {7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Debug|x86.Build.0 = Debug|Win32
{7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Release|x64.ActiveCfg = Release|x64
{7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Release|x64.Build.0 = Release|x64
+ {7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Release|x86.ActiveCfg = Release|Win32
+ {7EFF1E21-C375-45EA-A069-4E2232C8A72B}.Release|x86.Build.0 = Release|Win32
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Debug|x64.ActiveCfg = Debug|x64
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Debug|x64.Build.0 = Debug|x64
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Debug|x86.ActiveCfg = Debug|Win32
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Debug|x86.Build.0 = Debug|Win32
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Release|x64.ActiveCfg = Release|x64
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Release|x64.Build.0 = Release|x64
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Release|x86.ActiveCfg = Release|Win32
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}.Release|x86.Build.0 = Release|Win32
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Debug|x64.ActiveCfg = Debug|x64
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Debug|x64.Build.0 = Debug|x64
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Debug|x86.ActiveCfg = Debug|Win32
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Debug|x86.Build.0 = Debug|Win32
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Release|x64.ActiveCfg = Release|x64
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Release|x64.Build.0 = Release|x64
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Release|x86.ActiveCfg = Release|Win32
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Aerofoil/Aerofoil.vcxproj b/Aerofoil/Aerofoil.vcxproj
index 1fce79d..238c927 100644
--- a/Aerofoil/Aerofoil.vcxproj
+++ b/Aerofoil/Aerofoil.vcxproj
@@ -62,8 +62,7 @@
-
-
+
@@ -71,9 +70,8 @@
-
-
+
@@ -81,8 +79,7 @@
-
-
+
@@ -90,9 +87,8 @@
-
-
+
@@ -145,26 +141,16 @@
-
-
-
-
-
-
-
-
-
-
@@ -179,30 +165,17 @@
-
-
-
-
-
-
-
-
-
-
-
- {487216d8-16ba-4b4c-b5bf-43feedfee03a}
-
{6233c3f2-5781-488e-b190-4fa8836f5a77}
@@ -212,9 +185,15 @@
{ffc961ac-55b4-4a38-a83e-06ae98f59acc}
+
+ {4b564030-8985-4975-91e1-e1b2c16ae2a1}
+
{17b96f07-ef92-47cd-95a5-8e6ee38ab564}
+
+ {10cf9b5f-61d0-4b5b-89f4-810b58fc053d}
+
diff --git a/Aerofoil/Aerofoil.vcxproj.filters b/Aerofoil/Aerofoil.vcxproj.filters
index f02472e..3570943 100644
--- a/Aerofoil/Aerofoil.vcxproj.filters
+++ b/Aerofoil/Aerofoil.vcxproj.filters
@@ -1,21 +1,9 @@
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
Source Files
-
- Source Files
-
Source Files
@@ -28,27 +16,9 @@
Source Files
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
Source Files
-
- Source Files
-
Source Files
@@ -69,27 +39,15 @@
Header Files
-
- Header Files
-
Header Files
-
- Header Files
-
-
- Header Files
-
Header Files
Header Files
-
- Header Files
-
Header Files
@@ -102,24 +60,9 @@
Header Files
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
Header Files
-
- Header Files
-
-
- Header Files
-
Header Files
@@ -129,9 +72,6 @@
Header Files
-
- Header Files
-
Header Files
diff --git a/Aerofoil/GpFontHandlerFactory.cpp b/Aerofoil/GpFontHandlerFactory.cpp
deleted file mode 100644
index 9bd1623..0000000
--- a/Aerofoil/GpFontHandlerFactory.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "GpFontHandlerFactory.h"
-#include "GpFontHandler_FreeType2.h"
-
-#include
-
-PortabilityLayer::HostFontHandler *GpFontHandlerFactory::Create()
-{
- return GpFontHandler_FreeType2::Create();
-}
diff --git a/Aerofoil/GpFontHandlerFactory.h b/Aerofoil/GpFontHandlerFactory.h
deleted file mode 100644
index e5b5b12..0000000
--- a/Aerofoil/GpFontHandlerFactory.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-namespace PortabilityLayer
-{
- class HostFontHandler;
-}
-
-class GpFontHandlerFactory final
-{
-public:
- static PortabilityLayer::HostFontHandler *Create();
-};
diff --git a/Aerofoil/GpMain_Win32.cpp b/Aerofoil/GpMain_Win32.cpp
index 85e007a..9df8298 100644
--- a/Aerofoil/GpMain_Win32.cpp
+++ b/Aerofoil/GpMain_Win32.cpp
@@ -6,6 +6,7 @@
#include "GpFiber_Win32.h"
#include "GpFileSystem_Win32.h"
#include "GpLogDriver_Win32.h"
+#include "GpFontHandlerFactory.h"
#include "GpInputDriverFactory.h"
#include "GpAppInterface.h"
#include "GpSystemServices_Win32.h"
@@ -27,6 +28,7 @@ GpWindowsGlobals g_gpWindowsGlobals;
extern "C" __declspec(dllimport) IGpAudioDriver *GpDriver_CreateAudioDriver_XAudio2(const GpAudioDriverProperties &properties);
extern "C" __declspec(dllimport) IGpDisplayDriver *GpDriver_CreateDisplayDriver_D3D11(const GpDisplayDriverProperties &properties);
extern "C" __declspec(dllimport) IGpInputDriver *GpDriver_CreateInputDriver_XInput(const GpInputDriverProperties &properties);
+extern "C" __declspec(dllimport) PortabilityLayer::HostFontHandler *GpDriver_CreateFontHandler_FreeType2(const GpFontHandlerProperties &properties);
static void PostMouseEvent(IGpVOSEventQueue *eventQueue, GpMouseEventType_t eventType, GpMouseButton_t button, int32_t x, int32_t y, float pixelScaleX, float pixelScaleY)
{
@@ -432,6 +434,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
g_gpGlobalConfig.m_audioDriverType = EGpAudioDriverType_XAudio2;
+ g_gpGlobalConfig.m_fontHandlerType = EGpFontHandlerType_FreeType2;
+
EGpInputDriverType inputDrivers[] =
{
EGpInputDriverType_XInput
@@ -446,6 +450,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
GpDisplayDriverFactory::RegisterDisplayDriverFactory(EGpDisplayDriverType_D3D11, GpDriver_CreateDisplayDriver_D3D11);
GpAudioDriverFactory::RegisterAudioDriverFactory(EGpAudioDriverType_XAudio2, GpDriver_CreateAudioDriver_XAudio2);
GpInputDriverFactory::RegisterInputDriverFactory(EGpInputDriverType_XInput, GpDriver_CreateInputDriver_XInput);
+ GpFontHandlerFactory::RegisterFontHandlerFactory(EGpFontHandlerType_FreeType2, GpDriver_CreateFontHandler_FreeType2);
if (logger)
logger->Printf(IGpLogDriver::Category_Information, "Windows environment configured, starting up");
diff --git a/Aerofoil/GpShell.props b/Aerofoil/GpShell.props
new file mode 100644
index 0000000..3021c9b
--- /dev/null
+++ b/Aerofoil/GpShell.props
@@ -0,0 +1,10 @@
+
+
+
+
+
+ $(SolutionDir)GpShell;$(IncludePath)
+
+
+
+
\ No newline at end of file
diff --git a/GpCommon/EGpFontHandlerType.h b/GpCommon/EGpFontHandlerType.h
new file mode 100644
index 0000000..7a1dc52
--- /dev/null
+++ b/GpCommon/EGpFontHandlerType.h
@@ -0,0 +1,8 @@
+#pragma once
+
+enum EGpFontHandlerType
+{
+ EGpFontHandlerType_FreeType2,
+
+ EGpFontHandlerType_Count,
+};
diff --git a/GpCommon/GpFontHandlerProperties.h b/GpCommon/GpFontHandlerProperties.h
new file mode 100644
index 0000000..e5733da
--- /dev/null
+++ b/GpCommon/GpFontHandlerProperties.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "EGpFontHandlerType.h"
+
+struct GpFontHandlerProperties
+{
+ EGpFontHandlerType m_type;
+};
diff --git a/GpCommon/IGpDisplayDriverSurface.h b/GpCommon/IGpDisplayDriverSurface.h
index 258475c..d8ae1a5 100644
--- a/GpCommon/IGpDisplayDriverSurface.h
+++ b/GpCommon/IGpDisplayDriverSurface.h
@@ -1,8 +1,8 @@
-#pragma once
+#pragma once
struct IGpDisplayDriverSurface
{
virtual void Upload(const void *data, size_t x, size_t y, size_t width, size_t height, size_t pitch) = 0;
- virtual void UploadEntire(const void *data, size_t pitch) = 0;
+ virtual void UploadEntire(const void *data, size_t pitch) = 0;
virtual void Destroy() = 0;
};
diff --git a/Aerofoil/GpFontHandler_FreeType2.cpp b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.cpp
similarity index 97%
rename from Aerofoil/GpFontHandler_FreeType2.cpp
rename to GpFontHandler_FreeType2/GpFontHandler_FreeType2.cpp
index e853933..548e0d8 100644
--- a/Aerofoil/GpFontHandler_FreeType2.cpp
+++ b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.cpp
@@ -1,4 +1,5 @@
#include "GpFontHandler_FreeType2.h"
+#include "GpFontHandlerProperties.h"
#include "CoreDefs.h"
#include "IOStream.h"
@@ -15,7 +16,6 @@
#include
#include
-
class GpFontRenderedGlyph_FreeType2 final : public PortabilityLayer::HostFontRenderedGlyph
{
public:
@@ -423,3 +423,8 @@ bool GpFontHandler_FreeType2::Init()
return true;
}
+
+extern "C" __declspec(dllexport) PortabilityLayer::HostFontHandler *GpDriver_CreateFontHandler_FreeType2(const GpFontHandlerProperties &properties)
+{
+ return GpFontHandler_FreeType2::Create();
+}
diff --git a/Aerofoil/GpFontHandler_FreeType2.h b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.h
similarity index 100%
rename from Aerofoil/GpFontHandler_FreeType2.h
rename to GpFontHandler_FreeType2/GpFontHandler_FreeType2.h
diff --git a/GpFontHandler_FreeType2/GpFontHandler_FreeType2.vcxproj b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.vcxproj
new file mode 100644
index 0000000..4c94a1b
--- /dev/null
+++ b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.vcxproj
@@ -0,0 +1,148 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 15.0
+ {4B564030-8985-4975-91E1-E1B2C16AE2A1}
+ GpFontHandlerFreeType2
+ 10.0.17763.0
+
+
+
+ Application
+ true
+ v141
+ MultiByte
+
+
+ Application
+ false
+ v141
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ true
+ v141
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v141
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ Disabled
+ true
+ true
+
+
+
+
+ Level3
+ Disabled
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+
+
+
+
+
+
+ {487216d8-16ba-4b4c-b5bf-43feedfee03a}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GpFontHandler_FreeType2/GpFontHandler_FreeType2.vcxproj.filters b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.vcxproj.filters
new file mode 100644
index 0000000..4ff82ff
--- /dev/null
+++ b/GpFontHandler_FreeType2/GpFontHandler_FreeType2.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/Aerofoil/GpAppEnvironment.cpp b/GpShell/GpAppEnvironment.cpp
similarity index 100%
rename from Aerofoil/GpAppEnvironment.cpp
rename to GpShell/GpAppEnvironment.cpp
diff --git a/Aerofoil/GpAppEnvironment.h b/GpShell/GpAppEnvironment.h
similarity index 100%
rename from Aerofoil/GpAppEnvironment.h
rename to GpShell/GpAppEnvironment.h
diff --git a/Aerofoil/GpAudioDriverFactory.cpp b/GpShell/GpAudioDriverFactory.cpp
similarity index 100%
rename from Aerofoil/GpAudioDriverFactory.cpp
rename to GpShell/GpAudioDriverFactory.cpp
diff --git a/Aerofoil/GpAudioDriverFactory.h b/GpShell/GpAudioDriverFactory.h
similarity index 100%
rename from Aerofoil/GpAudioDriverFactory.h
rename to GpShell/GpAudioDriverFactory.h
diff --git a/Aerofoil/GpDisplayDriverFactory.cpp b/GpShell/GpDisplayDriverFactory.cpp
similarity index 100%
rename from Aerofoil/GpDisplayDriverFactory.cpp
rename to GpShell/GpDisplayDriverFactory.cpp
diff --git a/Aerofoil/GpDisplayDriverFactory.h b/GpShell/GpDisplayDriverFactory.h
similarity index 100%
rename from Aerofoil/GpDisplayDriverFactory.h
rename to GpShell/GpDisplayDriverFactory.h
diff --git a/Aerofoil/GpFiberStarter.h b/GpShell/GpFiberStarter.h
similarity index 100%
rename from Aerofoil/GpFiberStarter.h
rename to GpShell/GpFiberStarter.h
diff --git a/GpShell/GpFontHandlerFactory.cpp b/GpShell/GpFontHandlerFactory.cpp
new file mode 100644
index 0000000..c34d587
--- /dev/null
+++ b/GpShell/GpFontHandlerFactory.cpp
@@ -0,0 +1,23 @@
+#include "GpFontHandlerFactory.h"
+#include "GpFontHandlerProperties.h"
+
+#include
+
+PortabilityLayer::HostFontHandler *GpFontHandlerFactory::CreateFontHandler(const GpFontHandlerProperties &properties)
+{
+ assert(properties.m_type < EGpFontHandlerType_Count);
+
+ if (ms_registry[properties.m_type])
+ return ms_registry[properties.m_type](properties);
+ else
+ return nullptr;
+}
+
+void GpFontHandlerFactory::RegisterFontHandlerFactory(EGpFontHandlerType type, FactoryFunc_t func)
+{
+ assert(type < EGpFontHandlerType_Count);
+
+ ms_registry[type] = func;
+}
+
+GpFontHandlerFactory::FactoryFunc_t GpFontHandlerFactory::ms_registry[EGpFontHandlerType_Count];
diff --git a/GpShell/GpFontHandlerFactory.h b/GpShell/GpFontHandlerFactory.h
new file mode 100644
index 0000000..eb03bea
--- /dev/null
+++ b/GpShell/GpFontHandlerFactory.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#include "EGpFontHandlerType.h"
+
+namespace PortabilityLayer
+{
+ class HostFontHandler;
+}
+
+struct GpFontHandlerProperties;
+
+class GpFontHandlerFactory
+{
+public:
+ typedef PortabilityLayer::HostFontHandler *(*FactoryFunc_t)(const GpFontHandlerProperties &properties);
+
+ static PortabilityLayer::HostFontHandler *CreateFontHandler(const GpFontHandlerProperties &properties);
+ static void RegisterFontHandlerFactory(EGpFontHandlerType type, FactoryFunc_t func);
+
+private:
+ static FactoryFunc_t ms_registry[EGpFontHandlerType_Count];
+};
diff --git a/Aerofoil/GpGlobalConfig.cpp b/GpShell/GpGlobalConfig.cpp
similarity index 100%
rename from Aerofoil/GpGlobalConfig.cpp
rename to GpShell/GpGlobalConfig.cpp
diff --git a/Aerofoil/GpGlobalConfig.h b/GpShell/GpGlobalConfig.h
similarity index 83%
rename from Aerofoil/GpGlobalConfig.h
rename to GpShell/GpGlobalConfig.h
index cec63b5..b3bb9f0 100644
--- a/Aerofoil/GpGlobalConfig.h
+++ b/GpShell/GpGlobalConfig.h
@@ -2,6 +2,7 @@
#include "EGpDisplayDriverType.h"
#include "EGpAudioDriverType.h"
+#include "EGpFontHandlerType.h"
#include "EGpInputDriverType.h"
struct IGpLogDriver;
@@ -10,6 +11,8 @@ struct GpGlobalConfig
{
EGpDisplayDriverType m_displayDriverType;
EGpAudioDriverType m_audioDriverType;
+ EGpFontHandlerType m_fontHandlerType;
+
const EGpInputDriverType *m_inputDriverTypes;
size_t m_numInputDrivers;
diff --git a/Aerofoil/GpInputDriverFactory.cpp b/GpShell/GpInputDriverFactory.cpp
similarity index 100%
rename from Aerofoil/GpInputDriverFactory.cpp
rename to GpShell/GpInputDriverFactory.cpp
diff --git a/Aerofoil/GpInputDriverFactory.h b/GpShell/GpInputDriverFactory.h
similarity index 100%
rename from Aerofoil/GpInputDriverFactory.h
rename to GpShell/GpInputDriverFactory.h
diff --git a/Aerofoil/GpMain.cpp b/GpShell/GpMain.cpp
similarity index 94%
rename from Aerofoil/GpMain.cpp
rename to GpShell/GpMain.cpp
index bc04ced..6a27450 100644
--- a/Aerofoil/GpMain.cpp
+++ b/GpShell/GpMain.cpp
@@ -1,10 +1,11 @@
#include "GpMain.h"
#include "GpAudioDriverFactory.h"
#include "GpAudioDriverProperties.h"
-#include "GpFontHandlerFactory.h"
#include "GpDisplayDriverFactory.h"
#include "GpDisplayDriverProperties.h"
#include "GpDisplayDriverTickStatus.h"
+#include "GpFontHandlerFactory.h"
+#include "GpFontHandlerProperties.h"
#include "GpInputDriverFactory.h"
#include "GpInputDriverProperties.h"
#include "GpGlobalConfig.h"
@@ -68,6 +69,11 @@ int GpMain::Run()
GpAudioDriverProperties adProps;
memset(&adProps, 0, sizeof(adProps));
+ GpFontHandlerProperties fontProps;
+ memset(&fontProps, 0, sizeof(fontProps));
+
+ fontProps.m_type = g_gpGlobalConfig.m_fontHandlerType;
+
// The sample rate used in all of Glider PRO's sound is 0x56ee8ba3
// This appears to be the "standard" Mac sample rate, probably rounded from 244800/11.
adProps.m_type = g_gpGlobalConfig.m_audioDriverType;
@@ -99,7 +105,7 @@ int GpMain::Run()
IGpDisplayDriver *displayDriver = GpDisplayDriverFactory::CreateDisplayDriver(ddProps);
IGpAudioDriver *audioDriver = GpAudioDriverFactory::CreateAudioDriver(adProps);
- PortabilityLayer::HostFontHandler *fontHandler = GpFontHandlerFactory::Create();
+ PortabilityLayer::HostFontHandler *fontHandler = GpFontHandlerFactory::CreateFontHandler(fontProps);
appEnvironment->Init();
diff --git a/Aerofoil/GpMain.h b/GpShell/GpMain.h
similarity index 100%
rename from Aerofoil/GpMain.h
rename to GpShell/GpMain.h
diff --git a/Aerofoil/GpMemoryBuffer.cpp b/GpShell/GpMemoryBuffer.cpp
similarity index 100%
rename from Aerofoil/GpMemoryBuffer.cpp
rename to GpShell/GpMemoryBuffer.cpp
diff --git a/Aerofoil/GpMemoryBuffer.h b/GpShell/GpMemoryBuffer.h
similarity index 100%
rename from Aerofoil/GpMemoryBuffer.h
rename to GpShell/GpMemoryBuffer.h
diff --git a/GpShell/GpShell.vcxproj b/GpShell/GpShell.vcxproj
new file mode 100644
index 0000000..846b5b8
--- /dev/null
+++ b/GpShell/GpShell.vcxproj
@@ -0,0 +1,147 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 15.0
+ {10CF9B5F-61D0-4B5B-89F4-810B58FC053D}
+ GpShell
+ 10.0.17763.0
+
+
+
+ Application
+ true
+ v141
+ MultiByte
+
+
+ Application
+ false
+ v141
+ true
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v141
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v141
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ Disabled
+ true
+ true
+
+
+
+
+ Level3
+ Disabled
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GpShell/GpShell.vcxproj.filters b/GpShell/GpShell.vcxproj.filters
new file mode 100644
index 0000000..66868f3
--- /dev/null
+++ b/GpShell/GpShell.vcxproj.filters
@@ -0,0 +1,54 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/Aerofoil/GpVOSEventQueue.cpp b/GpShell/GpVOSEventQueue.cpp
similarity index 100%
rename from Aerofoil/GpVOSEventQueue.cpp
rename to GpShell/GpVOSEventQueue.cpp
diff --git a/Aerofoil/GpVOSEventQueue.h b/GpShell/GpVOSEventQueue.h
similarity index 100%
rename from Aerofoil/GpVOSEventQueue.h
rename to GpShell/GpVOSEventQueue.h
diff --git a/MakeRelease.bat b/MakeRelease.bat
index 1580cc2..8c1a1ca 100644
--- a/MakeRelease.bat
+++ b/MakeRelease.bat
@@ -12,6 +12,7 @@ copy /Y x64\Release\GpAudioDriver_XAudio2.dll ReleasePkg\Aerofoil
copy /Y x64\Release\xaudio2_9redist.dll ReleasePkg\Aerofoil
copy /Y x64\Release\GpDisplayDriver_D3D11.dll ReleasePkg\Aerofoil
copy /Y x64\Release\GpInputDriver_XInput.dll ReleasePkg\Aerofoil
+copy /Y x64\Release\GpFontHandler_FreeType2.dll ReleasePkg\Aerofoil
copy /Y x64\Release\FreeType.dll ReleasePkg\Aerofoil
copy /Y x64\Release\GpApp.dll ReleasePkg\Aerofoil
diff --git a/ReleasePackageInstaller/Product.wxs b/ReleasePackageInstaller/Product.wxs
index 289e685..a6b69eb 100644
--- a/ReleasePackageInstaller/Product.wxs
+++ b/ReleasePackageInstaller/Product.wxs
@@ -72,6 +72,9 @@
+
+
+
@@ -138,6 +141,7 @@
+