📄 layevent.cpp
字号:
{
return (const char*) m_MediaID;
}
const char* CSmilShowSiteEvent::getRegionID()
{
return (const char*) m_RegionID;
}
#if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
CSmilTransitionEvent::CSmilTransitionEvent(UINT32 ulEventTime,
SMILPlayToAssoc* pAssoc,
SMILSiteInfo* pSiteInfo,
BOOL bBeginTransition,
CSmilDocumentRenderer* pRenderer) :
CSmilLayoutEvent(pAssoc->m_uGroupIndex, ulEventTime, FALSE)
{
m_pDocRenderer = pRenderer;
m_pPlayToAssoc = pAssoc;
m_pSiteInfo = pSiteInfo;
m_pSite = NULL;
if (m_pDocRenderer)
{
m_pDocRenderer->AddRef();
}
if (bBeginTransition)
{
m_type = eBeginTransition;
}
else
{
m_type = eEndTransition;
}
}
CSmilTransitionEvent::CSmilTransitionEvent(UINT32 ulEventTime,
SMILPlayToAssoc* pAssoc,
IHXSite* pSite,
BOOL bBeginTransition,
CSmilDocumentRenderer* pRenderer) :
CSmilLayoutEvent(pAssoc->m_uGroupIndex, ulEventTime, FALSE)
{
m_pDocRenderer = pRenderer;
m_pPlayToAssoc = pAssoc;
m_pSiteInfo = NULL;
m_pSite = pSite;
if (m_pDocRenderer)
{
m_pDocRenderer->AddRef();
}
if (m_pSite)
{
m_pSite->AddRef();
}
if (bBeginTransition)
{
m_type = eBeginTransition;
}
else
{
m_type = eEndTransition;
}
}
CSmilTransitionEvent::~CSmilTransitionEvent()
{
HX_RELEASE(m_pDocRenderer);
HX_RELEASE(m_pSite);
}
HX_RESULT CSmilTransitionEvent::handleEvent(UINT32 ulTime)
{
MLOG_EVENT(NULL,
"CSmilTransitionEvent::handleEvent(%lu)\n\t"
"m_ulEventTime=%lu\n\tm_uGroupIndex=%u\n\ttick=%lu\n",
ulTime, m_ulEventTime, m_uGroupIndex,
HX_GET_BETTERTICKCOUNT());
HX_RESULT retVal = HXR_FAIL;
if (m_pDocRenderer && m_pPlayToAssoc)
{
CSmilTransitionInfo* pInfo = NULL;
if (m_type == eBeginTransition)
{
pInfo = m_pDocRenderer->getTransition(m_pPlayToAssoc->m_beginTransition);
}
else
{
pInfo = m_pDocRenderer->getTransition(m_pPlayToAssoc->m_endTransition);
}
if (pInfo)
{
if (m_pSiteInfo || m_pSite)
{
retVal = m_pDocRenderer->startTransition(m_ulEventTime, pInfo, m_pSiteInfo,
m_pPlayToAssoc, m_pSite, ulTime,
m_type == eBeginTransition);
}
}
}
return retVal;
}
IHXSite* CSmilTransitionEvent::getRegionSite()
{
return m_pSiteInfo ? m_pSiteInfo->m_pRegionSite : NULL;
}
IHXSite* CSmilTransitionEvent::getRendererSite()
{
return m_pSiteInfo ? m_pSiteInfo->m_pRendererSite : m_pSite;
}
#endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */
#if defined(HELIX_FEATURE_SMIL2_ANIMATION)
CSmilAnimateEvent::CSmilAnimateEvent(UINT16 uGroupIndex,
UINT32 ulEventTime,
BOOL bIgnorEvent,
CSmilAnimateElement* pElement,
CSmilDocumentRenderer* pDocRenderer,
CSmilParser* pParser)
: CSmilLayoutEvent(uGroupIndex, ulEventTime, bIgnorEvent)
{
m_type = eAnimate;
m_pElement = pElement;
m_pDocRenderer = pDocRenderer;
m_pSmilParser = pParser;
m_bEventBasedBegin = (pElement ? pElement->hasEventBasedBeginTime() : FALSE);
m_bHandled = FALSE;
}
CSmilAnimateEvent::CSmilAnimateEvent(const CSmilAnimateEvent& rEvent)
: CSmilLayoutEvent(rEvent.m_pElement->m_pNode->m_nGroup,
rEvent.m_ulEventTime,
rEvent.m_bIgnorEvent)
{
m_type = eAnimate;
m_pElement = rEvent.m_pElement;
m_pDocRenderer = rEvent.m_pDocRenderer;
m_pSmilParser = rEvent.m_pSmilParser;
m_bEventBasedBegin = (m_pElement ? m_pElement->hasEventBasedBeginTime() : FALSE);
}
CSmilAnimateEvent::~CSmilAnimateEvent()
{
}
HX_RESULT CSmilAnimateEvent::handleEvent(UINT32 ulTime)
{
MLOG_EVENT(NULL,
"CSmilAnimateEvent::handleEvent(%lu)\n\tm_ulEventTime=%lu\n\t"
"m_uGroupIndex=%u\n\tid=%s\n\ttargetElement=%s\n\t"
"attributeName=%lu\n\ttick=%lu\n",
ulTime, m_ulEventTime, m_uGroupIndex,
(m_pElement && m_pElement->m_pNode ?
(const char*) m_pElement->m_pNode->m_id : "NULL"),
(m_pElement && m_pElement->m_pTargetElementID ?
(const char*) *m_pElement->m_pTargetElementID : "NULL"),
(m_pElement ? m_pElement->m_ucAttributeName : 0),
HX_GET_BETTERTICKCOUNT());
HX_RESULT retVal = HXR_OK;
if (m_pElement && m_pElement->m_pNode &&
!m_pElement->m_bCancelAnimation)
{
// Create the sandwich layer. If this is an
// animateMotion, then we need to create two
// layers, otherwise one
if (m_pElement->m_pNode->m_tag == SMILAnimateMotion)
{
CAnimationSandwichLayer* pLayerLeft =
new CAnimationSandwichLayer(m_pElement, kAttrNameLeft, m_pSmilParser);
if (pLayerLeft)
{
CAnimationSandwichLayer* pLayerTop =
new CAnimationSandwichLayer(m_pElement, kAttrNameTop, m_pSmilParser);
if (pLayerTop)
{
retVal = m_pDocRenderer->addAnimation(pLayerLeft);
if (SUCCEEDED(retVal))
{
retVal = m_pDocRenderer->addAnimation(pLayerTop);
}
}
else
{
retVal = HXR_OUTOFMEMORY;
}
}
else
{
retVal = HXR_OUTOFMEMORY;
}
}
else
{
CAnimationSandwichLayer* pLayer =
new CAnimationSandwichLayer(m_pElement, m_pElement->m_ucAttributeName, m_pSmilParser);
if (pLayer)
{
retVal = m_pDocRenderer->addAnimation(pLayer);
}
else
{
retVal = HXR_OUTOFMEMORY;
}
}
}
return retVal;
}
IHXSite* CSmilAnimateEvent::getRegionSite()
{
return NULL;
}
IHXSite* CSmilAnimateEvent::getRendererSite()
{
return NULL;
}
BOOL CSmilAnimateEvent::isSameElement(CSmilAnimateElement* pAnim)
{
BOOL bRet = FALSE;
if (pAnim && m_pElement &&
pAnim == m_pElement)
{
bRet = TRUE;
}
return bRet;
}
#endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -