From 7026d88a46a9df7b073b18bb171a66cd0089715c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 4 Apr 2016 23:59:42 +0200 Subject: re-add std::vector just for cairo's set_dash() This fixes crash with the window version. --- gtk2_ardour/luainstance.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/luainstance.cc b/gtk2_ardour/luainstance.cc index 6f293986bf..8197284e69 100644 --- a/gtk2_ardour/luainstance.cc +++ b/gtk2_ardour/luainstance.cc @@ -102,6 +102,20 @@ LuaInstance::register_hooks (lua_State* L) void LuaInstance::bind_cairo (lua_State* L) { + /* std::vector for set_dash() + * for Windows (DLL, .exe) this needs to be bound in the same memory context as "Cairo". + * + * The std::vector<> argument in set_dash() has a fixed address in ardour.exe, while + * the address of the one in libardour.dll is mapped when loading the .dll + * + * see LuaBindings::set_session() for a detailed explanation + */ + luabridge::getGlobalNamespace (L) + .beginNamespace ("C") + .beginStdVector ("DoubleVector") + .endClass () + .endNamespace (); + luabridge::getGlobalNamespace (L) .beginNamespace ("Cairo") .beginClass ("Context") @@ -114,7 +128,7 @@ LuaInstance::bind_cairo (lua_State* L) .addFunction ("set_line_width", &Cairo::Context::set_line_width) .addFunction ("set_line_cap", &Cairo::Context::set_line_cap) .addFunction ("set_line_join", &Cairo::Context::set_line_join) - .addFunction ("set_dash", (void (Cairo::Context::*)(std::vector&, double))&Cairo::Context::set_dash) + .addFunction ("set_dash", (void (Cairo::Context::*)(const std::vector&, double))&Cairo::Context::set_dash) .addFunction ("unset_dash", &Cairo::Context::unset_dash) .addFunction ("translate", &Cairo::Context::translate) .addFunction ("scale", &Cairo::Context::scale) -- cgit v1.2.3