Run clang-format (the repo's .clang-format: LLVM base, 120 cols, tabs, Allman functions) over every source file so the tree is formatter-clean. Whitespace only -- no behavior change; full x64 + x86 suites pass. Also set SortIncludes: false in .clang-format. Windows include order is load-bearing (windows.h must precede tlhelp32.h / mmreg.h / xinput.h / dinput.h; winsock2.h must precede windows.h), and the default alphabetical sort reorders tlhelp32.h ahead of windows.h -- a build break. Leaving order alone keeps the manual, correct grouping.
51 lines
2.0 KiB
C++
51 lines
2.0 KiB
C++
// Unit test for the DPI -> UI scale math (common/include/coop/dpi.hpp): the 96-DPI baseline, common
|
|
// Windows scalings, the zero-DPI fallback, clamping at both ends, and the default-font pixel-size
|
|
// derivation. Pure math -- no window, no ImGui -- so it's the reasonably-testable slice of the
|
|
// per-monitor DPI feature (the actual awareness + font rasterization are verified by hand).
|
|
#include <cmath>
|
|
#include <cstdio>
|
|
|
|
#include "coop/dpi.hpp"
|
|
|
|
using namespace coop;
|
|
|
|
namespace {
|
|
int g_failures = 0;
|
|
void check(bool ok, const char* what)
|
|
{
|
|
std::printf("%s %s\n", ok ? " ok:" : "FAIL:", what);
|
|
if (!ok) {
|
|
++g_failures;
|
|
}
|
|
}
|
|
bool approx(float a, float b)
|
|
{
|
|
return std::fabs(a - b) < 1e-4f;
|
|
}
|
|
} // namespace
|
|
|
|
int main()
|
|
{
|
|
// Baseline and the common Windows display scalings.
|
|
check(approx(dpi_scale_from(96), 1.0f), "96 DPI -> 1.0 (100%)");
|
|
check(approx(dpi_scale_from(120), 1.25f), "120 DPI -> 1.25 (125%)");
|
|
check(approx(dpi_scale_from(144), 1.5f), "144 DPI -> 1.5 (150%)");
|
|
check(approx(dpi_scale_from(192), 2.0f), "192 DPI -> 2.0 (200%)");
|
|
|
|
// A zero / unknown DPI falls back to the 96 baseline (never 0 -> a zero-size font).
|
|
check(approx(dpi_scale_from(0), 1.0f), "0 DPI -> 1.0 fallback");
|
|
|
|
// Clamping: never below 100%, and capped at the max for an absurd report.
|
|
check(approx(dpi_scale_from(48), kMinUiScale), "48 DPI clamps up to the min UI scale");
|
|
check(approx(dpi_scale_from(100000), kMaxUiScale), "absurd DPI clamps to the max UI scale");
|
|
|
|
// Font size scales from the single named base constant, matching ImGui's 13px default at 100%.
|
|
check(approx(kBaseFontPx, 13.0f), "base font px is ImGui's 13px default");
|
|
check(approx(scaled_font_px(96), 13.0f), "font px at 100% == base");
|
|
check(approx(scaled_font_px(144), 19.5f), "font px at 150% == 13 * 1.5");
|
|
check(approx(scaled_font_px(0), kBaseFontPx), "font px at unknown DPI == base (fallback)");
|
|
|
|
std::printf(g_failures == 0 ? "PASS dpi_test\n" : "FAILED dpi_test (%d)\n", g_failures);
|
|
return g_failures == 0 ? 0 : 1;
|
|
}
|