diff options
author | Robin Gareus <robin@gareus.org> | 2017-02-18 16:11:18 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-02-18 16:11:18 +0100 |
commit | 4755c703f4b01cd7de01bda0c72686b93e34e120 (patch) | |
tree | b9730e049e820087b96c909a3f318eab8f8df102 | |
parent | c40ccd5aaeb6e1c6ffd7f7685567444a26ded76f (diff) |
move color_to_rgba to LuaAPI for consistency
-rw-r--r-- | libs/ardour/ardour/lua_api.h | 16 | ||||
-rw-r--r-- | libs/ardour/lua_api.cc | 26 | ||||
-rw-r--r-- | libs/ardour/luabindings.cc | 1 |
3 files changed, 43 insertions, 0 deletions
diff --git a/libs/ardour/ardour/lua_api.h b/libs/ardour/ardour/lua_api.h index c5ce0986ce..cbbe750164 100644 --- a/libs/ardour/ardour/lua_api.h +++ b/libs/ardour/ardour/lua_api.h @@ -167,6 +167,22 @@ namespace ARDOUR { namespace LuaAPI { int hsla_to_rgba (lua_State *lua); /** + * A convenience function to expand RGBA parameters from an integer + * + * convert a Canvas::Color (uint32_t 0xRRGGBBAA) into + * double RGBA values which can be passed as parameters to + * Cairo::Context::set_source_rgba + * + * Example: + * @code + * local r, g, b, a = ARDOUR.LuaAPI.color_to_rgba (0x88aa44ff) + * cairo_ctx:set_source_rgba (ARDOUR.LuaAPI.color_to_rgba (0x11336699) + * @endcode + * @returns 4 parameters: red, green, blue, alpha (in range 0..1) + */ + int color_to_rgba (lua_State *lua); + + /** * Creates a filename from a series of elements using the correct separator for filenames. * * No attempt is made to force the resulting filename to be an absolute path. diff --git a/libs/ardour/lua_api.cc b/libs/ardour/lua_api.cc index 080ba12841..7da81b2965 100644 --- a/libs/ardour/lua_api.cc +++ b/libs/ardour/lua_api.cc @@ -503,6 +503,32 @@ ARDOUR::LuaAPI::hsla_to_rgba (lua_State *L) } int +ARDOUR::LuaAPI::color_to_rgba (lua_State *L) +{ + int top = lua_gettop (L); + if (top < 1) { + return luaL_argerror (L, 1, "invalid number of arguments, color_to_rgba (uint32_t)"); + } + uint32_t color = luabridge::Stack<uint32_t>::get (L, 1); + double r, g, b, a; + + /* libardour is no user of libcanvas, otherwise + * we could just call + * ArdourCanvas::color_to_rgba (color, r, g, b, a); + */ + r = ((color >> 24) & 0xff) / 255.0; + g = ((color >> 16) & 0xff) / 255.0; + b = ((color >> 8) & 0xff) / 255.0; + a = ((color >> 0) & 0xff) / 255.0; + + luabridge::Stack <double>::push (L, r); + luabridge::Stack <double>::push (L, g); + luabridge::Stack <double>::push (L, b); + luabridge::Stack <double>::push (L, a); + return 4; +} + +int ARDOUR::LuaAPI::build_filename (lua_State *L) { std::vector<std::string> elem; diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index 586d3fd99c..51cd397efd 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -1930,6 +1930,7 @@ LuaBindings::common (lua_State* L) .addRefFunction ("get_plugin_insert_param", ARDOUR::LuaAPI::get_plugin_insert_param) .addCFunction ("plugin_automation", ARDOUR::LuaAPI::plugin_automation) .addCFunction ("hsla_to_rgba", ARDOUR::LuaAPI::hsla_to_rgba) + .addCFunction ("color_to_rgba", ARDOUR::LuaAPI::color_to_rgba) .addFunction ("usleep", Glib::usleep) .addCFunction ("build_filename", ARDOUR::LuaAPI::build_filename) .addFunction ("new_noteptr", ARDOUR::LuaAPI::new_noteptr) |