Cool console! (#477)
* Cool console! * Debug-specific colors * Fix release build * Clear text "as we go" * dpi awareness :> * Address diamante'"s formatting review * Addressed review, added font license Co-authored-by: rackover <roxanne@thegamebakers.com> Co-authored-by: Louvenarde <louve@louve.systems>
This commit is contained in:
parent
ceaa63b01c
commit
ea09208b2a
94
deps/extra/font/Terminus_4.49.1.License.txt
vendored
Normal file
94
deps/extra/font/Terminus_4.49.1.License.txt
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
Copyright (C) 2020 Dimitar Toshkov Zhekov,
|
||||
with Reserved Font Name "Terminus Font".
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
38607
deps/extra/font/Terminus_4.49.1.ttf.hpp
vendored
Normal file
38607
deps/extra/font/Terminus_4.49.1.ttf.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
27
deps/premake/fonts.lua
vendored
Normal file
27
deps/premake/fonts.lua
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
fonts = {}
|
||||
|
||||
function fonts.import()
|
||||
fonts.includes()
|
||||
end
|
||||
|
||||
function fonts.includes()
|
||||
includedirs {
|
||||
path.join(dependencies.basePath, "extra/font"),
|
||||
}
|
||||
end
|
||||
|
||||
function fonts.project()
|
||||
project "fonts"
|
||||
language "C"
|
||||
|
||||
fonts.includes()
|
||||
|
||||
files {
|
||||
path.join(dependencies.basePath, "extra/font/*.hpp"),
|
||||
}
|
||||
|
||||
warnings "Off"
|
||||
kind "SharedItems"
|
||||
end
|
||||
|
||||
table.insert(dependencies, fonts)
|
@ -1,5 +1,7 @@
|
||||
#include <STDInclude.hpp>
|
||||
|
||||
#define REMOVE_HEADERBAR 1
|
||||
|
||||
namespace Components
|
||||
{
|
||||
WINDOW* Console::OutputWindow;
|
||||
@ -20,6 +22,24 @@ namespace Components
|
||||
bool Console::HasConsole = false;
|
||||
bool Console::SkipShutdown = false;
|
||||
|
||||
COLORREF Console::TextColor =
|
||||
#if DEBUG
|
||||
RGB(255, 200, 117);
|
||||
#else
|
||||
RGB(120, 237, 122);
|
||||
#endif
|
||||
|
||||
COLORREF Console::BackgroundColor =
|
||||
#if DEBUG
|
||||
RGB(35, 21, 0);
|
||||
#else
|
||||
RGB(25, 32, 25);
|
||||
#endif
|
||||
HBRUSH Console::ForegroundBrush = CreateSolidBrush(TextColor);
|
||||
HBRUSH Console::BackgroundBrush = CreateSolidBrush(BackgroundColor);
|
||||
|
||||
HANDLE Console::CustomConsoleFont;
|
||||
|
||||
std::thread Console::ConsoleThread;
|
||||
|
||||
Game::SafeArea Console::OriginalSafeArea;
|
||||
@ -110,6 +130,44 @@ namespace Components
|
||||
}
|
||||
}
|
||||
|
||||
float Console::GetDpiScale(const HWND hWnd)
|
||||
{
|
||||
const auto user32 = Utils::Library("user32.dll");
|
||||
const auto getDpiForWindow = user32.getProc<UINT(WINAPI*)(HWND)>("GetDpiForWindow");
|
||||
const auto getDpiForMonitor = user32.getProc<HRESULT(WINAPI*)(HMONITOR, int, UINT*, UINT*)>("GetDpiForMonitor");
|
||||
|
||||
int dpi;
|
||||
|
||||
if (getDpiForWindow)
|
||||
{
|
||||
dpi = getDpiForWindow(hWnd);
|
||||
}
|
||||
else if (getDpiForMonitor)
|
||||
{
|
||||
HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
|
||||
UINT xdpi, ydpi;
|
||||
LRESULT success = getDpiForMonitor(hMonitor, 0, &xdpi, &ydpi);
|
||||
if (success == S_OK)
|
||||
{
|
||||
dpi = static_cast<int>(ydpi);
|
||||
}
|
||||
|
||||
dpi = 96;
|
||||
}
|
||||
else
|
||||
{
|
||||
HDC hDC = GetDC(hWnd);
|
||||
INT ydpi = GetDeviceCaps(hDC, LOGPIXELSY);
|
||||
ReleaseDC(NULL, hDC);
|
||||
|
||||
dpi = ydpi;
|
||||
}
|
||||
|
||||
constexpr auto unawareDpi = 96.0f;
|
||||
return dpi / unawareDpi;
|
||||
}
|
||||
|
||||
|
||||
const char* Console::Input()
|
||||
{
|
||||
if (!Console::HasConsole)
|
||||
@ -374,6 +432,261 @@ namespace Components
|
||||
Console::RefreshOutput();
|
||||
}
|
||||
|
||||
HFONT __stdcall Console::ReplaceFont(
|
||||
[[maybe_unused]] int cHeight,
|
||||
int cWidth,
|
||||
int cEscapement,
|
||||
int cOrientation,
|
||||
[[maybe_unused]] int cWeight,
|
||||
DWORD bItalic,
|
||||
DWORD bUnderline,
|
||||
DWORD bStrikeOut,
|
||||
DWORD iCharSet,
|
||||
[[maybe_unused]] DWORD iOutPrecision,
|
||||
DWORD iClipPrecision,
|
||||
[[maybe_unused]] DWORD iQuality,
|
||||
[[maybe_unused]] DWORD iPitchAndFamily,
|
||||
[[maybe_unused]] LPCSTR pszFaceName)
|
||||
{
|
||||
auto font = CreateFontA(
|
||||
12,
|
||||
cWidth,
|
||||
cEscapement,
|
||||
cOrientation,
|
||||
700,
|
||||
bItalic,
|
||||
bUnderline,
|
||||
bStrikeOut,
|
||||
iCharSet,
|
||||
OUT_RASTER_PRECIS,
|
||||
iClipPrecision,
|
||||
NONANTIALIASED_QUALITY,
|
||||
0x31,
|
||||
"Terminus (TTF)"); // Terminus (TTF)
|
||||
|
||||
return font;
|
||||
}
|
||||
|
||||
void Console::GetWindowPos(HWND hWnd, int* x, int* y)
|
||||
{
|
||||
HWND hWndParent = GetParent(hWnd);
|
||||
POINT p = { 0 };
|
||||
|
||||
MapWindowPoints(hWnd, hWndParent, &p, 1);
|
||||
|
||||
(*x) = p.x;
|
||||
(*y) = p.y;
|
||||
}
|
||||
|
||||
BOOL CALLBACK Console::ResizeChildWindow(HWND hwndChild, LPARAM lParam)
|
||||
{
|
||||
auto id = GetWindowLong(hwndChild, GWL_ID);
|
||||
bool isInputBox = id == INPUT_BOX;
|
||||
bool isOutputBox = id == OUTPUT_BOX;
|
||||
|
||||
if (isInputBox || isOutputBox)
|
||||
{
|
||||
RECT newParentRect = *reinterpret_cast<LPRECT>(lParam);
|
||||
|
||||
RECT childRect;
|
||||
|
||||
if (GetWindowRect(hwndChild, &childRect))
|
||||
{
|
||||
|
||||
int childX, childY;
|
||||
|
||||
GetWindowPos(hwndChild, &childX, &childY);
|
||||
|
||||
HWND parent = Utils::Hook::Get<HWND>(0x64A3288);
|
||||
|
||||
float scale = GetDpiScale(parent);
|
||||
|
||||
if (isInputBox)
|
||||
{
|
||||
|
||||
int newX = childX; // No change!
|
||||
int newY = static_cast<int>((newParentRect.bottom - newParentRect.top) - 65 * scale);
|
||||
int newWidth = static_cast<int>((newParentRect.right - newParentRect.left) - 29 * scale);
|
||||
int newHeight = static_cast<int>((childRect.bottom - childRect.top) * scale); // No change!
|
||||
|
||||
MoveWindow(hwndChild, newX, newY, newWidth, newHeight, TRUE);
|
||||
}
|
||||
|
||||
if (isOutputBox)
|
||||
{
|
||||
int newX = childX; // No change!
|
||||
int newY = childY; // No change!
|
||||
int newWidth = static_cast<int>((newParentRect.right - newParentRect.left) - 29);
|
||||
|
||||
int margin = 70;
|
||||
|
||||
#ifdef REMOVE_HEADERBAR
|
||||
margin = 10;
|
||||
#endif
|
||||
int newHeight = static_cast<int>((newParentRect.bottom - newParentRect.top) - 74 * scale - margin);
|
||||
|
||||
MoveWindow(hwndChild, newX, newY, newWidth, newHeight, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Instead of clearing fully the console text whenever the 0x400's character is written, we
|
||||
// clear it progressively when we run out of room by truncating the top line by line.
|
||||
// A bit of trickery with SETREDRAW is required to avoid having the outputbox jump
|
||||
// around whenever clearing occurs.
|
||||
void Console::MakeRoomForText([[maybe_unused]] int addedCharacters)
|
||||
{
|
||||
constexpr unsigned int maxChars = 0x4000;
|
||||
constexpr unsigned int maxAffectedChars = 0x100;
|
||||
HWND outputBox = Utils::Hook::Get<HWND>(0x64A328C);
|
||||
|
||||
unsigned int totalChars;
|
||||
unsigned int totalClearLength = 0;
|
||||
|
||||
char str[maxAffectedChars];
|
||||
unsigned int fetchedCharacters = static_cast<unsigned int>(GetWindowText(outputBox, str, maxAffectedChars));
|
||||
|
||||
totalChars = GetWindowTextLengthA(outputBox);
|
||||
|
||||
while (totalChars - totalClearLength > maxChars)
|
||||
{
|
||||
unsigned int clearLength = maxAffectedChars; // Default to full clear
|
||||
|
||||
for (size_t i = 0; i < fetchedCharacters; i++)
|
||||
{
|
||||
if (str[i] == '\n')
|
||||
{
|
||||
// Shorter clear if I meet a linebreak
|
||||
clearLength = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
totalClearLength += clearLength;
|
||||
}
|
||||
|
||||
if (totalClearLength > 0)
|
||||
{
|
||||
SendMessage(outputBox, WM_SETREDRAW, FALSE, 0);
|
||||
SendMessage(outputBox, EM_SETSEL, 0, totalClearLength);
|
||||
SendMessage(outputBox, EM_REPLACESEL, FALSE, 0);
|
||||
SendMessage(outputBox, WM_SETREDRAW, TRUE, 0);
|
||||
}
|
||||
|
||||
Utils::Hook::Set(0x64A38B8, totalChars - totalClearLength);
|
||||
}
|
||||
|
||||
void __declspec(naked) Console::Sys_PrintStub()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
pushad
|
||||
push edi
|
||||
call MakeRoomForText
|
||||
pop edi
|
||||
popad
|
||||
|
||||
// Go back to AppendText
|
||||
push 0x4F57F8
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT CALLBACK Console::ConWndProc(HWND hWnd, UINT Msg, WPARAM wParam, unsigned int lParam)
|
||||
{
|
||||
switch (Msg)
|
||||
{
|
||||
|
||||
|
||||
case WM_CREATE:
|
||||
{
|
||||
BOOL darkMode = true;
|
||||
|
||||
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
|
||||
if (SUCCEEDED(DwmSetWindowAttribute(hWnd, DWMWA_USE_IMMERSIVE_DARK_MODE, reinterpret_cast<LPCVOID>(&darkMode), sizeof(darkMode))))
|
||||
{
|
||||
// cool !
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_CTLCOLORSTATIC:
|
||||
case WM_CTLCOLOREDIT:
|
||||
{
|
||||
SetBkColor(reinterpret_cast<HDC>(wParam), BackgroundColor);
|
||||
SetTextColor(reinterpret_cast<HDC>(wParam), TextColor);
|
||||
return reinterpret_cast<LRESULT>(BackgroundBrush);
|
||||
}
|
||||
|
||||
case WM_SIZE:
|
||||
RECT rect;
|
||||
|
||||
if (GetWindowRect(hWnd, &rect))
|
||||
{
|
||||
EnumChildWindows(hWnd, ResizeChildWindow, reinterpret_cast<LPARAM>(&rect));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Fall through to basegame
|
||||
return Utils::Hook::Call<LRESULT CALLBACK(HWND, UINT, WPARAM, unsigned int)>(0x64DC50)(hWnd, Msg, wParam, lParam);
|
||||
}
|
||||
|
||||
ATOM CALLBACK Console::RegisterClassHook(WNDCLASSA* lpWndClass)
|
||||
{
|
||||
DeleteObject(lpWndClass->hbrBackground);
|
||||
HBRUSH brush = CreateSolidBrush(BackgroundColor);
|
||||
lpWndClass->hbrBackground = brush;
|
||||
|
||||
return RegisterClassA(lpWndClass);
|
||||
}
|
||||
|
||||
void Console::ApplyConsoleStyle()
|
||||
{
|
||||
Utils::Hook::Set<BYTE>(0x428A8E, 0); // Adjust logo Y pos
|
||||
Utils::Hook::Set<BYTE>(0x428A90, 0); // Adjust logo X pos
|
||||
Utils::Hook::Set<BYTE>(0x428AF2, 67); // Adjust output Y pos
|
||||
Utils::Hook::Set<DWORD>(0x428AC5, 397); // Adjust input Y pos
|
||||
Utils::Hook::Set<DWORD>(0x428951, 609); // Reduce window width
|
||||
Utils::Hook::Set<DWORD>(0x42895D, 423); // Reduce window height
|
||||
Utils::Hook::Set<DWORD>(0x428AC0, 597); // Reduce input width
|
||||
Utils::Hook::Set<DWORD>(0x428AED, 596); // Reduce output width
|
||||
|
||||
DWORD fontsInstalled;
|
||||
CustomConsoleFont = AddFontMemResourceEx(const_cast<void*>(reinterpret_cast<const void*>(Font::Terminus::DATA)), Font::Terminus::LENGTH, 0, &fontsInstalled);
|
||||
|
||||
if (fontsInstalled > 0)
|
||||
{
|
||||
Utils::Hook::Nop(0x428A44, 6);
|
||||
Utils::Hook(0x428A44, ReplaceFont, HOOK_CALL).install()->quick();
|
||||
}
|
||||
|
||||
Utils::Hook::Nop(0x42892D, 6);
|
||||
Utils::Hook(0x42892D, RegisterClassHook, HOOK_CALL).install()->quick();
|
||||
|
||||
Utils::Hook::Set(0x4288E6 + 4, &ConWndProc);
|
||||
|
||||
auto style = WS_CAPTION | WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
|
||||
Utils::Hook::Set(0x42893F + 1, style);
|
||||
Utils::Hook::Set(0x4289E2 + 1, style);
|
||||
|
||||
#ifdef REMOVE_HEADERBAR
|
||||
// Remove that hideous header window -rox
|
||||
Utils::Hook::Set(0x428A7C, static_cast<char>(0xEB));
|
||||
Utils::Hook::Set(0X428AF1 + 1, static_cast<char>(10));
|
||||
#endif
|
||||
|
||||
// Never reset text
|
||||
Utils::Hook::Nop(0x4F57DF, 0x4F57F6 - 0x4F57DF);
|
||||
Utils::Hook(0x4F57DF, Console::Sys_PrintStub, HOOK_JUMP).install()->quick();
|
||||
|
||||
}
|
||||
|
||||
void Console::ConsoleRunner()
|
||||
{
|
||||
Console::SkipShutdown = false;
|
||||
@ -588,14 +901,7 @@ namespace Components
|
||||
Utils::Hook(0x482AC3, Console::RegisterConColor, HOOK_CALL).install()->quick();
|
||||
|
||||
// Modify console style
|
||||
Utils::Hook::Set<BYTE>(0x428A8E, 0); // Adjust logo Y pos
|
||||
Utils::Hook::Set<BYTE>(0x428A90, 0); // Adjust logo X pos
|
||||
Utils::Hook::Set<BYTE>(0x428AF2, 67); // Adjust output Y pos
|
||||
Utils::Hook::Set<DWORD>(0x428AC5, 397); // Adjust input Y pos
|
||||
Utils::Hook::Set<DWORD>(0x428951, 609); // Reduce window width
|
||||
Utils::Hook::Set<DWORD>(0x42895D, 423); // Reduce window height
|
||||
Utils::Hook::Set<DWORD>(0x428AC0, 597); // Reduce input width
|
||||
Utils::Hook::Set<DWORD>(0x428AED, 596); // Reduce output width
|
||||
ApplyConsoleStyle();
|
||||
|
||||
// Don't resize the console
|
||||
Utils::Hook(0x64DC6B, 0x64DCC2, HOOK_JUMP).install()->quick();
|
||||
|
@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Terminus_4.49.1.ttf.hpp"
|
||||
|
||||
#define OUTPUT_HEIGHT 250
|
||||
#define OUTPUT_MAX_TOP (OUTPUT_HEIGHT - (Console::Height - 2))
|
||||
|
||||
@ -20,6 +22,10 @@ namespace Components
|
||||
static void ShowAsyncConsole();
|
||||
|
||||
private:
|
||||
|
||||
static constexpr int OUTPUT_BOX = 0x64;
|
||||
static constexpr int INPUT_BOX = 0x65;
|
||||
|
||||
// Text-based console stuff
|
||||
static WINDOW* OutputWindow;
|
||||
static WINDOW* InputWindow;
|
||||
@ -32,6 +38,13 @@ namespace Components
|
||||
static int OutBuffer;
|
||||
static int LastRefresh;
|
||||
|
||||
static COLORREF TextColor;
|
||||
static COLORREF BackgroundColor;
|
||||
static HBRUSH ForegroundBrush;
|
||||
static HBRUSH BackgroundBrush;
|
||||
|
||||
static HANDLE CustomConsoleFont;
|
||||
|
||||
static char LineBuffer[1024];
|
||||
static char LineBuffer2[1024];
|
||||
static int LineBufferIndex;
|
||||
@ -69,5 +82,29 @@ namespace Components
|
||||
static void AddConsoleCommand();
|
||||
|
||||
static Game::dvar_t* RegisterConColor(const char* dvarName, float r, float g, float b, float a, float min, float max, unsigned __int16 flags, const char* description);
|
||||
|
||||
static LRESULT CALLBACK ConWndProc(HWND hWnd, UINT Msg, WPARAM wParam, unsigned int lParam);
|
||||
static ATOM CALLBACK RegisterClassHook(WNDCLASSA* lpWndClass);
|
||||
static BOOL CALLBACK ResizeChildWindow(HWND hwndChild, LPARAM lParam);
|
||||
static HFONT CALLBACK ReplaceFont(
|
||||
int cHeight,
|
||||
int cWidth,
|
||||
int cEscapement,
|
||||
int cOrientation,
|
||||
int cWeight,
|
||||
DWORD bItalic,
|
||||
DWORD bUnderline,
|
||||
DWORD bStrikeOut,
|
||||
DWORD iCharSet,
|
||||
DWORD iOutPrecision,
|
||||
DWORD iClipPrecision,
|
||||
DWORD iQuality,
|
||||
DWORD iPitchAndFamily,
|
||||
LPCSTR pszFaceName);
|
||||
static void ApplyConsoleStyle();
|
||||
static void GetWindowPos(HWND hWnd, int* x, int* y);
|
||||
static void Sys_PrintStub();
|
||||
static void MakeRoomForText(int addedCharacters);
|
||||
static float GetDpiScale(const HWND hWnd);
|
||||
};
|
||||
}
|
||||
|
@ -57,6 +57,9 @@
|
||||
#include <XInput.h>
|
||||
#pragma comment (lib, "xinput.lib")
|
||||
|
||||
#include <dwmapi.h>
|
||||
#pragma comment (lib, "dwmapi.lib")
|
||||
|
||||
// Ignore the warnings
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4005)
|
||||
|
Loading…
Reference in New Issue
Block a user