smlelem.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:32k
源码类别:

Symbian

开发平台:

C/C++

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