X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=theme.h;h=bbef35ef350d1513afc92aa8216836b13b36b937;hb=4d4386716f258413132b8696315cb4efbf2c8b45;hp=f7897c77f9bf6b16ae3e5927af9b4c212ae21cc4;hpb=36afa76e579a3afaaf6826a76f33baff049a54ed;p=nageru diff --git a/theme.h b/theme.h index f7897c7..bbef35e 100644 --- a/theme.h +++ b/theme.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "bmusb/bmusb.h" @@ -82,31 +83,38 @@ public: } #endif - void register_video_signal_connection(LiveInputWrapper *live_input, FFmpegCapture *capture) + void register_video_signal_connection(movit::EffectChain *chain, LiveInputWrapper *live_input, FFmpegCapture *capture) { - video_signal_connections.emplace_back(live_input, capture); - } - - std::vector> get_video_signal_connections() const - { - return video_signal_connections; + video_signal_connections[chain].emplace_back(VideoSignalConnection { live_input, capture }); } #ifdef HAVE_CEF - void register_html_signal_connection(LiveInputWrapper *live_input, CEFCapture *capture) + void register_html_signal_connection(movit::EffectChain *chain, LiveInputWrapper *live_input, CEFCapture *capture) { - html_signal_connections.emplace_back(live_input, capture); + html_signal_connections[chain].emplace_back(CEFSignalConnection { live_input, capture }); } +#endif + + struct MenuEntry { + std::string text; + int lua_ref; + }; + std::vector get_theme_menu() { return theme_menu; } // Can be empty for no menu. + void theme_menu_entry_clicked(int lua_ref); - std::vector> get_html_signal_connections() const + // Will be invoked every time the theme sets a new menu. + // Is not invoked for a menu that exists at the time of the callback. + void set_theme_menu_callback(std::function callback) { - return html_signal_connections; + theme_menu_callback = callback; } -#endif private: void register_constants(); void register_class(const char *class_name, const luaL_Reg *funcs); + int set_theme_menu(lua_State *L); + + std::string theme_path; std::mutex m; lua_State *L; // Protected by . @@ -119,13 +127,27 @@ private: std::map signal_to_card_mapping; // Protected by . std::vector video_inputs; - std::vector> video_signal_connections; + struct VideoSignalConnection { + LiveInputWrapper *wrapper; + FFmpegCapture *source; + }; + std::unordered_map> + video_signal_connections; #ifdef HAVE_CEF std::vector html_inputs; - std::vector> html_signal_connections; + struct CEFSignalConnection { + LiveInputWrapper *wrapper; + CEFCapture *source; + }; + std::unordered_map> + html_signal_connections; #endif + std::vector theme_menu; + std::function theme_menu_callback; + friend class LiveInputWrapper; + friend int ThemeMenu_set(lua_State *L); }; // LiveInputWrapper is a facade on top of an YCbCrInput, exposed to