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
110
Native/DecalControls/PageLayout.cpp
Normal file
110
Native/DecalControls/PageLayout.cpp
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
// PageLayout.cpp : Implementation of cPageLayout
|
||||
#include "stdafx.h"
|
||||
#include "DecalControls.h"
|
||||
#include "PageLayout.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// cPageLayout
|
||||
|
||||
void cPageLayout::onChildDestroy( long nID )
|
||||
{
|
||||
if( m_nActive != -1 )
|
||||
{
|
||||
if( nID == m_pages[ m_nActive ] )
|
||||
// The active page is being deleted, now we show no pages
|
||||
m_nActive = -1;
|
||||
}
|
||||
|
||||
// Walk through the list of pages and remove he who does
|
||||
// not exist
|
||||
for( cChildIDList::iterator i = m_pages.begin(); i != m_pages.end(); ++ i )
|
||||
{
|
||||
if( *i == nID )
|
||||
{
|
||||
m_pages.erase( i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cPageLayout::onSchemaLoad( IView *pView, MSXML::IXMLDOMElementPtr &pElement )
|
||||
{
|
||||
// Each control child is a page
|
||||
MSXML::IXMLDOMElementPtr pChild;
|
||||
for( MSXML::IXMLDOMNodeListPtr pChildren = pElement->selectNodes( _T( "control" ) );
|
||||
( pChild = pChildren->nextNode() ).GetInterfacePtr() != NULL; )
|
||||
m_pages.push_back( loadChildControl( pView, pChild ) );
|
||||
}
|
||||
|
||||
STDMETHODIMP cPageLayout::get_Active(long *pVal)
|
||||
{
|
||||
_ASSERTE( pVal != NULL );
|
||||
|
||||
*pVal = m_nActive;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cPageLayout::put_Active(long newVal)
|
||||
{
|
||||
_ASSERTE( newVal >= 0 );
|
||||
_ASSERTE( newVal < m_pages.size() );
|
||||
|
||||
if( m_nActive != -1 )
|
||||
{
|
||||
// Hide the active page
|
||||
CComPtr< ILayerSite > pChildSite;
|
||||
HRESULT hRes = m_pSite->get_Child( m_pages[ m_nActive ], ePositionByID, &pChildSite );
|
||||
_ASSERTE( SUCCEEDED( hRes ) );
|
||||
|
||||
static RECT rcHide = { 0, 0, 0, 0 };
|
||||
pChildSite->put_Position( &rcHide );
|
||||
}
|
||||
|
||||
m_nActive = newVal;
|
||||
|
||||
// The reformat next cycle will reposition the child
|
||||
m_pSite->Reformat();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cPageLayout::CreatePage(ILayer *pChild)
|
||||
{
|
||||
_ASSERTE( pChild != NULL );
|
||||
|
||||
LayerParams lp = { dispenseID(), { 0, 0, 0, 0 }, eRenderClipped };
|
||||
m_pSite->CreateChild( &lp, pChild );
|
||||
|
||||
m_pages.push_back( lp.ID );
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cPageLayout::get_Count(long *pVal)
|
||||
{
|
||||
_ASSERTE( pVal != NULL );
|
||||
*pVal = m_pages.size();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP cPageLayout::Reformat()
|
||||
{
|
||||
if( m_nActive == -1 )
|
||||
return S_OK;
|
||||
|
||||
// Get the active page and set it to fill our entire client area
|
||||
RECT rcThis;
|
||||
m_pSite->get_Position( &rcThis );
|
||||
|
||||
RECT rcClient = { 0, 0, rcThis.right - rcThis.left, rcThis.bottom - rcThis.top };
|
||||
|
||||
CComPtr< ILayerSite > pChild;
|
||||
HRESULT hRes = m_pSite->get_Child( m_pages[ m_nActive ], ePositionByID, &pChild );
|
||||
_ASSERTE( SUCCEEDED( hRes ) );
|
||||
|
||||
pChild->put_Position( &rcClient );
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue