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:
commit
d1442e3747
1382 changed files with 170725 additions and 0 deletions
251
Native/Inject/RootLayer.cpp
Normal file
251
Native/Inject/RootLayer.cpp
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
// RootLayer.cpp : Implementation of cRootLayer
|
||||
#include "stdafx.h"
|
||||
#include "Inject.h"
|
||||
#include "RootLayer.h"
|
||||
#include "Manager.h"
|
||||
#include "BarLayer.h"
|
||||
#include "Panel.h"
|
||||
#include "View.h"
|
||||
|
||||
enum eChildIDs
|
||||
{
|
||||
eChildBars,
|
||||
eChildPanel
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// cRootLayer
|
||||
|
||||
void cRootLayer::addView( cView *pView, ILayer *pRoot )
|
||||
{
|
||||
m_views.push_back( pView );
|
||||
|
||||
// Next, make the bar entry
|
||||
m_pBars->AddBar( pView->m_nViewID, &pView->m_VP );
|
||||
|
||||
// Last, make the view entry
|
||||
pView->m_pPanel->AddView( pView->m_nViewID, pRoot );
|
||||
}
|
||||
|
||||
void cRootLayer::removeView( cView *pView )
|
||||
{
|
||||
for( cViewList::iterator i = m_views.begin(); i != m_views.end(); ++ i )
|
||||
{
|
||||
if( *i == pView )
|
||||
{
|
||||
m_views.erase( i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cRootLayer::onCreate()
|
||||
{
|
||||
LayerParams lpBars = { eChildBars, { 0, 0, 1, 1 }, 0 };
|
||||
|
||||
CComObject< cBarLayer > *pBars;
|
||||
CComObject< cBarLayer >::CreateInstance( &pBars );
|
||||
|
||||
m_pBars = pBars;
|
||||
|
||||
m_pSite->CreateChild( &lpBars, pBars );
|
||||
|
||||
if( m_nViewMode == 0 ) // Single Mode
|
||||
{
|
||||
LayerParams lpPanel = { eChildPanel, { 0, 0, 0, 0 }, 0 };
|
||||
|
||||
CComObject< cPanel > *pPanel;
|
||||
CComObject< cPanel >::CreateInstance( &pPanel );
|
||||
|
||||
m_pSite->CreateChild( &lpPanel, pPanel );
|
||||
pPanel->putref_Sink( this );
|
||||
|
||||
m_pPanel = pPanel;
|
||||
}
|
||||
}
|
||||
|
||||
void cRootLayer::onDestroy()
|
||||
{
|
||||
m_pBars.Release();
|
||||
}
|
||||
|
||||
STDMETHODIMP cRootLayer::CreateView(ViewParams *pParams, ILayer *pLayer, IView **ppView)
|
||||
{
|
||||
// First create the view object
|
||||
CComObject< cView > *pView;
|
||||
CComObject< cView >::CreateInstance( &pView );
|
||||
|
||||
if( m_nViewMode == 1 ) // Multi Mode
|
||||
{
|
||||
LayerParams lpPanel = { m_nNextViewID, { 0, 0, 0, 0 }, 0 };
|
||||
|
||||
CComObject< cPanel > *pPanel;
|
||||
CComObject< cPanel >::CreateInstance( &pPanel );
|
||||
|
||||
m_pSite->CreateChild( &lpPanel, pPanel );
|
||||
|
||||
pPanel->putref_Sink( this );
|
||||
pView->m_pPanel = pPanel;
|
||||
}
|
||||
else
|
||||
pView->m_pPanel = m_pPanel;
|
||||
|
||||
pView->m_pRoot = this;
|
||||
pView->m_nViewID = m_nNextViewID ++;
|
||||
pView->m_VP.label = _bstr_t(pParams->label).copy();
|
||||
pView->m_VP.icon = pParams->icon;
|
||||
pView->m_VP.iconLibrary = pParams->iconLibrary;
|
||||
pView->m_VP.left = pParams->left;
|
||||
pView->m_VP.top = pParams->top;
|
||||
pView->m_VP.width = pParams->width;
|
||||
pView->m_VP.height = pParams->height;
|
||||
|
||||
addView( pView, pLayer );
|
||||
|
||||
*ppView = pView;
|
||||
pView->AddRef();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cRootLayer::SelectBar(long nID)
|
||||
{
|
||||
// We are given the Bar ID, find the matching view
|
||||
for( cViewList::iterator i = m_views.begin(); i != m_views.end(); ++ i )
|
||||
{
|
||||
if( ( *i )->m_nViewID == nID )
|
||||
{
|
||||
long nPrevActive;
|
||||
( *i )->m_pPanel->get_ActiveView( &nPrevActive );
|
||||
|
||||
if( nPrevActive != nID )
|
||||
{
|
||||
( *i )->m_pPanel->ActivateView( ( *i )->m_nViewID, & (*i)->m_VP, (long*)(*i));
|
||||
|
||||
( *i )->Fire_Activate();
|
||||
( *i )->m_bActivated = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
( *i )->Deactivate();
|
||||
( *i )->m_bActivated = false;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// Invalid return value
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
STDMETHODIMP cRootLayer::LoadView(BSTR strXML, IView **ppView)
|
||||
{
|
||||
CComObject< cView > *pView;
|
||||
CComObject< cView >::CreateInstance( &pView );
|
||||
|
||||
if( m_nViewMode == 1 ) // Multi Mode
|
||||
{
|
||||
LayerParams lpPanel = { m_nNextViewID, { 0, 0, 0, 0 }, 0 };
|
||||
|
||||
CComObject< cPanel > *pPanel;
|
||||
CComObject< cPanel >::CreateInstance( &pPanel );
|
||||
|
||||
m_pSite->CreateChild( &lpPanel, pPanel );
|
||||
|
||||
pPanel->putref_Sink( this );
|
||||
pView->m_pPanel = pPanel;
|
||||
pPanel->put_Params( &pView->m_VP );
|
||||
}
|
||||
else
|
||||
{
|
||||
pView->m_pPanel = m_pPanel;
|
||||
m_pPanel->put_Params( &pView->m_VP );
|
||||
}
|
||||
|
||||
CComPtr< IUnknown > pRootControl;
|
||||
|
||||
pView->m_pRoot = this;
|
||||
pView->m_nViewID = m_nNextViewID ++;
|
||||
|
||||
long lViewFlags = pView->loadSchema( strXML, &pRootControl );
|
||||
|
||||
if( pRootControl.p )
|
||||
{
|
||||
m_views.push_back( pView );
|
||||
|
||||
*ppView = pView;
|
||||
pView->AddRef();
|
||||
|
||||
// Next, make the bar entry
|
||||
m_pBars->AddBar( pView->m_nViewID, &pView->m_VP );
|
||||
|
||||
// Last, create all the controls
|
||||
pView->m_pPanel->LoadViewEx( pView->m_nViewID, pView, pRootControl, lViewFlags );
|
||||
|
||||
if( cManager::_p->m_bXMLViewViewer )
|
||||
{
|
||||
pView->m_VP.top = 24;
|
||||
pView->Activate( );
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
pView->Release( );
|
||||
*ppView = NULL;
|
||||
return E_FAIL;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cRootLayer::PanelDeactivate(long nViewID)
|
||||
{
|
||||
// Find the view of our desires and fire it's hide message
|
||||
for( cViewList::iterator i = m_views.begin(); i != m_views.end(); ++ i )
|
||||
{
|
||||
if( ( *i )->m_nViewID == nViewID )
|
||||
( *i )->Fire_Deactivate(),( *i )->m_bActivated = false;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cRootLayer::LoadViewObject(IUnknown *pSchema, IView **ppView)
|
||||
{
|
||||
CComObject< cView > *pView;
|
||||
CComObject< cView >::CreateInstance( &pView );
|
||||
|
||||
if( m_nViewMode == 1 ) // Multi Mode
|
||||
{
|
||||
LayerParams lpPanel = { m_nNextViewID, { 0, 0, 0, 0 }, 0 };
|
||||
|
||||
CComObject< cPanel > *pPanel;
|
||||
CComObject< cPanel >::CreateInstance( &pPanel );
|
||||
|
||||
m_pSite->CreateChild( &lpPanel, pPanel );
|
||||
|
||||
pPanel->putref_Sink( this );
|
||||
pView->m_pPanel = pPanel;
|
||||
}
|
||||
else
|
||||
pView->m_pPanel = m_pPanel;
|
||||
|
||||
CComPtr< IUnknown > pRootControl;
|
||||
|
||||
pView->m_pRoot = this;
|
||||
pView->m_nViewID = m_nNextViewID ++;
|
||||
pView->loadSchemaObject( pSchema, &pRootControl );
|
||||
|
||||
m_views.push_back( pView );
|
||||
|
||||
*ppView = pView;
|
||||
pView->AddRef();
|
||||
|
||||
// Next, make the bar entry
|
||||
m_pBars->AddBar( pView->m_nViewID, &pView->m_VP );
|
||||
|
||||
// Last, create all the controls
|
||||
pView->m_pPanel->LoadView( pView->m_nViewID, pView, pRootControl );
|
||||
return S_OK;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue