1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Fixed caption button positions, sizes and hit boxes

This commit is contained in:
narzoul 2021-01-30 14:04:46 +01:00
parent 4dbc7d4204
commit 0a39f17089
7 changed files with 78 additions and 17 deletions

View File

@ -220,6 +220,7 @@
<ClInclude Include="Gdi\Dc.h" />
<ClInclude Include="Gdi\DcCache.h" />
<ClInclude Include="Gdi\DcFunctions.h" />
<ClInclude Include="Gdi\Metrics.h" />
<ClInclude Include="Gdi\PresentationWindow.h" />
<ClInclude Include="Gdi\User32WndProcs.h" />
<ClInclude Include="Gdi\Palette.h" />
@ -293,6 +294,7 @@
<ClCompile Include="Gdi\Dc.cpp" />
<ClCompile Include="Gdi\DcCache.cpp" />
<ClCompile Include="Gdi\DcFunctions.cpp" />
<ClCompile Include="Gdi\Metrics.cpp" />
<ClCompile Include="Gdi\PresentationWindow.cpp" />
<ClCompile Include="Gdi\User32WndProcs.cpp" />
<ClCompile Include="Gdi\Palette.cpp" />

View File

@ -399,6 +399,9 @@
<ClInclude Include="Gdi\PresentationWindow.h">
<Filter>Header Files\Gdi</Filter>
</ClInclude>
<ClInclude Include="Gdi\Metrics.h">
<Filter>Header Files\Gdi</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Gdi\Gdi.cpp">
@ -614,5 +617,8 @@
<ClCompile Include="Gdi\PresentationWindow.cpp">
<Filter>Source Files\Gdi</Filter>
</ClCompile>
<ClCompile Include="Gdi\Metrics.cpp">
<Filter>Source Files\Gdi</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -5,6 +5,7 @@
#include <Gdi/DcFunctions.h>
#include <Gdi/Font.h>
#include <Gdi/Gdi.h>
#include <Gdi/Metrics.h>
#include <Gdi/Palette.h>
#include <Gdi/PresentationWindow.h>
#include <Gdi/ScrollFunctions.h>
@ -39,6 +40,7 @@ namespace Gdi
DisableProcessWindowsGhosting();
DcFunctions::installHooks();
Metrics::installHooks();
Palette::installHooks();
PresentationWindow::installHooks();
ScrollFunctions::installHooks();

View File

@ -0,0 +1,43 @@
#include <Windows.h>
#include <Common/Hook.h>
#include <Common/Log.h>
#include <Gdi/Metrics.h>
namespace
{
decltype(&GetSystemMetricsForDpi) g_origGetSystemMetricsForDpi = nullptr;
int WINAPI getSystemMetrics(int nIndex)
{
LOG_FUNC("GetSystemMetrics", nIndex);
if (SM_CXSIZE == nIndex)
{
nIndex = SM_CYSIZE;
}
return LOG_RESULT(CALL_ORIG_FUNC(GetSystemMetrics)(nIndex));
}
int WINAPI getSystemMetricsForDpi(int nIndex, UINT dpi)
{
LOG_FUNC("GetSystemMetricsForDpi", nIndex, dpi);
if (SM_CXSIZE == nIndex)
{
nIndex = SM_CYSIZE;
}
return LOG_RESULT(g_origGetSystemMetricsForDpi(nIndex, dpi));
}
}
namespace Gdi
{
namespace Metrics
{
void installHooks()
{
HOOK_FUNCTION(user32, GetSystemMetrics, getSystemMetrics);
Compat::hookFunction("user32", "GetSystemMetricsForDpi",
reinterpret_cast<void*&>(g_origGetSystemMetricsForDpi), getSystemMetricsForDpi);
}
}
}

View File

@ -0,0 +1,9 @@
#pragma once
namespace Gdi
{
namespace Metrics
{
void installHooks();
}
}

View File

@ -1,9 +1,9 @@
#include "Common/Hook.h"
#include "Gdi/Gdi.h"
#include "Gdi/Region.h"
#include "Gdi/TitleBar.h"
#include "Gdi/VirtualScreen.h"
#include "Win32/DisplayMode.h"
#include <Common/Hook.h>
#include <Gdi/Gdi.h>
#include <Gdi/Region.h>
#include <Gdi/TitleBar.h>
#include <Gdi/VirtualScreen.h>
#include <Win32/DisplayMode.h>
namespace
{
@ -37,7 +37,7 @@ namespace Gdi
}
m_tbi.cbSize = sizeof(m_tbi);
SendMessage(hwnd, WM_GETTITLEBARINFOEX, 0, reinterpret_cast<LPARAM>(&m_tbi));
CALL_ORIG_FUNC(DefWindowProcA)(hwnd, WM_GETTITLEBARINFOEX, 0, reinterpret_cast<LPARAM>(&m_tbi));
m_hasTitleBar = !IsRectEmpty(&m_tbi.rcTitleBar);
if (!m_hasTitleBar)
{
@ -62,19 +62,19 @@ namespace Gdi
if (isVisible(i))
{
OffsetRect(&m_tbi.rgrect[i], -m_windowRect.left, -m_windowRect.top);
adjustButtonSize(m_tbi.rgrect[i]);
InflateRect(&m_tbi.rgrect[i], -3, -3);
if (TBII_MINIMIZE_BUTTON == i)
{
m_tbi.rgrect[i].right += 2;
}
else
{
m_tbi.rgrect[i].left -= 2;
}
}
}
}
void TitleBar::adjustButtonSize(RECT& rect) const
{
rect.left += (rect.right - rect.left - m_buttonWidth) / 2;
rect.top += (rect.bottom - rect.top - m_buttonHeight) / 2;
rect.right = rect.left + m_buttonWidth;
rect.bottom = rect.top + m_buttonHeight;
}
void TitleBar::drawAll() const
{
drawCaption();

View File

@ -17,7 +17,6 @@ namespace Gdi
void excludeFromClipRegion() const;
private:
void adjustButtonSize(RECT& rect) const;
void drawButton(std::size_t tbiIndex, UINT dfcState) const;
bool isVisible(std::size_t tbiIndex) const;