Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/application/discord/overlay_manager.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-03-08 20:09:27 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2024-03-08 20:09:27 +1100
commit6c562470f3a7cd24ed6501f54422564ed42051ea (patch)
tree2e422b3316b6e77cbc35085a9ce63b4c6d0912d3 /source/application/discord/overlay_manager.cpp
parent89fe1bf15bc458df6c63f1aaeac42a4883efbfd5 (diff)
Merge launcher branch
Diffstat (limited to 'source/application/discord/overlay_manager.cpp')
-rw-r--r--source/application/discord/overlay_manager.cpp134
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