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

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 _HXMISUS_H_
  36. #define _HXMISUS_H_
  37. /****************************************************************************
  38.  * 
  39.  *  Class:
  40.  *
  41.  * CHXMultiInstanceSiteUserSupplier
  42.  *
  43.  *  Purpose:
  44.  *
  45.  * Implementation for IHXMultiInstanceSiteUserSupplier
  46.  *
  47.  */
  48. class CHXMultiInstanceSiteUserSupplier : 
  49. public IHXSite,
  50. public IHXSite2,
  51.         public IHXSiteEnumerator,
  52. public IHXSiteUserSupplier,
  53. public IHXMultiInstanceSiteUserSupplier,
  54. public IHXVideoSurface,
  55.         public IHXVideoSurface2,
  56. public IHXInterruptSafe
  57. {
  58. private:
  59.     LONG32     m_lRefCount;
  60.     IHXSiteUser*     m_pSingleUser;
  61.     CHXSimpleList     m_SiteUsers;
  62.     HXxSize     m_size;
  63.     HXxPoint     m_position;
  64.     INT32     m_zorder;
  65.     HX_BITFIELD     m_bIsAttached : 1;
  66.     HX_BITFIELD     m_bSetSizeHasBeenCalled : 1;
  67.     HX_BITFIELD     m_bSetPositionHasBeenCalled : 1;
  68.     HX_BITFIELD     m_bSetZOrderHasBeenCalled : 1;
  69.     HX_BITFIELD     m_bIsInterrupSafe : 1;
  70.     CHXSimpleList     m_PassiveSiteWatchers;
  71.     HXBitmapInfoHeader*    m_pSurfaceBitmapInfo;
  72.     friend class CHXMultiInstanceSiteUser;
  73.     ~CHXMultiInstanceSiteUserSupplier();
  74.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  75. public:
  76.     CHXMultiInstanceSiteUserSupplier();
  77.     HXBitmapInfoHeader* GetBitmapInfoHeader() {return m_pSurfaceBitmapInfo;}
  78.     
  79.     /*
  80.      * IUnknown methods
  81.      */
  82.     STDMETHOD(QueryInterface) (THIS_
  83. REFIID riid,
  84. void** ppvObj);
  85.     STDMETHOD_(ULONG32,AddRef) (THIS);
  86.     STDMETHOD_(ULONG32,Release) (THIS);
  87.     /*
  88.      * IHXMultiInstanceSiteUserSupplier methods called by site users.
  89.      */
  90.     STDMETHOD(SetSingleSiteUser)    (THIS_ 
  91.     IUnknown* pUnknown);
  92.     STDMETHOD(ReleaseSingleSiteUser)(THIS);
  93.     /*
  94.      * IHXSiteUserSupplier methods usually called by the 
  95.      * "context" to ask for additional or to release previously
  96.      * created site users.
  97.      */
  98.     STDMETHOD(CreateSiteUser) (THIS_
  99. REF(IHXSiteUser*)/*OUT*/ pSiteUser);
  100.     STDMETHOD(DestroySiteUser) (THIS_
  101. IHXSiteUser*   /*IN*/ pSiteUser);
  102.     STDMETHOD_(BOOL,NeedsWindowedSites) (THIS);
  103.     /*
  104.      * IHXSite methods usually called by the "context" to 
  105.      * associate users with the site, and to create child sites
  106.      * as appropriate.
  107.      */
  108.     STDMETHOD(AttachUser) (THIS_
  109. IHXSiteUser* /*IN*/ pUser);
  110.     STDMETHOD(DetachUser) (THIS);
  111.     STDMETHOD(GetUser) (THIS_
  112. REF(IHXSiteUser*) /*OUT*/ pUser);
  113.     STDMETHOD(CreateChild) (THIS_
  114. REF(IHXSite*) /*OUT*/ pChildSite);
  115.     STDMETHOD(DestroyChild) (THIS_
  116. IHXSite* /*IN*/ pChildSite);
  117.     /*
  118.      * IHXSite methods called by the the "context" in which the site
  119.      * is displayed in order to manage its position. Site users should
  120.      * not generally call these methods.
  121.      */
  122.     STDMETHOD(AttachWatcher) (THIS_
  123. IHXSiteWatcher* /*IN*/ pWatcher);
  124.     STDMETHOD(DetachWatcher) (THIS);
  125.     STDMETHOD(SetPosition) (THIS_
  126. HXxPoint position);
  127.     STDMETHOD(GetPosition) (THIS_
  128. REF(HXxPoint) position);
  129.     /*
  130.      * IHXSite methods called by the user of the site to get
  131.      * information about the site, and to manipulate the site.
  132.      */
  133.     STDMETHOD(SetSize) (THIS_
  134. HXxSize size);
  135.     STDMETHOD(GetSize) (THIS_
  136. REF(HXxSize) size);
  137.     STDMETHOD(DamageRect) (THIS_
  138. HXxRect rect);
  139.     STDMETHOD(DamageRegion) (THIS_
  140. HXxRegion region);
  141.     STDMETHOD(ForceRedraw) (THIS);
  142.     /*
  143.      * IHXSite2 methods called by the the "context" in which the site
  144.      * is displayed in order to manage its position. Site users should
  145.      * not generally call these methods.
  146.      */
  147.     STDMETHOD(UpdateSiteWindow) (THIS_
  148. HXxWindow* /*IN*/   pWindow);
  149.     STDMETHOD(ShowSite) (THIS_
  150. BOOL     bShow);
  151.                                  
  152.     STDMETHOD_(BOOL, IsSiteVisible)     (THIS);
  153.     STDMETHOD(SetZOrder) (THIS_
  154. INT32     lZOrder);
  155.     /*
  156.      * IHXSite2 methods called by the user of the site to get
  157.      * information about the site, and to manipulate the site.
  158.      */
  159.     STDMETHOD(GetZOrder) (THIS_
  160. REF(INT32)     lZOrder);
  161.     STDMETHOD(MoveSiteToTop) (THIS);
  162.     STDMETHOD(GetVideoSurface) (THIS_ 
  163. REF(IHXVideoSurface*) pSurface);
  164.     STDMETHOD_(UINT32,GetNumberOfChildSites) (THIS);
  165.     /*
  166.      * IHXSite2 methods used to add/remove passive site watchers
  167.      */
  168.     STDMETHOD(AddPassiveSiteWatcher) (THIS_
  169.      IHXPassiveSiteWatcher* pWatcher);
  170.     STDMETHOD(RemovePassiveSiteWatcher) (THIS_
  171.      IHXPassiveSiteWatcher* pWatcher);
  172.     /*
  173.      * IHXSite2 methods used to do cursor management
  174.      */
  175.     STDMETHOD(SetCursor) (THIS_
  176.      HXxCursor cursor,
  177. REF(HXxCursor) oldCursor);
  178.     /*
  179.      * IHXSiteEnumerator methods 
  180.      */
  181.     STDMETHOD(GetFirstSite) (THIS_
  182.                              REF(IHXSite*) /* OUT */ pFirstSite,
  183.                              REF(IHXSiteEnumerator::SitePosition) /* OUT */ nextPosition);
  184.     STDMETHOD(GetNextSite)  (THIS_
  185.                              REF(IHXSite*) pNextSite,
  186.                              REF(IHXSiteEnumerator::SitePosition) /* IN/OUT */ nextPosition);
  187.     /*
  188.      * IHXVideoSurface methods 
  189.      */
  190.     STDMETHOD(Blt) (THIS_
  191. UCHAR* /*IN*/ pImageBits, 
  192. HXBitmapInfoHeader*    /*IN*/ pBitmapInfo,
  193. REF(HXxRect) /*IN*/ rDestRect, 
  194. REF(HXxRect) /*IN*/ rSrcRect) ;
  195.     STDMETHOD(BeginOptimizedBlt)(THIS_ 
  196. HXBitmapInfoHeader*    /*IN*/ pBitmapInfo) ;
  197.     STDMETHOD(OptimizedBlt) (THIS_
  198. UCHAR* /*IN*/ pImageBits,
  199. REF(HXxRect) /*IN*/ rDestRect, 
  200. REF(HXxRect) /*IN*/ rSrcRect);
  201.     
  202.     STDMETHOD(EndOptimizedBlt) (THIS);
  203.     STDMETHOD(GetOptimizedFormat)(THIS_
  204. REF(HX_COMPRESSION_TYPE) /*OUT*/ ulType);
  205.     STDMETHOD(GetPreferredFormat)(THIS_
  206. REF(HX_COMPRESSION_TYPE) /*OUT*/ ulType);
  207.     /*
  208.      * IHXVideoSurface2 methods 
  209.      */
  210.     STDMETHOD(SetProperties)    (THIS_ 
  211.                                  HXBitmapInfoHeader *bmi, 
  212.                                  REF(UINT32) ulNumBuffers, 
  213.                                  IHXRenderTimeLine *pClock);
  214.     STDMETHOD_(void, Flush)     (THIS);
  215.     
  216.     STDMETHOD(ReleaseVideoMem)  (THIS_ VideoMemStruct* pVidMem);
  217.     
  218.     STDMETHOD(ColorConvert)     (THIS_
  219.                                  INT32 cidIn, 
  220.                                  HXxSize *pSrcSize,
  221.                                  HXxRect *prSrcRect,
  222.                                  SourceInputStruct *pInput,
  223.                                  INT32 cidOut,
  224.                                  UCHAR *pDestBuffer, 
  225.                                  HXxSize *pDestSize, 
  226.                                  HXxRect *prDestRect, 
  227.                                  int nDestPitch);
  228.     
  229.     STDMETHOD(GetVideoMem)      (THIS_
  230.                                  VideoMemStruct* pVidMem,
  231.                                  UINT32 ulFlags
  232.                                  );
  233.                                  
  234.     STDMETHOD(Present)          (THIS_
  235.                                  VideoMemStruct* pVidMem,
  236.                                  INT32 lTime, 
  237.                                  UINT32 ulFlags,
  238.                                  HXxRect *prDestRect, 
  239.                                  HXxRect *prSrcRect);
  240.                                  
  241.     STDMETHOD(PresentIfReady)   (THIS);
  242.     /*
  243.      *  IHXInterruptSafe methods
  244.      */
  245.     /************************************************************************
  246.      * Method:
  247.      *     IHXInterruptSafe::IsInterruptSafe
  248.      * Purpose:
  249.      *     This is the function that will be called to determine if
  250.      *     interrupt time execution is supported.
  251.      */
  252.     STDMETHOD_(BOOL,IsInterruptSafe) (THIS);
  253. };
  254. /****************************************************************************
  255.  * 
  256.  *  Class:
  257.  *
  258.  * CHXMultiInstanceSiteUser
  259.  *
  260.  */
  261. class CHXMultiInstanceSiteUser : 
  262. public IHXSiteUser
  263. {
  264. private:
  265.     LONG32     m_lRefCount;
  266.     CHXMultiInstanceSiteUserSupplier*     m_pMISUS;
  267.     IHXSite*     m_pSite;
  268.     IHXSite2*     m_pSite2;
  269.     friend class CHXMultiInstanceSiteUserSupplier;
  270.     ~CHXMultiInstanceSiteUser();
  271.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  272. public:
  273.     CHXMultiInstanceSiteUser(CHXMultiInstanceSiteUserSupplier* pMISUS);
  274.     
  275.     /*
  276.      * IUnknown methods
  277.      */
  278.     STDMETHOD(QueryInterface) (THIS_
  279. REFIID riid,
  280. void** ppvObj);
  281.     STDMETHOD_(ULONG32,AddRef) (THIS);
  282.     STDMETHOD_(ULONG32,Release) (THIS);
  283.     /*
  284.      * IHXSiteUser methods usually called by the "context" to 
  285.      * associate users with the site.
  286.      */
  287.     STDMETHOD(AttachSite) (THIS_
  288. IHXSite* /*IN*/ pSite);
  289.     STDMETHOD(DetachSite) (THIS);
  290.     /*
  291.      * IHXSiteUser methods called to inform user of an event.
  292.      */
  293.     STDMETHOD(HandleEvent) (THIS_
  294. HXxEvent* /*IN*/ pEvent);
  295.     STDMETHOD_(BOOL,NeedsWindowedSites) (THIS);
  296. };
  297. #endif // _HXMISUS_H_