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

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 _SM1DOC_H_
  36. #define _SM1DOC_H_
  37. #include "hxthread.h"
  38. #include "baseobj.h"
  39. class CSmil1Renderer;
  40. class CSmil1Parser;
  41. class CSmil1BasicRegion;
  42. class CSmil1RootLayout;
  43. class CHXHeader;
  44. struct SMIL1PlayToAssoc;
  45. struct SMIL1SourceInfo;
  46. class CSmil1LayoutEvent;
  47. class CSmil1ShowSiteEvent;
  48. class CSmil1EventHook;
  49. class CSmil1PassiveSiteWatcher;
  50. class CResourceLoader;
  51. class ProcessElementCallback;
  52. #ifdef _WINDOWS
  53. class CHXDIBits;
  54. #endif
  55. #if defined(_UNIX) && (!(defined(_BEOS))) && (!(defined(_MAC_UNIX)))
  56. #include <X11/Xlib.h>
  57. #include <X11/Xutil.h>
  58. typedef ULONG32 COLORTYPE;
  59. class XData
  60. {
  61.   public:
  62.       XData()
  63.       {
  64.   m_Pixmap = 0;
  65.   m_Display = 0;
  66.       }
  67.       ~XData()
  68.       {
  69.   if (m_Pixmap != 0)
  70.   {
  71.               XFreePixmap(m_Display, m_Pixmap);
  72.   }
  73.       }
  74.   public:
  75.       HXBitmapInfoHeader m_backgroundBitmapInfoHeader;
  76.       Pixmap m_Pixmap;
  77.       Display* m_Display;
  78.       Colormap m_colormap;
  79. };
  80. #endif    // _UNIX
  81. class CSmil1DocumentRenderer:  public IHXSiteUser,
  82.        public IHXRendererAdviseSink,
  83.        public IHXGroupSink,
  84.        public IHXValues,
  85.        public CSmil1ElementHandler,
  86.        public IHXPassiveSiteWatcher,
  87.                                public CHXBaseCountingObject
  88. {
  89. public:
  90.     CSmil1DocumentRenderer     (CSmil1Renderer* pParent,
  91.     IUnknown* pContext);
  92.     virtual ~CSmil1DocumentRenderer  ();
  93.     HX_RESULT close     (CSmil1Renderer* pParent);
  94.     HX_RESULT setDocument     (const char* pFragment);
  95.     HX_RESULT onPacket     (IHXBuffer* pBuffer,
  96.     BOOL bIsFinal);
  97.     HX_RESULT handleLButtonUp     (const char* pID,
  98.     UINT16 uXPos,
  99.     UINT16 uYPos);
  100.     HX_RESULT handleMouseMove     (void* pWindow,
  101.     const char* pID,
  102.     UINT16 uXPos,
  103.     UINT16 uYPos);
  104.     BOOL handleSetCursor     ();
  105.     HX_RESULT detachSite     (IHXSite* pSite);
  106.     double     getResizeXScale()
  107.     {
  108. return m_dResizeXScale;
  109.     }
  110.     double     getResizeYScale()
  111.     {
  112. return m_dResizeYScale;
  113.     }
  114.     HX_RESULT addShowEvents     (const char* pRegionName,
  115.     IHXSite* pSite);
  116.     /*
  117.      * IUnknown methods
  118.      */
  119.     STDMETHOD(QueryInterface)     (THIS_
  120.     REFIID riid,
  121.     void** ppvObj);
  122.     STDMETHOD_(ULONG32, AddRef)     (THIS);
  123.     STDMETHOD_(ULONG32, Release)    (THIS);
  124.     /*
  125.      * IHXSiteUser methods
  126.      */
  127.     STDMETHOD(AttachSite)     (THIS_
  128.     IHXSite* pSite);
  129.     STDMETHOD(DetachSite)     (THIS);
  130.     STDMETHOD(HandleEvent)     (THIS_
  131.     HXxEvent* pEvent);
  132.     STDMETHOD_(BOOL,NeedsWindowedSites) (THIS);
  133.     /*
  134.      * IHXRendererAdviseSink methods
  135.      */
  136.     STDMETHOD(TrackDurationSet) (THIS_
  137. UINT32 ulGroupIndex,
  138. UINT32 ulTrackIndex,
  139. UINT32 ulDuration,
  140. UINT32 ulDelay,
  141. BOOL   bIsLive);
  142.     STDMETHOD(RepeatedTrackDurationSet) (THIS_
  143. const char*  pID,
  144. UINT32 ulDuration,
  145.         BOOL   bIsLive);
  146.     STDMETHOD(RendererInitialized) (THIS_
  147. IHXRenderer* pRend,
  148. IUnknown* pStream,
  149. IHXValues* pInfo);
  150.     STDMETHOD(RendererClosed) (THIS_
  151. IHXRenderer* pRend,
  152. IHXValues* pInfo);
  153.     // /POST-RP8REV release IHXRendererAdviseSink method:
  154.     STDMETHOD(TrackUpdated)             (THIS_ UINT32 ulGroupIndex, UINT32 ulTrackIndex,
  155.                                                IHXValues* pValues);
  156.     /*
  157.      * IHXGroupSink methods
  158.      */
  159.     STDMETHOD(GroupAdded) (THIS_
  160. UINT16 uGroupIndex,
  161. IHXGroup* pGroup);
  162.     STDMETHOD(GroupRemoved) (THIS_
  163. UINT16 uGroupIndex,
  164. IHXGroup* pGroup);
  165.     STDMETHOD(AllGroupsRemoved) (THIS);
  166.     STDMETHOD(TrackAdded) (THIS_
  167. UINT16 uGroupIndex,
  168. UINT16 uTrackIndex,
  169. IHXValues* pTrack);
  170.     STDMETHOD(TrackRemoved) (THIS_
  171. UINT16 uGroupIndex,
  172. UINT16 uTrackIndex,
  173. IHXValues* pTrack);
  174.     STDMETHOD(TrackStarted) (THIS_
  175. UINT16 uGroupIndex,
  176. UINT16 uTrackIndex,
  177. IHXValues* pTrack);
  178.     STDMETHOD(TrackStopped) (THIS_
  179. UINT16 uGroupIndex,
  180. UINT16 uTrackIndex,
  181. IHXValues* pTrack);
  182.     STDMETHOD(CurrentGroupSet) (THIS_
  183. UINT16 uGroupIndex,
  184. IHXGroup* pGroup);
  185.     /*
  186.      * IHXValues methods
  187.      */
  188.     STDMETHOD(SetPropertyULONG32) (THIS_
  189. const char*  pPropertyName,
  190. ULONG32  uPropertyValue);
  191.     STDMETHOD(GetPropertyULONG32) (THIS_
  192. const char*  pPropertyName,
  193. REF(ULONG32)  uPropertyValue);
  194.     STDMETHOD(GetFirstPropertyULONG32) (THIS_
  195. REF(const char*) pPropertyName,
  196. REF(ULONG32)  uPropertyValue);
  197.     STDMETHOD(GetNextPropertyULONG32) (THIS_
  198. REF(const char*) pPropertyName,
  199. REF(ULONG32)  uPropertyValue);
  200.     STDMETHOD(SetPropertyBuffer) (THIS_
  201. const char*  pPropertyName,
  202. IHXBuffer*  pPropertyValue);
  203.     STDMETHOD(GetPropertyBuffer) (THIS_
  204. const char*  pPropertyName,
  205. REF(IHXBuffer*) pPropertyValue);
  206.     STDMETHOD(GetFirstPropertyBuffer) (THIS_
  207. REF(const char*) pPropertyName,
  208. REF(IHXBuffer*) pPropertyValue);
  209.     STDMETHOD(GetNextPropertyBuffer) (THIS_
  210. REF(const char*) pPropertyName,
  211. REF(IHXBuffer*) pPropertyValue);
  212.     STDMETHOD(SetPropertyCString) (THIS_
  213. const char*  pPropertyName,
  214. IHXBuffer*  pPropertyValue);
  215.     STDMETHOD(GetPropertyCString) (THIS_
  216. const char*  pPropertyName,
  217. REF(IHXBuffer*) pPropertyValue);
  218.     STDMETHOD(GetFirstPropertyCString) (THIS_
  219. REF(const char*) pPropertyName,
  220. REF(IHXBuffer*) pPropertyValue);
  221.     STDMETHOD(GetNextPropertyCString) (THIS_
  222. REF(const char*) pPropertyName,
  223. REF(IHXBuffer*) pPropertyValue);
  224.     /*
  225.      * IHXPassiveSiteWatcher methods
  226.      */
  227.     STDMETHOD(PositionChanged) (THIS_
  228. HXxPoint* /*IN*/ pPoint);
  229.     STDMETHOD(SizeChanged)  (THIS_
  230. HXxSize* /*IN*/ pSize);
  231.     /*
  232.      * CSmil1ElementHandler methods
  233.      */
  234.     HX_RESULT handleAddGroup (CSmil1AddGroup* pAddGroup);
  235.     HX_RESULT handleRegion (CSmil1Region* pRegion);
  236.     HX_RESULT handleRootLayout (CSmil1RootLayout* pRootLayout);
  237.     HX_RESULT handleSource (CSmil1Source* pSource);
  238.     HX_RESULT handleMeta (CSmil1Meta* pMeta);
  239.     HX_RESULT handleEndLayout (CSmil1EndLayout* pSource);
  240.     HX_RESULT handleRendererPreFetch (CSmil1RendererPreFetch* pRend);
  241.     HX_RESULT handleSourceUpdate (CSmil1SourceUpdate* pUpdate);
  242.     /*
  243.      * CSmil1Parser methods
  244.      */
  245.     HX_RESULT onHeader (IHXValues* pHeader);
  246.     HX_RESULT onTimeSync (UINT32 ulTimeValue);
  247.     HX_RESULT onPreSeek (UINT32 ulOldTime,
  248. UINT32 ulNewTime);
  249.     HX_RESULT endStream ();
  250.     HX_RESULT seekTo (const char* pElementID);
  251.     CSmil1BasicRegion* getRegion (const char* pID);
  252.     void resizeRegion (const char* pRegionName,
  253. HXxSize* pNewSize);
  254.     void repositionRegion (const char* pRegionName,
  255. HXxPoint* pNewPosition);
  256.     void setTopLevelSiteSize ();
  257.     HX_RESULT HandleSurfaceUpdate (HXxEvent* pEvent,
  258. IHXSite* pSite,
  259. HXxColor ulBGColor);
  260.     HX_RESULT getErrorInfo (REF(UINT32) ulErrorLine,
  261.  REF(UINT32) ulErrorColumn,
  262.  REF(IHXBuffer*) pErrorText);
  263.     HX_RESULT  GetElementProperties(UINT16 uGroupID, 
  264.       UINT16 uTrackID, 
  265.       REF(IHXValues*) pProperties);
  266.     HX_RESULT  GetElementStatus(UINT16     uGroupID,
  267.   UINT16     uTrackID,
  268.   UINT32     ulCurrentTime,
  269.   REF(IHXValues*)  pStatus);
  270.     HX_RESULT  AttachElementLayout(UINT16     uGroupID,
  271.      UINT16     uTrackID,
  272.      IHXRenderer*  pRenderer,
  273.      IHXStream*    pStream,
  274.      IHXValues*    pProps);
  275.     HX_RESULT  DetachElementLayout(IUnknown*     pLSG);
  276.     BOOL m_bSiteChangingSize;
  277.     BOOL m_bNeedToAdjustSites;
  278.     UINT32 m_ulNoRootLayoutHeight;
  279.     UINT32 m_ulNoRootLayoutWidth;
  280.     BOOL                                isRootLayoutWidthSet() const  { return m_bRootLayoutWidthSet;  }
  281.     BOOL                                isRootLayoutHeightSet() const { return m_bRootLayoutHeightSet; }
  282.     friend class CSmil1Renderer;
  283. private:
  284.     HX_RESULT addSiteForRenderer (SMIL1PlayToAssoc* pPlayToAssoc,
  285. SMIL1SourceInfo* pSMIL1SourceInfo,
  286. IHXRenderer* pRenderer,
  287. BOOL bNoRegion);
  288.     void setPlayToAssoc (UINT16 uGroupIndex, 
  289. UINT16 uTrackIndex, 
  290. const char* pID,
  291. const char* pRepeatID, // /For SHAZAM
  292. const char* pPlayTo,
  293. const char* pRegionName);
  294.     SMIL1PlayToAssoc* getPlayToAssoc (UINT16 uGroupIndex, 
  295. UINT16 uTrackIndex);
  296.     SMIL1PlayToAssoc* getPlayToAssoc (const char* pName); 
  297.     void removeAllPlayToAssoc ();
  298.     void removeGroupsPlayToAssoc (UINT16 uGroupIndex);
  299.     void removeSourcemap (SMIL1PlayToAssoc* pPlayToAssoc);
  300.     HX_RESULT insertEvent (CSmil1ShowSiteEvent* pEvent);
  301.     CSmil1ShowSiteEvent* getShowHideEvent(IHXSite* pRegionSite,
  302.   IHXSite* pRendererSite,
  303.                                           BOOL     bShowEvent);
  304.     HX_RESULT insertSiteInfo (void* pInfo);
  305.     void removeGroupEvents (UINT16 uGroupIndex);
  306.     void showSite (IHXSite* pSite, 
  307. BOOL bShow);
  308.     void resizeSite (HXxSize newSize);
  309.     void resizeSite (IHXSite* pSite,
  310. double dXScale,
  311. double dYScale);
  312.     void resizeRegionSiteAbs(CSmil1BasicRegion* pRegion,
  313.                              double            dXAbsScale,
  314.                              double            dYAbsScale);
  315.     BOOL draw (HXxEvent* pEvent,
  316. IHXSite* pSite,
  317. HXxColor ulBgColor);
  318.     void insertZOrder (IHXSite* pSite, 
  319. INT32 lZOrder);
  320.     void setZOrder ();
  321.     HX_RESULT handleElements ();
  322.     void setProperty (IHXValues* pValues, 
  323. const char* pName, 
  324. const char* pValue);
  325.     HX_RESULT parseDimension (const char* pDimensionString,
  326. REF(UINT32) ulValue,
  327. REF(BOOL) bIsPercent);
  328.     HX_RESULT regionToRect (CSmil1Region* pElement,
  329. HXxRect* pRect,
  330. BOOL& bWidthUnspecified,
  331. BOOL& bHeightUnspecified);
  332.     CSmil1AAnchorElement*
  333. findHyperlinkElement (const char* pID,
  334. UINT16 uXPos,
  335. UINT16 uYPos);
  336.     HX_RESULT convertURL (const char* pURL,
  337. CHXString& newURL);
  338.     HX_RESULT updateStreamTiming (const char* pElementID,
  339. UINT32 ulDuration);
  340.     HX_RESULT updateStreamDelay (UINT16 uGroupIndex,
  341. UINT32 ulDelay);
  342.     HX_RESULT updateSiteEvents (UINT16 uGroupIndex);
  343.     HX_RESULT createRegionSites ();
  344.     void      RemoveEvents (UINT32 ulGroupIndex, IHXSite* pSite);
  345.     HX_RESULT flushAllEvents (UINT32 ulFlushToTime, BOOL bBreak=FALSE );
  346.     inline HX_RESULT flushAllEvents () { return flushAllEvents( m_ulCurrentTime ); }
  347.     BOOL      IsFullScreen();
  348.     void      computeMediaFitSize(HXxSize cRegSize, HXxSize cMedSize,
  349.                                   const char* pszFitAttr, REF(HXxSize) rcFitSize);
  350.     HX_RESULT getPreference(IUnknown*        pContext,
  351.                             const char*      pszKey,
  352.                             REF(IHXBuffer*) rpValue);
  353.     HX_RESULT getBooleanPreference(IUnknown*   pContext, 
  354.                                    const char* pszKey,
  355.                                    REF(BOOL)   rbValue);
  356. #if defined(_UNIX) && (!(defined(_BEOS))) && (!(defined(_MAC_UNIX)))
  357.     void ConvertPNxColorToXColor(HXxColor hxxColor, XColor& xcolor);
  358.     XData* InitXVisualSupport(IHXSite* pSite, HXxWindow* pWnd);
  359. #endif
  360.     CSmil1Renderer* m_pParent;
  361.     CSmil1Parser* m_pSmilParser;
  362.     HX_RESULT m_ulParseResult;
  363.     IHXSite* m_pMISUSSite;
  364.     IHXScheduler* m_pScheduler;
  365. public:
  366.     HXxSize m_topSiteSize;
  367.     HXxSize m_topSiteOriginalSize;
  368. private:
  369.     IHXValues* m_pValues;
  370.     char* m_pFragment;
  371.     CHXMapStringToOb* m_pRegionMap;
  372.     CHXMapPtrToPtr* m_pSiteInfoByRendererMap;
  373.     CHXMapPtrToPtr* m_pSiteWatcherMap;
  374.     CHXMapLongToObj* m_pGroupInfoMap;
  375.     CHXMapLongToObj* m_pGroupMap;
  376.     CHXMapStringToOb* m_pDeferredSourceMap;
  377.     CHXMapStringToOb* m_pRepeatIDMap;
  378.     CHXSimpleList* m_pSiteInfoList;
  379.     CHXSimpleList* m_pPlayToAssocList;
  380.     CHXSimpleList* m_pEventList;
  381.     CHXSimpleList* m_pZOrderList;
  382.     LISTPOSITION m_ulEventListPosition;
  383.     INT16 m_uCurrentGroupIndex;
  384.     INT16 m_nFragmentTracks;
  385.     UINT32 m_ulCurrentTime;
  386.     LONG32 m_lRefCount;
  387.     IUnknown* m_pContext;
  388.     IHXSiteManager* m_pSiteMgr;
  389.     IHXStatusMessage* m_pStatusMessage;
  390.     BOOL m_bFirstTimeSync;
  391.     BOOL m_bSettingFragment;
  392.     BOOL m_bInHyperlink;
  393.     BOOL m_bShowDependencies;
  394.     BOOL m_bSiteLayoutComplete;
  395.     BOOL m_bStatusMessageSet;
  396.     double m_dResizeXScale;
  397.     double m_dResizeYScale;
  398.     UINT32                              m_ulPktnum;
  399.     UINT16                              m_usOldXPos;
  400.     UINT16                              m_usOldYPos;
  401.     ProcessElementCallback* m_pProcessElementCallback;
  402. #ifdef _WINDOWS
  403.     HCURSOR  m_hHyperlinkCursor;
  404.     HCURSOR m_hPreHyperlinkCursor;
  405.     BOOL m_bNeedToSetHyperlinkCursor;
  406. #endif
  407. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  408.     BOOL m_bResetCursor;
  409.     CursHandle m_hHyperlinkCursor;
  410.     CResourceLoader* m_pResourceLoader;
  411. #endif
  412. #if defined(_UNIX) && (!(defined(_BEOS))) && (!(defined(_MAC_UNIX)))
  413.     // needed for background drawing
  414.     XVisualInfo*                        m_pVisualInfo;
  415.     Cursor                              m_hHyperlinkCursor;
  416.     Cursor                              m_hCurrentCursor;
  417.     Display*                            m_pDisplay;          
  418.     Window                              m_Window;
  419.     Display*                            m_pPixmapDisplay;
  420.     CHXMapPtrToPtr                      m_siteToXDataMap;
  421. #endif
  422.     BOOL m_bRootLayoutWidthSet;
  423.     BOOL m_bRootLayoutHeightSet;
  424.     UINT32 m_ulRootLayoutHeight;
  425.     UINT32 m_ulRootLayoutWidth;
  426.     HXxColor m_ulRootLayoutBGColor;
  427.     UINT32     m_ulGroupIndex;
  428.     UINT32     m_ulTrackIndex;
  429.     UINT16     m_uGroupIndexWithin;
  430.     BOOL     m_bSitesDetached;
  431.     BOOL     m_bInRAM20;
  432.     BOOL     m_bLastGroupInRAM20;
  433.     INT32     m_ulPersistentComponentDelay;
  434.     UINT32     m_ulPersistentComponentID;
  435.     UINT16     m_uPersistentGroupID;
  436.     UINT16     m_uPersistentTrackID;
  437.     ElementWithinTag     m_elementWithinTag;
  438.     IHXValues*     m_pPersistentProperties;
  439.     IHXPersistentRenderer* m_pPersistentParentRenderer;
  440.     BOOL                    m_bCloseCalled;
  441.     HX_RESULT     InitPersistent(UINT32     ulPersistentComponentID,
  442.    UINT16     uPersistentGroupID,
  443.    UINT16     uPersistentTrackID,
  444.    IHXPersistentRenderer*  pPersistentParent);
  445.     HX_RESULT     setupRootLayout();
  446.     BOOL     IsNestedMetaSupported(UINT16& uSupportedType);
  447.     void     PersistentDurationSet(UINT32 ulDuration, UINT32 ulDelay, BOOL bIsLive);
  448. };
  449. class CSmil1SiteWatcher: public CHXBaseCountingObject,
  450.                          public IHXSiteWatcher
  451. {
  452. public:
  453.     CSmil1SiteWatcher     (CSmil1DocumentRenderer* pDoc, 
  454.     const char* pID,
  455.     BOOL bIsChildSite);
  456.     ~CSmil1SiteWatcher     ();
  457.     HX_RESULT close     ();
  458.     IHXSite*     GetSite() { return m_pSite; }
  459.     void     SiteChangingSize(BOOL bFlag) { m_bChangingSize = bFlag; }
  460.     /*
  461.      * IUnknown methods
  462.      */
  463.     STDMETHOD(QueryInterface)     (THIS_
  464.     REFIID riid,
  465.     void** ppvObj);
  466.     STDMETHOD_(ULONG32, AddRef)     (THIS);
  467.     STDMETHOD_(ULONG32, Release)    (THIS);
  468.     /*
  469.      * IHXSiteWatcher methods
  470.      */
  471.     STDMETHOD(AttachSite)     (THIS_
  472.     IHXSite* pSite);
  473.     STDMETHOD(DetachSite)     (THIS);
  474.     
  475.     STDMETHOD(ChangingPosition)     (THIS_
  476.     HXxPoint posOld,
  477.     REF(HXxPoint) posNew);
  478.     STDMETHOD(ChangingSize)     (THIS_
  479.     HXxSize sizeOld,
  480.     REF(HXxSize) posNew);
  481. private:
  482.     CHXString          m_id;
  483.     CSmil1DocumentRenderer*       m_pDoc;
  484.     IHXSite*          m_pSite;
  485.     BOOL     m_bIsChildSite;
  486.     BOOL     m_bChangingSize;
  487.     LONG32          m_lRefCount;
  488.     BOOL                            m_bFirstSetSize;
  489. };
  490. class CSmil1EventHook: public CHXBaseCountingObject,
  491.                        public IHXEventHook
  492. {
  493. public:
  494.     CSmil1EventHook     (CSmil1DocumentRenderer* pDoc,
  495.     const char* pRegionName,
  496.     const char* pChannelName,
  497.     BOOL bNoRegion);
  498.     virtual ~CSmil1EventHook     ();
  499.     /*
  500.      * IUnknown methods
  501.      */
  502.     STDMETHOD(QueryInterface)     (THIS_
  503.     REFIID riid,
  504.     void** ppvObj);
  505.     STDMETHOD_(ULONG32, AddRef)     (THIS);
  506.     STDMETHOD_(ULONG32, Release)    (THIS);
  507.     /*
  508.      * IHXEventHook methods
  509.      */
  510.     STDMETHOD(HandleEvent)     (IHXSite* pSite,
  511.     HXxEvent* pEvent);
  512.     STDMETHOD(SiteAdded)     (IHXSite* pSite);
  513.     STDMETHOD(SiteRemoved)     (IHXSite* pSite);
  514.     
  515.     char*     m_pChannelName;
  516. private:
  517.     CSmil1DocumentRenderer*     m_pDoc;
  518.     char*     m_pRegionName;
  519.     IHXSite*     m_pSite;
  520.     BOOL     m_bNoRegion;
  521.     CSmil1PassiveSiteWatcher*     m_pSiteWatcher;
  522.     LONG32     m_lRefCount;
  523. };
  524. class CSmil1PassiveSiteWatcher: public CHXBaseCountingObject,
  525.                                 public IHXPassiveSiteWatcher
  526. {
  527. public:
  528.     CSmil1PassiveSiteWatcher     (CSmil1DocumentRenderer* pDoc,
  529.     const char* pRegionName);
  530.     ~CSmil1PassiveSiteWatcher     ();
  531.     /*
  532.      * IUnknown methods
  533.      */
  534.     STDMETHOD(QueryInterface)     (THIS_
  535.     REFIID riid,
  536.     void** ppvObj);
  537.     STDMETHOD_(ULONG32, AddRef)     (THIS);
  538.     STDMETHOD_(ULONG32, Release)    (THIS);
  539.     /*
  540.      * IHXPassiveSiteWatcher methods
  541.      */
  542.     STDMETHOD(PositionChanged)     (THIS_
  543.     HXxPoint* pPoint);
  544.     STDMETHOD(SizeChanged)     (THIS_
  545.     HXxSize* pSize);
  546. private:
  547.     LONG32     m_lRefCount;
  548.     CSmil1DocumentRenderer*     m_pDoc;
  549.     char*     m_pRegionName;
  550. };
  551. class CSmil1SiteUser: public CHXBaseCountingObject,
  552.                       public IHXSiteUser
  553. {
  554. public:
  555.     CSmil1SiteUser     (CSmil1DocumentRenderer* pDoc,
  556.     HXxColor ulBGColor);
  557.     ~CSmil1SiteUser     ();
  558.     /*
  559.      * IUnknown methods
  560.      */
  561.     STDMETHOD(QueryInterface)     (THIS_
  562.     REFIID riid,
  563.     void** ppvObj);
  564.     STDMETHOD_(ULONG32, AddRef)     (THIS);
  565.     STDMETHOD_(ULONG32, Release)    (THIS);
  566.     /*
  567.      * IHXSiteUser methods
  568.      */
  569.     STDMETHOD(AttachSite)     (THIS_
  570.     IHXSite* pSite);
  571.     STDMETHOD(DetachSite)     (THIS);
  572.     STDMETHOD(HandleEvent)     (THIS_
  573.     HXxEvent* pEvent);
  574.     STDMETHOD_(BOOL,NeedsWindowedSites) (THIS);
  575. private:
  576.     LONG32     m_lRefCount;
  577.     HXxColor     m_ulBGColor;
  578.     CSmil1DocumentRenderer*     m_pDoc;
  579.     IHXSite*     m_pSite;
  580. };
  581. /*
  582.  * CSmil1BasicRegion methods
  583.  */
  584. class CSmil1BasicRegion : public CHXBaseCountingObject
  585. {
  586. public:
  587.     CSmil1BasicRegion     (const char* pName, 
  588.     HXxRect rect, 
  589.     INT32 lZindex, 
  590.     const char* pFit, 
  591.     HXxColor ulBgColor,
  592.     BOOL bBgColorSet, 
  593.     BOOL bImplicitRegion,
  594.     BOOL bWidthUnspecified,
  595.     BOOL bHeightUnspecified);
  596.     ~CSmil1BasicRegion();
  597.     HXxRect m_rect;
  598.     HXxRect m_originalRect;
  599.     HXxSize m_mediaSize;
  600.     HXxSize m_originalMediaSize;
  601.     BOOL    m_bMediaSizeSet;
  602.     IHXSite* m_pSite;
  603.     IHXSiteUser* m_pSiteUser;
  604.     INT32 m_lZIndex;
  605.     CHXString m_region;
  606.     CHXString m_fit;
  607.     HXxColor m_ulBgColor;
  608.     BOOL m_bBgColorSet;
  609.     BOOL m_bImplicitRegion;
  610.     BOOL m_bWidthUnspecified;
  611.     BOOL m_bHeightUnspecified;
  612. };
  613. class ProcessElementCallback : public IHXCallback
  614. {
  615. public:
  616.     CHXString m_elementID;
  617.     CSmil1DocumentRenderer* m_pOwner;
  618.     CallbackHandle m_PendingHandle;
  619.     BOOL m_bIsCallbackPending;
  620. ProcessElementCallback();
  621.     /*
  622.      * IUnknown methods
  623.      */
  624.     STDMETHOD(QueryInterface) (THIS_
  625. REFIID riid,
  626. void** ppvObj);
  627.     STDMETHOD_(ULONG32,AddRef) (THIS);
  628.     STDMETHOD_(ULONG32,Release) (THIS);
  629.     /*
  630.      * IHXCallback methods
  631.      */
  632.     STDMETHOD(Func) (THIS);
  633. protected:
  634. ~ProcessElementCallback();
  635.     LONG32 m_lRefCount;
  636. };
  637. #endif /* _SM1DOC_H_ */