overlay: Add build, title name, and file name to overlay

This commit is contained in:
RadWolfie 2022-05-09 10:23:13 -05:00
parent 8b35389c71
commit 05a7acf13e
6 changed files with 67 additions and 12 deletions

View File

@ -117,8 +117,11 @@ static struct {
static const char* section_overlay = "overlay";
static struct {
const char* build_hash = "Build Hash";
const char* FPS = "FPS";
const char* hle_lle_stats = "HLE/LLE Stats";
const char* title_name = "Title Name";
const char* file_name = "File Name";
} sect_overlay_keys;
static const char* section_audio = "audio";
@ -547,8 +550,11 @@ bool Settings::LoadConfig()
// ==== Overlay Begin =========
m_overlay.build_hash = m_si.GetBoolValue(section_overlay, sect_overlay_keys.build_hash, false);
m_overlay.fps = m_si.GetBoolValue(section_overlay, sect_overlay_keys.FPS, false);
m_overlay.hle_lle_stats = m_si.GetBoolValue(section_overlay, sect_overlay_keys.hle_lle_stats, false);
m_overlay.title_name = m_si.GetBoolValue(section_overlay, sect_overlay_keys.title_name, false);
m_overlay.file_name = m_si.GetBoolValue(section_overlay, sect_overlay_keys.file_name, false);
// ==== Overlay End ===========
@ -735,8 +741,11 @@ bool Settings::Save(std::string file_path)
// ==== Overlay Begin =======
m_si.SetBoolValue(section_overlay, sect_overlay_keys.build_hash, m_overlay.build_hash, nullptr, true);
m_si.SetBoolValue(section_overlay, sect_overlay_keys.FPS, m_overlay.fps, nullptr, true);
m_si.SetBoolValue(section_overlay, sect_overlay_keys.hle_lle_stats, m_overlay.hle_lle_stats, nullptr, true);
m_si.SetBoolValue(section_overlay, sect_overlay_keys.title_name, m_overlay.title_name, nullptr, true);
m_si.SetBoolValue(section_overlay, sect_overlay_keys.file_name, m_overlay.file_name, nullptr, true);
// ==== Overlay End =========

View File

@ -41,8 +41,6 @@
#include "common/AddressRanges.h"
#include "common/xbox/Types.hpp"
namespace fs = std::filesystem;
#ifdef CXBXR_EMU
extern "C" void CxbxKrnlPrintUEM(ULONG);
#endif
@ -58,12 +56,11 @@ Xbe::Xbe(const char *x_szFilename, bool bFromGUI)
FILE *XbeFile = fopen(x_szFilename, "rb");
// verify Xbe file was opened successfully
if(XbeFile == 0)
{
using namespace fs; // limit its scope inside here
std::string XbeName = std::filesystem::path(x_szFilename).filename().string(); // recover the xbe name
// verify Xbe file was opened successfully
if(XbeFile == 0) {
std::string XbeName = path(x_szFilename).filename().string(); // recover the xbe name
// NOTE: the check for the existence of the child window is necessary because the user could have previously loaded the dashboard,
// removed/changed the path and attempt to load it again from the recent list, which will crash CxbxInitWindow below
// Note that GetHwnd(), CxbxKrnl_hEmuParent and HalReturnToFirmware are all not suitable here for various reasons
@ -113,6 +110,14 @@ Xbe::Xbe(const char *x_szFilename, bool bFromGUI)
printf("OK\n");
// remember the Xbe file name
{
printf("Xbe::Xbe: Storing Xbe File Name...");
strncpy(m_szFileName, XbeName.c_str(), ARRAY_SIZE(m_szFileName) * sizeof(char));
}
printf("OK\n");
// read Xbe image header
{
printf("Xbe::Xbe: Reading Image Header...");

View File

@ -258,6 +258,9 @@ class Xbe : public Error
// Xbe original path
char m_szPath[MAX_PATH];
// Xbe original file name
char m_szFileName[MAX_PATH];
// Xbe ascii title, translated from certificate title
char m_szAsciiTitle[41];

View File

@ -27,8 +27,11 @@
// Intended to store as permanent settings
typedef struct {
bool build_hash;
bool fps;
bool hle_lle_stats;
bool title_name;
bool file_name;
} overlay_settings;
// Intended for EmuShared only below

View File

@ -120,8 +120,11 @@ void ImGuiUI::DrawMenu()
if (ImGui::BeginMenu("Settings")) {
if (ImGui::BeginMenu("Overlay")) {
bool bChanged = false;
bChanged |= ImGui::MenuItem("Show Build Hash", NULL, &m_settings.build_hash);
bChanged |= ImGui::MenuItem("Show FPS", NULL, &m_settings.fps);
bChanged |= ImGui::MenuItem("Show HLE/LLE Stats", NULL, &m_settings.hle_lle_stats);
bChanged |= ImGui::MenuItem("Show Title Name", NULL, &m_settings.title_name);
bChanged |= ImGui::MenuItem("Show File Name", NULL, &m_settings.file_name);
if (bChanged) {
g_EmuShared->SetOverlaySettings(&m_settings);
ipc_send_gui_update(IPC_UPDATE_GUI::OVERLAY, 1);
@ -139,14 +142,18 @@ void ImGuiUI::DrawMenu()
void ImGuiUI::DrawWidgets()
{
if (m_settings.fps || m_settings.hle_lle_stats) {
if (m_settings.fps
|| m_settings.hle_lle_stats
||m_settings.title_name
|| m_settings.file_name) {
ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x - (IMGUI_MIN_DIST_SIDE/* * m_backbuffer_scale*/),
IMGUI_MIN_DIST_TOP/* * m_backbuffer_scale*/), ImGuiCond_Always, ImVec2(1.0f, 0.0f));
ImGui::SetNextWindowSize(ImVec2(200.0f/* * m_backbuffer_scale*/, 0.0f));
ImGui::SetNextWindowBgAlpha(0.5f);
if (ImGui::Begin("overlay_stats", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoNav |
if (ImGui::Begin("overlay_stats_topright", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoNav |
ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollbar |
ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing)) {
@ -180,8 +187,36 @@ void ImGuiUI::DrawWidgets()
- ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x);
ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), flagString.c_str());
}
if (m_settings.title_name) {
ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Title: %.41s", CxbxKrnl_Xbe->m_szAsciiTitle);
}
if (m_settings.file_name) {
ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "File: %.260s", CxbxKrnl_Xbe->m_szFileName);
}
}
ImGui::End();
}
if (m_settings.build_hash) {
ImGui::SetNextWindowPos(ImVec2(IMGUI_MIN_DIST_SIDE, ImGui::GetIO().DisplaySize.y - IMGUI_MIN_DIST_SIDE/* * m_backbuffer_scale*/),
ImGuiCond_Always, ImVec2(0.0f, 1.0f));
//ImGui::SetNextWindowSize(ImVec2(200.0f/* * m_backbuffer_scale*/, 0.0f));
ImGui::SetNextWindowBgAlpha(0.5f);
if (ImGui::Begin("overlay_stats_bottom", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoNav |
ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollbar |
ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing)) {
if (m_settings.build_hash) {
ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Build: %s", GetGitVersionStr());
}
}
ImGui::End();
}
ImGuiWindowFlags input_handler = m_is_focus ? ImGuiWindowFlags_None : ImGuiWindowFlags_NoInputs;

View File

@ -50,8 +50,8 @@ void ImGuiVideo::DrawWidgets(bool is_focus, ImGuiWindowFlags input_handler)
if (ImGui::CollapsingHeader("Vertex Buffer Cache", ImGuiTreeNodeFlags_DefaultOpen)) {
VertexBufferConverter.DrawCacheStats();
}
ImGui::End();
}
ImGui::End();
}
// Render the lightgun laser