module test2; import std.stdio; import std.string, std.conv; import gtkc.gobject, gtkc.gobjecttypes; import ccb.SharedLibrary; enum ClutterInitError { SUCCESS = 1, UNKNOWN = 0, THREADS = -1, BACKEND = -2, INTERNAL = -3 } struct ClutterActor { uint flags; } struct ClutterStage {} struct ClutterContainer {} struct ClutterColor { ubyte red, green, blue, alpha; } char* cstring(string s) { return cast(char*)toStringz(s); } void main(string[] args) { auto clutter = new SharedLibrary("libclutter-glx-1.0.so", RTLD_NOW | RTLD_GLOBAL); auto clutter_init = clutter.getSymbol!(ClutterInitError function(int*, char***))("clutter_init"); auto clutter_main = clutter.getSymbol!(void function())("clutter_main"); auto clutter_main_quit = clutter.getSymbol!(void function())("clutter_main_quit"); auto clutter_stage_get_default = clutter.getSymbol!(ClutterActor* function())("clutter_stage_get_default"); auto clutter_actor_set_size = clutter.getSymbol!(void function(ClutterActor*, float, float))("clutter_actor_set_size"); auto clutter_actor_show_all = clutter.getSymbol!(void function(ClutterActor*))("clutter_actor_show_all"); auto clutter_text_new_full = clutter.getSymbol!(ClutterActor* function(char*, char*, ClutterColor*))("clutter_text_new_full"); auto clutter_container_add_actor = clutter.getSymbol!(void function(ClutterContainer*, ClutterActor*))("clutter_container_add_actor"); auto err = clutter_init(null, null); writeln(to!string(err)); if (err != ClutterInitError.SUCCESS) return; ClutterActor* stage; ClutterActor* textbox; ClutterColor txtColor = { 0, 0, 100, 255}; stage = clutter_stage_get_default(); clutter_actor_set_size(stage, 400, 400); textbox = clutter_text_new_full(cstring("Sans 24"), cstring("Hello, world"), &txtColor); clutter_container_add_actor(cast(ClutterContainer*)stage, textbox); clutter_actor_show_all(stage); g_signal_connect_object(stage, cstring("key-press-event"), cast(GCallback)clutter_main_quit, null, cast(GConnectFlags)0); clutter_main(); }