Credits:
CLiteRegedit by SR_Team
imgui
Last active
June 18, 2022 20:19
-
-
Save kin4stat/93f17a40e5e11308aa733f3750b84aab to your computer and use it in GitHub Desktop.
SAMP Alpha Chat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <windows.h> | |
#include <MinHook.h> | |
#include <d3d9.h> | |
#include <d3dx9.h> | |
#include <string> | |
#include "CLiteRegedit.h" | |
#include "imgui.h" | |
#include "imgui_impl_win32.h" | |
#include "imgui_impl_dx9.h" | |
#include "imgui_internal.h" | |
#include "imgui_impl_dx9.h" | |
#pragma comment(lib, "d3d9.lib") | |
#pragma comment(lib, "d3dx9.lib") | |
#pragma execution_character_set("utf-8") | |
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); | |
typedef int(__fastcall* AddEntry)(void*, void*, int, const char*, const char*, DWORD, DWORD); | |
typedef HRESULT(__stdcall* ProtPresent)(IDirect3DDevice9*, CONST RECT*, CONST RECT*, HWND, CONST RGNDATA*); | |
typedef HRESULT(__stdcall* ProtReset)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*); | |
typedef void(__cdecl* CMDPROC) (char*); | |
HRESULT __stdcall Hooked_Present(IDirect3DDevice9* pDevice, CONST RECT* pSrcRect, CONST RECT* pDestRect, HWND hDestWindow, CONST RGNDATA* pDirtyRegion); | |
HRESULT __stdcall Hooked_Reset(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentParams); | |
void Theme(); | |
enum ChatStates { | |
CHATSTATE_WAITINGFORFADEOUT, | |
CHATSTATE_FADEMAX, | |
CHATSTATE_FADEMIN, | |
CHATSTATE_FADEIN, | |
CHATSTATE_FADEIN_TOFADEOUT, | |
CHATSTATE_FADEINFAST, | |
CHATSTATE_FADEOUT, | |
}; | |
struct { | |
bool bMenuOpen = 0; | |
bool bCursorShown = 0; | |
float MinAlpha = 127.0f; | |
float MaxAlpha = 255.0f; | |
float FadeInFast = 0.7f; | |
float FadeOut = 1.5f; | |
float FadeInToFadeOut = 4.0f; | |
float WaitingForFade = 4.0f; | |
} Settings; | |
ProtReset Reset; | |
ProtPresent Present; | |
AddEntry fpAddEntry = NULL; | |
WNDPROC m_pWindowProc; | |
DWORD dwSAMP = 0; | |
DWORD64 Ticks = GetTickCount64(); | |
DWORD64 LastFadeTickUpdate = GetTickCount64(); | |
DWORD gChatState = ChatStates::CHATSTATE_WAITINGFORFADEOUT; | |
float gChatAlpha = 255.0f; | |
CLiteRegeditEasy* pReg = nullptr; | |
DWORD SAMP_INPUT_PTR = 0; | |
DWORD SAMP_GAME_PTR = 0; | |
DWORD SAMP_FUNC_ADDCLIENTCMD = 0; | |
DWORD SAMP_FUNC_TOGGLECURSOR = 0; | |
DWORD SAMP_FUNC_CURSORUNLOCKACTORCAM = 0; | |
DWORD HOOK_DisableInputBoxJmp = 0; | |
DWORD HOOK_EnableInputBoxJmp = 0; | |
DWORD HOOK_DrawChatSpriteJmp = 0; | |
DWORD FindDevice(DWORD Len) | |
{ | |
DWORD dwObjBase = 0; | |
char infoBuf[MAX_PATH]; | |
GetSystemDirectoryA(infoBuf, MAX_PATH); | |
strcat_s(infoBuf, MAX_PATH, "\\d3d9.dll"); | |
dwObjBase = (DWORD)LoadLibraryA(infoBuf); | |
while (dwObjBase++ < dwObjBase + Len) | |
{ | |
if ((*(WORD*)(dwObjBase + 0x00)) == 0x06C7 && | |
(*(WORD*)(dwObjBase + 0x06)) == 0x8689 && | |
(*(WORD*)(dwObjBase + 0x0C)) == 0x8689) | |
{ | |
dwObjBase += 2; | |
break; | |
} | |
} | |
return(dwObjBase); | |
}; | |
void* GetDeviceAddress(int VTableIndex) | |
{ | |
PDWORD VTable; | |
*(DWORD*)&VTable = *(DWORD*)FindDevice(0x128000); | |
return reinterpret_cast<void*>(VTable[VTableIndex]); | |
}; | |
void MH_CreateAndEnableHook(unsigned __int32 TargetAddress, LPVOID pDetour, LPVOID* ppOriginal) { | |
MH_CreateHook(reinterpret_cast<LPVOID>(TargetAddress), pDetour, ppOriginal); | |
MH_EnableHook(reinterpret_cast<LPVOID>(TargetAddress)); | |
} | |
void InstallD3DHook() { | |
DWORD pDevice = *reinterpret_cast<DWORD*>(0xC97C28); | |
void** vTable = *reinterpret_cast<void***>(pDevice); | |
// Создаем хуки и включаем их | |
MH_CreateHook(GetDeviceAddress(17), Hooked_Present, reinterpret_cast<LPVOID*>(&Present)); | |
MH_EnableHook(GetDeviceAddress(17)); | |
MH_CreateHook(GetDeviceAddress(16), Hooked_Reset, reinterpret_cast<LPVOID*>(&Reset)); | |
MH_EnableHook(GetDeviceAddress(16)); | |
} | |
void* getInput() { | |
return *reinterpret_cast<void**>(dwSAMP + SAMP_INPUT_PTR); | |
} | |
void addClientCommand(const char* command, CMDPROC pFunc) { | |
if (getInput() == nullptr) | |
return; | |
void(__thiscall * AddClientCommand) (const void* _this, const char* szCommand, CMDPROC pFunc) = (void(__thiscall*) (const void*, const char*, CMDPROC)) (dwSAMP + SAMP_FUNC_ADDCLIENTCMD); | |
if (command == NULL) | |
return; | |
return AddClientCommand(getInput(), command, pFunc); | |
} | |
bool ToggleCursor(bool state) { | |
void* obj = *(void**)(dwSAMP + SAMP_GAME_PTR); | |
((void(__thiscall*) (void*, int, bool)) (dwSAMP + SAMP_FUNC_TOGGLECURSOR))(obj, state ? 3 : 0, !state); | |
if (!state) | |
((void(__thiscall*) (void*)) (dwSAMP + SAMP_FUNC_CURSORUNLOCKACTORCAM))(obj); | |
return state; | |
} | |
void HandleInputBoxOpen() { | |
gChatState = (gChatState == ChatStates::CHATSTATE_FADEMAX || gChatState == ChatStates::CHATSTATE_WAITINGFORFADEOUT) ? ChatStates::CHATSTATE_FADEMAX : ChatStates::CHATSTATE_FADEINFAST; | |
LastFadeTickUpdate = GetTickCount64(); | |
} | |
void HandleInputBoxClose() { | |
gChatState = ChatStates::CHATSTATE_WAITINGFORFADEOUT; | |
Ticks = GetTickCount64(); | |
LastFadeTickUpdate = GetTickCount64(); | |
} | |
void __declspec(naked) HOOK_EnableInputBox(void) { | |
__asm pushad | |
HandleInputBoxOpen(); | |
__asm popad | |
__asm mov dword ptr[esi + 0x14E0], 1 | |
__asm jmp HOOK_EnableInputBoxJmp | |
} | |
void __declspec(naked) HOOK_DisableInputBox(void) { | |
__asm pushad | |
HandleInputBoxClose(); | |
__asm popad | |
__asm mov dword ptr[esi + 0x14E0], 0 | |
__asm jmp HOOK_DisableInputBoxJmp | |
} | |
void __declspec(naked) HOOK_DrawChatSprite(void) { | |
__asm pushad | |
static DWORD color = 0xFFFFFF; | |
switch (gChatState) { | |
case CHATSTATE_FADEIN: | |
gChatAlpha = min(Settings.MaxAlpha, gChatAlpha + (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / 1.5f)); | |
LastFadeTickUpdate = GetTickCount64(); | |
if (gChatAlpha == Settings.MaxAlpha) { | |
gChatState = CHATSTATE_FADEMAX; | |
} | |
break; | |
case CHATSTATE_FADEINFAST: | |
gChatAlpha = min(Settings.MaxAlpha, gChatAlpha + (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / Settings.FadeInFast)); | |
LastFadeTickUpdate = GetTickCount64(); | |
if (gChatAlpha == Settings.MaxAlpha) { | |
gChatState = CHATSTATE_FADEMAX; | |
} | |
break; | |
case CHATSTATE_FADEOUT: | |
gChatAlpha = max(Settings.MinAlpha, gChatAlpha - (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / Settings.FadeOut)); | |
LastFadeTickUpdate = GetTickCount64(); | |
if (gChatAlpha == Settings.MinAlpha) { | |
gChatState = CHATSTATE_FADEMIN; | |
} | |
break; | |
case CHATSTATE_FADEIN_TOFADEOUT: | |
gChatAlpha = min(Settings.MaxAlpha, gChatAlpha + (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / Settings.FadeInToFadeOut)); | |
LastFadeTickUpdate = GetTickCount64(); | |
if (gChatAlpha == Settings.MaxAlpha) { | |
gChatState = CHATSTATE_WAITINGFORFADEOUT; | |
Ticks = GetTickCount64(); | |
} | |
break; | |
case CHATSTATE_WAITINGFORFADEOUT: | |
{ | |
if (GetTickCount64() - Ticks > Settings.WaitingForFade * 1000) { | |
gChatState = CHATSTATE_FADEOUT; | |
LastFadeTickUpdate = GetTickCount64(); | |
} | |
} | |
break; | |
case CHATSTATE_FADEMAX: | |
gChatAlpha = Settings.MaxAlpha; | |
break; | |
case CHATSTATE_FADEMIN: | |
gChatAlpha = Settings.MinAlpha; | |
break; | |
} | |
color = (static_cast<int>(gChatAlpha) << 24) | 0xFFFFFF; | |
__asm { | |
popad | |
push color | |
push 0 | |
push 0 | |
jmp HOOK_DrawChatSpriteJmp | |
} | |
} | |
int __fastcall HOOK_AddEntry(void* dis, void* EDX, int nType, const char* szText, const char* szPrefix, DWORD textColor, DWORD prefixColor) { | |
gChatState = CHATSTATE_FADEIN_TOFADEOUT; | |
LastFadeTickUpdate = GetTickCount64(); | |
static bool once = false; | |
if (once == false) { | |
InstallD3DHook(); | |
once = true; | |
} | |
return fpAddEntry(dis, EDX, nType, szText, szPrefix, textColor, prefixColor); | |
} | |
auto __stdcall WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)->LRESULT { | |
if (Settings.bMenuOpen) { | |
ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam); | |
return TRUE; | |
} | |
return CallWindowProcA(m_pWindowProc, hWnd, msg, wParam, lParam); | |
} | |
void __cdecl MenuOpen(char*) { | |
Settings.bMenuOpen ^= 1; | |
ToggleCursor(Settings.bMenuOpen); | |
} | |
void LoadSettings() { | |
Settings.MinAlpha = pReg->ReadFloat("MinAlpha"); | |
Settings.MaxAlpha = pReg->ReadFloat("MaxAlpha"); | |
Settings.FadeInFast = pReg->ReadFloat("FadeInFast"); | |
Settings.FadeOut = pReg->ReadFloat("FadeOut"); | |
Settings.FadeInToFadeOut = pReg->ReadFloat("FadeInToFadeOut"); | |
Settings.WaitingForFade = pReg->ReadFloat("WaitingForFade"); | |
} | |
void SaveSettings() { | |
pReg->WriteFloat("MinAlpha", Settings.MinAlpha); | |
pReg->WriteFloat("MaxAlpha", Settings.MaxAlpha); | |
pReg->WriteFloat("FadeInFast", Settings.FadeInFast); | |
pReg->WriteFloat("FadeOut", Settings.FadeOut); | |
pReg->WriteFloat("FadeInToFadeOut", Settings.FadeInToFadeOut); | |
pReg->WriteFloat("WaitingForFade", Settings.WaitingForFade); | |
} | |
void DefaultSettings() { | |
Settings.MinAlpha = 127.0f; | |
Settings.MaxAlpha = 255.0f; | |
Settings.FadeInFast = 0.7f; | |
Settings.FadeOut = 1.5f; | |
Settings.FadeInToFadeOut = 4.0f; | |
Settings.WaitingForFade = 4.0f; | |
} | |
HRESULT __stdcall Hooked_Present(IDirect3DDevice9* pDevice, CONST RECT* pSrcRect, CONST RECT* pDestRect, HWND hDestWindow, CONST RGNDATA* pDirtyRegion) { | |
static bool once = false; | |
if (once == false) { | |
m_pWindowProc = reinterpret_cast<WNDPROC>(SetWindowLongA(**reinterpret_cast<HWND**>(0xC17054), GWL_WNDPROC, reinterpret_cast<LONG>(WndProcHandler))); | |
ImGui::CreateContext(); | |
ImGui_ImplWin32_Init(**reinterpret_cast<HWND**>(0xC17054)); | |
#pragma warning(push) | |
#pragma warning(disable: 4996) | |
std::string font{ getenv("WINDIR") }; font += "\\Fonts\\Tahoma.TTF"; | |
#pragma warning(pop) | |
ImGui::GetIO().Fonts->AddFontFromFileTTF(font.c_str(), 14.0f, NULL, ImGui::GetIO().Fonts->GetGlyphRangesCyrillic()); | |
Theme(); | |
ImGui_ImplDX9_Init(pDevice); | |
once = true; | |
} | |
static bool sampOnce = false; | |
if (getInput() != nullptr && sampOnce == false) { | |
addClientCommand("alphachat", &MenuOpen); | |
sampOnce = true; | |
} | |
ImGui_ImplDX9_NewFrame(); | |
ImGui_ImplWin32_NewFrame(); | |
ImGui::NewFrame(); | |
if (Settings.bMenuOpen) { | |
if (Settings.bCursorShown == 0) { | |
Settings.bCursorShown = ToggleCursor(1); | |
} | |
int sx = *reinterpret_cast<int*>(0x00C17044), sy = *reinterpret_cast<int*>(0x00C17048); | |
ImGui::SetNextWindowPos(ImVec2(sx / 2, sy / 2), ImGuiCond_FirstUseEver); | |
ImGui::Begin("Настройки", &Settings.bMenuOpen, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); | |
ImGui::SliderFloat("Минимальная прозрачность", &Settings.MinAlpha, 0.0f, 255.0f); | |
ImGui::SliderFloat("Максимальная прозрачность", &Settings.MaxAlpha, 0.0f, 255.0f); | |
ImGui::SliderFloat("Скорость появления при открытии чата", &Settings.FadeInFast, 0.0f, 10.0f); | |
ImGui::SliderFloat("Скорость появления при новом сообщении", &Settings.FadeInToFadeOut, 0.0f, 10.0f); | |
ImGui::SliderFloat("Скорость исчезания", &Settings.FadeOut, 0.0f, 10.0f); | |
ImGui::SliderFloat("Время максимальной прозрачности", &Settings.WaitingForFade, 0.0f, 60.0f); | |
if (ImGui::Button("Сохранить настройки")) { | |
SaveSettings(); | |
} | |
ImGui::SameLine(); | |
if (ImGui::Button("Загрузить настройки")) { | |
LoadSettings(); | |
} | |
ImGui::SameLine(); | |
if (ImGui::Button("Сбросить настройки")) { | |
DefaultSettings(); | |
} | |
ImGui::End(); | |
} | |
else if (Settings.bCursorShown == 1) { | |
Settings.bCursorShown = ToggleCursor(0); | |
} | |
ImGui::EndFrame(); | |
ImGui::Render(); | |
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()); | |
return Present(pDevice, pSrcRect, pDestRect, hDestWindow, pDirtyRegion); | |
} | |
HRESULT __stdcall Hooked_Reset(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentParams) { | |
ImGui_ImplDX9_InvalidateDeviceObjects(); | |
return Reset(pDevice, pPresentParams); | |
} | |
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved) | |
{ | |
switch (ul_reason_for_call) | |
{ | |
case DLL_PROCESS_ATTACH: | |
{ | |
dwSAMP = reinterpret_cast<DWORD>(GetModuleHandle(L"samp.dll")); | |
if (dwSAMP == NULL) return FALSE; | |
pReg = new CLiteRegeditEasy(HKEY_CURRENT_USER, "Software\\AlphaChat"); | |
pReg->ReadFloat("MinAlpha"); | |
if (!pReg->IsError()) { | |
LoadSettings(); | |
} | |
else { | |
DefaultSettings(); | |
} | |
MH_Initialize(); | |
auto ntheader = reinterpret_cast<IMAGE_NT_HEADERS*>(dwSAMP + reinterpret_cast<IMAGE_DOS_HEADER*>(dwSAMP)->e_lfanew); | |
auto ep = ntheader->OptionalHeader.AddressOfEntryPoint; | |
switch (ep) { | |
case 0x31DF13: { | |
SAMP_INPUT_PTR = 0x21A0E8; | |
SAMP_GAME_PTR = 0x21A10C; | |
SAMP_FUNC_ADDCLIENTCMD = 0x65AD0; | |
SAMP_FUNC_TOGGLECURSOR = 0x9BD30; | |
SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9BC10; | |
HOOK_DisableInputBoxJmp = dwSAMP + 0x65926; | |
HOOK_EnableInputBoxJmp = dwSAMP + 0x658D1; | |
HOOK_DrawChatSpriteJmp = dwSAMP + 0x642BC + 6; | |
MH_CreateAndEnableHook(dwSAMP + 0x658C7, &HOOK_EnableInputBox, NULL); | |
MH_CreateAndEnableHook(dwSAMP + 0x6591C, &HOOK_DisableInputBox, NULL); | |
MH_CreateAndEnableHook(dwSAMP + 0x642BC, &HOOK_DrawChatSprite, NULL); | |
MH_CreateAndEnableHook(dwSAMP + 0x64010, &HOOK_AddEntry, reinterpret_cast<LPVOID*>(&fpAddEntry)); | |
} | |
break; | |
case 0xCC4D0: { | |
SAMP_INPUT_PTR = 0x26E8CC; | |
SAMP_GAME_PTR = 0x26E8F4; | |
SAMP_FUNC_ADDCLIENTCMD = 0x69000; | |
SAMP_FUNC_TOGGLECURSOR = 0x9FFE0; | |
SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9FEC0; | |
HOOK_DisableInputBoxJmp = dwSAMP + 0x68E56; | |
HOOK_EnableInputBoxJmp = dwSAMP + 0x68E01; | |
HOOK_DrawChatSpriteJmp = dwSAMP + 0x6770C + 6; | |
MH_CreateAndEnableHook(dwSAMP + 0x68DF7, &HOOK_EnableInputBox, NULL); | |
MH_CreateAndEnableHook(dwSAMP + 0x68E4C, &HOOK_DisableInputBox, NULL); | |
MH_CreateAndEnableHook(dwSAMP + 0x6770C, &HOOK_DrawChatSprite, NULL); | |
MH_CreateAndEnableHook(dwSAMP + 0x67460, &HOOK_AddEntry, reinterpret_cast<LPVOID*>(&fpAddEntry)); | |
} | |
break; | |
} | |
} | |
break; | |
case DLL_THREAD_ATTACH: | |
case DLL_THREAD_DETACH: | |
case DLL_PROCESS_DETACH: | |
break; | |
} | |
return TRUE; | |
} | |
void Theme() { | |
//ImGui::GetIO().Fonts->AddFontFromFileTTF("../data/Fonts/Ruda-Bold.ttf", 15.0f, &config); | |
ImGui::GetStyle().FrameRounding = 4.0f; | |
ImGui::GetStyle().GrabRounding = 4.0f; | |
ImVec4* colors = ImGui::GetStyle().Colors; | |
colors[ImGuiCol_Text] = ImVec4(0.95f, 0.96f, 0.98f, 1.00f); | |
colors[ImGuiCol_TextDisabled] = ImVec4(0.36f, 0.42f, 0.47f, 1.00f); | |
colors[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); | |
colors[ImGuiCol_ChildBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f); | |
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f); | |
colors[ImGuiCol_Border] = ImVec4(0.08f, 0.10f, 0.12f, 1.00f); | |
colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); | |
colors[ImGuiCol_FrameBg] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); | |
colors[ImGuiCol_FrameBgHovered] = ImVec4(0.12f, 0.20f, 0.28f, 1.00f); | |
colors[ImGuiCol_FrameBgActive] = ImVec4(0.09f, 0.12f, 0.14f, 1.00f); | |
colors[ImGuiCol_TitleBg] = ImVec4(0.09f, 0.12f, 0.14f, 0.65f); | |
colors[ImGuiCol_TitleBgActive] = ImVec4(0.08f, 0.10f, 0.12f, 1.00f); | |
colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); | |
colors[ImGuiCol_MenuBarBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f); | |
colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.39f); | |
colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); | |
colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.18f, 0.22f, 0.25f, 1.00f); | |
colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.09f, 0.21f, 0.31f, 1.00f); | |
colors[ImGuiCol_CheckMark] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); | |
colors[ImGuiCol_SliderGrab] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); | |
colors[ImGuiCol_SliderGrabActive] = ImVec4(0.37f, 0.61f, 1.00f, 1.00f); | |
colors[ImGuiCol_Button] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); | |
colors[ImGuiCol_ButtonHovered] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); | |
colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f); | |
colors[ImGuiCol_Header] = ImVec4(0.20f, 0.25f, 0.29f, 0.55f); | |
colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f); | |
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); | |
colors[ImGuiCol_Separator] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); | |
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f); | |
colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f); | |
colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f); | |
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); | |
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); | |
colors[ImGuiCol_Tab] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); | |
colors[ImGuiCol_TabHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f); | |
colors[ImGuiCol_TabActive] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); | |
colors[ImGuiCol_TabUnfocused] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); | |
colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); | |
colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); | |
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); | |
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); | |
colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); | |
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); | |
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); | |
colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); | |
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); | |
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); | |
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment