Initial commit: Complete open-source Decal rebuild

All 5 phases of the open-source Decal rebuild:

Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil)
Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs
  - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters
  - Decal.Core, DecalControls, DecalRender, D3DService
Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL
Phase 4: DenAgent WinForms tray application
Phase 5: WiX installer and build script

25 C# projects building with 0 errors.
Native C++ projects require VS 2022 + Windows SDK (x86).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
erik 2026-02-08 18:27:56 +01:00
commit d1442e3747
1382 changed files with 170725 additions and 0 deletions

79
Native/Inject/Canvas.h Normal file
View file

@ -0,0 +1,79 @@
// Canvas.h : Declaration of the cCanvas
#ifndef __CANVAS_H_
#define __CANVAS_H_
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// cCanvas
class ATL_NO_VTABLE cCanvas :
public CComObjectRootEx<CComMultiThreadModel>,
public ICanvas
{
public:
cCanvas()
: m_hdc( NULL ),
m_rgn( NULL )
{
m_bf.SourceConstantAlpha = 255;
m_bf.BlendOp = AC_SRC_OVER;
m_bf.BlendFlags = 0;
m_bf.AlphaFormat = 0;
sourceAlpha = 255;
wRBitCount = 0;
}
~cCanvas();
CComPtr< IDirectDrawSurface4 > m_pSurface;
SIZE m_sz;
typedef std::stack< ClipParams > cClipStack;
cClipStack m_clipping;
HDC m_hdc;
HRGN m_rgn;
BLENDFUNCTION m_bf;
WORD wRBitCount, wGBitCount, wBBitCount;
WORD wRLoBit, wGLoBit, wBLoBit;
long sourceAlpha;
void testSurface();
void processMask(WORD bitMask, WORD *loBit, WORD *bitCount);
BEGIN_COM_MAP(cCanvas)
COM_INTERFACE_ENTRY(ICanvas)
END_COM_MAP()
// ICanvas
public:
STDMETHOD(SetTransparentColor)(/*[in]*/ long TransColor);
STDMETHOD(GetDCLong)(long *DC);
STDMETHOD(SetClipRect)(LPRECT prcClip, VARIANT_BOOL *pbVisible);
STDMETHOD(OffsetOrg)(LPPOINT ppt, VARIANT_BOOL *pbVisible);
STDMETHOD(ToScreen)(/*[in, out]*/ LPPOINT ppt);
STDMETHOD(ToClient)(/*[in, out]*/ LPPOINT pt);
STDMETHOD(HitTest)(LPPOINT ppt, /*[out, retval]*/ VARIANT_BOOL *pbHit);
STDMETHOD(Blt)(LPRECT prcSrc, ICanvas *pSrc, LPPOINT pptDest);
STDMETHOD(get_Size)(/*[out, retval]*/ LPSIZE pVal);
STDMETHOD(put_Size)(/*[in]*/ LPSIZE newVal);
STDMETHOD(get_WasLost)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(Frame)(LPRECT prc, long nRGB);
STDMETHOD(Fill)(LPRECT prc, long nRGB);
STDMETHOD(GetClipParams)(/*[out, retval]*/ ClipParams *pParams);
STDMETHOD(GetSurface)(REFIID iid, /*[out, retval, iid_is(iid)]*/ void **ppvItf);
STDMETHOD(ReleaseDC)();
STDMETHOD(GetDC)(/*[out,retval]*/ HDC *pdc);
STDMETHOD(PopClipRect)();
STDMETHOD(PushClipRect)(LPRECT prc, /*[out, retval]*/ VARIANT_BOOL *pbVisible);
STDMETHOD(put_Alpha)(long Alpha);
STDMETHOD(DownMixRGB)(WORD wRed, WORD wGreen, WORD wBlue, /*[out, retval]*/ WORD *wDMRGB);
STDMETHOD(StretchBlt)(LPRECT prcSrc, ICanvas *pSrc, LPRECT prcDest);
};
#endif //__CANVAS_H_