Skip to content

Integrate Qt6 UI engine and add NSIS installer#3

Open
razecrs wants to merge 1 commit intoWinExperiments:mainfrom
razecrs:main
Open

Integrate Qt6 UI engine and add NSIS installer#3
razecrs wants to merge 1 commit intoWinExperiments:mainfrom
razecrs:main

Conversation

@razecrs
Copy link
Copy Markdown

@razecrs razecrs commented Apr 25, 2026

This PR introduces a unified desktop experience by integrating the new Qt6 UI engine directly into the main DirectDesktop.exe.

Key Changes:

  1. Engine Unification: Merged Qt initialization and QML overlay logic into the core Win32 application. The application can now switch between DirectUI and Qt6 engines based on the UIMode setting.
  2. Robust Hooking: Improved desktop window detection for both engines, ensuring compatibility with Windows 11 (including 24H2).
  3. Visual Confirmation: Added a pulsing blue indicator and modern sidebar to the Qt6 engine for immediate visual feedback.
  4. Professional Installer: Added CPack/NSIS configuration to generate a standalone installer that bundles all dependencies (Qt DLLs, assets).
  5. Improved UX: Added shortcuts to the Control Panel on the Desktop and Start Menu for easier configuration.

Users can toggle between engines in the updated Control Panel.

…onfiguration

This commit:
1. Merges the Qt6 UI engine directly into DirectDesktop.exe.
2. Embeds Qt initialization and the QML desktop overlay.
3. Updates the C# Control Panel to correctly launch the unified binary.
4. Adds CPack/NSIS configuration to generate a standalone installer.
5. Adds desktop and start menu shortcuts to the Control Panel for better UX.
Copy link
Copy Markdown
Author

@razecrs razecrs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM and easier explanations

{
qmemcpy(&_shdi, pvDragStuff, sizeof(SHDRAGIMAGE) - 8);
void* pvBits;
void* pvBits = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

switched to using the new C23 nullptr which is safer

if (_shdi.hbmpDragImage)
{
void* pvBits;
void* pvBits = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same thing here

if (SetWindowCompositionAttribute)
{
WCHAR* WindowsBuildStr;
WCHAR* WindowsBuildStr = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same nptr here

////////////////// 0.5.6.3: NEED HELP WITH CONTEXT MENUS!

#include "pch.h"
#include <gdiplus.h>
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to handle some custom ui implementations

return CreateAndInit<DDScalableElement, int>(0, pParent, pdwDeferCookie, ppElement);
}

void DDScalableElement::Paint(HDC hdc, const RECT* prcBounds, const RECT* prcInvalid, RECT* prcNext, RECT* prcRegion)
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

below an implementation of a very very very juicy feeling and looking glassmorphism

if (wParam == SPI_SETFONTSMOOTHING)
{
WCHAR* fontsmoothingStr;
WCHAR* fontsmoothingStr = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C23 nullptr damn

case WM_USER + 5:
{
WCHAR *cxDragStr{}, *cyDragStr{};
WCHAR *cxDragStr = nullptr, *cyDragStr = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same thing C23 nullptr

GetCursorPos(&ppt);
ScreenToClient(wnd->GetHWND(), &ppt);
WCHAR *cxDragStr{}, *cyDragStr{};
WCHAR *cxDragStr = nullptr, *cyDragStr = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C23

{
int clicks = *(int*)lpParam;
wchar_t* dcms{};
wchar_t* dcms = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c23 and also i dont know why u did wchar_t* dcms{}; thats bad code btw

GetCursorPos(&ppt);
ScreenToClient(wnd->GetHWND(), &ppt);
WCHAR *cxDragStr{}, *cyDragStr{};
WCHAR *cxDragStr = nullptr, *cyDragStr = nullptr;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same thing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant