Fix rounding gaps in header menus
This commit is contained in:
parent
56e9f5962c
commit
54052ac7ec
@ -25,14 +25,6 @@ void CheatMenu::DrawWindow()
|
|||||||
{
|
{
|
||||||
if (m_bShowMenu)
|
if (m_bShowMenu)
|
||||||
{
|
{
|
||||||
static ImVec2 fScreenSize = ImVec2(-1, -1);
|
|
||||||
ImVec2 size(screen::GetScreenWidth(), screen::GetScreenHeight());
|
|
||||||
|
|
||||||
if (fScreenSize.x != -1 && fScreenSize.y != -1)
|
|
||||||
{
|
|
||||||
m_fMenuSize.x += (size.x - fScreenSize.x) / 4.0f;
|
|
||||||
m_fMenuSize.y += (size.y - fScreenSize.y) / 1.2f;
|
|
||||||
}
|
|
||||||
ImGui::SetNextWindowSize(m_fMenuSize);
|
ImGui::SetNextWindowSize(m_fMenuSize);
|
||||||
|
|
||||||
if (ImGui::Begin(MENU_TITLE, NULL, ImGuiWindowFlags_NoCollapse || ImGuiWindowFlags_NoTitleBar))
|
if (ImGui::Begin(MENU_TITLE, NULL, ImGuiWindowFlags_NoCollapse || ImGuiWindowFlags_NoTitleBar))
|
||||||
@ -51,7 +43,14 @@ void CheatMenu::DrawWindow()
|
|||||||
Ui::DrawHeaders(header);
|
Ui::DrawHeaders(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_fMenuSize = ImGui::GetWindowSize();
|
if (m_bSizeChangedExternal)
|
||||||
|
{
|
||||||
|
m_bSizeChangedExternal = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_fMenuSize = ImGui::GetWindowSize();
|
||||||
|
}
|
||||||
gConfig.SetValue("window.sizeX", m_fMenuSize.x);
|
gConfig.SetValue("window.sizeX", m_fMenuSize.x);
|
||||||
gConfig.SetValue("window.sizeY", m_fMenuSize.y);
|
gConfig.SetValue("window.sizeY", m_fMenuSize.y);
|
||||||
|
|
||||||
@ -77,7 +76,7 @@ CheatMenu::CheatMenu()
|
|||||||
pCallbackFunc = std::bind(&DrawWindow);
|
pCallbackFunc = std::bind(&DrawWindow);
|
||||||
|
|
||||||
// Load menu settings
|
// Load menu settings
|
||||||
Ui::m_HeaderId = gConfig.GetValue("window.id", std::string(""));
|
Ui::m_HeaderId = gConfig.GetValue("window.idnum", -1);
|
||||||
m_fMenuSize.x = gConfig.GetValue("window.sizeX", screen::GetScreenWidth() / 4.0f);
|
m_fMenuSize.x = gConfig.GetValue("window.sizeX", screen::GetScreenWidth() / 4.0f);
|
||||||
m_fMenuSize.y = gConfig.GetValue("window.sizeY", screen::GetScreenHeight() / 1.2f);
|
m_fMenuSize.y = gConfig.GetValue("window.sizeY", screen::GetScreenHeight() / 1.2f);
|
||||||
srand(CTimer::m_snTimeInMilliseconds);
|
srand(CTimer::m_snTimeInMilliseconds);
|
||||||
@ -179,3 +178,10 @@ void CheatMenu::ApplyStyle()
|
|||||||
style->Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.06f, 0.05f, 0.06f, 0.95f);
|
style->Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.06f, 0.05f, 0.06f, 0.95f);
|
||||||
style->Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.6f);
|
style->Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.6f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CheatMenu::ResetMenuSize()
|
||||||
|
{
|
||||||
|
m_fMenuSize.x = screen::GetScreenWidth() / 4.0f;
|
||||||
|
m_fMenuSize.y = screen::GetScreenHeight() / 1.2f;
|
||||||
|
m_bSizeChangedExternal = true;
|
||||||
|
}
|
||||||
|
@ -25,6 +25,7 @@ class CheatMenu : Hook, Animation, Game, Menu, Ped, Player, Teleport, Vehicle, V
|
|||||||
private:
|
private:
|
||||||
static inline bool m_bShowMenu = false;
|
static inline bool m_bShowMenu = false;
|
||||||
static inline ImVec2 m_fMenuSize = ImVec2(screen::GetScreenWidth() / 4, screen::GetScreenHeight() / 1.2);
|
static inline ImVec2 m_fMenuSize = ImVec2(screen::GetScreenWidth() / 4, screen::GetScreenHeight() / 1.2);
|
||||||
|
static inline bool m_bSizeChangedExternal = false;
|
||||||
|
|
||||||
static inline CallbackTable header{
|
static inline CallbackTable header{
|
||||||
{"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Ped", &Ped::Draw},
|
{"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Ped", &Ped::Draw},
|
||||||
@ -42,4 +43,6 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CheatMenu();
|
CheatMenu();
|
||||||
|
|
||||||
|
static void ResetMenuSize();
|
||||||
};
|
};
|
||||||
|
15
src/menu.cpp
15
src/menu.cpp
@ -4,6 +4,7 @@
|
|||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "updater.h"
|
#include "updater.h"
|
||||||
|
#include "cheatmenu.h"
|
||||||
|
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
#include "teleport.h"
|
#include "teleport.h"
|
||||||
@ -343,6 +344,20 @@ void Menu::ProcessCommands()
|
|||||||
|
|
||||||
void Menu::Draw()
|
void Menu::Draw()
|
||||||
{
|
{
|
||||||
|
ImGui::Spacing();
|
||||||
|
if (ImGui::Button("Reset config", ImVec2(Ui::GetSize(2))))
|
||||||
|
{
|
||||||
|
gConfig.m_Data.clear();
|
||||||
|
SetHelpMessage("Config reset", false, false, false);
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("Reset size", ImVec2(Ui::GetSize(2))))
|
||||||
|
{
|
||||||
|
CheatMenu::ResetMenuSize();
|
||||||
|
SetHelpMessage("Menu size reset", false, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Spacing();
|
||||||
if (ImGui::BeginTabBar("Menu", ImGuiTabBarFlags_NoTooltip + ImGuiTabBarFlags_FittingPolicyScroll))
|
if (ImGui::BeginTabBar("Menu", ImGuiTabBarFlags_NoTooltip + ImGuiTabBarFlags_FittingPolicyScroll))
|
||||||
{
|
{
|
||||||
if (ImGui::BeginTabItem("Overlay"))
|
if (ImGui::BeginTabItem("Overlay"))
|
||||||
|
49
src/ui.cpp
49
src/ui.cpp
@ -227,29 +227,52 @@ void Ui::CenterdText(const std::string& text)
|
|||||||
void Ui::DrawHeaders(CallbackTable& data)
|
void Ui::DrawHeaders(CallbackTable& data)
|
||||||
{
|
{
|
||||||
static void* pCallback;
|
static void* pCallback;
|
||||||
static int buttonInRow = 3;
|
ImVec2 size = GetSize(3, false);
|
||||||
ImVec2 size = GetSize(buttonInRow, false);
|
|
||||||
ImGuiStyle &style = ImGui::GetStyle();
|
ImGuiStyle &style = ImGui::GetStyle();
|
||||||
ImVec4 buttonCol = style.Colors[ImGuiCol_Button];
|
|
||||||
|
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
|
||||||
ImGui::PushFont(FontMgr::GetFont("header"));
|
ImGui::PushFont(FontMgr::GetFont("header"));
|
||||||
|
|
||||||
|
ImDrawList *pDrawList = ImGui::GetWindowDrawList();
|
||||||
for (int i = 0; i < data.size(); ++i)
|
for (int i = 0; i < data.size(); ++i)
|
||||||
{
|
{
|
||||||
const char* btn_text = data[i].first.c_str();
|
const char* btn_text = data[i].first.c_str();
|
||||||
|
|
||||||
if (btn_text == m_HeaderId)
|
ImVec4 color;
|
||||||
|
if (i == m_HeaderId)
|
||||||
{
|
{
|
||||||
style.Colors[ImGuiCol_Button] = style.Colors[ImGuiCol_ButtonActive];
|
color = style.Colors[ImGuiCol_ButtonActive];
|
||||||
pCallback = data[i].second;
|
pCallback = data[i].second;
|
||||||
}
|
}
|
||||||
if (ImGui::Button(btn_text, size))
|
else
|
||||||
{
|
{
|
||||||
m_HeaderId = btn_text;
|
color = style.Colors[ImGuiCol_Button];
|
||||||
gConfig.SetValue("window.id", m_HeaderId);
|
}
|
||||||
|
|
||||||
|
if (ImGui::InvisibleButton(btn_text, size))
|
||||||
|
{
|
||||||
|
m_HeaderId = i;
|
||||||
|
gConfig.SetValue("window.idnum", m_HeaderId);
|
||||||
pCallback = data[i].second;
|
pCallback = data[i].second;
|
||||||
}
|
}
|
||||||
style.Colors[ImGuiCol_Button] = buttonCol;
|
|
||||||
|
if (ImGui::IsItemHovered())
|
||||||
|
{
|
||||||
|
color = style.Colors[ImGuiCol_ButtonHovered];
|
||||||
|
}
|
||||||
|
|
||||||
|
// hardcoded
|
||||||
|
ImDrawFlags flags = ImDrawFlags_RoundCornersNone;
|
||||||
|
if (i == 0) flags = ImDrawFlags_RoundCornersTopLeft;
|
||||||
|
if (i == 2) flags = ImDrawFlags_RoundCornersTopRight;
|
||||||
|
if (i == 6) flags = ImDrawFlags_RoundCornersBottomLeft;
|
||||||
|
if (i == 8) flags = ImDrawFlags_RoundCornersBottomRight;
|
||||||
|
|
||||||
|
ImVec2 min = ImGui::GetItemRectMin();
|
||||||
|
ImVec2 max = ImGui::GetItemRectMax();
|
||||||
|
ImVec2 size = ImGui::CalcTextSize(btn_text);
|
||||||
|
pDrawList->AddRectFilled(min, max, ImGui::GetColorU32(color), style.FrameRounding, flags);
|
||||||
|
ImGui::RenderTextClipped(min + style.FramePadding, max - style.FramePadding, btn_text, NULL, &size, style.ButtonTextAlign);
|
||||||
|
|
||||||
if (i % 3 != 2)
|
if (i % 3 != 2)
|
||||||
{
|
{
|
||||||
@ -260,7 +283,7 @@ void Ui::DrawHeaders(CallbackTable& data)
|
|||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
ImGui::Dummy(ImVec2(0, 10));
|
ImGui::Dummy(ImVec2(0, 10));
|
||||||
|
|
||||||
if (m_HeaderId == "")
|
if (m_HeaderId == -1)
|
||||||
{
|
{
|
||||||
// Show Welcome page
|
// Show Welcome page
|
||||||
ImGui::NewLine();
|
ImGui::NewLine();
|
||||||
@ -530,7 +553,7 @@ void Ui::DrawJSON(ResourceStore& data,
|
|||||||
if (ImGui::IsItemClicked(1) && func_right_click != nullptr)
|
if (ImGui::IsItemClicked(1) && func_right_click != nullptr)
|
||||||
{
|
{
|
||||||
jsonPopup.function = func_right_click;
|
jsonPopup.function = func_right_click;
|
||||||
jsonPopup.rootKey = root.key();
|
jsonPopup.root = root.key();
|
||||||
jsonPopup.key = name;
|
jsonPopup.key = name;
|
||||||
jsonPopup.value = _data.value();
|
jsonPopup.value = _data.value();
|
||||||
}
|
}
|
||||||
@ -546,7 +569,7 @@ void Ui::DrawJSON(ResourceStore& data,
|
|||||||
ImGui::Text(jsonPopup.key.c_str());
|
ImGui::Text(jsonPopup.key.c_str());
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (ImGui::MenuItem("Remove"))
|
if (ImGui::MenuItem("Remove"))
|
||||||
jsonPopup.function(jsonPopup.rootKey, jsonPopup.key, jsonPopup.value);
|
jsonPopup.function(jsonPopup.root, jsonPopup.key, jsonPopup.value);
|
||||||
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Close"))
|
if (ImGui::MenuItem("Close"))
|
||||||
@ -966,7 +989,9 @@ bool Ui::ColorButton(int color_id, std::vector<float>& color, ImVec2 size)
|
|||||||
std::string label = "Color " + std::to_string(color_id);
|
std::string label = "Color " + std::to_string(color_id);
|
||||||
|
|
||||||
if (ImGui::ColorButton(label.c_str(), ImVec4(color[0], color[1], color[2], 1), 0, size))
|
if (ImGui::ColorButton(label.c_str(), ImVec4(color[0], color[1], color[2], 1), 0, size))
|
||||||
|
{
|
||||||
rtn = true;
|
rtn = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
{
|
{
|
||||||
|
27
src/ui.h
27
src/ui.h
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
|
||||||
|
// TODO: Fix this messy code
|
||||||
class Ui
|
class Ui
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -20,7 +21,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::function<void(std::string&, std::string&, std::string&)> function;
|
std::function<void(std::string&, std::string&, std::string&)> function;
|
||||||
std::string key;
|
std::string key;
|
||||||
std::string rootKey;
|
std::string root;
|
||||||
std::string value;
|
std::string value;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ public:
|
|||||||
std::function<void(std::string&)> function;
|
std::function<void(std::string&)> function;
|
||||||
std::string value;
|
std::string value;
|
||||||
};
|
};
|
||||||
static inline std::string m_HeaderId;
|
static inline int m_HeaderId;
|
||||||
static inline JsonPopUpData jsonPopup;
|
static inline JsonPopUpData jsonPopup;
|
||||||
static inline ImgPopUpData imgPopup;
|
static inline ImgPopUpData imgPopup;
|
||||||
|
|
||||||
@ -96,7 +97,9 @@ void Ui::EditAddress(const char* label, const int address, const int min, const
|
|||||||
int items = 3;
|
int items = 3;
|
||||||
|
|
||||||
if (min == def)
|
if (min == def)
|
||||||
|
{
|
||||||
items = 2;
|
items = 2;
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::Columns(items, nullptr, false);
|
ImGui::Columns(items, nullptr, false);
|
||||||
ImGui::Text(("Min: " + std::to_string(min)).c_str());
|
ImGui::Text(("Min: " + std::to_string(min)).c_str());
|
||||||
@ -114,31 +117,43 @@ void Ui::EditAddress(const char* label, const int address, const int min, const
|
|||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
if (ImGui::InputInt(("Set value##" + std::string(label)).c_str(), &val))
|
if (ImGui::InputInt(("Set value##" + std::string(label)).c_str(), &val))
|
||||||
|
{
|
||||||
patch::Set<T>(address, val, false);
|
patch::Set<T>(address, val, false);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
if (val < min)
|
if (val < min)
|
||||||
|
{
|
||||||
val = min;
|
val = min;
|
||||||
|
}
|
||||||
|
|
||||||
if (val > max)
|
if (val > max)
|
||||||
|
{
|
||||||
val = max;
|
val = max;
|
||||||
|
}
|
||||||
|
|
||||||
if (ImGui::Button(("Minimum##" + std::string(label)).c_str(), GetSize(items)))
|
if (ImGui::Button(("Minimum##" + std::string(label)).c_str(), GetSize(items)))
|
||||||
|
{
|
||||||
patch::Set<T>(address, min, false);
|
patch::Set<T>(address, min, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (items == 3)
|
if (items == 3)
|
||||||
{
|
{
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
if (ImGui::Button(("Default##" + std::string(label)).c_str(), GetSize(3)))
|
if (ImGui::Button(("Default##" + std::string(label)).c_str(), GetSize(3)))
|
||||||
|
{
|
||||||
patch::Set<T>(address, def, false);
|
patch::Set<T>(address, def, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
if (ImGui::Button(("Maximum##" + std::string(label)).c_str(), GetSize(items)))
|
if (ImGui::Button(("Maximum##" + std::string(label)).c_str(), GetSize(items)))
|
||||||
|
{
|
||||||
patch::Set<T>(address, max, false);
|
patch::Set<T>(address, max, false);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
@ -163,22 +178,30 @@ void Ui::EditReference(const char* label, T& address, const int min, const int d
|
|||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
if (ImGui::InputInt(("Set value##" + std::string(label)).c_str(), &val))
|
if (ImGui::InputInt(("Set value##" + std::string(label)).c_str(), &val))
|
||||||
|
{
|
||||||
address = static_cast<float>(val);
|
address = static_cast<float>(val);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
if (ImGui::Button(("Minimum##" + std::string(label)).c_str(), GetSize(3)))
|
if (ImGui::Button(("Minimum##" + std::string(label)).c_str(), GetSize(3)))
|
||||||
|
{
|
||||||
address = static_cast<float>(min);
|
address = static_cast<float>(min);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
if (ImGui::Button(("Default##" + std::string(label)).c_str(), GetSize(3)))
|
if (ImGui::Button(("Default##" + std::string(label)).c_str(), GetSize(3)))
|
||||||
|
{
|
||||||
address = static_cast<float>(def);
|
address = static_cast<float>(def);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
if (ImGui::Button(("Maximum##" + std::string(label)).c_str(), GetSize(3)))
|
if (ImGui::Button(("Maximum##" + std::string(label)).c_str(), GetSize(3)))
|
||||||
|
{
|
||||||
address = static_cast<float>(max);
|
address = static_cast<float>(max);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
Loading…
Reference in New Issue
Block a user