smlelem.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:33k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: smlelem.h,v 1.4.16.1 2004/07/09 01:57:56 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _SMLELEM_H_
  50. #define _SMLELEM_H_
  51. #define WAY_IN_THE_FUTURE  1981342000 /*1981342000 is 22d+22h+22m+22s */
  52. #if !defined(MAX_LONG32)
  53. #define MAX_LONG32  0x7FFFFFFF
  54. #endif
  55. // /This is used for passing invalid coord value for firing a link when an
  56. // accesskey event occurs (and no mouse coords are involved): 
  57. #define ANCHOR_POS_DONTCARE ((UINT16)-1)
  58. // /This is used to simplify event processing since accesskey events have no
  59. // element that raises them, they have no element ID.  The following is used
  60. // for all accesskey events that have no ID, and it starts with a number to
  61. // make sure it's an illegal XML id and thus won't be used in a SMIL file:
  62. #define ACCESSKEY_EVENT_FAKE_ID_STRING  "21yrsOld__accesskey_fake_id"
  63. // Forward declarations
  64. typedef _INTERFACE IHXValues IHXValues;
  65. typedef _INTERFACE IHXBuffer IHXBuffer;
  66. class CSmilElement;
  67. class CSmilAddGroup;
  68. class CSmilRootLayout;
  69. class CSmilRegion;
  70. class CSmilRegPoint;
  71. #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
  72. class CSmilViewport;
  73. #endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
  74. class CSmilSource;
  75. class CSmilMeta;
  76. class CSmilMetadata;
  77. class CSmilEndLayout;
  78. class CSmilRendererPreFetch;
  79. class CSmilSourceUpdate;
  80. #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
  81. class CSmilTransition;
  82. #endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */
  83. class CSmilAnimateElement;
  84. class CSmilCustomTest;
  85. class SMILNode;
  86. class CSmilParser;
  87. class SmilTimeValue;
  88. class CHXString;
  89. class CSmilTimelineElement;
  90. class CHXSimpleList;
  91. class CAttr;
  92. class CHXStack;
  93. class CSmilElement;
  94. class CSmilElementHandler
  95. {
  96. public:
  97.     virtual HX_RESULT handleAddGroup(CSmilAddGroup* pAddGroup) = 0;
  98.     virtual HX_RESULT handleRootLayout(CSmilRootLayout* pRootLayout) = 0;
  99.     virtual HX_RESULT handleRegion(CSmilRegion* pRegion) = 0;
  100.     virtual HX_RESULT handleRegPoint(CSmilRegPoint* pRegPoint) = 0;
  101. #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
  102.     virtual HX_RESULT handleViewport(CSmilViewport* pView) = 0;
  103. #endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
  104.     virtual HX_RESULT handleSource(CSmilSource* pSource) = 0;
  105.     virtual HX_RESULT handleMeta(CSmilMeta* pMeta) = 0;
  106.     virtual HX_RESULT handleMetadata(CSmilMetadata* pMetadata) = 0;
  107.     virtual HX_RESULT handleEndLayout(CSmilEndLayout* pEndLayout) = 0;
  108.     virtual HX_RESULT handleRendererPreFetch(CSmilRendererPreFetch* pRend) = 0;
  109.     virtual HX_RESULT handleSourceUpdate(CSmilSourceUpdate* pUpdate) = 0;
  110. #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
  111.     virtual HX_RESULT handleTransition(CSmilTransition* pTrans) = 0;
  112. #endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */
  113.     virtual HX_RESULT handleTrackRemoval(const char* pID, INT32 nGroup) = 0;
  114.     virtual HX_RESULT handleTrackPausing(SMILNode* pNode,
  115. LONG32 lTimeOfPause,
  116. SMILPriorityClassPauseDisplay pauseDisplay,
  117. const char* pIdOfPauser) = 0;
  118.     virtual HX_RESULT handleTrackResuming(const char* pID, INT32 nGroup) = 0;
  119. #if defined(HELIX_FEATURE_SMIL2_ANIMATION)
  120.     virtual HX_RESULT handleAnimate(CSmilAnimateElement* pAnimate) = 0;
  121. #endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
  122.     virtual HX_RESULT handleRemoveTimeUpdate(CSmilElement* pElement, UINT32 ulRemoveTime) = 0;
  123.     virtual HX_RESULT handleExternalMediaMarkerFile(CSmilElement* pElement,
  124.                                                     const char*   pszID,
  125.                                                     const char*   pszExternalFileName,
  126.                                                     const char*   pszRelativeSource) = 0;
  127.     virtual HX_RESULT resolveGroupDurToOuterTimeContainerDur(UINT32 ulGroupIndex,
  128.      UINT32 ulGroupTimeContainerDuration) = 0;
  129.     virtual HX_RESULT GetCurGroupDuration(REF(UINT32) ulCurGrpDur) = 0;
  130. };
  131. class CSmilElement
  132. {
  133. public:
  134.     CSmilElement(SMILNode* pNode);
  135.     virtual ~CSmilElement();
  136.     virtual void      addDuration(UINT32 ulDuration);
  137.     virtual void      addElement(CSmilElement* pElement,
  138.                                  UINT32&       ulStartTime,
  139.                                  UINT32&       ulDuration);
  140.     virtual HX_RESULT handleElement() { return HXR_OK; }
  141.     virtual HX_RESULT setBeginTime(CSmilParser* pParser);
  142.     virtual HX_RESULT setEndTime(CSmilParser* pParser);
  143.     virtual void      prepForRestart(BOOL bParentIsRestarting, LONG32 lWhen);
  144.     virtual void      prepForPauseInExcl(LONG32 lCurTime);
  145.     virtual void      prepForResumeInExcl();
  146.     virtual void      prepForStopInExcl(LONG32 lCurTime);
  147.     virtual void      prepForDeferralInExcl(UINT32 lCurTime);
  148.     virtual BOOL      isPausedInExcl() { return m_bIsPausedInExcl; }
  149.     virtual BOOL      isDeferredInExcl() { return m_bIsDeferredInExcl; }
  150.     virtual BOOL      isStoppedInExcl() { return m_bIsStoppedInExcl; }
  151.     virtual HX_RESULT getBeginTimeValue(REF(SmilTimeValue*) pValue);
  152.     virtual HX_RESULT getEndTimeValue(REF(SmilTimeValue*) pValue);
  153.     // /These were added in order to easily calculate when an already-
  154.     // inserted-into-the-timeline element *actually* begins and ends so
  155.     // that doing such things as freezing and holding can be done:
  156.     virtual HX_RESULT getCurrentScheduledStartTime(
  157.     REF(ULONG32) ulActualStartTime);
  158.     virtual HX_RESULT getCurrentScheduledStopTime(
  159.     REF(ULONG32) ulActualStopTime);
  160.     // /Note: pValue, as well as the two lists, is|are filled with either
  161.     // begin or end time|times, depending on the listType value:
  162.     virtual HX_RESULT getNextResolvedTimeValue(REF(SmilTimeValue*) pValue,
  163.                                                INT32 lCurTimeInGroupTime,
  164.                                                INT32 lCurTimeInSyncBaseTime,
  165.                                                SmilTimingListType  listType,
  166.                                                CHXSimpleList*
  167.        pListOfAllResolvedTimes);
  168.     virtual HX_RESULT resolveEventTimeValues(INT32              lCurTime,
  169.                                              const char*        pEventName,
  170.                                              const char*        pEventElementId,
  171.                                              SmilTimingListType listType,
  172.                                              REF(BOOL)          bATimeWasResolved);
  173.     virtual HX_RESULT resolveSyncArcTimeValues(INT32              lResolvedToTime,
  174.                                                const char*        pSyncBaseElementId,
  175.                                                SmilTimingListType listType,
  176.                                                REF(BOOL)          bATimeWasResolved,
  177.        BOOL bMoveNewlyResolvedsToPendingTimesList,
  178.        CSmilParser* pParser);
  179.     virtual HX_RESULT getParentRestartDefault();
  180.     virtual void      updateRemoveTime(UINT32 ulRemoveTime);
  181.     virtual void      handleXMMF(const char* pszID, const char* pszXMMFile, const char* pszSrc);
  182.     virtual BOOL      hasEventBasedBeginTime();
  183.     virtual BOOL      hasEventBasedEndTime();
  184.     virtual CSmilElement* getSyncAncestorElement();
  185.     // /Use of the new method fixes PR 79699 and PR 8XXYZ (PR 63622 part 3,
  186.     // revisited) by making sure that the duration passed to
  187.     // resetTimelineElementDuration() is in local time coords, not syncbase
  188.     // time coord (i.e., m_ulDuration may or may not include the delay beyond
  189.     // the syncbase.  This method returns the duration from the element's
  190.     // begin to its end, w/o any delay:
  191.     ULONG32 getPureDuration();
  192.     // /This method goes through the m_pEndTimeList to see if there's an
  193.     // event-arc end time or other unresolved end time; this is important
  194.     // for use in the algorithm for determining whether or not something
  195.     // should restart (see SMIL 2.0 Spec Timing Module's getNextInterval()
  196.     // pseudocode):
  197.     BOOL hasUnresolvedEndTime();
  198.     // /This method helps fix PR 50660 (par version) and PR 62408: to make
  199.     // sure restarted track doesn't get treated as a repeat track in
  200.     // handleSource(), it calls this and uses the return val to decide; the
  201.     // m_bIsRestarting is reset to FALSE in case this element does have
  202.     // a repeat so the repeats will also restart:
  203.     BOOL IsRestartingAndNotRepeating() { BOOL bIs=m_bIsRestarting;
  204.                                          m_bIsRestarting=FALSE; return bIs;}
  205.     HX_RESULT GetElementProperties(REF(IHXValues*) pProperties);
  206.     void checkElementFillBehavior();
  207.     
  208.     // /NOTE: all values below are for the currently-active (or, if this
  209.     // element is not active on the timeline currently, the next-to-be
  210.     // active) "interval" (see SMIL 2.0 Timing module for details on
  211.     // how a "current interval" is defined and computed).  Multiple begin
  212.     // and end times are stored in the m_pBeginTimeList and m_pEndTimeList,
  213.     // respectively.  When a new one from that list becomes the active one,
  214.     // the following vars may change (which happens *during* playback):
  215.     SMILNode*             m_pNode;
  216.     UINT32                m_ulClipBegin;           // start of clip
  217.     UINT32                m_ulAuthoredClipBegin;   // explicitly-authored clipBegin value
  218.     UINT32                m_ulClipEnd;             // clip end time
  219.     INT32                 m_lBeginOffset;          // clip delay
  220.     ULONG32   m_ulBeginOffsetFromSyncBase;
  221.     UINT32                m_ulDelay;               // presentation delay
  222.     // /NOTE: this may include delay beyond syncbase.  getPureDuration()
  223.     // returns the duration from the element's begin to its end, w/o delay:
  224.     UINT32                m_ulDuration;            // clip duration
  225.     UINT32                m_ulOriginalDuration;    // value dur attribute if dur is specified.
  226.     UINT32                m_ulDurationInAddTrack;
  227.     UINT32                m_ulMaxDuration;
  228.     UINT32                m_ulMaxActiveDur;        // as set by the "min" attribute. deflt=indef
  229.     UINT32                m_ulMinActiveDur;        // as set by the "min" attribute. default=0.
  230.     UINT32                m_ulAuthoredDur;         // as set by the "dur" attribute.
  231.     INT32                 m_lEndOffset;
  232.     UINT32                m_ulAnticipatedPauseDur;
  233.     UINT32                m_ulEndSync;
  234.     ULONG32   m_ulStopTimeInExcl;
  235.     ULONG32               m_ulLongSyncArcBeginInGroupTime;
  236.     double                m_fRepeatValue;
  237.     UINT32                m_ulTimestamp;           // timestamp to send packet
  238.     SmilElementRestart    m_restartBehavior;
  239.     SmilElementRestart    m_restartDefaultBehavior;
  240.     ULONG32               m_ulSyncTolerance;
  241.     ULONG32               m_ulSyncToleranceDefault;
  242.     SMILSyncBehaviorType  m_syncBehavior;
  243.     SMILSyncBehaviorType  m_syncBehaviorDefault;
  244.     CHXString             m_sensitivityToMouseEvents;
  245.     CHXString             m_title;
  246.     CHXString             m_author;
  247.     CHXString             m_copyright;
  248.     CHXString             m_abstract;
  249.     CHXString             m_alt;
  250.     CHXString             m_longdesc;
  251.     ULONG32               m_ulReadIndex;
  252.     SMILEventSourceTag    m_nBeginEventSourceTag;
  253.     CHXString             m_BeginEventSourceID;
  254.     INT32                 m_lBeginEventClockValue;
  255.     SMILEventSourceTag    m_nEndEventSourceTag;
  256.     CHXString             m_EndEventSourceID;
  257.     INT32                 m_lEndEventClockValue;
  258.     SMILEventSourceTag    m_nEndsyncEventSourceTag;
  259.     CHXString             m_EndsyncEventSourceID;
  260.     CSmilTimelineElement* m_pTimelineElement;
  261.     CSmilElementHandler*  m_pHandler;
  262.     CHXSimpleList*        m_pHyperlinks;
  263.     CHXSimpleList*        m_pBeginTimeList;
  264.     CHXSimpleList*        m_pEndTimeList;
  265.     CHXString             m_beginTransition;
  266.     CHXString             m_endTransition;
  267.     FillType              m_eFill;
  268.     FillDefaultType       m_eFillDefault;
  269.     FillType              m_eActualFill;
  270.     EraseType             m_eErase;
  271.     UINT32                m_ulRemoveTime;
  272.     CHXString             m_customTestKey;
  273.     char*                 m_pszClipBeginMarkerName;
  274.     char*                 m_pszClipBeginExternalMarkerFileName;
  275.     char*                 m_pszClipEndMarkerName;
  276.     char*                 m_pszClipEndExternalMarkerFileName;
  277.     AccessErrorBehavior   m_eAccessErrorBehavior;
  278.     UINT32                m_ulTimeDeferralOccurred;
  279.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  280.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  281.     HX_BITFIELD           m_bBeginOffsetSet : 1;
  282.     HX_BITFIELD           m_bNegBeginOffsetAlreadyUsed : 1;
  283.     HX_BITFIELD           m_bCurBeginIsOffsetFromSyncBase : 1;
  284.     HX_BITFIELD           m_bCurEndClippedByParent : 1; // end clipped by parent end
  285.     HX_BITFIELD           m_bUseMediaDurForMinDur : 1; // flag for min="media"
  286.     HX_BITFIELD           m_bUseMediaDurForMaxDur : 1; // flag for max="media"
  287.     HX_BITFIELD           m_bHasExplicitEnd : 1;
  288.     HX_BITFIELD           m_bHasExplicitDur : 1;
  289.     HX_BITFIELD           m_bDurationIncludesDelayBeyondSyncbase : 1;
  290.     HX_BITFIELD           m_bAddDurationAlreadyDone : 1;
  291.     HX_BITFIELD           m_bEndOffsetSet : 1;
  292.     HX_BITFIELD           m_bInsertedIntoTimeline : 1; // TRUE when inserted
  293.     HX_BITFIELD           m_bHasBeenScheduled : 1;     // TRUE when inserted; doesn't ever reset, though
  294.     HX_BITFIELD           m_bIsPausedInExcl : 1; // TRUE when active+paused in excl
  295.     HX_BITFIELD           m_bIsDeferredInExcl : 1;
  296.     HX_BITFIELD           m_bIsStoppedInExcl : 1;
  297.     HX_BITFIELD           m_bCurrentSourceIsLive : 1;
  298.     HX_BITFIELD           m_bRendererInitialized : 1;
  299.     HX_BITFIELD           m_bIsRestarting : 1;
  300.     // /long sync arc begin resolved before parent delay resolved:
  301.     HX_BITFIELD           m_bAwaitingSyncAncestorBeginNotification : 1;
  302.     HX_BITFIELD           m_bIndefiniteDuration : 1;
  303.     HX_BITFIELD           m_bIndefiniteBegin : 1;
  304.     HX_BITFIELD           m_bIndefiniteEnd : 1;
  305.     HX_BITFIELD           m_bWallClockBegin : 1;
  306.     HX_BITFIELD           m_bWallClockEnd : 1;
  307.     HX_BITFIELD           m_bHasAtLeastOneEventBasedBegin : 1;
  308.     HX_BITFIELD           m_bHasAtLeastOneNonEventBasedBegin : 1;
  309.     HX_BITFIELD           m_bUsesExternalMediaMarkerFile : 1;
  310.     HX_BITFIELD           m_bClipBeginUsesMarker : 1;
  311.     HX_BITFIELD           m_bClipBeginMarkerResolved : 1;
  312.     HX_BITFIELD           m_bWaitingOnClipBeginToResolve : 1;
  313.     HX_BITFIELD           m_bClipEndUsesMarker : 1;
  314.     HX_BITFIELD           m_bClipEndMarkerResolved : 1;
  315.     HX_BITFIELD           m_bWaitingOnClipEndToResolve : 1;
  316. };
  317. class CSmilAddGroup: public CSmilElement
  318. {
  319. public:
  320.     CSmilAddGroup();
  321.     virtual ~CSmilAddGroup();
  322.     virtual HX_RESULT handleElement();
  323.     IHXValues* m_pValues;
  324.     INT32       m_nGroup;
  325.     INT32       m_nTotalTracks;
  326.     INT32       m_nInitTracks;
  327.     UINT32      m_ulDuration;
  328. };
  329. class CSmilRootLayout: public CSmilElement
  330. {
  331. public:
  332.     CSmilRootLayout(SMILNode* pNode);
  333.     virtual ~CSmilRootLayout();
  334.     virtual HX_RESULT handleElement();
  335.     double         m_dWidth;
  336.     CSS2Type       m_eWidthType;
  337.     double         m_dHeight;
  338.     CSS2Type       m_eHeightType;
  339.     UINT32         m_ulBackgroundColor;
  340.     CSS2Type       m_eBackgroundColorType;
  341.     ResizeBehavior m_eResizeBehavior;
  342.     ContextWindow  m_eContextWindow;
  343. };
  344. class CSmilRegion: public CSmilElement
  345. {
  346. public:
  347.     CSmilRegion(SMILNode* pNode);
  348.     virtual ~CSmilRegion();
  349.     virtual HX_RESULT handleElement();
  350.     LayoutRect     m_Rect;
  351.     INT32          m_lZIndex;
  352.     CSS2Type       m_eZIndexType;
  353.     Fit            m_eFit;
  354.     ShowBackground m_eShowBackground;
  355.     UINT32         m_ulBackgroundColor;
  356.     CSS2Type       m_eBackgroundColorType;
  357.     double         m_dSoundLevel;
  358.     CHXString      m_RegionName;
  359.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  360.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  361.     HX_BITFIELD    m_bRegionNameSpecified : 1;
  362. };
  363. class CSmilRegPoint: public CSmilElement
  364. {
  365. public:
  366.     CSmilRegPoint(SMILNode* pNode);
  367.     virtual ~CSmilRegPoint();
  368.     virtual HX_RESULT handleElement();
  369.     RegPoint m_RegPoint;
  370. };
  371. #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
  372. class CSmilViewport: public CSmilElement
  373. {
  374. public:
  375.     CSmilViewport(SMILNode* pNode);
  376.     virtual ~CSmilViewport();
  377.     virtual HX_RESULT handleElement();
  378.     UINT32         m_ulBackgroundColor;
  379.     CSS2Type       m_eBackgroundColorType;
  380.     double         m_dWidth;
  381.     CSS2Type       m_eWidthType;
  382.     double         m_dHeight;
  383.     CSS2Type       m_eHeightType;
  384.     ViewportOpen   m_eOpen;
  385.     ViewportClose  m_eClose;
  386.     ResizeBehavior m_eResizeBehavior;
  387.     ContextWindow  m_eContextWindow;
  388. };
  389. #endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
  390. class CSmilMeta: public CSmilElement
  391. {
  392. public:
  393.     CSmilMeta(SMILNode* pNode);
  394.     virtual ~CSmilMeta();
  395.     virtual HX_RESULT handleElement();
  396.     CHXString m_name;
  397.     CHXString m_content;
  398. };
  399. class CSmilMetadata: public CSmilElement
  400. {
  401. public:
  402.     CSmilMetadata(SMILNode* pNode);
  403.     virtual ~CSmilMetadata();
  404.     virtual HX_RESULT handleElement();
  405. };
  406. class CSmilRendererPreFetch: public CSmilElement
  407. {
  408. public:
  409.     CSmilRendererPreFetch(SMILNode* pNode);
  410.     virtual ~CSmilRendererPreFetch();
  411.     virtual HX_RESULT handleElement();
  412.     CHXString m_mimeType;
  413. };
  414. class CSmilEndLayout: public CSmilElement
  415. {
  416. public:
  417.     CSmilEndLayout();
  418.     virtual ~CSmilEndLayout();
  419.     virtual HX_RESULT handleElement();
  420. };
  421. class CSmilMetaValues: public CSmilElement
  422. {
  423. public:
  424.     CSmilMetaValues();
  425.     virtual ~CSmilMetaValues();
  426.     IHXValues* m_pValues;
  427. };
  428. class CSmilCustomTest: public CSmilElement
  429. {
  430. public:
  431.     CSmilCustomTest(SMILNode* pNode);
  432.     virtual ~CSmilCustomTest();
  433.     CHXString m_uid;
  434.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  435.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  436.     HX_BITFIELD m_bDefaultState : 1;
  437.     HX_BITFIELD m_bOverrideVisible : 1;
  438. };
  439. class CSmilSource: public CSmilElement
  440. {
  441. public:
  442.     CSmilSource(SMILNode* pNode);
  443.     virtual ~CSmilSource();
  444.     virtual HX_RESULT handleElement();
  445.     void              setRange(const char* pRange);
  446.     CHXString    m_src;
  447.     CHXString    m_region;
  448.     ULONG32      m_ulPrefetchAmount;
  449.     PrefetchType m_typeOfPrefetchAmount;
  450.     UINT32       m_ulColor;
  451.     CSS2Type     m_eColorType;
  452.     LayoutRect   m_Rect;
  453.     INT32        m_lZIndex;
  454.     CSS2Type     m_eZIndexType;
  455.     Fit          m_eFit;
  456.     UINT32       m_ulBackgroundColor;
  457.     CSS2Type     m_eBackgroundColorType;
  458.     CHXString    m_RegPoint;
  459.     RegAlign     m_ePredefRegPoint;
  460.     RegAlign     m_eRegAlign;
  461.     UINT32       m_ulBackgroundOpacity;
  462.     UINT32       m_ulMediaOpacity;
  463.     UINT32       m_ulChromaKey;
  464.     UINT32       m_ulChromaKeyTolerance;
  465.     UINT32       m_ulChromaKeyOpacity;
  466.     CHXString    m_MediaRepeat;
  467.     HandledBy    m_eHandledBy;
  468.     ULONG32      m_ulLinkTargetDestnLevel_pct;
  469.     ULONG32      m_ulLinkTargetSourceLevel_pct;
  470.     CHXString    m_Handler;
  471.     CHXString    m_HandlerID;
  472.     CHXString    m_HandlerFor;
  473.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  474.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  475.     HX_BITFIELD  m_bFitSpecified : 1;
  476.     HX_BITFIELD  m_bBackgroundColorSpecified : 1;
  477.     HX_BITFIELD  m_bRegPointIsPredef : 1;
  478.     HX_BITFIELD  m_bRegAlignSpecified : 1;
  479.     HX_BITFIELD  m_bBackgroundOpacitySpecified : 1;
  480.     HX_BITFIELD  m_bMediaOpacitySpecified : 1;
  481.     HX_BITFIELD  m_bChromaKeySpecified : 1;
  482.     HX_BITFIELD  m_bAudioDeviceReflushHintNeeded : 1;
  483. };
  484. class CSmilSourceUpdate: public CSmilElement
  485. {
  486. public:
  487.     CSmilSourceUpdate();
  488.     virtual ~CSmilSourceUpdate();
  489.     virtual HX_RESULT handleElement();
  490.     CHXString m_srcID;
  491.     UpdateTag m_updateTag;
  492.     UINT32    m_ulUpdatedDuration;
  493.     BOOL      m_bDurationIsPureOfDelay;
  494.     UINT32    m_ulUpdatedDelay;
  495. };
  496. class CSmilPriorityClassElement: public CSmilElement
  497. {
  498. public:
  499.     CSmilPriorityClassElement(SMILNode* pNode);
  500.     virtual ~CSmilPriorityClassElement();
  501.     SMILPriorityClassPauseDisplay m_pauseDisplay;
  502.     SMILPriorityClassPeersHigherLowerVal m_peers;
  503.     SMILPriorityClassPeersHigherLowerVal m_higher;
  504.     SMILPriorityClassPeersHigherLowerVal m_lower;
  505. };
  506. class CSmilAAnchorElement: public CSmilElement
  507. {
  508. public:
  509.     CSmilAAnchorElement(SMILNode* pNode);
  510.     virtual ~CSmilAAnchorElement();
  511.     virtual BOOL isCurrentLink(UINT32 ulTime,
  512.     UINT32  ulXOffset, UINT32 ulYOffset, HXxRect regionRect,
  513.     // /These 3 are ignored for <a> links:
  514.     BOOL bResizeBehaviorIsZoom,
  515.     double dZoomX, double dZoomY);
  516.     // /Tells whether the link is active at the current time (but doesn't
  517.     // do any spatial bounds checking):
  518.     virtual BOOL isLinkActiveAtTime(UINT32 ulTimeOffset,
  519.     REF(ULONG32)rulAnchorRelativeStartTime);
  520.     virtual void rescale(double dXScale, double dYScale,
  521.                          BOOL bResetOriginalCoords);
  522.     virtual BOOL isAAnchor() {return TRUE;}
  523.     CHXString         m_href;
  524.     CHXString         m_show; // /(new|pause|replace) Default is "replace".
  525.     UINT32            m_ulSourceLevel_pct; // /("0%"-"100%"); default is 100% (per DTD).
  526.     UINT32            m_ulDestinationLevel_pct; // /("0%"-"100%"); default is 100%.
  527.     SMILLinkPlaystate m_sourcePlaystate; // /(play|pause|stop); Default is:
  528.  // show=="new"?play:pause;
  529.     SMILLinkPlaystate m_destinationPlaystate; // /(play|stop); Default=play.
  530.     CHXString         m_actuate; // /(onLoad|onRequest) Default value is onRequest.
  531.     CHXString         m_accesskey; // /(an ISO10646 character.  Default unspecified)
  532.     UINT32            m_ulTabindex; // /((UINT32)-1) means value unspecified.
  533.     // /Region name or frame name for where to open the link; if one doesn't
  534.     // exist with that name, creates new one (think command:openwindow()):
  535.     CHXString         m_target; 
  536.     // /This is for RN-extension attribute which allows user to say
  537.     // which browser an "external" link should go to, namely the RealPlayer
  538.     // browser, or a truly external (OS default) browser:
  539.     CHXString         m_sendTo;
  540.     // /These are used for timing solely for the purposes of keeping track of
  541.     // when the link is active (clickable) and NOT for the purposes of
  542.     // constraining or otherwise affecting the times of child elements:
  543.     INT32             m_lAnchorBeginOffset;
  544.     INT32             m_lAnchorEndOffset;
  545.     ULONG32           m_ulAnchorDuration;
  546.     ULONG32           m_ulAnchorMinActiveDur;
  547.     ULONG32           m_ulAnchorMaxActiveDur;
  548.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  549.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  550.     HX_BITFIELD       m_bExternal : 1; // /(true|false) default is false.
  551.     // /This is TRUE if target="x" and "x" is the id of a region in the
  552.     // current presentation:
  553.     HX_BITFIELD       m_bTargetIsARegion : 1;
  554.     HX_BITFIELD       m_bAnchorBeginOffsetSet : 1;
  555.     HX_BITFIELD       m_bAnchorEndOffsetSet : 1;
  556.     HX_BITFIELD       m_bTimeValueSet : 1;
  557. };
  558. class CSmilAnchorVertex
  559. {
  560. public:
  561.     CSmilAnchorVertex() {m_lX=m_lY=0; m_bXIsPercent=m_bYIsPercent=FALSE;}
  562.     ~CSmilAnchorVertex() {};
  563.     INT32       m_lX;
  564.     INT32       m_lY;
  565.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  566.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  567.     HX_BITFIELD m_bXIsPercent : 1;
  568.     HX_BITFIELD m_bYIsPercent : 1;
  569. };
  570. class CSmilAnchorElement: public CSmilAAnchorElement
  571. {
  572. public:
  573.     CSmilAnchorElement(SMILNode* pNode);
  574.     virtual ~CSmilAnchorElement();
  575.     virtual BOOL isCurrentLink(UINT32 ulTime,
  576.     UINT32  ulXOffset, UINT32 ulYOffset, HXxRect regionRect,
  577.     BOOL bResizeBehaviorIsZoom,
  578.     double dZoomX, double dZoomY);
  579.     // /Tells whether the link is active at the current time (but doesn't
  580.     // do any spatial bounds checking):
  581.     virtual BOOL isLinkActiveAtTime(UINT32 ulTimeOffset,
  582.     REF(ULONG32)rulAnchorRelativeStartTime);
  583.     virtual void rescale(double dXScale, double dYScale,
  584.                          BOOL bResetOriginalCoords);
  585.     virtual BOOL isAAnchor() {return FALSE;}
  586.     // /This handles conversion of string of points ("0,0, 20,10, ...") to
  587.     // array of CSmilAnchorVertex's (vertices) in m_pVertexArray:
  588.     HX_RESULT convertRawPolyData(const char* pData);
  589.     // /This is for handling hit-testing in a "poly" (polygon) shape:
  590.     BOOL isPointInPolygon(INT32 lXOffset, INT32 lYOffset,
  591.     HXxRect regionRect,
  592.     double dZoomX, double dZoomY);
  593.     void deleteVertexArrays();
  594.     // /XXXEH- TODO: make these points be unsigned values because shapes
  595.     // can stick out of frame, and thus can be negative in places:
  596.     UINT32             m_ulLeftX;
  597.     UINT32             m_ulOriginalLeftX;
  598.     UINT32             m_ulTopY;
  599.     UINT32             m_ulOriginalTopY;
  600.     UINT32             m_ulRightX;
  601.     UINT32             m_ulOriginalRightX;
  602.     UINT32             m_ulBottomY;
  603.     UINT32             m_ulOriginalBottomY;
  604.     UINT32             m_ulRadius;
  605.     UINT32             m_ulOriginalRadius;
  606.     // /XXXEH- TODO: use these points for rectangles, too (but don't use the
  607.     // hit-test code for them as it is slower for rectangles):
  608.     // /The following three are for handling shape="poly":
  609.     CSmilAnchorVertex* m_pVertexArray;
  610.     CSmilAnchorVertex* m_pOriginalVertexArray;
  611.     UINT16        m_uiNumPoints;
  612.     CHXString          m_shape;
  613.     CHXString          m_fragmentID;
  614.     INT32              m_zIndex;
  615.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  616.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  617.     HX_BITFIELD        m_bCoordsSet : 1;
  618.     HX_BITFIELD        m_bLeftXIsPercent : 1;
  619.     HX_BITFIELD        m_bTopYIsPercent : 1;
  620.     HX_BITFIELD        m_bRightXIsPercent : 1;
  621.     HX_BITFIELD        m_bBottomYIsPercent : 1;
  622.     HX_BITFIELD        m_bRadiusIsPercent : 1;
  623. };
  624. enum
  625. {
  626.     kCalcModeDiscrete,
  627.     kCalcModeLinear,
  628.     kCalcModePaced
  629. #if defined(XXXMEH_SPLINE_ANIMATION)
  630.     ,kCalcModeSpline
  631. #endif
  632. };
  633. enum
  634. {
  635.     kAccumulateSum,
  636.     kAccumulateNone
  637. };
  638. enum
  639. {
  640.     kAdditiveSum,
  641.     kAdditiveReplace
  642. };
  643. enum
  644. {
  645.     kAnimTypeValues,
  646.     kAnimTypeFromTo,
  647.     kAnimTypeFromBy,
  648.     kAnimTypeBy,
  649.     kAnimTypeTo
  650. };
  651. #if defined(XXXMEH_SPLINE_ANIMATION)
  652. struct KeySpline
  653. {
  654.     double x1;
  655.     double y1;
  656.     double x2;
  657.     double y2;
  658. };
  659. typedef enum
  660. {
  661.     PathCmdTypeUnknown,
  662.     PathCmdTypeMoveTo,
  663.     PathCmdTypeLineTo,
  664.     PathCmdTypeHorzLineTo,
  665.     PathCmdTypeVertLineTo,
  666.     PathCmdTypeClosePath,
  667.     PathCmdTypeCubicBezierCurveTo
  668. } PathCmdType;
  669. class PathCmd
  670. {
  671. public:
  672.     PathCmd();
  673.     ~PathCmd();
  674.     PathCmdType m_eType;
  675.     BOOL        m_bRelative;
  676.     UINT32      m_ulNumCoords;
  677.     double*     m_pdCoord;
  678. };
  679. inline PathCmd::PathCmd()
  680. {
  681.     m_eType       = PathCmdTypeUnknown;
  682.     m_bRelative   = FALSE;
  683.     m_ulNumCoords = 0;
  684.     m_pdCoord     = NULL;
  685. }
  686. inline PathCmd::~PathCmd()
  687. {
  688.     HX_VECTOR_DELETE(m_pdCoord);
  689. }
  690. #endif
  691. #if defined(HELIX_FEATURE_SMIL2_ANIMATION)
  692. class CSmilAnimateElement : public CSmilElement
  693. {
  694. public:
  695.     CSmilAnimateElement(SMILNode* pNode);
  696.     virtual ~CSmilAnimateElement();
  697.     virtual HX_RESULT handleElement();
  698.     // We override this since we handle repeat
  699.     // differently than sources do.
  700.     virtual HX_RESULT getCurrentScheduledStopTime(REF(ULONG32) ulActualStopTime);
  701.     UINT32      m_ulSimpleDuration;
  702.     UINT32      m_ulActiveDuration;
  703.     UINT32      m_ulADNoSpeed;
  704.     CHXString*  m_pTargetElementID;
  705.     SMILNodeTag m_eTargetElementTag;
  706.     UINT32      m_ulNumValues;
  707.     CAttr**     m_ppValue;
  708.     BYTE        m_ucAttributeName;
  709.     BYTE        m_ucCalcMode;
  710.     BYTE        m_ucAccumulate;
  711.     BYTE        m_ucAdditive;
  712.     BYTE        m_ucAnimationType;
  713.     double      m_dRepeatCount;
  714.     UINT32      m_ulRepeatDur;
  715.     double      m_dAccelerate;
  716.     double      m_dDecelerate;
  717.     double      m_dSpeed;
  718. #if defined(XXXMEH_SPLINE_ANIMATION)
  719.     UINT32      m_ulNumKeyTimes;
  720.     double*     m_pdKeyTime;
  721.     UINT32      m_ulNumKeySplines;
  722.     KeySpline*  m_pKeySpline;
  723.     UINT32      m_ulNumPathCmds;
  724.     PathCmd**   m_ppPathCmd;
  725.     UINT32      m_ulNumPathPoints;
  726. #endif
  727.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  728.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  729.     HX_BITFIELD m_bRepeatDurIsIndefinite : 1;
  730.     HX_BITFIELD m_bAutoReverse : 1;
  731.     HX_BITFIELD m_bIndefiniteSimpleDuration : 1;
  732.     HX_BITFIELD m_bIndefiniteActiveDuration : 1;
  733.     HX_BITFIELD m_bCancelAnimation : 1;
  734. };
  735. #endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
  736. class CSmilParamElement : public CSmilElement
  737. {
  738. public:
  739.     CSmilParamElement(SMILNode* pNode);
  740.     virtual ~CSmilParamElement();
  741.     IHXBuffer*   m_pName;
  742.     IHXBuffer*   m_pValue;
  743.     ParamDelivery m_eDelivery;
  744. };
  745. class CSmilParElement: public CSmilElement
  746. {
  747. public:
  748.     CSmilParElement(SMILNode* pNode);
  749.     virtual ~CSmilParElement();
  750. };
  751. class CSmilSeqElement: public CSmilElement
  752. {
  753. public:
  754.     CSmilSeqElement(SMILNode* pNode);
  755.     virtual ~CSmilSeqElement();
  756. };
  757. class CSmilExclElement: public CSmilElement
  758. {
  759. public:
  760.     CSmilExclElement(SMILNode* pNode);
  761.     virtual ~CSmilExclElement();
  762.     CHXStack* m_pPauseStack;
  763. };
  764. #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
  765. class CSmilTransition: public CSmilElement
  766. {
  767. public:
  768.     CSmilTransition(SMILNode* pNode);
  769.     virtual ~CSmilTransition();
  770.     virtual HX_RESULT handleElement();
  771.     CHXString              m_Type;
  772.     CHXString              m_SubType;
  773.     double                 m_dStartProgress;
  774.     double                 m_dEndProgress;
  775.     TransitionDirection    m_eDirection;
  776.     UINT32                 m_ulFadeColor;
  777.     UINT32                 m_ulHorzRepeat;
  778.     UINT32                 m_ulVertRepeat;
  779.     UINT32                 m_ulBorderWidth;
  780.     UINT32                 m_ulBorderColor;
  781.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  782.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  783.     HX_BITFIELD            m_bBlendBorder : 1;
  784. };
  785. #endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */
  786. class CSmilBodyElement : public CSmilElement
  787. {
  788. public:
  789.     CSmilBodyElement(SMILNode* pNode);
  790.     virtual ~CSmilBodyElement();
  791. };
  792. #endif