#if !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif #include "overlay_manager.h" #include "core.h" #include #include namespace discord { class OverlayEvents final { public: static void OnToggle(void* callbackData, bool locked) { auto* core = reinterpret_cast(callbackData); if (!core) { return; } auto& module = core->OverlayManager(); module.OnToggle((locked != 0)); } }; IDiscordOverlayEvents OverlayManager::events_{ &OverlayEvents::OnToggle, }; void OverlayManager::IsEnabled(bool* enabled) { if (!enabled) { return; } internal_->is_enabled(internal_, reinterpret_cast(enabled)); } void OverlayManager::IsLocked(bool* locked) { if (!locked) { return; } internal_->is_locked(internal_, reinterpret_cast(locked)); } void OverlayManager::SetLocked(bool locked, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->set_locked(internal_, (locked ? 1 : 0), cb.release(), wrapper); } void OverlayManager::OpenActivityInvite(ActivityActionType type, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->open_activity_invite( internal_, static_cast(type), cb.release(), wrapper); } void OverlayManager::OpenGuildInvite(char const* code, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->open_guild_invite(internal_, const_cast(code), cb.release(), wrapper); } void OverlayManager::OpenVoiceSettings(std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->open_voice_settings(internal_, cb.release(), wrapper); } } // namespace discord