diff --git a/dlangui.sln b/dlangui.sln
index 170319de..9b032b25 100644
--- a/dlangui.sln
+++ b/dlangui.sln
@@ -25,6 +25,13 @@ Project("{002A2DE9-8BB6-484D-9802-7E4AD4084715}") = "tetris", "examples\tetris\t
EndProject
Project("{002A2DE9-8BB6-484D-9802-7E4AD4084715}") = "libdparse", "..\dlangide\libdparse\libdparse.visualdproj", "{C4F86459-686F-4841-A6BE-7FCC38DC47FE}"
EndProject
+Project("{002A2DE9-8BB6-484D-9802-7E4AD4084715}") = "dlanguisfml", "..\dsfml_project\dlanguisfml\dlanguisfml.visualdproj", "{5867E363-515A-4C7E-82C7-D1C1D35F55FC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA} = {DB490C05-D9F8-431C-91DD-CEE646A64FDA}
+ EndProjectSection
+EndProject
+Project("{002A2DE9-8BB6-484D-9802-7E4AD4084715}") = "dsfml", "..\DSFML\dsfml\dsfml.visualdproj", "{DB490C05-D9F8-431C-91DD-CEE646A64FDA}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug COFF32|Any CPU = Debug COFF32|Any CPU
@@ -269,6 +276,78 @@ Global
{C4F86459-686F-4841-A6BE-7FCC38DC47FE}.TestDebug|Win32.ActiveCfg = Debug|Win32
{C4F86459-686F-4841-A6BE-7FCC38DC47FE}.TestDebug|Win32.Build.0 = Debug|Win32
{C4F86459-686F-4841-A6BE-7FCC38DC47FE}.TestDebug|x64.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug COFF32|Any CPU.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug COFF32|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug COFF32|Mixed Platforms.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug COFF32|Win32.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug COFF32|Win32.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug COFF32|x64.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug GDC|Any CPU.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug GDC|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug GDC|Mixed Platforms.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug GDC|Win32.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug GDC|Win32.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug GDC|x64.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug LDC|Any CPU.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug LDC|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug LDC|Mixed Platforms.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug LDC|Win32.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug LDC|Win32.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug LDC|x64.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug|Win32.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Debug|x64.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Release|Any CPU.ActiveCfg = Release|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Release|Win32.ActiveCfg = Release|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Release|Win32.Build.0 = Release|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.Release|x64.ActiveCfg = Release|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.TestDebug|Any CPU.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.TestDebug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.TestDebug|Mixed Platforms.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.TestDebug|Win32.ActiveCfg = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.TestDebug|Win32.Build.0 = Debug|Win32
+ {5867E363-515A-4C7E-82C7-D1C1D35F55FC}.TestDebug|x64.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug COFF32|Any CPU.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug COFF32|Mixed Platforms.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug COFF32|Mixed Platforms.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug COFF32|Win32.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug COFF32|Win32.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug COFF32|x64.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug GDC|Any CPU.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug GDC|Mixed Platforms.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug GDC|Mixed Platforms.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug GDC|Win32.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug GDC|Win32.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug GDC|x64.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug LDC|Any CPU.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug LDC|Mixed Platforms.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug LDC|Mixed Platforms.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug LDC|Win32.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug LDC|Win32.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug LDC|x64.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug|Win32.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Debug|x64.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Release|Any CPU.ActiveCfg = Release|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Release|Win32.ActiveCfg = Release|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Release|Win32.Build.0 = Release|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.Release|x64.ActiveCfg = Release|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.TestDebug|Any CPU.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.TestDebug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.TestDebug|Mixed Platforms.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.TestDebug|Win32.ActiveCfg = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.TestDebug|Win32.Build.0 = Debug|Win32
+ {DB490C05-D9F8-431C-91DD-CEE646A64FDA}.TestDebug|x64.ActiveCfg = Debug|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/dlanguilib.visualdproj b/dlanguilib.visualdproj
index 3f9bf0d8..2da59e99 100644
--- a/dlanguilib.visualdproj
+++ b/dlanguilib.visualdproj
@@ -260,8 +260,10 @@
-
+
+
+
@@ -271,24 +273,30 @@
-
+
+
+
+
+
+
+
-
+
diff --git a/dub.json b/dub.json
index 879869de..112b2256 100644
--- a/dub.json
+++ b/dub.json
@@ -4,7 +4,6 @@
"homepage": "https://github.com/buggins/dlangui",
"license": "Boost",
"authors": ["Vadim Lopatin"],
- "targetType": "none",
"buildRequirements":[
"allowWarnings"
],
diff --git a/src/dlangui/platforms/common/platform.d b/src/dlangui/platforms/common/platform.d
index 25a05303..8d94cbcc 100644
--- a/src/dlangui/platforms/common/platform.d
+++ b/src/dlangui/platforms/common/platform.d
@@ -1388,3 +1388,179 @@ mixin template APP_ENTRY_POINT() {
}
}
}
+
+version (Windows) {
+
+ /// initialize font manager - default implementation
+ /// On win32 - first it tries to init freetype, and falls back to win32 fonts.
+ /// On linux/mac - tries to init freetype with some hardcoded font paths
+ bool initFontManager() {
+ import win32.windows;
+ import std.utf;
+ import dlangui.platforms.windows.win32fonts;
+ try {
+ /// testing freetype font manager
+ version(USE_FREETYPE) {
+ import dlangui.graphics.ftfonts;
+ // trying to create font manager
+ FreeTypeFontManager ftfontMan = new FreeTypeFontManager();
+
+ import win32.shlobj;
+ string fontsPath = "c:\\Windows\\Fonts\\";
+ static if (true) { // SHGetFolderPathW not found in shell32.lib
+ WCHAR[MAX_PATH] szPath;
+ static if (false) {
+ const CSIDL_FLAG_NO_ALIAS = 0x1000;
+ const CSIDL_FLAG_DONT_UNEXPAND = 0x2000;
+ if(SUCCEEDED(SHGetFolderPathW(NULL,
+ CSIDL_FONTS|CSIDL_FLAG_NO_ALIAS|CSIDL_FLAG_DONT_UNEXPAND,
+ NULL,
+ 0,
+ szPath.ptr)))
+ {
+ fontsPath = toUTF8(fromWStringz(szPath));
+ }
+ } else {
+ if (GetWindowsDirectory(szPath.ptr, MAX_PATH - 1)) {
+ fontsPath = toUTF8(fromWStringz(szPath));
+ Log.i("Windows directory: ", fontsPath);
+ fontsPath ~= "\\Fonts\\";
+ Log.i("Fonts directory: ", fontsPath);
+ }
+ }
+ }
+ ftfontMan.registerFont(fontsPath ~ "arial.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "arialbd.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "arialbi.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "ariali.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "cour.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "courbd.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "courbi.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "couri.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "times.ttf", FontFamily.Serif, "Times New Roman", false, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "timesbd.ttf", FontFamily.Serif, "Times New Roman", false, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "timesbi.ttf", FontFamily.Serif, "Times New Roman", true, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "timesi.ttf", FontFamily.Serif, "Times New Roman", true, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "consola.ttf", FontFamily.MonoSpace, "Consolas", false, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "consolab.ttf", FontFamily.MonoSpace, "Consolas", false, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "consolai.ttf", FontFamily.MonoSpace, "Consolas", true, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "consolaz.ttf", FontFamily.MonoSpace, "Consolas", true, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "verdana.ttf", FontFamily.SansSerif, "Verdana", false, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "verdanab.ttf", FontFamily.SansSerif, "Verdana", false, FontWeight.Bold);
+ ftfontMan.registerFont(fontsPath ~ "verdanai.ttf", FontFamily.SansSerif, "Verdana", true, FontWeight.Normal);
+ ftfontMan.registerFont(fontsPath ~ "verdanaz.ttf", FontFamily.SansSerif, "Verdana", true, FontWeight.Bold);
+ if (ftfontMan.registeredFontCount()) {
+ FontManager.instance = ftfontMan;
+ } else {
+ Log.w("No fonts registered in FreeType font manager. Disabling FreeType.");
+ destroy(ftfontMan);
+ }
+ }
+ } catch (Exception e) {
+ Log.e("Cannot create FreeTypeFontManager - falling back to win32");
+ }
+
+ // use Win32 font manager
+ if (FontManager.instance is null) {
+ FontManager.instance = new Win32FontManager();
+ }
+ return true;
+ }
+
+} else {
+ version(USE_FREETYPE) {
+ bool registerFonts(FreeTypeFontManager ft, string path) {
+ if (!exists(path) || !isDir(path))
+ return false;
+ ft.registerFont(path ~ "DejaVuSans.ttf", FontFamily.SansSerif, "DejaVuSans", false, FontWeight.Normal);
+ ft.registerFont(path ~ "DejaVuSans-Bold.ttf", FontFamily.SansSerif, "DejaVuSans", false, FontWeight.Bold);
+ ft.registerFont(path ~ "DejaVuSans-Oblique.ttf", FontFamily.SansSerif, "DejaVuSans", true, FontWeight.Normal);
+ ft.registerFont(path ~ "DejaVuSans-BoldOblique.ttf", FontFamily.SansSerif, "DejaVuSans", true, FontWeight.Bold);
+ ft.registerFont(path ~ "DejaVuSansMono.ttf", FontFamily.MonoSpace, "DejaVuSansMono", false, FontWeight.Normal);
+ ft.registerFont(path ~ "DejaVuSansMono-Bold.ttf", FontFamily.MonoSpace, "DejaVuSansMono", false, FontWeight.Bold);
+ ft.registerFont(path ~ "DejaVuSansMono-Oblique.ttf", FontFamily.MonoSpace, "DejaVuSansMono", true, FontWeight.Normal);
+ ft.registerFont(path ~ "DejaVuSansMono-BoldOblique.ttf", FontFamily.MonoSpace, "DejaVuSansMono", true, FontWeight.Bold);
+ return true;
+ }
+ }
+
+ /// initialize font manager - default implementation
+ /// On win32 - first it tries to init freetype, and falls back to win32 fonts.
+ /// On linux/mac - tries to init freetype with some hardcoded font paths
+ bool initFontManager() {
+ FreeTypeFontManager ft = new FreeTypeFontManager();
+ // TODO: use FontConfig
+ Log.w("Only hardcoded paths to TTF fonts are supported under linux so far. TODO: implement fontconfig support.");
+ ft.registerFonts("/usr/share/fonts/truetype/dejavu/");
+ ft.registerFonts("/usr/share/fonts/TTF/");
+ ft.registerFonts("/usr/share/fonts/dejavu/");
+ ft.registerFonts("/usr/share/fonts/truetype/ttf-dejavu/"); // let it compile on Debian Wheezy
+ version(OSX) {
+ ft.registerFont("/Library/Fonts/Arial.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Arial Bold.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Arial Italic.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Arial Bold Italic.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Arial Narrow.ttf", FontFamily.SansSerif, "Arial Narrow", false, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Arial Narrow Bold.ttf", FontFamily.SansSerif, "Arial Narrow", false, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Arial Narrow Italic.ttf", FontFamily.SansSerif, "Arial Narrow", true, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Arial Narrow Bold Italic.ttf", FontFamily.SansSerif, "Arial Narrow", true, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Courier New.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Courier New Bold.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Courier New Italic.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Courier New Bold Italic.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Georgia.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Georgia Bold.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Georgia Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Georgia Bold Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Georgia.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Georgia Bold.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Bold);
+ ft.registerFont("/Library/Fonts/Georgia Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Normal);
+ ft.registerFont("/Library/Fonts/Georgia Bold Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Bold);
+ }
+
+ if (!ft.registeredFontCount)
+ return false;
+
+ FontManager.instance = ft;
+ return true;
+ }
+}
+
+/// call this when all resources are supposed to be freed to report counts of non-freed resources by type
+void releaseResourcesOnAppExit() {
+
+ //
+ debug setAppShuttingDownFlag();
+
+ currentTheme = null;
+ drawableCache = null;
+ imageCache = null;
+ FontManager.instance = null;
+
+ debug {
+ if (DrawBuf.instanceCount > 0) {
+ Log.e("Non-zero DrawBuf instance count when exiting: ", DrawBuf.instanceCount);
+ }
+ if (Style.instanceCount > 0) {
+ Log.e("Non-zero Style instance count when exiting: ", Style.instanceCount);
+ }
+ if (Widget.instanceCount() > 0) {
+ Log.e("Non-zero Widget instance count when exiting: ", Widget.instanceCount);
+ }
+ if (ImageDrawable.instanceCount > 0) {
+ Log.e("Non-zero ImageDrawable instance count when exiting: ", ImageDrawable.instanceCount);
+ }
+ if (Drawable.instanceCount > 0) {
+ Log.e("Non-zero Drawable instance count when exiting: ", Drawable.instanceCount);
+ }
+ version (USE_FREETYPE) {
+ import dlangui.graphics.ftfonts;
+ if (FreeTypeFontFile.instanceCount > 0) {
+ Log.e("Non-zero FreeTypeFontFile instance count when exiting: ", FreeTypeFontFile.instanceCount);
+ }
+ if (FreeTypeFont.instanceCount > 0) {
+ Log.e("Non-zero FreeTypeFont instance count when exiting: ", FreeTypeFont.instanceCount);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/dlangui/platforms/sdl/sdlapp.d b/src/dlangui/platforms/sdl/sdlapp.d
index 32b201c4..37d5c2ba 100644
--- a/src/dlangui/platforms/sdl/sdlapp.d
+++ b/src/dlangui/platforms/sdl/sdlapp.d
@@ -1251,94 +1251,20 @@ version (Windows) {
string[] args = splitCmdLine(cmdline);
Log.i("Command line params: ", args);
-
- //_cmdShow = iCmdShow;
- //_hInstance = hInstance;
- try {
- /// testing freetype font manager
- version(USE_FREETYPE) {
- import dlangui.graphics.ftfonts;
- // trying to create font manager
- FreeTypeFontManager ftfontMan = new FreeTypeFontManager();
-
- import win32.shlobj;
- string fontsPath = "c:\\Windows\\Fonts\\";
- static if (true) { // SHGetFolderPathW not found in shell32.lib
- WCHAR[MAX_PATH] szPath;
- static if (false) {
- const CSIDL_FLAG_NO_ALIAS = 0x1000;
- const CSIDL_FLAG_DONT_UNEXPAND = 0x2000;
- if(SUCCEEDED(SHGetFolderPathW(NULL,
- CSIDL_FONTS|CSIDL_FLAG_NO_ALIAS|CSIDL_FLAG_DONT_UNEXPAND,
- NULL,
- 0,
- szPath.ptr)))
- {
- fontsPath = toUTF8(fromWStringz(szPath));
- }
- } else {
- if (GetWindowsDirectory(szPath.ptr, MAX_PATH - 1)) {
- fontsPath = toUTF8(fromWStringz(szPath));
- Log.i("Windows directory: ", fontsPath);
- fontsPath ~= "\\Fonts\\";
- Log.i("Fonts directory: ", fontsPath);
- }
- }
- }
- ftfontMan.registerFont(fontsPath ~ "arial.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "arialbd.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "arialbi.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "ariali.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "cour.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "courbd.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "courbi.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "couri.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "times.ttf", FontFamily.Serif, "Times New Roman", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "timesbd.ttf", FontFamily.Serif, "Times New Roman", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "timesbi.ttf", FontFamily.Serif, "Times New Roman", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "timesi.ttf", FontFamily.Serif, "Times New Roman", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "consola.ttf", FontFamily.MonoSpace, "Consolas", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "consolab.ttf", FontFamily.MonoSpace, "Consolas", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "consolai.ttf", FontFamily.MonoSpace, "Consolas", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "consolaz.ttf", FontFamily.MonoSpace, "Consolas", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "verdana.ttf", FontFamily.SansSerif, "Verdana", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "verdanab.ttf", FontFamily.SansSerif, "Verdana", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "verdanai.ttf", FontFamily.SansSerif, "Verdana", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "verdanaz.ttf", FontFamily.SansSerif, "Verdana", true, FontWeight.Bold);
- if (ftfontMan.registeredFontCount()) {
- FontManager.instance = ftfontMan;
- } else {
- Log.w("No fonts registered in FreeType font manager. Disabling FreeType.");
- destroy(ftfontMan);
- }
- }
- } catch (Exception e) {
- Log.e("Cannot create FreeTypeFontManager - falling back to win32");
- }
-
- // use Win32 font manager
- if (FontManager.instance is null) {
- FontManager.instance = new Win32FontManager();
+ if (!initFontManager()) {
+ Log.e("******************************************************************");
+ Log.e("No font files found!!!");
+ Log.e("Currently, only hardcoded font paths implemented.");
+ Log.e("Probably you can modify sdlapp.d to add some fonts for your system.");
+ Log.e("TODO: use fontconfig");
+ Log.e("******************************************************************");
+ assert(false);
}
return sdlmain(args);
}
} else {
- bool registerFonts(FreeTypeFontManager ft, string path) {
- if (!exists(path) || !isDir(path))
- return false;
- ft.registerFont(path ~ "DejaVuSans.ttf", FontFamily.SansSerif, "DejaVuSans", false, FontWeight.Normal);
- ft.registerFont(path ~ "DejaVuSans-Bold.ttf", FontFamily.SansSerif, "DejaVuSans", false, FontWeight.Bold);
- ft.registerFont(path ~ "DejaVuSans-Oblique.ttf", FontFamily.SansSerif, "DejaVuSans", true, FontWeight.Normal);
- ft.registerFont(path ~ "DejaVuSans-BoldOblique.ttf", FontFamily.SansSerif, "DejaVuSans", true, FontWeight.Bold);
- ft.registerFont(path ~ "DejaVuSansMono.ttf", FontFamily.MonoSpace, "DejaVuSansMono", false, FontWeight.Normal);
- ft.registerFont(path ~ "DejaVuSansMono-Bold.ttf", FontFamily.MonoSpace, "DejaVuSansMono", false, FontWeight.Bold);
- ft.registerFont(path ~ "DejaVuSansMono-Oblique.ttf", FontFamily.MonoSpace, "DejaVuSansMono", true, FontWeight.Normal);
- ft.registerFont(path ~ "DejaVuSansMono-BoldOblique.ttf", FontFamily.MonoSpace, "DejaVuSansMono", true, FontWeight.Bold);
- return true;
- }
-
int main(string[] args)
{
@@ -1349,38 +1275,7 @@ version (Windows) {
Log.setLogLevel(LogLevel.Warn);
}
-
- FreeTypeFontManager ft = new FreeTypeFontManager();
- // TODO: use FontConfig
- Log.w("Only hardcoded paths to TTF fonts are supported under linux so far. TODO: implement fontconfig support.");
- ft.registerFonts("/usr/share/fonts/truetype/dejavu/");
- ft.registerFonts("/usr/share/fonts/TTF/");
- ft.registerFonts("/usr/share/fonts/dejavu/");
- ft.registerFonts("/usr/share/fonts/truetype/ttf-dejavu/"); // let it compile on Debian Wheezy
- version(OSX) {
- ft.registerFont("/Library/Fonts/Arial.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Arial Bold.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Arial Italic.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Arial Bold Italic.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Arial Narrow.ttf", FontFamily.SansSerif, "Arial Narrow", false, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Arial Narrow Bold.ttf", FontFamily.SansSerif, "Arial Narrow", false, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Arial Narrow Italic.ttf", FontFamily.SansSerif, "Arial Narrow", true, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Arial Narrow Bold Italic.ttf", FontFamily.SansSerif, "Arial Narrow", true, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Courier New.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Courier New Bold.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Courier New Italic.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Courier New Bold Italic.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Georgia.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Georgia Bold.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Georgia Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Georgia Bold Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Georgia.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Georgia Bold.ttf", FontFamily.SansSerif, "Georgia", false, FontWeight.Bold);
- ft.registerFont("/Library/Fonts/Georgia Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Normal);
- ft.registerFont("/Library/Fonts/Georgia Bold Italic.ttf", FontFamily.SansSerif, "Georgia", true, FontWeight.Bold);
- }
-
- if (!ft.registeredFontCount) {
+ if (!initFontManager()) {
Log.e("******************************************************************");
Log.e("No font files found!!!");
Log.e("Currently, only hardcoded font paths implemented.");
@@ -1390,8 +1285,6 @@ version (Windows) {
assert(false);
}
- FontManager.instance = ft;
-
return sdlmain(args);
}
}
@@ -1454,38 +1347,8 @@ int sdlmain(string[] args) {
Log.d("Destroying SDL platform");
Platform.setInstance(null);
- //
- debug setAppShuttingDownFlag();
+ releaseResourcesOnAppExit();
- currentTheme = null;
- drawableCache = null;
- imageCache = null;
- FontManager.instance = null;
- debug {
- if (DrawBuf.instanceCount > 0) {
- Log.e("Non-zero DrawBuf instance count when exiting: ", DrawBuf.instanceCount);
- }
- if (Style.instanceCount > 0) {
- Log.e("Non-zero Style instance count when exiting: ", Style.instanceCount);
- }
- if (Widget.instanceCount() > 0) {
- Log.e("Non-zero Widget instance count when exiting: ", Widget.instanceCount);
- }
- if (ImageDrawable.instanceCount > 0) {
- Log.e("Non-zero ImageDrawable instance count when exiting: ", ImageDrawable.instanceCount);
- }
- if (Drawable.instanceCount > 0) {
- Log.e("Non-zero Drawable instance count when exiting: ", Drawable.instanceCount);
- }
- version (USE_FREETYPE) {
- if (FreeTypeFontFile.instanceCount > 0) {
- Log.e("Non-zero FreeTypeFontFile instance count when exiting: ", FreeTypeFontFile.instanceCount);
- }
- if (FreeTypeFont.instanceCount > 0) {
- Log.e("Non-zero FreeTypeFont instance count when exiting: ", FreeTypeFont.instanceCount);
- }
- }
- }
Log.d("Exiting main");
return res;
diff --git a/src/dlangui/platforms/windows/winapp.d b/src/dlangui/platforms/windows/winapp.d
index 4cd1c62a..8dea9945 100644
--- a/src/dlangui/platforms/windows/winapp.d
+++ b/src/dlangui/platforms/windows/winapp.d
@@ -946,78 +946,16 @@ int myWinMain(void* hInstance, void* hPrevInstance, char* lpCmdLine, int iCmdSho
}
Platform.setInstance(w32platform);
- // TODO
- // Issue #72 Windows fix requeres following call
- // SetProcessDPIAware();
- // But it's not supported by current win32 D binding
-
- try {
- /// testing freetype font manager
- version(USE_FREETYPE) {
- import dlangui.graphics.ftfonts;
- // trying to create font manager
- FreeTypeFontManager ftfontMan = new FreeTypeFontManager();
-
- import win32.shlobj;
- string fontsPath = "c:\\Windows\\Fonts\\";
- static if (true) { // SHGetFolderPathW not found in shell32.lib
- WCHAR[MAX_PATH] szPath;
- static if (false) {
- const CSIDL_FLAG_NO_ALIAS = 0x1000;
- const CSIDL_FLAG_DONT_UNEXPAND = 0x2000;
- if(SUCCEEDED(SHGetFolderPathW(NULL,
- CSIDL_FONTS|CSIDL_FLAG_NO_ALIAS|CSIDL_FLAG_DONT_UNEXPAND,
- NULL,
- 0,
- szPath.ptr)))
- {
- fontsPath = toUTF8(fromWStringz(szPath));
- }
- } else {
- if (GetWindowsDirectory(szPath.ptr, MAX_PATH - 1)) {
- fontsPath = toUTF8(fromWStringz(szPath));
- Log.i("Windows directory: ", fontsPath);
- fontsPath ~= "\\Fonts\\";
- Log.i("Fonts directory: ", fontsPath);
- }
- }
- }
- ftfontMan.registerFont(fontsPath ~ "arial.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "arialbd.ttf", FontFamily.SansSerif, "Arial", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "arialbi.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "ariali.ttf", FontFamily.SansSerif, "Arial", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "cour.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "courbd.ttf", FontFamily.MonoSpace, "Courier New", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "courbi.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "couri.ttf", FontFamily.MonoSpace, "Courier New", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "times.ttf", FontFamily.Serif, "Times New Roman", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "timesbd.ttf", FontFamily.Serif, "Times New Roman", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "timesbi.ttf", FontFamily.Serif, "Times New Roman", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "timesi.ttf", FontFamily.Serif, "Times New Roman", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "consola.ttf", FontFamily.MonoSpace, "Consolas", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "consolab.ttf", FontFamily.MonoSpace, "Consolas", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "consolai.ttf", FontFamily.MonoSpace, "Consolas", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "consolaz.ttf", FontFamily.MonoSpace, "Consolas", true, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "verdana.ttf", FontFamily.SansSerif, "Verdana", false, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "verdanab.ttf", FontFamily.SansSerif, "Verdana", false, FontWeight.Bold);
- ftfontMan.registerFont(fontsPath ~ "verdanai.ttf", FontFamily.SansSerif, "Verdana", true, FontWeight.Normal);
- ftfontMan.registerFont(fontsPath ~ "verdanaz.ttf", FontFamily.SansSerif, "Verdana", true, FontWeight.Bold);
- if (ftfontMan.registeredFontCount()) {
- FontManager.instance = ftfontMan;
- } else {
- Log.w("No fonts registered in FreeType font manager. Disabling FreeType.");
- destroy(ftfontMan);
- }
- }
- } catch (Exception e) {
- Log.e("Cannot create FreeTypeFontManager - falling back to win32");
- }
-
- // use Win32 font manager
- if (FontManager.instance is null) {
- FontManager.instance = new Win32FontManager();
- }
+ if (!initFontManager()) {
+ Log.e("******************************************************************");
+ Log.e("No font files found!!!");
+ Log.e("Currently, only hardcoded font paths implemented.");
+ Log.e("Probably you can modify sdlapp.d to add some fonts for your system.");
+ Log.e("TODO: use fontconfig");
+ Log.e("******************************************************************");
+ assert(false);
+ }
currentTheme = createDefaultTheme();
@@ -1048,32 +986,8 @@ int myWinMain(void* hInstance, void* hPrevInstance, char* lpCmdLine, int iCmdSho
int result = UIAppMain(args);
Log.i("UIAppMain returned ", result);
- debug {
- if (DrawBuf.instanceCount > 0) {
- Log.e("Non-zero DrawBuf instance count when exiting: ", DrawBuf.instanceCount);
- }
- if (Style.instanceCount > 0) {
- Log.e("Non-zero Style instance count when exiting: ", Style.instanceCount);
- }
- if (Widget.instanceCount() > 0) {
- Log.e("Non-zero Widget instance count when exiting: ", Widget.instanceCount);
- }
- if (ImageDrawable.instanceCount > 0) {
- Log.e("Non-zero ImageDrawable instance count when exiting: ", ImageDrawable.instanceCount);
- }
- if (Drawable.instanceCount > 0) {
- Log.e("Non-zero Drawable instance count when exiting: ", Drawable.instanceCount);
- }
- version (USE_FREETYPE) {
- import dlangui.graphics.ftfonts;
- if (FreeTypeFontFile.instanceCount > 0) {
- Log.e("Non-zero FreeTypeFontFile instance count when exiting: ", FreeTypeFontFile.instanceCount);
- }
- if (FreeTypeFont.instanceCount > 0) {
- Log.e("Non-zero FreeTypeFont instance count when exiting: ", FreeTypeFont.instanceCount);
- }
- }
- }
+ releaseResourcesOnAppExit();
+
Log.d("Exiting main");
return result;
diff --git a/src/dlangui/widgets/controls.d b/src/dlangui/widgets/controls.d
index 6f8c68bf..8fe66470 100644
--- a/src/dlangui/widgets/controls.d
+++ b/src/dlangui/widgets/controls.d
@@ -994,10 +994,10 @@ class ScrollBar : AbstractSlider, OnClickHandler {
}
}
-/// interface - slot for onClick
-interface OnDrawHandler {
- void doDraw(CanvasWidget canvas, DrawBuf buf, Rect rc);
-}
+/// interface - slot for onClick
+interface OnDrawHandler {
+ void doDraw(CanvasWidget canvas, DrawBuf buf, Rect rc);
+}
/// canvas widget - draw on it either by overriding of doDraw() or by assigning of onDrawListener
class CanvasWidget : Widget {