summaryrefslogtreecommitdiff
path: root/alf/alfcompat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'alf/alfcompat.cpp')
-rw-r--r--alf/alfcompat.cpp40
1 files changed, 32 insertions, 8 deletions
diff --git a/alf/alfcompat.cpp b/alf/alfcompat.cpp
index 12a79f4..b986ee8 100644
--- a/alf/alfcompat.cpp
+++ b/alf/alfcompat.cpp
@@ -2,6 +2,8 @@
#include <shlwapi.h>
+DWORD _alf_compatBits = 0;
+
static
DWORD ALF_DllGetVersion(const char *dll)
{
@@ -32,7 +34,7 @@ static int WINAPI
ALF_Compat_fallbackGetSystemMetricsForDpi(int nIndex, UINT dpi)
{
(void)dpi;
- if (!ALF_Compat_IsMinWindowsVersion(4, 0)) {
+ if (!ALF_Compat_Is40()) {
// old NT does not support several properties, so we fake them
switch (nIndex) {
case SM_CXEDGE:
@@ -84,7 +86,7 @@ ALF_Compat_fallbackSystemParametersInfoForDpi(UINT uiAction, UINT uiParam, PVOID
// we need to provide a fallback even on ANSI systems
#ifdef UNICODE
SIZE_T s = sizeof(*ncmw);
- if (!ALF_Compat_IsMinWindowsVersion(6, 0)) {
+ if (!ALF_Compat_IsVista()) {
// pre-vista OS doesn't contain last member
s -= sizeof(ncmw->iPaddedBorderWidth);
ncmw->iPaddedBorderWidth = 0;
@@ -97,7 +99,7 @@ ALF_Compat_fallbackSystemParametersInfoForDpi(UINT uiAction, UINT uiParam, PVOID
ZeroMemory(&ncma, sizeof(ncma));
SIZE_T s = sizeof(ncma);
- if (!ALF_Compat_IsMinWindowsVersion(6, 0)) {
+ if (!ALF_Compat_IsVista()) {
// pre-vista OS doesn't contain last member
s -= sizeof(ncma.iPaddedBorderWidth);
ncma.iPaddedBorderWidth = 0;
@@ -428,17 +430,39 @@ static HMODULE _alf_dll_comctl32 = NULL;
void ALF_LoadCompatFunctions(void)
{
- if (ALF_Compat_IsWinNT()) // don't attempt to load uxtheme.dll on non-NT platforms (ugly error on Win32s)
+ // setup compat bits
+ DWORD v = GetVersion();
+ DWORD vMajor = LOBYTE(LOWORD(v));
+ DWORD vMinor = HIBYTE(LOWORD(v));
+
+ if (v < 0x80000000)
+ _alf_compatBits |= ALF_COMPAT_ISNT;
+
+ if (vMajor >= 4)
+ _alf_compatBits |= ALF_COMPAT_IS40;
+
+ if (vMajor >= 5)
+ _alf_compatBits |= ALF_COMPAT_ISW2K;
+
+ if (vMajor > 5 || (vMajor == 5 && vMinor >= 1))
+ _alf_compatBits |= ALF_COMPAT_ISXP;
+
+ if (vMajor >= 6)
+ _alf_compatBits |= ALF_COMPAT_ISVISTA;
+
+ // load compat functions
+ if (ALF_Compat_IsXP()) // don't even attempt to load uxtheme.dll on non-XP
_alf_dll_uxtheme = LoadLibraryA("uxtheme.dll");
_alf_dll_user32 = LoadLibraryA("user32.dll");
_alf_dll_comctl32 = LoadLibraryA("comctl32.dll");
-
- if (ALF_DllGetVersion("comctl32.dll") >= 0x60000)
+ if (ALF_DllGetVersion("comctl32.dll") >= 0x60000) {
+ _alf_compatBits |= ALF_COMPAT_ISCOMCTLV6;
LOAD_FUNC(uxtheme, IsAppThemed);
- else
+ } else {
ALF_Compat_IsAppThemed = ALF_Compat_fallbackIsAppThemed;
+ }
LOAD_FUNC(user32, GetDpiForWindow);
LOAD_FUNC(user32, AdjustWindowRectExForDpi);
@@ -467,7 +491,7 @@ void ALF_LoadCompatFunctions(void)
LOAD_FUNC(uxtheme, GetThemeColor);
// initialize helper function for disabled text
- if (ALF_Compat_IsMinWindowsVersion(4, 0)) {
+ if (ALF_Compat_Is40()) {
if (GetSystemMetrics(SM_SLOWMACHINE)) {
ALF_Compat_DrawDisabledText = ALF_Compat_DrawDisabledTextSolid;
} else {