📄 smldoc.cpp
字号:
#endif
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
HX_DELETE(m_pRegPointMap);
HX_RELEASE(m_pPersistentLayoutStream);
HX_RELEASE(m_pErrorMessages);
#if defined(HELIX_FEATURE_SMIL2_ANIMATION)
removeActiveAnimations();
#endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
HX_DELETE(m_pActiveAnimations);
HX_DELETE(m_pAnimationMap);
HX_DELETE(m_pAnimSiteRedrawMap);
HX_DELETE(m_pAnimRegionRecomputeMap);
HX_DELETE(m_pAnimTopLayoutMap);
deleteExternalMediaMarkerList();
HX_RELEASE(m_pSMILDefaultNamespaceStr);
if (m_pPrefetchTrackElementMap)
{
CHXMapLongToObj::Iterator i;
for (i = m_pPrefetchTrackElementMap->Begin();
i != m_pPrefetchTrackElementMap->End(); ++i)
{
CHXString* pId = (CHXString*)(*i);
HX_DELETE(pId);
}
HX_DELETE(m_pPrefetchTrackElementMap);
}
if (m_pIndependentPlayer)
{
HX_DELETE(m_pIndependentPlayer);
}
if (m_pChildSiteInfoMap)
{
HX_ASSERT(m_pChildSiteInfoMap->IsEmpty()); // /Should be empty!...
// ...but in case it's not empty, go ahead and delete its nodes:
CHXMapLongToObj::Iterator i = m_pChildSiteInfoMap->Begin();
for(; i != m_pChildSiteInfoMap->End(); ++i)
{
SMILChildSiteInfo* pChildSiteInfo = (SMILChildSiteInfo*)(*i);
delete pChildSiteInfo;
}
HX_DELETE(m_pChildSiteInfoMap);
}
#if defined(_UNIX) && (!(defined(_BEOS))) && defined(USE_XWINDOWS)
CHXMapPtrToPtr::Iterator i = m_siteToXDataMap.Begin();
for(; i != m_siteToXDataMap.End(); ++i)
{
XData* xData = (XData*)(*i);
delete xData;
}
if (m_pVisualInfo)
{
XFree(m_pVisualInfo);
m_pVisualInfo = NULL;
}
if (m_pDisplay && m_hHyperlinkCursor)
{
XFreeCursor(m_pDisplay, m_hHyperlinkCursor);
m_hHyperlinkCursor = 0;
}
#endif
#if defined(_MACINTOSH)
if (m_hHyperlinkCursor)
{
m_pResourceLoader->UnloadResource((Handle)m_hHyperlinkCursor);
m_hHyperlinkCursor = NULL;
HX_RELEASE(m_pResourceLoader);
}
if (m_bResetCursor)
{
::InitCursor();
}
#endif
HX_RELEASE(m_pSoundLevelMutex);
clearRendererMap();
HX_DELETE(m_pMediaID2RendererMap);
clearRendererSiteMap();
HX_DELETE(m_pMediaID2RendererSiteMap);
clearRendererSiteWatcherMap();
HX_DELETE(m_pMediaID2RendererSiteWatcherMap);
destroyAllRegions();
HX_DELETE(m_pSiteInfoByRendererMap);
HX_DELETE(m_pSiteWatcherMap);
}
/*
* IUnknown methods
*/
STDMETHODIMP
CSmilDocumentRenderer::QueryInterface(REFIID riid, void** ppvObj)
{
if(IsEqualIID(riid, IID_IUnknown))
{
AddRef();
*ppvObj = this;
return HXR_OK;
}
else if(IsEqualIID(riid, IID_IHXSiteUser))
{
HX_ASSERT(0 && "Huh?! CSmilDocumentRenderer doesn't implement IHXSiteUser");
AddRef();
*ppvObj = (IHXSiteUser*)this;
return HXR_OK;
}
else if(IsEqualIID(riid, IID_IHXRendererAdviseSink))
{
AddRef();
*ppvObj = (IHXRendererAdviseSink*)this;
return HXR_OK;
}
else if(IsEqualIID(riid, IID_IHXGroupSink))
{
AddRef();
*ppvObj = (IHXGroupSink*)this;
return HXR_OK;
}
else if(IsEqualIID(riid, IID_IHXClientAdviseSink))
{
AddRef();
*ppvObj = (IHXClientAdviseSink*)this;
return HXR_OK;
}
else if (IsEqualIID(riid, IID_IHXPrefetchSink))
{
AddRef();
*ppvObj = (IHXPrefetchSink*)this;
return HXR_OK;
}
else if (IsEqualIID(riid, IID_IHXTrackSink))
{
AddRef();
*ppvObj = (IHXTrackSink*)this;
return HXR_OK;
}
#if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
else if (IsEqualIID(riid, IID_IHXViewPortSink))
{
AddRef();
*ppvObj = (IHXViewPortSink*) this;
return HXR_OK;
}
#ifdef XXXMEH_DO_VIEWPORT_TLC
else if (IsEqualIID(riid, IID_IHXViewPortSupplier))
{
AddRef();
*ppvObj = (IHXViewPortSupplier*) this;
return HXR_OK;
}
#endif
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
#if defined(BE_SITE_SUPPLIER_20010205)
else if (IsEqualIID(riid, IID_IHXSiteSupplier))
{
AddRef();
*ppvObj = (IHXSiteSupplier*) this;
return HXR_OK;
}
#endif /* BE_SITE_SUPPLIER_20010205 */
else if (IsEqualIID(riid, IID_IHXMediaMarkerSink))
{
AddRef();
*ppvObj = (IHXMediaMarkerSink*) this;
return HXR_OK;
}
else if (IsEqualIID(riid, IID_IHXEventSink))
{
AddRef();
*ppvObj = (IHXEventSink*) this;
return HXR_OK;
}
else if (IsEqualIID(riid, IID_IHXErrorSink))
{
AddRef();
*ppvObj = (IHXErrorSink*) this;
return HXR_OK;
}
*ppvObj = NULL;
return HXR_NOINTERFACE;
}
STDMETHODIMP_(ULONG32)
CSmilDocumentRenderer::AddRef()
{
return InterlockedIncrement(&m_lRefCount);
}
STDMETHODIMP_(ULONG32)
CSmilDocumentRenderer::Release()
{
if(InterlockedDecrement(&m_lRefCount) > 0)
{
return m_lRefCount;
}
delete this;
return 0;
}
HX_RESULT
CSmilDocumentRenderer::close(CSmilRenderer* pParent)
{
MLOG_LEAKCHECK("CSmilDocumentRenderer::close() t=%lu\n", HX_GET_BETTERTICKCOUNT());
if (m_pHandlePendingSchedulingCallback &&
m_pHandlePendingSchedulingCallback->m_bIsCallbackPending)
{
m_pHandlePendingSchedulingCallback->m_bIsCallbackPending = FALSE;
m_pScheduler->Remove(m_pHandlePendingSchedulingCallback->m_PendingHandle);
m_pHandlePendingSchedulingCallback->m_PendingHandle = 0;
}
HX_RELEASE(m_pHandlePendingSchedulingCallback);
if (m_pHyperlinkCallback &&
m_pHyperlinkCallback->IsCallbackPending())
{
m_pHyperlinkCallback->SetCallbackPending(FALSE);
m_pScheduler->Remove(m_pHyperlinkCallback->GetCallbackHandle());
m_pHyperlinkCallback->SetCallbackHandle(0);
}
HX_RELEASE(m_pHyperlinkCallback);
if (m_pDelayedRendererCloseList)
{
CHXSimpleList::Iterator i = m_pDelayedRendererCloseList->Begin();
for (; i != m_pDelayedRendererCloseList->End(); ++i)
{
SMILDelayedRendererClose* pClose= (SMILDelayedRendererClose*)(*i);
//HX_ASSERT(FALSE); ??
actualRendererClosed(pClose->m_pRenderer, pClose->m_pInfo);
HX_RELEASE(pClose->m_pRenderer);
HX_RELEASE(pClose->m_pInfo);
HX_DELETE(pClose);
}
}
HX_DELETE(m_pDelayedRendererCloseList);
if (m_pRootLayout && m_pRootLayout->m_pSiteUser)
{
IUnknown* pThisUnk = NULL;
m_pRootLayout->m_pSiteUser->QueryInterface(IID_IUnknown, (void**) &pThisUnk);
if (pThisUnk)
{
pParent->HandleRemoveLayoutSiteGroup(pThisUnk);
}
HX_RELEASE(pThisUnk);
}
m_pParent = NULL;
if(m_pEventList)
{
CHXSimpleList::Iterator i = m_pEventList->Begin();
for(; i != m_pEventList->End(); ++i)
{
CSmilLayoutEvent* pEvent = (CSmilLayoutEvent*)(*i);
delete pEvent;
}
}
HX_DELETE(m_pEventList);
removeAllPlayToAssoc();
deleteExternalMediaMarkerList();
// HX_DELETE(m_pRootLayout);
#if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
closeViewports();
removeViewports();
HX_DELETE(m_pViewportList);
#ifdef XXXMEH_DO_VIEWPORT_TLC
clearViewportMap();
#endif
// Remove ourselves as a view port sink
if (m_pViewPortManager)
{
IHXViewPortSink* pSink = NULL;
QueryInterface(IID_IHXViewPortSink, (void**) &pSink);
if (pSink)
{
m_pViewPortManager->RemoveViewPortSink(pSink);
}
HX_RELEASE(pSink);
}
HX_RELEASE(m_pViewPortManager);
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
HX_DELETE(m_pRegPointMap);
HX_RELEASE(m_pSMILDefaultNamespaceStr);
#if defined(HELIX_FEATURE_SMIL2_ANIMATION)
removeActiveAnimations();
#endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
HX_DELETE(m_pActiveAnimations);
HX_DELETE(m_pAnimSiteRedrawMap);
HX_DELETE(m_pAnimRegionRecomputeMap);
HX_DELETE(m_pAnimTopLayoutMap);
// Remove ourselves as a media marker sink
// TRUE adds us, FALSE removes us
addRemoveMediaMarkerSink(FALSE);
// Are we setup as an event sink?
if (m_bEventSinkWasSetup)
{
// Remove ourselves as an event sink,
// TRUE adds us, FALSE removes us
addRemoveEventSink(FALSE);
}
// Remove any renderer event sinks we have setup
removeAllEventSinks();
HX_DELETE(m_pEventSinkList);
// Remove ourselve as an error sink
addRemoveErrorSink(FALSE);
HX_RELEASE(m_pErrorMessages);
if (m_bRootLayoutSiteDetached)
{
destroyAllRegions();
}
#if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
if(m_pTransitionMap)
{
CHXMapStringToOb::Iterator i = m_pTransitionMap->Begin();
for(; i != m_pTransitionMap->End(); ++i)
{
CSmilTransitionInfo* pTrans = (CSmilTransitionInfo*)(*i);
delete pTrans;
}
}
HX_DELETE(m_pTransitionMap);
#endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */
if (m_pActiveTransitions)
{
CHXSimpleList::Iterator i = m_pActiveTransitions->Begin();
for (;i != m_pActiveTransitions->End(); ++i)
{
SMILTransitionState* pState = (SMILTransitionState*)*i;
HX_DELETE(pState);
}
}
HX_DELETE(m_pActiveTransitions);
if(m_pGroupInfoMap)
{
CHXMapLongToObj::Iterator i = m_pGroupInfoMap->Begin();
for(; i != m_pGroupInfoMap->End(); ++i)
{
SMILGroupInfo* pGroupInfo = (SMILGroupInfo*)(*i);
delete pGroupInfo;
}
}
HX_DELETE(m_pGroupInfoMap);
if(m_pDeferredSourceMap)
{
CHXMapStringToOb::Iterator i = m_pDeferredSourceMap->Begin();
for(; i != m_pDeferredSourceMap->End(); ++i)
{
SMILDeferredSourceInfo* pInfo = (SMILDeferredSourceInfo*)(*i);
delete pInfo;
}
}
HX_DELETE(m_pDeferredSourceMap);
if(m_pDeferrededRemoveTrackMap)
{
CHXMapStringToOb::Iterator i = m_pDeferrededRemoveTrackMap->Begin();
for(; i != m_pDeferrededRemoveTrackMap->End(); ++i)
{
CHXString* pID = (CHXString*)(*i);
delete pID;
}
}
HX_DELETE(m_pDeferrededRemoveTrackMap);
if (m_pPausedAndDisabledIDMap)
{
CHXMapStringToOb::Iterator i = m_pPausedAndDisabledIDMap->Begin();
for(; i != m_pPausedAndDisabledIDMap->End(); ++i)
{
CHXString* pID = (CHXString*)(*i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -