📄 smldoc.cpp
字号:
#if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) closeViewports(); removeViewports(); HX_DELETE(m_pViewportList); HX_RELEASE(m_pViewPortManager);#ifdef XXXMEH_DO_VIEWPORT_TLC clearViewportMap();#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(); CleanUpSiteInfoContainers(); HX_DELETE(m_pSiteWatcherMap);}/* * IUnknown methods */STDMETHODIMPCSmilDocumentRenderer::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_RESULTCSmilDocumentRenderer::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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -