StateDrawables: .xml file can describe list of other drawables to choose based on widget's State (.xml files from android themes can be used directly)

imageCache allows to cache unpacked images

drawableCache provides access by resource id (string, usually filename w/o extension) to drawables located in specified list of resource directories.

Styles and Themes

Styles and themes are a bit similar to ones in Android API.

Theme is a container for styles. Can be load from XML theme resource file.

Styles are accessible in theme by string ID.

Styles can be nested to form hierarchy - when some attribute is missing in style, value from base style will be used.

State substyles are supported: allow to change widget appearance dynamically based on its state.

Widgets use style attributes directly from assigned style. When some attribute is being changed in widget, it creates its own copy of base style,
which allows to modify some of attributes, while getting base style attributes if they are not changed in widget. This trick can minimize memory usage for widget attributes when
standard values are used.

Current default theme is similar to one in MS Visual Studio 2013

Resources can be either embedded into executable or loaded from external resource directory in runtime

Important notice

If build of your app is failed due to dlangui or its dependencies, probably you have not upgraded dependencies.

In your project options Build/Compiling/Compiling - specify Version constants as "USEOPENGL;USESDL;USE_FREETYPE;EmbedStandardResources" (EmbedStandardResources is required if you want to embed your own additional resources into executable)

If your project needs to embed some resources into executable (usually from "views" directory), specify all directories which contain resources in Build/Compiling/Compiling/Extra Compiler Options, e.g.:

To hack DlangIDE project, you can clone it from https://github.com/buggins/dlangide.git into the same directory dlangui is cloned to. Then just open solution dlangide/dlangide-monod-linux.sln with mono-d.

In your project options Build/Compiling/Compiling - specify Version constants as "USEFREETYPE;USEOPENGL;EmbedStandardResources;Unicode;windows" (EmbedStandardResources is required if you want to embed your own additional resources into executable)

If your project needs to embed some resources into executable (usually from "views" directory), specify all directories which contain resources in Build/Compiling/Compiling/Extra Compiler Options, e.g.:

To hack DlangIDE project, you can clone it from https://github.com/buggins/dlangide.git into the same directory dlangui is cloned to. Then just open solution dlangide/dlangide-monod-linux.sln with mono-d.

In your project options Build/Compiling/Compiling - specify Version constants as "USEFREETYPE;USEOPENGL;EmbedStandardResources;Unicode;windows" (EmbedStandardResources is required if you want to embed your own additional resources into executable)

If your project needs to embed some resources into executable (usually from "views" directory), specify all directories which contain resources in Build/Compiling/Compiling/Extra Compiler Options, e.g.:

To hack DlangIDE project, you can clone it from https://github.com/buggins/dlangide.git into the same directory dlangui is cloned to. Then just open solution dlangide/dlangide-monod-linux.sln with mono-d.

Linux builds (DUB)

Uses SDL2 as a backend.

Uses FreeType for font rendering.

Uses FontConfig to get list of available fonts.

OpenGL is can be optionally used for better drawing performance.

libsdl2, libfreetype, libfontconfig

E.g. in Ubuntu, you can use following command to enable SDL2 backend builds:

sudo apt-get install libsdl2-dev

In runtime, .so for following libraries are being loaded (binary packages required):

freetype, opengl, fontconfig

Build and run on Linux using DUB:

cd examples/example1
dub run dlangui:example1

Other platforms

Other platforms support may be added easy

Third party components used

DerelictGL3 - for OpenGL support

DerelictFT + FreeType library support under linux and optionally under Windows.