diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-03-08 20:09:27 +1100 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-03-08 20:09:27 +1100 |
commit | 6c562470f3a7cd24ed6501f54422564ed42051ea (patch) | |
tree | 2e422b3316b6e77cbc35085a9ce63b4c6d0912d3 /source/application/discord/overlay_manager.cpp | |
parent | 89fe1bf15bc458df6c63f1aaeac42a4883efbfd5 (diff) |
Merge launcher branch
Diffstat (limited to 'source/application/discord/overlay_manager.cpp')
-rw-r--r-- | source/application/discord/overlay_manager.cpp | 134 |
1 files changed, 133 insertions, 1 deletions
diff --git a/source/application/discord/overlay_manager.cpp b/source/application/discord/overlay_manager.cpp index 51ee827..f4b1fba 100644 --- a/source/application/discord/overlay_manager.cpp +++ b/source/application/discord/overlay_manager.cpp @@ -13,7 +13,7 @@ namespace discord { class OverlayEvents final { public: - static void OnToggle(void* callbackData, bool locked) + static void DISCORD_CALLBACK OnToggle(void* callbackData, bool locked) { auto* core = reinterpret_cast<Core*>(callbackData); if (!core) { @@ -94,4 +94,136 @@ void OverlayManager::OpenGuildInvite(char const* code, std::function<void(Result internal_->open_guild_invite(internal_, const_cast<char*>(code), cb.release(), wrapper); } +void OverlayManager::OpenVoiceSettings(std::function<void(Result)> callback) +{ + static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { + std::unique_ptr<std::function<void(Result)>> cb( + reinterpret_cast<std::function<void(Result)>*>(callbackData)); + if (!cb || !(*cb)) { + return; + } + (*cb)(static_cast<Result>(result)); + }; + std::unique_ptr<std::function<void(Result)>> cb{}; + cb.reset(new std::function<void(Result)>(std::move(callback))); + internal_->open_voice_settings(internal_, cb.release(), wrapper); +} + +Result OverlayManager::InitDrawingDxgi(IDXGISwapChain* swapchain, bool useMessageForwarding) +{ + auto result = + internal_->init_drawing_dxgi(internal_, swapchain, (useMessageForwarding ? 1 : 0)); + return static_cast<Result>(result); +} + +void OverlayManager::OnPresent() +{ + internal_->on_present(internal_); +} + +void OverlayManager::ForwardMessage(MSG* message) +{ + internal_->forward_message(internal_, message); +} + +void OverlayManager::KeyEvent(bool down, char const* keyCode, KeyVariant variant) +{ + internal_->key_event(internal_, + (down ? 1 : 0), + const_cast<char*>(keyCode), + static_cast<EDiscordKeyVariant>(variant)); +} + +void OverlayManager::CharEvent(char const* character) +{ + internal_->char_event(internal_, const_cast<char*>(character)); +} + +void OverlayManager::MouseButtonEvent(std::uint8_t down, + std::int32_t clickCount, + MouseButton which, + std::int32_t x, + std::int32_t y) +{ + internal_->mouse_button_event( + internal_, down, clickCount, static_cast<EDiscordMouseButton>(which), x, y); +} + +void OverlayManager::MouseMotionEvent(std::int32_t x, std::int32_t y) +{ + internal_->mouse_motion_event(internal_, x, y); +} + +void OverlayManager::ImeCommitText(char const* text) +{ + internal_->ime_commit_text(internal_, const_cast<char*>(text)); +} + +void OverlayManager::ImeSetComposition(char const* text, + ImeUnderline* underlines, + std::uint32_t underlinesLength, + std::int32_t from, + std::int32_t to) +{ + internal_->ime_set_composition(internal_, + const_cast<char*>(text), + reinterpret_cast<DiscordImeUnderline*>(underlines), + underlinesLength, + from, + to); +} + +void OverlayManager::ImeCancelComposition() +{ + internal_->ime_cancel_composition(internal_); +} + +void OverlayManager::SetImeCompositionRangeCallback( + std::function<void(std::int32_t, std::int32_t, Rect*, std::uint32_t)> + onImeCompositionRangeChanged) +{ + static auto wrapper = [](void* callbackData, + int32_t from, + int32_t to, + DiscordRect* bounds, + uint32_t boundsLength) -> void { + std::unique_ptr<std::function<void(std::int32_t, std::int32_t, Rect*, std::uint32_t)>> cb( + reinterpret_cast<std::function<void(std::int32_t, std::int32_t, Rect*, std::uint32_t)>*>( + callbackData)); + if (!cb || !(*cb)) { + return; + } + (*cb)(from, to, reinterpret_cast<Rect*>(bounds), boundsLength); + }; + std::unique_ptr<std::function<void(std::int32_t, std::int32_t, Rect*, std::uint32_t)>> cb{}; + cb.reset(new std::function<void(std::int32_t, std::int32_t, Rect*, std::uint32_t)>( + std::move(onImeCompositionRangeChanged))); + internal_->set_ime_composition_range_callback(internal_, cb.release(), wrapper); +} + +void OverlayManager::SetImeSelectionBoundsCallback( + std::function<void(Rect, Rect, bool)> onImeSelectionBoundsChanged) +{ + static auto wrapper = + [](void* callbackData, DiscordRect anchor, DiscordRect focus, bool isAnchorFirst) -> void { + std::unique_ptr<std::function<void(Rect, Rect, bool)>> cb( + reinterpret_cast<std::function<void(Rect, Rect, bool)>*>(callbackData)); + if (!cb || !(*cb)) { + return; + } + (*cb)(*reinterpret_cast<Rect const*>(&anchor), + *reinterpret_cast<Rect const*>(&focus), + (isAnchorFirst != 0)); + }; + std::unique_ptr<std::function<void(Rect, Rect, bool)>> cb{}; + cb.reset(new std::function<void(Rect, Rect, bool)>(std::move(onImeSelectionBoundsChanged))); + internal_->set_ime_selection_bounds_callback(internal_, cb.release(), wrapper); +} + +bool OverlayManager::IsPointInsideClickZone(std::int32_t x, std::int32_t y) +{ + auto result = internal_->is_point_inside_click_zone(internal_, x, y); + return (result != 0); +} + } // namespace discord |