mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
feat: 叠加层初步支持鼠标
This commit is contained in:
parent
a9414a603d
commit
1d8b8564d4
7 changed files with 89 additions and 65 deletions
|
|
@ -26,70 +26,6 @@ ImGuiImpl::~ImGuiImpl() noexcept {
|
|||
}
|
||||
}
|
||||
/*
|
||||
static std::optional<LRESULT> WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
|
||||
if (!io.WantCaptureMouse) {
|
||||
if (msg == WM_LBUTTONDOWN && MagApp::Get().GetOptions().Is3DGameMode()) {
|
||||
MagApp::Get().GetRenderer().SetUIVisibility(false);
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
switch (msg) {
|
||||
case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK:
|
||||
case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
|
||||
case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
|
||||
case WM_XBUTTONDOWN: case WM_XBUTTONDBLCLK:
|
||||
{
|
||||
int button = 0;
|
||||
if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONDBLCLK) { button = 0; }
|
||||
if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) { button = 1; }
|
||||
if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONDBLCLK) { button = 2; }
|
||||
if (msg == WM_XBUTTONDOWN || msg == WM_XBUTTONDBLCLK) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; }
|
||||
|
||||
if (!ImGui::IsAnyMouseDown()) {
|
||||
if (!GetCapture()) {
|
||||
SetCapture(hwnd);
|
||||
}
|
||||
MagApp::Get().GetCursorManager().OnCursorCapturedOnOverlay();
|
||||
}
|
||||
|
||||
io.MouseDown[button] = true;
|
||||
break;
|
||||
}
|
||||
case WM_LBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_XBUTTONUP:
|
||||
{
|
||||
int button = 0;
|
||||
if (msg == WM_LBUTTONUP) { button = 0; }
|
||||
if (msg == WM_RBUTTONUP) { button = 1; }
|
||||
if (msg == WM_MBUTTONUP) { button = 2; }
|
||||
if (msg == WM_XBUTTONUP) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; }
|
||||
|
||||
io.MouseDown[button] = false;
|
||||
|
||||
if (!ImGui::IsAnyMouseDown()) {
|
||||
if (GetCapture() == hwnd) {
|
||||
ReleaseCapture();
|
||||
}
|
||||
MagApp::Get().GetCursorManager().OnCursorReleasedOnOverlay();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case WM_MOUSEWHEEL:
|
||||
io.MouseWheel += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA;
|
||||
break;
|
||||
case WM_MOUSEHWHEEL:
|
||||
io.MouseWheelH += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA;
|
||||
break;
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK LowLevelMouseProc(
|
||||
_In_ int nCode,
|
||||
|
|
@ -345,4 +281,69 @@ void ImGuiImpl::ClearStates() {
|
|||
}*/
|
||||
}
|
||||
|
||||
void ImGuiImpl::MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept {
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
|
||||
/*if (!io.WantCaptureMouse) {
|
||||
if (msg == WM_LBUTTONDOWN && MagApp::Get().GetOptions().Is3DGameMode()) {
|
||||
MagApp::Get().GetRenderer().SetUIVisibility(false);
|
||||
}
|
||||
return std::nullopt;
|
||||
}*/
|
||||
|
||||
switch (msg) {
|
||||
case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK:
|
||||
case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
|
||||
case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
|
||||
case WM_XBUTTONDOWN: case WM_XBUTTONDBLCLK:
|
||||
{
|
||||
int button = 0;
|
||||
if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONDBLCLK) { button = 0; }
|
||||
if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) { button = 1; }
|
||||
if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONDBLCLK) { button = 2; }
|
||||
if (msg == WM_XBUTTONDOWN || msg == WM_XBUTTONDBLCLK) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; }
|
||||
|
||||
if (!ImGui::IsAnyMouseDown()) {
|
||||
if (!GetCapture()) {
|
||||
SetCapture(ScalingWindow::Get().Handle());
|
||||
}
|
||||
//MagApp::Get().GetCursorManager().OnCursorCapturedOnOverlay();
|
||||
}
|
||||
|
||||
io.MouseDown[button] = true;
|
||||
break;
|
||||
}
|
||||
case WM_LBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_XBUTTONUP:
|
||||
{
|
||||
int button = 0;
|
||||
if (msg == WM_LBUTTONUP) { button = 0; }
|
||||
if (msg == WM_RBUTTONUP) { button = 1; }
|
||||
if (msg == WM_MBUTTONUP) { button = 2; }
|
||||
if (msg == WM_XBUTTONUP) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; }
|
||||
|
||||
io.MouseDown[button] = false;
|
||||
|
||||
if (!ImGui::IsAnyMouseDown()) {
|
||||
if (GetCapture() == ScalingWindow::Get().Handle()) {
|
||||
ReleaseCapture();
|
||||
}
|
||||
//MagApp::Get().GetCursorManager().OnCursorReleasedOnOverlay();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case WM_MOUSEWHEEL:
|
||||
io.MouseWheel += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA;
|
||||
break;
|
||||
case WM_MOUSEHWHEEL:
|
||||
io.MouseWheelH += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ public:
|
|||
|
||||
void ClearStates();
|
||||
|
||||
void MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
|
||||
|
||||
// 将提示窗口限制在屏幕内
|
||||
static void Tooltip(const char* content, float maxWidth = -1.0f);
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -89,6 +89,10 @@ void OverlayDrawer::SetUIVisibility(bool value) noexcept {
|
|||
|
||||
}
|
||||
|
||||
void OverlayDrawer::MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept {
|
||||
_imguiImpl.MessageHandler(msg, wParam, lParam);
|
||||
}
|
||||
|
||||
static const std::wstring& GetAppLanguage() noexcept {
|
||||
static std::wstring language;
|
||||
if (language.empty()) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ public:
|
|||
|
||||
void SetUIVisibility(bool value) noexcept;
|
||||
|
||||
void MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
|
||||
|
||||
private:
|
||||
bool _BuildFonts() noexcept;
|
||||
void _BuildFontUI(std::wstring_view language, const std::vector<uint8_t>& fontData, ImVector<ImWchar>& uiRanges) noexcept;
|
||||
|
|
|
|||
|
|
@ -118,6 +118,16 @@ void Renderer::OnCursorVisibilityChanged(bool isVisible) {
|
|||
});
|
||||
}
|
||||
|
||||
void Renderer::MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept {
|
||||
if (_overlayDrawer) {
|
||||
_overlayDrawer->MessageHandler(msg, wParam, lParam);
|
||||
if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONUP || msg == WM_LBUTTONDBLCLK || msg == WM_MOUSEWHEEL || msg == WM_MOUSEHWHEEL) {
|
||||
_FrontendRender();
|
||||
_FrontendRender();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Renderer::_CreateSwapChain() noexcept {
|
||||
DXGI_SWAP_CHAIN_DESC1 sd{};
|
||||
const RECT& scalingWndRect = ScalingWindow::Get().WndRect();
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ public:
|
|||
|
||||
void OnCursorVisibilityChanged(bool isVisible);
|
||||
|
||||
void MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
|
||||
|
||||
private:
|
||||
bool _CreateSwapChain() noexcept;
|
||||
|
||||
|
|
|
|||
|
|
@ -208,6 +208,10 @@ void ScalingWindow::ToggleOverlay() noexcept {
|
|||
}
|
||||
|
||||
LRESULT ScalingWindow::_MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) noexcept {
|
||||
if (_renderer) {
|
||||
_renderer->MessageHandler(msg, wParam, lParam);
|
||||
}
|
||||
|
||||
switch (msg) {
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
|
|
@ -245,7 +249,6 @@ LRESULT ScalingWindow::_MessageHandler(UINT msg, WPARAM wParam, LPARAM lParam) n
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue