refactoring + make fonts variables static

This commit is contained in:
otavepto 2024-03-07 02:57:48 +02:00 committed by otavepto
parent d3c4026447
commit 827f8a472a
2 changed files with 82 additions and 89 deletions

View File

@ -91,7 +91,8 @@ struct Overlay_Achievement
#include <atomic> #include <atomic>
#include "InGameOverlay/RendererHook.h" #include "InGameOverlay/RendererHook.h"
struct NotificationsIndexes { struct NotificationsIndexes
{
int top_left = 0, top_center = 0, top_right = 0; int top_left = 0, top_center = 0, top_right = 0;
int bot_left = 0, bot_center = 0, bot_right = 0; int bot_left = 0, bot_center = 0, bot_right = 0;
}; };
@ -155,33 +156,43 @@ class Steam_Overlay
void Callback(Common_Message* msg); void Callback(Common_Message* msg);
void RunCallbacks(); void RunCallbacks();
bool FriendJoinable(std::pair<const Friend, friend_window_state> &f); bool is_friend_joinable(std::pair<const Friend, friend_window_state> &f);
bool IHaveLobby(); bool got_lobby();
bool submit_notification(notification_type type, const std::string &msg, std::pair<const Friend, friend_window_state> *frd = nullptr, const std::weak_ptr<uint64_t> &icon = {}); bool submit_notification(notification_type type, const std::string &msg, std::pair<const Friend, friend_window_state> *frd = nullptr, const std::weak_ptr<uint64_t> &icon = {});
void NotifySoundUserInvite(friend_window_state& friend_state); void notify_sound_user_invite(friend_window_state& friend_state);
void NotifySoundUserAchievement(); void notify_sound_user_achievement();
void NotifySoundAutoAcceptFriendInvite(); void notify_sound_auto_accept_friend_invite();
// Right click on friend // Right click on friend
void BuildContextMenu(Friend const& frd, friend_window_state &state); void build_friend_context_menu(Friend const& frd, friend_window_state &state);
// Double click on friend // Double click on friend
void BuildFriendWindow(Friend const& frd, friend_window_state &state); void build_friend_window(Friend const& frd, friend_window_state &state);
// Notifications like achievements, chat and invitations // Notifications like achievements, chat and invitations
void SetNextNotificationPos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx); void set_next_notification_pos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx);
void BuildNotifications(int width, int height); void build_notifications(int width, int height);
// invite a single friend // invite a single friend
void InviteFriend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking); void invite_friend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking);
void renderer_hook_init_thread(); void renderer_hook_init_thread();
void CreateFonts(); void create_fonts();
void LoadAudio(); void load_audio();
void HookReady(bool ready); void overlay_state_hook(bool ready);
void allow_renderer_frame_processing(bool state); void allow_renderer_frame_processing(bool state);
void overlay_proc();
void add_auto_accept_invite_notification();
void AddInviteNotification(std::pair<const Friend, friend_window_state> &wnd_state);
void add_chat_message_notification(std::string const& message);
bool open_overlay_hook(bool toggle);
public: public:
Steam_Overlay(Settings* settings, SteamCallResults* callback_results, SteamCallBacks* callbacks, RunEveryRunCB* run_every_runcb, Networking *network); Steam_Overlay(Settings* settings, SteamCallResults* callback_results, SteamCallBacks* callbacks, RunEveryRunCB* run_every_runcb, Networking *network);
@ -197,15 +208,12 @@ public:
void SetupOverlay(); void SetupOverlay();
void UnSetupOverlay(); void UnSetupOverlay();
void OverlayProc();
void OpenOverlayInvite(CSteamID lobbyId); void OpenOverlayInvite(CSteamID lobbyId);
void OpenOverlay(const char* pchDialog); void OpenOverlay(const char* pchDialog);
void OpenOverlayWebpage(const char* pchURL); void OpenOverlayWebpage(const char* pchURL);
bool ShowOverlay() const; bool ShowOverlay() const;
void ShowOverlay(bool state); void ShowOverlay(bool state);
bool OpenOverlayHook(bool toggle);
void SetLobbyInvite(Friend friendId, uint64 lobbyId); void SetLobbyInvite(Friend friendId, uint64 lobbyId);
void SetRichInvite(Friend friendId, const char* connect_str); void SetRichInvite(Friend friendId, const char* connect_str);
@ -213,10 +221,7 @@ public:
void FriendConnect(Friend _friend); void FriendConnect(Friend _friend);
void FriendDisconnect(Friend _friend); void FriendDisconnect(Friend _friend);
void AddChatMessageNotification(std::string const& message);
void AddAchievementNotification(nlohmann::json const& ach); void AddAchievementNotification(nlohmann::json const& ach);
void AddInviteNotification(std::pair<const Friend, friend_window_state> &wnd_state);
void AddAutoAcceptInviteNotification();
}; };
#else #else
@ -237,18 +242,12 @@ public:
void SetupOverlay() {} void SetupOverlay() {}
void UnSetupOverlay() {} void UnSetupOverlay() {}
void HookReady(bool ready) {}
void CreateFonts() {}
void OverlayProc() {}
void OpenOverlayInvite(CSteamID lobbyId) {} void OpenOverlayInvite(CSteamID lobbyId) {}
void OpenOverlay(const char* pchDialog) {} void OpenOverlay(const char* pchDialog) {}
void OpenOverlayWebpage(const char* pchURL) {} void OpenOverlayWebpage(const char* pchURL) {}
bool ShowOverlay() const { return false; } bool ShowOverlay() const { return false; }
void ShowOverlay(bool state) {} void ShowOverlay(bool state) {}
bool OpenOverlayHook(bool toggle) { return false; }
void SetLobbyInvite(Friend friendId, uint64 lobbyId) {} void SetLobbyInvite(Friend friendId, uint64 lobbyId) {}
void SetRichInvite(Friend friendId, const char* connect_str) {} void SetRichInvite(Friend friendId, const char* connect_str) {}
@ -256,10 +255,7 @@ public:
void FriendConnect(Friend _friend) {} void FriendConnect(Friend _friend) {}
void FriendDisconnect(Friend _friend) {} void FriendDisconnect(Friend _friend) {}
void AddChatMessageNotification(std::string const& message) {}
void AddAchievementNotification(nlohmann::json const& ach) {} void AddAchievementNotification(nlohmann::json const& ach) {}
void AddInviteNotification(std::pair<const Friend, friend_window_state> &wnd_state) {}
void AddAutoAcceptInviteNotification() {}
}; };
#endif #endif

View File

@ -214,11 +214,12 @@ void Steam_Overlay::renderer_hook_init_thread()
if (settings->overlay_hook_delay_sec > 0) { if (settings->overlay_hook_delay_sec > 0) {
// give games some time to init their renderer (DirectX, OpenGL, etc...) // give games some time to init their renderer (DirectX, OpenGL, etc...)
std::this_thread::sleep_for(std::chrono::seconds(settings->overlay_hook_delay_sec)); std::this_thread::sleep_for(std::chrono::seconds(settings->overlay_hook_delay_sec));
// early exit before we get a chance to do anything }
if (!setup_overlay_called) {
PRINT_DEBUG("Steam_Overlay::renderer_hook_init early exit before renderer detection\n"); // early exit before we get a chance to do anything
return; if (!setup_overlay_called) {
} PRINT_DEBUG("Steam_Overlay::renderer_hook_init early exit before renderer detection\n");
return;
} }
// request renderer detection // request renderer detection
@ -243,18 +244,18 @@ void Steam_Overlay::renderer_hook_init_thread()
std::lock_guard<std::recursive_mutex> lock(overlay_mutex); std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
_renderer = future_renderer.get(); _renderer = future_renderer.get();
PRINT_DEBUG("Steam_Overlay::renderer_hook_init got renderer %p\n", _renderer); PRINT_DEBUG("Steam_Overlay::renderer_hook_init got renderer %p\n", _renderer);
CreateFonts(); create_fonts();
LoadAudio(); load_audio();
// setup renderer callbacks // setup renderer callbacks
const static std::set<InGameOverlay::ToggleKey> overlay_toggle_keys = { const static std::set<InGameOverlay::ToggleKey> overlay_toggle_keys = {
InGameOverlay::ToggleKey::SHIFT, InGameOverlay::ToggleKey::TAB InGameOverlay::ToggleKey::SHIFT, InGameOverlay::ToggleKey::TAB
}; };
auto overlay_toggle_callback = [this]() { OpenOverlayHook(true); }; auto overlay_toggle_callback = [this]() { open_overlay_hook(true); };
_renderer->OverlayProc = [this]() { OverlayProc(); }; _renderer->OverlayProc = [this]() { overlay_proc(); };
_renderer->OverlayHookReady = [this](InGameOverlay::OverlayHookState state) { _renderer->OverlayHookReady = [this](InGameOverlay::OverlayHookState state) {
PRINT_DEBUG("Steam_Overlay hook state changed to <%i>\n", (int)state); PRINT_DEBUG("Steam_Overlay hook state changed to <%i>\n", (int)state);
HookReady(state == InGameOverlay::OverlayHookState::Ready || state == InGameOverlay::OverlayHookState::Reset); overlay_state_hook(state == InGameOverlay::OverlayHookState::Ready || state == InGameOverlay::OverlayHookState::Reset);
}; };
bool started = _renderer->StartHook(overlay_toggle_callback, overlay_toggle_keys, &fonts_atlas); bool started = _renderer->StartHook(overlay_toggle_callback, overlay_toggle_keys, &fonts_atlas);
@ -285,7 +286,6 @@ void Steam_Overlay::UnSetupOverlay()
// allow the future_renderer thread to exit if needed // allow the future_renderer thread to exit if needed
std::this_thread::sleep_for(std::chrono::milliseconds(500 + 50)); std::this_thread::sleep_for(std::chrono::milliseconds(500 + 50));
InGameOverlay::StopRendererDetection();
if (_renderer) { if (_renderer) {
for (auto &ach : achievements) { for (auto &ach : achievements) {
@ -299,9 +299,9 @@ void Steam_Overlay::UnSetupOverlay()
} }
// called initially and when window size is updated // called initially and when window size is updated
void Steam_Overlay::HookReady(bool ready) void Steam_Overlay::overlay_state_hook(bool ready)
{ {
PRINT_DEBUG("Steam_Overlay::HookReady %i\n", (int)ready); PRINT_DEBUG("Steam_Overlay::overlay_state_hook %i\n", (int)ready);
// NOTE usage of local objects here cause an exception when this is called with false state // NOTE usage of local objects here cause an exception when this is called with false state
// the reason is that by the time this hook is called, the object may have been already destructed // the reason is that by the time this hook is called, the object may have been already destructed
@ -319,7 +319,7 @@ void Steam_Overlay::HookReady(bool ready)
if (ready && !initialized_imgui && ImGui::GetCurrentContext()) { if (ready && !initialized_imgui && ImGui::GetCurrentContext()) {
initialized_imgui = true; initialized_imgui = true;
PRINT_DEBUG("Steam_Overlay::HookReady initializing ImGui config\n"); PRINT_DEBUG("Steam_Overlay::overlay_state_hook initializing ImGui config\n");
ImGuiIO &io = ImGui::GetIO(); ImGuiIO &io = ImGui::GetIO();
ImGuiStyle &style = ImGui::GetStyle(); ImGuiStyle &style = ImGui::GetStyle();
@ -355,7 +355,7 @@ void Steam_Overlay::OpenOverlay(const char* pchDialog)
// TODO: Show pages depending on pchDialog // TODO: Show pages depending on pchDialog
if ((strncmp(pchDialog, "Friends", sizeof("Friends") - 1) == 0) && (settings->overlayAutoAcceptInvitesCount() > 0)) { if ((strncmp(pchDialog, "Friends", sizeof("Friends") - 1) == 0) && (settings->overlayAutoAcceptInvitesCount() > 0)) {
PRINT_DEBUG("Steam_Overlay won't open overlay's friends list because some friends are defined in the auto accept list\n"); PRINT_DEBUG("Steam_Overlay won't open overlay's friends list because some friends are defined in the auto accept list\n");
AddAutoAcceptInviteNotification(); add_auto_accept_invite_notification();
} else { } else {
ShowOverlay(true); ShowOverlay(true);
} }
@ -377,7 +377,7 @@ bool Steam_Overlay::ShowOverlay() const
} }
// called when the user presses SHIFT + TAB // called when the user presses SHIFT + TAB
bool Steam_Overlay::OpenOverlayHook(bool toggle) bool Steam_Overlay::open_overlay_hook(bool toggle)
{ {
std::lock_guard<std::recursive_mutex> lock(overlay_mutex); std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
if (toggle) { if (toggle) {
@ -390,7 +390,7 @@ bool Steam_Overlay::OpenOverlayHook(bool toggle)
void Steam_Overlay::allow_renderer_frame_processing(bool state) void Steam_Overlay::allow_renderer_frame_processing(bool state)
{ {
// this is very important internally it calls the necessary fuctions // this is very important internally it calls the necessary fuctions
// to properly update ImGui window size on the next OverlayProc() call // to properly update ImGui window size on the next overlay_proc() call
if (state) { if (state) {
// clip the cursor // clip the cursor
_renderer->HideAppInputs(true); _renderer->HideAppInputs(true);
@ -426,7 +426,7 @@ void Steam_Overlay::ShowOverlay(bool state)
} }
void Steam_Overlay::NotifySoundUserInvite(friend_window_state& friend_state) void Steam_Overlay::notify_sound_user_invite(friend_window_state& friend_state)
{ {
if (settings->disable_overlay_friend_notification) return; if (settings->disable_overlay_friend_notification) return;
if (!(friend_state.window_state & window_state_show) || !show_overlay) if (!(friend_state.window_state & window_state_show) || !show_overlay)
@ -442,7 +442,7 @@ void Steam_Overlay::NotifySoundUserInvite(friend_window_state& friend_state)
} }
} }
void Steam_Overlay::NotifySoundUserAchievement() void Steam_Overlay::notify_sound_user_achievement()
{ {
if (settings->disable_overlay_achievement_notification) return; if (settings->disable_overlay_achievement_notification) return;
if (!show_overlay) if (!show_overlay)
@ -455,7 +455,7 @@ void Steam_Overlay::NotifySoundUserAchievement()
} }
} }
void Steam_Overlay::NotifySoundAutoAcceptFriendInvite() void Steam_Overlay::notify_sound_auto_accept_friend_invite()
{ {
#ifdef __WINDOWS__ #ifdef __WINDOWS__
if (notif_achievement_wav_custom_inuse) { if (notif_achievement_wav_custom_inuse) {
@ -481,7 +481,7 @@ void Steam_Overlay::SetLobbyInvite(Friend friendId, uint64 lobbyId)
// Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows) // Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows)
frd.window_state &= ~window_state_rich_invite; frd.window_state &= ~window_state_rich_invite;
AddInviteNotification(*i); AddInviteNotification(*i);
NotifySoundUserInvite(i->second); notify_sound_user_invite(i->second);
} }
} }
@ -500,7 +500,7 @@ void Steam_Overlay::SetRichInvite(Friend friendId, const char* connect_str)
// Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows) // Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows)
frd.window_state &= ~window_state_lobby_invite; frd.window_state &= ~window_state_lobby_invite;
AddInviteNotification(*i); AddInviteNotification(*i);
NotifySoundUserInvite(i->second); notify_sound_user_invite(i->second);
} }
} }
@ -562,9 +562,9 @@ bool Steam_Overlay::submit_notification(notification_type type, const std::strin
return true; return true;
} }
void Steam_Overlay::AddChatMessageNotification(std::string const &message) void Steam_Overlay::add_chat_message_notification(std::string const &message)
{ {
PRINT_DEBUG("Steam_Overlay::AddChatMessageNotification '%s'\n", message.c_str()); PRINT_DEBUG("Steam_Overlay::add_chat_message_notification '%s'\n", message.c_str());
std::lock_guard<std::recursive_mutex> lock(overlay_mutex); std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
if (settings->disable_overlay_friend_notification) return; if (settings->disable_overlay_friend_notification) return;
@ -619,7 +619,7 @@ void Steam_Overlay::AddAchievementNotification(nlohmann::json const& ach)
{}, {},
icon_rsrc icon_rsrc
); );
NotifySoundUserAchievement(); notify_sound_user_achievement();
} }
} }
@ -638,9 +638,9 @@ void Steam_Overlay::AddInviteNotification(std::pair<const Friend, friend_window_
submit_notification(notification_type_invite, tmp, &wnd_state); submit_notification(notification_type_invite, tmp, &wnd_state);
} }
void Steam_Overlay::AddAutoAcceptInviteNotification() void Steam_Overlay::add_auto_accept_invite_notification()
{ {
PRINT_DEBUG("Steam_Overlay::AddAutoAcceptInviteNotification\n"); PRINT_DEBUG("Steam_Overlay::add_auto_accept_invite_notification\n");
std::lock_guard<std::recursive_mutex> lock(overlay_mutex); std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
if (!Ready()) return; if (!Ready()) return;
@ -648,12 +648,12 @@ void Steam_Overlay::AddAutoAcceptInviteNotification()
snprintf(tmp, sizeof(tmp), "%s", translationAutoAcceptFriendInvite[current_language]); snprintf(tmp, sizeof(tmp), "%s", translationAutoAcceptFriendInvite[current_language]);
submit_notification(notification_type_auto_accept_invite, tmp); submit_notification(notification_type_auto_accept_invite, tmp);
NotifySoundAutoAcceptFriendInvite(); notify_sound_auto_accept_friend_invite();
} }
bool Steam_Overlay::FriendJoinable(std::pair<const Friend, friend_window_state> &f) bool Steam_Overlay::is_friend_joinable(std::pair<const Friend, friend_window_state> &f)
{ {
PRINT_DEBUG("Steam_Overlay::FriendJoinable " "%" PRIu64 "\n", f.first.id()); PRINT_DEBUG("Steam_Overlay::is_friend_joinable " "%" PRIu64 "\n", f.first.id());
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
Steam_Friends* steamFriends = get_steam_client()->steam_friends; Steam_Friends* steamFriends = get_steam_client()->steam_friends;
@ -668,7 +668,7 @@ bool Steam_Overlay::FriendJoinable(std::pair<const Friend, friend_window_state>
return false; return false;
} }
bool Steam_Overlay::IHaveLobby() bool Steam_Overlay::got_lobby()
{ {
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
Steam_Friends* steamFriends = get_steam_client()->steam_friends; Steam_Friends* steamFriends = get_steam_client()->steam_friends;
@ -681,7 +681,7 @@ bool Steam_Overlay::IHaveLobby()
return false; return false;
} }
void Steam_Overlay::BuildContextMenu(Friend const& frd, friend_window_state& state) void Steam_Overlay::build_friend_context_menu(Friend const& frd, friend_window_state& state)
{ {
if (ImGui::BeginPopupContextItem("Friends_ContextMenu", 1)) { if (ImGui::BeginPopupContextItem("Friends_ContextMenu", 1)) {
// this is set to true if any button was clicked // this is set to true if any button was clicked
@ -713,7 +713,6 @@ void Steam_Overlay::BuildContextMenu(Friend const& frd, friend_window_state& sta
// user clicked on "accept game invite" // user clicked on "accept game invite"
std::string translationJoin_tmp(translationJoin[current_language]); std::string translationJoin_tmp(translationJoin[current_language]);
translationJoin_tmp.append("##PopupAcceptInvite"); translationJoin_tmp.append("##PopupAcceptInvite");
if (state.joinable && ImGui::Button(translationJoin_tmp.c_str())) { if (state.joinable && ImGui::Button(translationJoin_tmp.c_str())) {
close_popup = true; close_popup = true;
// don't bother adding this friend if the button "invite all" was clicked // don't bother adding this friend if the button "invite all" was clicked
@ -733,7 +732,7 @@ void Steam_Overlay::BuildContextMenu(Friend const& frd, friend_window_state& sta
} }
} }
void Steam_Overlay::BuildFriendWindow(Friend const& frd, friend_window_state& state) void Steam_Overlay::build_friend_window(Friend const& frd, friend_window_state& state)
{ {
if (!(state.window_state & window_state_show)) if (!(state.window_state & window_state_show))
return; return;
@ -837,7 +836,7 @@ void Steam_Overlay::BuildFriendWindow(Friend const& frd, friend_window_state& st
} }
// set the position of the next notification // set the position of the next notification
void Steam_Overlay::SetNextNotificationPos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx) void Steam_Overlay::set_next_notification_pos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx)
{ {
// 0 on the y-axis is top, 0 on the x-axis is left // 0 on the y-axis is top, 0 on the x-axis is left
@ -895,7 +894,7 @@ void Steam_Overlay::SetNextNotificationPos(float width, float height, float font
ImGui::SetNextWindowPos(ImVec2( x, y )); ImGui::SetNextWindowPos(ImVec2( x, y ));
} }
void Steam_Overlay::BuildNotifications(int width, int height) void Steam_Overlay::build_notifications(int width, int height)
{ {
auto now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()); auto now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch());
float font_size = ImGui::GetFontSize(); float font_size = ImGui::GetFontSize();
@ -905,7 +904,7 @@ void Steam_Overlay::BuildNotifications(int width, int height)
for (auto it = notifications.begin(); it != notifications.end(); ++it) { for (auto it = notifications.begin(); it != notifications.end(); ++it) {
auto elapsed_notif = now - it->start_time; auto elapsed_notif = now - it->start_time;
SetNextNotificationPos(width, height, font_size, (notification_type)it->type, idx); set_next_notification_pos(width, height, font_size, (notification_type)it->type, idx);
ImGui::SetNextWindowSize(ImVec2( width * Notification::width_percent, Notification::height * font_size )); ImGui::SetNextWindowSize(ImVec2( width * Notification::width_percent, Notification::height * font_size ));
if ( elapsed_notif < Notification::fade_in) { // still appearing (fading in) if ( elapsed_notif < Notification::fade_in) { // still appearing (fading in)
@ -987,22 +986,22 @@ void Steam_Overlay::BuildNotifications(int width, int height)
} }
} }
void Steam_Overlay::CreateFonts() void Steam_Overlay::create_fonts()
{ {
static bool configured_font = false; static std::atomic<bool> create_fonts_called = false;
bool not_created_yet = false;
if (configured_font) return; if (!create_fonts_called.compare_exchange_weak(not_created_yet, true)) return;
configured_font = true;
float font_size = settings->overlay_appearance.font_size; float font_size = settings->overlay_appearance.font_size;
ImFontConfig fontcfg{}; static ImFontConfig fontcfg{};
fontcfg.PixelSnapH = true; fontcfg.PixelSnapH = true;
fontcfg.OversampleH = 1; fontcfg.OversampleH = 1;
fontcfg.OversampleV = 1; fontcfg.OversampleV = 1;
fontcfg.SizePixels = font_size; fontcfg.SizePixels = font_size;
ImFontGlyphRangesBuilder font_builder{}; static ImFontGlyphRangesBuilder font_builder{};
font_builder.AddRanges(fonts_atlas.GetGlyphRangesDefault());
for (auto &x : achievements) { for (auto &x : achievements) {
font_builder.AddText(x.title.c_str()); font_builder.AddText(x.title.c_str());
font_builder.AddText(x.description.c_str()); font_builder.AddText(x.description.c_str());
@ -1047,9 +1046,7 @@ void Steam_Overlay::CreateFonts()
font_builder.AddText(translationPlaying[i]); font_builder.AddText(translationPlaying[i]);
font_builder.AddText(translationAutoAcceptFriendInvite[i]); font_builder.AddText(translationAutoAcceptFriendInvite[i]);
} }
font_builder.AddRanges(fonts_atlas.GetGlyphRangesDefault()); static ImVector<ImWchar> ranges{};
ImVector<ImWchar> ranges{};
font_builder.BuildRanges(&ranges); font_builder.BuildRanges(&ranges);
fontcfg.GlyphRanges = ranges.Data; fontcfg.GlyphRanges = ranges.Data;
@ -1063,7 +1060,7 @@ void Steam_Overlay::CreateFonts()
reset_LastError(); reset_LastError();
} }
void Steam_Overlay::LoadAudio() void Steam_Overlay::load_audio()
{ {
std::string file_path{}; std::string file_path{};
std::string file_name{}; std::string file_name{};
@ -1117,7 +1114,7 @@ static inline bool ImGuiHelper_BeginListBox(const char* label, int items_count)
} }
// Try to make this function as short as possible or it might affect game's fps. // Try to make this function as short as possible or it might affect game's fps.
void Steam_Overlay::OverlayProc() void Steam_Overlay::overlay_proc()
{ {
std::lock_guard<std::recursive_mutex> lock(overlay_mutex); std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
if (!Ready()) return; if (!Ready()) return;
@ -1134,13 +1131,13 @@ void Steam_Overlay::OverlayProc()
if (notifications.size()) { if (notifications.size()) {
ImGui::PushFont(font_notif); ImGui::PushFont(font_notif);
BuildNotifications(io.DisplaySize.x, io.DisplaySize.y); build_notifications(io.DisplaySize.x, io.DisplaySize.y);
ImGui::PopFont(); ImGui::PopFont();
// after showing all notifications, and if we won't show the overlay // after showing all notifications, and if we won't show the overlay
// then disable frame rendering // then disable frame rendering
if (notifications.empty() && !show_overlay) { if (notifications.empty() && !show_overlay) {
PRINT_DEBUG("Steam_Overlay::OverlayProc disabled frame processing (no request to show overlay and 0 notifications)\n"); PRINT_DEBUG("Steam_Overlay::overlay_proc disabled frame processing (no request to show overlay and 0 notifications)\n");
Steam_Overlay::allow_renderer_frame_processing(false); Steam_Overlay::allow_renderer_frame_processing(false);
} }
} }
@ -1236,13 +1233,13 @@ void Steam_Overlay::OverlayProc()
ImGui::PushID(i.second.id-base_friend_window_id+base_friend_item_id); ImGui::PushID(i.second.id-base_friend_window_id+base_friend_item_id);
ImGui::Selectable(i.second.window_title.c_str(), false, ImGuiSelectableFlags_AllowDoubleClick); ImGui::Selectable(i.second.window_title.c_str(), false, ImGuiSelectableFlags_AllowDoubleClick);
BuildContextMenu(i.first, i.second); build_friend_context_menu(i.first, i.second);
if (ImGui::IsItemClicked() && ImGui::IsMouseDoubleClicked(0)) { if (ImGui::IsItemClicked() && ImGui::IsMouseDoubleClicked(0)) {
i.second.window_state |= window_state_show; i.second.window_state |= window_state_show;
} }
ImGui::PopID(); ImGui::PopID();
BuildFriendWindow(i.first, i.second); build_friend_window(i.first, i.second);
}); });
ImGui::EndListBox(); ImGui::EndListBox();
} }
@ -1439,8 +1436,8 @@ void Steam_Overlay::Callback(Common_Message *msg)
friend_info->second.window_state |= window_state_need_attention; friend_info->second.window_state |= window_state_need_attention;
} }
AddChatMessageNotification(friend_info->first.name() + ": " + steam_message.message()); add_chat_message_notification(friend_info->first.name() + ": " + steam_message.message());
NotifySoundUserInvite(friend_info->second); notify_sound_user_invite(friend_info->second);
} }
} }
} }
@ -1519,10 +1516,10 @@ void Steam_Overlay::RunCallbacks()
save_settings = false; save_settings = false;
} }
i_have_lobby = IHaveLobby(); i_have_lobby = got_lobby();
std::for_each(friends.begin(), friends.end(), [this](std::pair<Friend const, friend_window_state> &i) std::for_each(friends.begin(), friends.end(), [this](std::pair<Friend const, friend_window_state> &i)
{ {
i.second.joinable = FriendJoinable(i); i.second.joinable = is_friend_joinable(i);
}); });
while (!has_friend_action.empty()) { while (!has_friend_action.empty()) {
@ -1556,7 +1553,7 @@ void Steam_Overlay::RunCallbacks()
} }
// The user clicked on "Invite" (but invite all wasn't clicked) // The user clicked on "Invite" (but invite all wasn't clicked)
if (friend_info->second.window_state & window_state_invite) { if (friend_info->second.window_state & window_state_invite) {
InviteFriend(friend_id, steamFriends, steamMatchmaking); invite_friend(friend_id, steamFriends, steamMatchmaking);
friend_info->second.window_state &= ~window_state_invite; friend_info->second.window_state &= ~window_state_invite;
} }
@ -1613,13 +1610,13 @@ void Steam_Overlay::RunCallbacks()
for (auto &fr : friends) { for (auto &fr : friends) {
if (fr.first.appid() == current_appid) { // friend is playing the same game if (fr.first.appid() == current_appid) { // friend is playing the same game
uint64 friend_id = (uint64)fr.first.id(); uint64 friend_id = (uint64)fr.first.id();
InviteFriend(friend_id, steamFriends, steamMatchmaking); invite_friend(friend_id, steamFriends, steamMatchmaking);
} }
} }
} }
} }
void Steam_Overlay::InviteFriend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking) void Steam_Overlay::invite_friend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking)
{ {
std::string connect_str = steamFriends->GetFriendRichPresence(settings->get_local_steam_id(), "connect"); std::string connect_str = steamFriends->GetFriendRichPresence(settings->get_local_steam_id(), "connect");
if (connect_str.length() > 0) { if (connect_str.length() > 0) {