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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: minisite.h,v 1.9.4.4 2004/07/09 01:58: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 _MINISITE_H_
  50. #define _MINISITE_H_
  51. #include "hxcom.h"
  52. #include "hxtypes.h"
  53. #include "hxwintyp.h"
  54. #include "hxwin.h"
  55. #include "hxsite2.h"
  56. #include "hxevent.h"
  57. #include "hxccf.h"
  58. #include "chxpckts.h"
  59. #include "hxslist.h"
  60. #include "baseobj.h"
  61. #ifdef HELIX_FEATURE_SMIL_SITE
  62. #include "region.h"
  63. #endif
  64. #include "hxengin.h"
  65. /****************************************************************************
  66.  * 
  67.  *  Class:
  68.  *
  69.  *      NonDelegatingUnknown
  70.  *
  71.  *  Purpose:
  72.  *
  73.  *      Same signature as IUnknown, allows an object to implement 
  74.  *      aggregation.
  75.  *
  76.  */
  77. class CHXHeader;
  78. class CMiniBaseSurface;
  79. class CMiniBaseSite : public IHXSite,
  80. #if defined (HELIX_FEATURE_SMIL_SITE)                      
  81.                       public IHXSite2,
  82.                       public IHXCallback,
  83.                       public IHXSiteControl,
  84. #endif //HELIX_FEATURE_SMIL_SITE
  85.                       public IHXSiteWindowed,
  86.                       public CHXBaseCountingObject
  87. {
  88. public:
  89.     static CMiniBaseSite* CreateSite(IUnknown* pContext,
  90.                                      IUnknown* pUnkOuter = NULL,
  91.                                      INT32 lZorder = 0);
  92.     /*
  93.      * IUnknown
  94.      */
  95.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  96.     STDMETHOD_(ULONG32,AddRef) (THIS);
  97.     STDMETHOD_(ULONG32,Release) (THIS);
  98.     /*
  99.      * IHXSiteWindowed
  100.      */
  101.     STDMETHOD(AttachWindow) (THIS_ HXxWindow* /*IN*/ pWindow);
  102.     STDMETHOD(DetachWindow) (THIS);
  103.     STDMETHOD(Create) (THIS_ void* ParentWindow, UINT32 style);
  104.     STDMETHOD(Destroy) (THIS);
  105.     STDMETHOD_(HXxWindow*,GetWindow)(THIS);
  106.     /*
  107.      * IHXSite methods
  108.      */
  109.     STDMETHOD(AttachUser) (THIS_ IHXSiteUser*   /*IN*/  pUser);
  110.     STDMETHOD(DetachUser) (THIS);
  111.     STDMETHOD(GetUser) (THIS_ REF(IHXSiteUser*) /*OUT*/ pUser);
  112.     STDMETHOD(CreateChild) (THIS_ REF(IHXSite*)  /*OUT*/ pChildSite);
  113.     STDMETHOD(DestroyChild) (THIS_ IHXSite*       /*IN*/  pChildSite);
  114.     STDMETHOD(AttachWatcher) (THIS_ IHXSiteWatcher* /*IN*/ pWatcher);
  115.     STDMETHOD(DetachWatcher) (THIS);
  116.     STDMETHOD(SetPosition) (THIS_ HXxPoint position);
  117.     STDMETHOD(GetPosition) (THIS_ REF(HXxPoint) position);
  118.     STDMETHOD(SetSize) (THIS_ HXxSize size);
  119.     STDMETHOD(GetSize) (THIS_ REF(HXxSize) size);
  120.     STDMETHOD(DamageRect) (THIS_ HXxRect rect);
  121.     STDMETHOD(DamageRegion) (THIS_ HXxRegion region);
  122.     STDMETHOD(ForceRedraw) (THIS);
  123. #if defined (HELIX_FEATURE_SMIL_SITE)
  124.     /*
  125.      * IHXSiteControl
  126.      */
  127.     STDMETHOD(ForceRedrawAll) (THIS_ );
  128.     /*
  129.      * IHXSite2 methods
  130.      */
  131.     STDMETHOD(UpdateSiteWindow) (THIS_ HXxWindow* /*IN*/ pWindow);
  132.     STDMETHOD(ShowSite) (THIS_ BOOL    bShow);
  133.     STDMETHOD_(BOOL, IsSiteVisible) (THIS);
  134.     STDMETHOD(MoveSiteToTop) (THIS);
  135.     STDMETHOD(GetVideoSurface) (THIS_ REF(IHXVideoSurface*) pSurface);
  136.     STDMETHOD(AddPassiveSiteWatcher) (THIS_ IHXPassiveSiteWatcher* pWatcher);
  137.     STDMETHOD(RemovePassiveSiteWatcher) (THIS_ IHXPassiveSiteWatcher* pWatcher);
  138.     STDMETHOD(SetCursor) (THIS_ HXxCursor cursor, REF(HXxCursor) oldCursor);
  139.     inline void SetTopLevelSite(CMiniBaseSite* pTop)
  140.     {
  141.         m_pTopLevelSite = pTop;
  142.     }
  143.     inline void SetOrigin(HXxPoint* pOrigin)
  144.     {
  145.         memcpy(&m_topleft, pOrigin, sizeof(HXxPoint));  /* Flawfinder: ignore */
  146.     }
  147.     inline HXxPoint* GetOrigin()
  148.     {
  149.         return &m_topleft;
  150.     }
  151.     inline void SetParentSite(CMiniBaseSite* pParent)
  152.     {
  153.         m_pParentSite = pParent;
  154.     }
  155.     inline void SetParentWindow(HXxWindow* pWindow)
  156.     {
  157.         memcpy(&m_TopLevelWindow, pWindow, sizeof(HXxWindow) );  /* Flawfinder: ignore */
  158.     }
  159.     inline STDMETHOD_(UINT32,GetNumberOfChildSites) (THIS)
  160.     {
  161.         return (UINT32)m_ChildrenInZOrder.GetCount();
  162.     }
  163.     inline void SetInternalZOrder(INT32 lZOrder)
  164.     {
  165.         m_lZOrder = lZOrder;
  166.     }
  167.     inline HXREGION* GetRegion()
  168.     {
  169.         return m_Region;
  170.     }
  171.     
  172.     inline STDMETHOD(GetZOrder)(THIS_ REF(INT32) lZOrder )
  173.     {
  174.         lZOrder = m_lZOrder;
  175.         return HXR_OK;
  176.     }
  177.     STDMETHOD(SetZOrder) (THIS_ INT32 lZOrder);
  178. #endif //HELIX_FEATURE_SMIL_SITE
  179.     
  180.     /*
  181.      * Internal methods
  182.      */
  183.     CMiniBaseSite(IUnknown* pContext,
  184.                   IUnknown* pUnkOuter = NULL,
  185.                   INT32 lZorder = 0);
  186.     
  187.     virtual ~CMiniBaseSite();
  188. protected:
  189.     BOOL _CheckForVisibleChild();
  190. #ifdef HELIX_FEATURE_SMIL_SITE
  191.     typedef enum _callback_type
  192.     {
  193.         REPAINT    = 1<<0,
  194.         CLIP       = 1<<1,
  195.         MOUSE      = 1<<2,  
  196.         REDRAW_ALL = 1<<3,
  197.         MOVE       = 1<<4
  198.     } CALLBACK_TYPE;
  199.     
  200.     void BuildParnetClipping( HXREGION* hClip, CMiniBaseSite* pChild );
  201.     void UpdateZOrder( CMiniBaseSite* pUpdatedChildSite, INT32 lNewZOrder);
  202.     void RecomputeClip();
  203.     BOOL ComputeSubRects();
  204.     void ScheduleCallback( CALLBACK_TYPE  nWhichCallback,
  205.                            INT32 nMilliseconds );
  206.     void _ForceRedrawAll();
  207.     STDMETHOD(Func)(THIS_ void);
  208.     void ResetOrigin();
  209.     void GetAbsoluteCords(REF(HXxPoint) point);
  210. #endif
  211.     
  212.     /*
  213.      *  OS Specific Functions
  214.      */
  215.     virtual void*       _Create(void* ParentWindow, UINT32 style) = 0;
  216.     virtual void        _Destroy(HXxWindow* pWindow) = 0;
  217.     virtual void        _SetSize(HXxSize size) = 0;
  218.     virtual void        _ChildCreated(void) {};
  219.     virtual void        _SetPosition(HXxPoint position) = 0;
  220.     //Give the platforms a chance to do OS specific setup.
  221.     virtual void        _AttachWindow(){};
  222.     virtual void        _DetachWindow(){};
  223.     //This returns the OS specific window handle, as void*, that the
  224.     //pointer is currently in.
  225.     virtual BOOL        _MoveWindow(void* ,
  226.                                     INT32 X, INT32 Y,
  227.                                     INT32 nWidth, INT32 nHeight,
  228.                                     BOOL bRepaint) = 0;
  229.     
  230.     IUnknown*                   m_pContext;
  231.     IHXCommonClassFactory*      m_pCCF;
  232.     IHXSiteUser*                m_pUser;
  233.     IHXSiteWatcher*             m_pWatcher;
  234.     IHXValues*                  m_pValues;
  235.     CMiniBaseSurface*           m_pVideoSurface;
  236.     HXxWindow*                  m_pWindow;
  237.     HXxSize                     m_size;
  238.     HXxPoint                    m_position;
  239.     LONG32                      m_lRefCount;
  240.     INT32                       m_lZOrder;
  241.     
  242. #if defined (HELIX_FEATURE_SMIL_SITE)    
  243.     CMiniBaseSite* m_pTopLevelSite;
  244.     CHXSimpleList  m_ChildrenInZOrder;
  245.     HXxPoint       m_topleft;
  246.     CMiniBaseSite* m_pParentSite;
  247.     HXxWindow      m_TopLevelWindow;
  248.     HXREGION*      m_Region;
  249.     HXREGION*      m_RegionWithoutChildren;
  250.     BOOL           m_bIsVisible;
  251.     CallbackHandle m_CallbackHandle;
  252.     IHXScheduler*  m_pScheduler;
  253.     UINT32         m_bfCallBacks;
  254.     UINT32         m_ulCallbackTime;
  255.     CHXSimpleList  m_PassiveSiteWatchers;
  256. #endif
  257.     BOOL m_bWindowCreatedByCreate;
  258. };
  259. #endif //_MINISITE_H_