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

Added caption and close button to config overlay

This commit is contained in:
narzoul 2022-05-23 21:22:14 +02:00
parent 87c2af5049
commit 9a37aa6e24
7 changed files with 110 additions and 3 deletions

View File

@ -273,6 +273,7 @@
<ClInclude Include="Gdi\WinProc.h" />
<ClInclude Include="Input\HotKey.h" />
<ClInclude Include="Input\Input.h" />
<ClInclude Include="Overlay\ButtonControl.h" />
<ClInclude Include="Overlay\ComboBoxControl.h" />
<ClInclude Include="Overlay\ComboBoxDropDown.h" />
<ClInclude Include="Overlay\ConfigWindow.h" />
@ -383,6 +384,7 @@
<ClCompile Include="Gdi\WinProc.cpp" />
<ClCompile Include="Input\HotKey.cpp" />
<ClCompile Include="Input\Input.cpp" />
<ClCompile Include="Overlay\ButtonControl.cpp" />
<ClCompile Include="Overlay\ComboBoxControl.cpp" />
<ClCompile Include="Overlay\ComboBoxDropDown.cpp" />
<ClCompile Include="Overlay\ConfigWindow.cpp" />

View File

@ -567,6 +567,9 @@
<ClInclude Include="Config\Settings\LogLevel.h">
<Filter>Header Files\Config\Settings</Filter>
</ClInclude>
<ClInclude Include="Overlay\ButtonControl.h">
<Filter>Header Files\Overlay</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Gdi\Gdi.cpp">
@ -893,6 +896,9 @@
<ClCompile Include="Win32\Version.cpp">
<Filter>Source Files\Win32</Filter>
</ClCompile>
<ClCompile Include="Overlay\ButtonControl.cpp">
<Filter>Source Files\Overlay</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="DDrawCompat.rc">

View File

@ -0,0 +1,48 @@
#include <Common/Hook.h>
#include <Input/Input.h>
#include <Overlay/ButtonControl.h>
namespace Overlay
{
ButtonControl::ButtonControl(Control& parent, const RECT& rect, const std::string& label, ClickHandler clickHandler)
: Control(&parent, rect, WS_BORDER | WS_TABSTOP | WS_VISIBLE)
, m_clickHandler(clickHandler)
, m_label(*this, rect, label, DT_CENTER)
{
}
void ButtonControl::onLButtonDown(POINT pos)
{
Input::setCapture(this);
onMouseMove(pos);
}
void ButtonControl::onLButtonUp(POINT pos)
{
if (Input::getCapture() == this)
{
Input::setCapture(m_parent);
m_label.setColor(FOREGROUND_COLOR);
if (PtInRect(&m_rect, pos))
{
m_clickHandler(*this);
}
else
{
m_parent->onMouseMove(pos);
}
}
}
void ButtonControl::onMouseMove(POINT pos)
{
if (Input::getCapture() == this)
{
m_label.setColor(PtInRect(&m_rect, pos) ? HIGHLIGHT_COLOR : FOREGROUND_COLOR);
}
else
{
Control::onMouseMove(pos);
}
}
}

View File

@ -0,0 +1,26 @@
#pragma once
#include <string>
#include <Windows.h>
#include <Overlay/LabelControl.h>
namespace Overlay
{
class ButtonControl : public Control
{
public:
typedef void (*ClickHandler)(Control&);
ButtonControl(Control& parent, const RECT& rect, const std::string& label, ClickHandler clickHandler);
virtual void onLButtonDown(POINT pos) override;
virtual void onLButtonUp(POINT pos) override;
virtual void onMouseMove(POINT pos) override;
private:
ClickHandler m_clickHandler;
LabelControl m_label;
};
}

View File

@ -5,10 +5,20 @@
#include <Overlay/ConfigWindow.h>
#include <Overlay/SettingControl.h>
namespace
{
const int CAPTION_HEIGHT = 22;
}
namespace Overlay
{
ConfigWindow::ConfigWindow()
: Window(nullptr, { 0, 0, SettingControl::TOTAL_WIDTH, 300 }, Config::configHotKey.get())
: Window(nullptr, { 0, 0, SettingControl::TOTAL_WIDTH, 330 }, Config::configHotKey.get())
, m_caption(*this, { 0, 0, SettingControl::TOTAL_WIDTH - CAPTION_HEIGHT + 1, CAPTION_HEIGHT },
"DDrawCompat Config Overlay", 0, WS_BORDER | WS_VISIBLE)
, m_closeButton(*this,
{ SettingControl::TOTAL_WIDTH - CAPTION_HEIGHT, 0, SettingControl::TOTAL_WIDTH, CAPTION_HEIGHT },
"X", onClose)
, m_focus(nullptr)
{
addControl(Config::alternatePixelCenter);
@ -30,6 +40,7 @@ namespace Overlay
const int rowHeight = 25;
RECT rect = { 0, index * rowHeight + BORDER / 2, m_rect.right, (index + 1) * rowHeight + BORDER / 2 };
OffsetRect(&rect, 0, m_caption.getRect().bottom);
m_controls.emplace_back(*this, rect, setting);
}
@ -41,6 +52,11 @@ namespace Overlay
return r;
}
void ConfigWindow::onClose(Control& control)
{
static_cast<ConfigWindow*>(control.getParent())->setVisible(false);
}
void ConfigWindow::setFocus(SettingControl* control)
{
if (m_focus == control)

View File

@ -2,6 +2,8 @@
#include <list>
#include <Overlay/ButtonControl.h>
#include <Overlay/LabelControl.h>
#include <Overlay/SettingControl.h>
#include <Overlay/Window.h>
@ -17,10 +19,14 @@ namespace Overlay
void setFocus(SettingControl* control);
private:
static void onClose(Control& control);
virtual RECT calculateRect(const RECT& monitorRect) const override;
void addControl(Config::Setting& setting);
LabelControl m_caption;
ButtonControl m_closeButton;
std::list<SettingControl> m_controls;
SettingControl* m_focus;
};

View File

@ -27,7 +27,10 @@ namespace Overlay
void LabelControl::setColor(COLORREF color)
{
m_color = color;
invalidate();
if (m_color != color)
{
m_color = color;
invalidate();
}
}
}