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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: basesite.h,v 1.6.34.3 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 _BASESITE_H_
  50. #define _BASESITE_H_
  51. #include "hxslist.h"
  52. #include "chxpckts.h"
  53. #include "hxwin.h"
  54. #include "hxwintyp.h"
  55. #include "hxsite2.h"
  56. #include "hxvctrl.h"
  57. #include "hxcomm.h"
  58. #include "hxengin.h"
  59. #include "region.h"
  60. #include "sitetran.h"
  61. #include "coloracc.h"
  62. class   CHXBaseSite;
  63. class   CBaseSurface;
  64. class   CBaseRootSurface;
  65. class   CHXSiteStatusText;
  66. class   BaseSiteCallback;
  67. class   ScrollSiteCallback;
  68. class   HXMutex;
  69. class   HXThread;
  70. /*
  71.  *  reasons to schedule call backs.
  72.  */
  73. #define REPAINT    0
  74. #define CLIP       1
  75. #define MOUSE      2  
  76. #define REDRAW_ALL 3
  77. #define MOVE       4
  78. #if defined(_UNIX) || defined(_MACINTOSH)
  79. #  define HX_SHOW_WINDOW 1
  80. #  define HX_HIDE_WINDOW 2
  81. #endif
  82. #if defined(_WINDOWS)
  83. #  define HX_SHOW_WINDOW SW_SHOW
  84. #  define HX_HIDE_WINDOW SW_HIDE
  85. #endif
  86. //Defines for sensitivity.
  87. #define SENSITIVITY_NOT_SET     -3
  88. #define SENSITIVITY_OPAQUE      -2
  89. #define SENSITIVITY_TRANSPARENT -1
  90. /****************************************************************************
  91.  * 
  92.  *  Class:
  93.  *
  94.  *      NonDelegatingUnknown
  95.  *
  96.  *  Purpose:
  97.  *
  98.  *      Same signature as IUnknown, allows an object to implement 
  99.  *      aggregation.
  100.  *
  101.  */
  102. class SiteNonDelegatingUnknown
  103. {
  104.   public:
  105.     /*
  106.      * DelegatingUnknown methods
  107.      */
  108.     STDMETHOD(SiteNonDelegatingQueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
  109.     STDMETHOD_(ULONG32,SiteNonDelegatingAddRef) (THIS) PURE;
  110.     STDMETHOD_(ULONG32,SiteNonDelegatingRelease) (THIS) PURE;
  111. };
  112. /****************************************************************************
  113.  * 
  114.  *  Class:
  115.  *
  116.  *      CHXBaseSite
  117.  *
  118.  *  Purpose:
  119.  *
  120.  *      Implementation for IHXSite objects which are associated with
  121.  *      platform specific window objects on Microsoft Windows and X-Windows.
  122.  *
  123.  */
  124. class CHXBaseSite : 
  125. public SiteNonDelegatingUnknown,
  126.  public IHXSite2,
  127.  public IHXSiteTreeNavigation,
  128.  public IHXSiteWindowed,
  129.  public IHXSiteWindowless,
  130.  public IHXCallback,
  131.  public IHXStatusMessage,
  132.  public IHXSiteFullScreen,
  133.  public IHXVideoControl,
  134.  public IHXInterruptSafe,
  135.  public IHXSiteTransition,
  136.  public IHXSiteComposition,
  137.  public IHXKeyBoardFocus,
  138.  public IHXDrawFocus,
  139.  public IHXSubRectSite
  140. {
  141.   public:
  142.     
  143.     static CHXBaseSite* CreateSite( IUnknown* pContext,
  144.                                     IUnknown* pUnkOuter = NULL,
  145.                                     INT32 lZorder = 0);
  146.     static BOOL             zm_bInFullScreenTest;
  147.     ColorFuncAccess*        zm_pColorAcc;
  148.     static CHXSimpleList    zm_YUVSiteList;
  149.     LONG32                 m_lRefCount;
  150.     IUnknown*              m_pUnkOuter;
  151.     CHXHeader*             m_pValues;
  152.     CHXMapPtrToPtr         m_ChildrenMap;
  153.     CHXSimpleList          m_ChildrenInZOrder;
  154.     CHXSimpleList          m_PassiveSiteWatchers;
  155.     IHXSiteUser*          m_pUser;
  156.     CHXBaseSite*           m_pParentSite;
  157.     CHXBaseSite*           m_pTopLevelSite;
  158.     CHXBaseSite*           m_pFocusSite;
  159.     CBaseSurface*          m_pVideoSurface;
  160.     CHXSiteStatusText*     m_pStatusText;
  161.     UINT32                 m_nStatusTextExpireTime;
  162.     BaseSiteCallback*      m_pCallback;
  163.     ScrollSiteCallback*    m_pScrollSiteCallback;
  164.     IHXCommonClassFactory*m_pCCF;
  165.     IHXSiteWatcher*       m_pWatcher;
  166.     IUnknown*              m_pContext;
  167.     HXxSize                m_size;
  168.     HXMutex*              m_pMutex;
  169.     HXxPoint               m_position;
  170.     HXxPoint               m_positionOrig;
  171.     HXxPoint               m_CreateWindowPos;
  172.     HXxPoint               m_topleft;
  173.     INT32                  m_lZOrder;
  174.     BOOL                   m_bIsVisible;
  175.     LONG32                 m_lBltEntryCount;
  176.     BOOL                   m_bInDestructor;
  177.     BOOL                   m_bIsChildWindow;
  178.     BOOL                   m_bRecomputeClipScheduled;
  179.     BOOL                   m_bForceRedrawNeeded;
  180.     BOOL                   m_bRepaintScheduled;
  181.     BOOL                   m_bInFullScreen;
  182.     BOOL                   m_bSettingDisplayMode;
  183.     BOOL                   m_bDisableForceRedraw;
  184.     BOOL                   m_bProcessRepaint;
  185.     BOOL                   m_bWasTopMost;
  186.     BOOL                   m_bModeSharpness;
  187.     BOOL                   m_bAboutToBlt;
  188.     CBaseRootSurface*      m_pRootSurface;
  189.     HXREGION*                m_pDirtyRegion;
  190.     BOOL                   m_bSetCaptureOn;
  191.     IHXSiteUser*          m_pCaptureUser;
  192.     IHXSiteUser*          m_pLastUser;
  193.     CHXBaseSite*           m_pMouseInSite;
  194.     CallbackHandle         m_CallbackHandle;
  195.     CallbackHandle         m_ScrollSiteCallbackHandle;
  196.     IHXScheduler*         m_pScheduler;
  197.     HXxPoint               m_windowPosition;
  198.     HXxSize                m_windowSize;
  199.     HXxPoint               m_screenOffset;
  200.     BOOL                   m_bDoNotGenerateWMPPaint;
  201.     UINT32                 m_nLastMoveTime;
  202.     BOOL                   m_bAttachWindowPending;
  203.     BOOL                   m_bDetachWndMsgPending;
  204.     UINT16                 m_nOldBitsPerPixel;
  205.     UINT16                 m_nOldHorzRes;
  206.     UINT16                 m_nOldVertRes;
  207.     float                  m_fSharpness;
  208.     float                  m_fHue;
  209.     float                  m_fSaturation;
  210.     float                  m_fContrast;
  211.     float                  m_fBrightness;
  212.     INT32                  m_XSliderPos;   
  213.     INT32                  m_YSliderPos;   
  214.     INT32                  m_XSliderRange;
  215.     INT32                  m_YSliderRange;
  216.     CHXSimpleList          m_PendingTaskList;
  217.     TransitionType         m_fpTransitionEffect;
  218.     HXxWindow              m_TopLevelWindow;
  219.     HXxWindow*             m_pWindow;
  220.     HXxRect                m_rectOldClientRect;
  221.     HXREGION*                m_Region;
  222.     HXREGION*                m_RegionForMouse;
  223.     HXREGION*                m_RegionWithoutChildren;
  224.     INT32                  m_nDelayFillBorders;
  225.     INT32                  m_nTransitionState;
  226.     BOOL                   m_bTransitionReversed;
  227.     BOOL                   m_bTransitionTranIn;
  228.     INT32                  m_nTransitionVertRepeat;
  229.     INT32                  m_nTransitionHorzRepeat;
  230.     INT32                  m_nTransitionBorderWidth;
  231.     tranLines              m_TransitionBorderLines;
  232.     ULONG32                m_ulTransitionBorderColor;
  233.     ULONG32                m_ulTransitionFadeColor;
  234.     BOOL                   m_bTransitionBlendBorder;
  235.     BOOL                   m_bTransitionCoordinated;
  236.     BOOL                   m_bTransitionCoordTranIsParentClip;
  237.     BOOL                   m_bRegionIsValid;
  238.     BOOL                   m_bWindowCreatedByCreate;
  239.     BOOL                   m_bCalledComputeClipFromTransition;
  240.     INT32                  m_nEventSensitivity;
  241.     CHXMapPtrToPtr         m_upgradeMap;
  242.     BOOL                   m_bScheduleUpgrade;
  243.     CHXSimpleList          m_ListOfRealVideoSites;
  244.     BOOL                   m_bVideoUnderTransition;
  245.     BOOL                   m_bInForceRedraw;
  246.     BOOL                   m_bSiteRefresh;
  247.     BOOL                   m_bTestWindowing;
  248.     INT32                  m_nWindowColor;
  249.     BOOL                   m_bPostageStamp;
  250.     BOOL                   m_bBltHasBeenCalled;
  251.     HXxRect                m_UpdateBltStatsRect;
  252.     BOOL                   m_bScrollingSite;
  253.    
  254.     // IHXKeyBoardFocus
  255.     IHXSiteUser*          m_pKeyBoardFocusUser;
  256.     // IHXDrawFocus
  257.     enum
  258.         {
  259.             DRAW_RECT           = 1, 
  260.             DRAW_ELLIPSE        = 1<<1, 
  261.             DRAW_POLYGON        = 1<<2
  262.         };
  263.     
  264.     typedef struct _FocusRect_t
  265.     {
  266.         union
  267.         {
  268.             HXxRect rcFocus;
  269.             
  270.             struct
  271.             {
  272.                 HXxPoint* pFocusPoints;
  273.                 UINT32    ulFocusPoints;
  274.             } polygon;
  275.         };
  276.         
  277.         UINT32     ulShape;
  278.         UINT32     ulLineStyle;
  279.         UINT32     ulLineWidth;
  280.       
  281.         UINT8      red, green, blue;
  282.         UINT8      red2, green2, blue2;
  283.         IHXBuffer *pCustomPattern;
  284.         UINT32     ulCustomEntries;
  285.         BOOL       bRectActive;
  286.         BOOL       bSecondaryColors;
  287.         
  288.     } tFocusRect;
  289.     
  290.     tFocusRect             m_rcFocusRect;
  291.    
  292.     typedef enum 
  293.     {
  294.         ONMOVEWINDOW = 0
  295.         , ONUPDATEWINDOW
  296.         , ONSHOWWINDOW
  297.         , ONSETWINDOWPOS
  298.         , ONSETWINDOWREGION
  299.         , ONSETXSLIDER
  300.         , ONSETYSLIDER
  301.         , ONSETFOCUS
  302.         , ONSETSIZE
  303.         , ONSETPOSITION
  304.     } PendingTaskType;
  305.     struct PendingTask
  306.     {
  307.         PendingTask( PendingTaskType uTaskType,
  308.                      CHXBaseSite*    pThis,
  309.                      void*           ulArg1 = 0,
  310.                      void*           ulArg2 = 0,
  311.                      void*           ulArg3 = 0,
  312.                      void*           ulArg4 = 0,
  313.                      void*           ulArg5 = 0,
  314.                      void*           ulArg6 = 0,
  315.                      void*           ulArg7 = 0
  316.                      )
  317.             {
  318.                 m_pThis    = pThis;
  319.                 m_TaskType = uTaskType;
  320.                 m_ulArg1   = ulArg1;
  321.                 m_ulArg2   = ulArg2;
  322.                 m_ulArg3   = ulArg3;
  323.                 m_ulArg4   = ulArg4;
  324.                 m_ulArg5   = ulArg5;
  325.                 m_ulArg6   = ulArg6;
  326.                 m_ulArg7   = ulArg7;
  327.             };
  328.       
  329.         PendingTaskType m_TaskType;
  330.         CHXBaseSite*    m_pThis;
  331.         void*           m_ulArg1;
  332.         void*           m_ulArg2;
  333.         void*           m_ulArg3;
  334.         void*           m_ulArg4;
  335.         void*           m_ulArg5;
  336.         void*           m_ulArg6;
  337.         void*           m_ulArg7;
  338.     };
  339.     /*
  340.      * SiteNonDelegatingUnknown methods
  341.      */
  342.     STDMETHOD(SiteNonDelegatingQueryInterface)  (THIS_ REFIID riid, void** ppvObj);
  343.     STDMETHOD_(ULONG32,SiteNonDelegatingAddRef) (THIS);
  344.     STDMETHOD_(ULONG32,SiteNonDelegatingRelease) (THIS);
  345.     
  346.     /*
  347.      * IUnknown
  348.      */
  349.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  350.     STDMETHOD_(ULONG32,AddRef) (THIS);
  351.     STDMETHOD_(ULONG32,Release) (THIS);
  352.     /*
  353.      * IHXSiteWindowless
  354.      */
  355.     STDMETHOD(EventOccurred)(THIS_ HXxEvent* /*IN*/ pEvent);
  356.     STDMETHOD_(HXxWindow*,GetParentWindow)(THIS);
  357.     /*
  358.      * IHXSiteWindowed
  359.      */
  360.     STDMETHOD(AttachWindow) (THIS_ HXxWindow* /*IN*/ pWindow);
  361.     STDMETHOD(DetachWindow) (THIS);
  362.     STDMETHOD(Create) (THIS_ void* ParentWindow, UINT32 style);
  363.     STDMETHOD(Destroy) (THIS);
  364.     STDMETHOD_(HXxWindow*,GetWindow)(THIS);
  365.     /*
  366.      * IHXSite methods
  367.      */
  368.     STDMETHOD(AttachUser) (THIS_ IHXSiteUser*   /*IN*/  pUser);
  369.     STDMETHOD(DetachUser) (THIS);
  370.     STDMETHOD(GetUser) (THIS_ REF(IHXSiteUser*) /*OUT*/ pUser);
  371.     STDMETHOD(CreateChild) (THIS_ REF(IHXSite*)  /*OUT*/ pChildSite);
  372.     STDMETHOD(DestroyChild) (THIS_ IHXSite*       /*IN*/  pChildSite);
  373.     STDMETHOD(AttachWatcher) (THIS_ IHXSiteWatcher* /*IN*/ pWatcher);
  374.     STDMETHOD(DetachWatcher) (THIS);
  375.     STDMETHOD(SetPosition) (THIS_ HXxPoint position);
  376.     STDMETHOD(GetPosition) (THIS_ REF(HXxPoint) position);
  377.     STDMETHOD(SetSize) (THIS_ HXxSize size);
  378.     STDMETHOD(GetSize) (THIS_ REF(HXxSize) size);
  379.     STDMETHOD(DamageRect) (THIS_ HXxRect rect);
  380.     STDMETHOD(DamageRegion) (THIS_ HXxRegion region);
  381.     STDMETHOD(ForceRedraw) (THIS);
  382.     //
  383.     // IHXComposition methods
  384.     //
  385.     STDMETHOD(LockComposition) (THIS);
  386.     STDMETHOD(UnlockComposition) (THIS);
  387.     STDMETHOD(BltComposition) (THIS);
  388.     STDMETHOD(SetCompositionMode) (THIS_ BOOL OnOrOff);
  389.     STDMETHOD_(BOOL, IsCompositionLocked) (THIS);
  390.     STDMETHOD_(BOOL, IsCompositionMode) (THIS);
  391.     /*
  392.      * IHXSite2 methods
  393.      */
  394.     STDMETHOD(UpdateSiteWindow) (THIS_ HXxWindow* /*IN*/ pWindow);
  395.     STDMETHOD(ShowSite) (THIS_ BOOL    bShow);
  396.     STDMETHOD_(BOOL, IsSiteVisible) (THIS);
  397.     STDMETHOD(SetZOrder) (THIS_ INT32 lZOrder);
  398.     STDMETHOD(GetZOrder) (THIS_ REF(INT32) lZOrder);
  399.     STDMETHOD(MoveSiteToTop) (THIS);
  400.     STDMETHOD(GetVideoSurface) (THIS_ REF(IHXVideoSurface*) pSurface);
  401.     STDMETHOD_(UINT32,GetNumberOfChildSites) (THIS);
  402.     STDMETHOD(AddPassiveSiteWatcher) (THIS_ IHXPassiveSiteWatcher* pWatcher);
  403.     STDMETHOD(RemovePassiveSiteWatcher) (THIS_ IHXPassiveSiteWatcher* pWatcher);
  404.     STDMETHOD(SetCursor) (THIS_ HXxCursor cursor, REF(HXxCursor) oldCursor);
  405.     /*
  406.      * IHXSiteTreeNavigation methods
  407.      */
  408.     STDMETHOD(GetParentSite) (THIS_ REF(IHXSite*) pParentSite);
  409.     STDMETHOD(GetNthChildSite) (THIS_ ULONG32 ulIndex, REF(IHXSite*) pSite);
  410.     /*
  411.      *  IHXCallback methods
  412.      */
  413.     STDMETHOD(Func) (THIS);
  414.     /*
  415.      * IHXStatusMessage methods
  416.      */
  417.     
  418.     STDMETHOD(SetStatus) (THIS_ const char* pText);
  419.     /*
  420.      * IHXSiteFullScreen methods
  421.      */
  422.     STDMETHOD(EnterFullScreen) (THIS);
  423.     STDMETHOD(ExitFullScreen) (THIS);
  424.     STDMETHOD(TestFullScreen) (THIS_ void* hTestBitmap,const char* pszStatusText);
  425.     STDMETHOD_(BOOL, IsFullScreen) (THIS);
  426.     
  427.     /*
  428.      * IHXVideoControls methods
  429.      */
  430.     STDMETHOD_(float, GetBrightness) (THIS);
  431.     STDMETHOD(SetBrightness) (THIS_ float Brightness);
  432.     STDMETHOD_(float, GetContrast) (THIS);
  433.     STDMETHOD(SetContrast) (THIS_ float Contrast);
  434.     STDMETHOD_(float, GetSaturation) (THIS);
  435.     STDMETHOD(SetSaturation) (THIS_ float Saturation);
  436.     STDMETHOD_(float, GetHue) (THIS);
  437.     STDMETHOD(SetHue) (THIS_ float Hue);
  438.     STDMETHOD_(float, GetSharpness) (THIS);
  439.     STDMETHOD(SetSharpness) (THIS_ float Sharpness);
  440.     STDMETHOD(SetModeSharpness) (THIS_ UINT16 dFlag);
  441.     /************************************************************************
  442.      *  Method:
  443.      *      IHXInterruptSafe::IsInterruptSafe
  444.      *  Purpose:
  445.      *      This is the function that will be called to determine if
  446.      *      interrupt time execution is supported.
  447.      */
  448.     STDMETHOD_(BOOL,IsInterruptSafe) (THIS);
  449.     /*
  450.      * IHXSiteTransition methods
  451.      */
  452.     STDMETHOD(Initialize) (THIS_ IHXValues* pParams) ;
  453.     STDMETHOD(SetPercentage) (THIS_ UINT32 nThousandnthsComplete) ;
  454.     /*
  455.      * IHXKeyBoardFocus methods
  456.      */
  457.     STDMETHOD(SetKeyboardFocus)(THIS_ IHXSiteUser* pSiteUser );
  458.     STDMETHOD(GetKeyboardFocus)(THIS_ IHXSiteUser* &pSiteUser );
  459.     /*
  460.      * IHXDrawFocus methods
  461.      */
  462.     STDMETHOD(SetStyle)(THIS_ IHXValues* pProperties);
  463.     STDMETHOD(ClearFocus)(THIS);
  464.     STDMETHOD(SetFocusPolygon)(THIS_  HXxPoint* pPoints, ULONG32 numPoints);
  465.     STDMETHOD(SetFocusRect) (THIS_ HXxRect* pRect);
  466.     STDMETHOD(SetFocusEllipse) (THIS_ HXxRect* pRect);
  467.     /*
  468.      * IHXSubRectSite methods
  469.      */
  470.     STDMETHOD(SendSubRectMessages) (THIS_ BOOL bRet );
  471.     STDMETHOD(SubRectDamageRegion) (THIS_ HXxBoxRegion* pRegion );
  472.     STDMETHOD(GetSubRectVideoSurface)(THIS_ REF(IHXSubRectVideoSurface*) pSurface );
  473.     //
  474.     // Debug methods...
  475.     //
  476.     void DisplaySiteData(const char *);
  477.     void DisplayChildSiteData(const char *);
  478.     void DisplayAllSiteData();
  479.     void VerifyNoDups( CHXMapPtrToPtr& map, HXREGION* reg );
  480.    
  481.     //
  482.     //InLine Methods
  483.     //
  484.     void SetOrigin(HXxPoint* pOrigin) {memcpy(&m_topleft, pOrigin, sizeof(HXxPoint));} /* Flawfinder: ignore */
  485.     HXxPoint* GetOrigin() {return &m_topleft;}
  486.     void SetInternalZOrder(INT32 lZOrder) {m_lZOrder = lZOrder;};
  487.     void SetFocusSite(CHXBaseSite* pFocusSite) {m_pFocusSite = pFocusSite;}
  488.     CHXBaseSite* GetFocusSite() {return m_pFocusSite;}
  489.     BOOL IsMoving() {return FALSE;}//m_bMoving;}
  490.    
  491.     //
  492.     // Internal Functions
  493.     //
  494.     CHXBaseSite(IUnknown* pContext, IUnknown* pUnkOuter = NULL, INT32 lZorder = 0);
  495.     virtual         ~CHXBaseSite();
  496.     CBaseRootSurface* GetRootSurface();
  497.    
  498.     void            SetParentSite(CHXBaseSite* pParentSite);
  499.     void            SetTopLevelSite(CHXBaseSite* pTop);
  500.     CHXBaseSite*    GetParentSite() {return m_pParentSite;}
  501.     CHXBaseSite*    GetTopLevelSite();
  502.     CHXBaseSite*    GetContainingCHXBaseSite();
  503.     void            UpdateZOrder( CHXBaseSite* pUpdatedChildSite,
  504.                                   INT32 lOldZOrder,
  505.                                   INT32 lNewZOrder);
  506.     HXxPoint        GetScreenOffset();
  507.     void            SetXSliderRange(INT32);
  508.     INT32           GetXSliderRange();
  509.     void            SetYSliderRange(INT32);
  510.     INT32           GetYSliderRange();
  511.     INT32           GetXSliderPos();
  512.     INT32           GetYSliderPos();
  513.     INT32           GetSliderWidth();
  514.     INT32           GetSliderHeight();
  515.     void            GetWindowRect(HXxRect* pRect);
  516.     void            GetExtentsWithoutChildren(HXxRect* pRect);
  517.     void            RecursiveSizeSliders();
  518.     void            SizeSliders();
  519.     void            FuncSizeSliders();
  520.     HX_RESULT       ConvertStringToXYDepth(const char* pszModeString,
  521.                                            REF(INT32) x,
  522.                                            REF(INT32) y,
  523.                                            REF(INT32) depth);
  524.     void            SetDisplayMode();
  525.     BOOL            GenerateMouseLeaveMessage();
  526.     void            CheckExposeEvents();
  527.     BOOL            ComputeSubRects();
  528.     void            BuildParnetClipping( HXREGION* hClip, CHXBaseSite* pChild );
  529.     BOOL            m_bUsingList;
  530.     void            SetClipping();
  531.     BOOL            AreVideoControlsActive();
  532.     BOOL            IsHigherZOrderTranstitionActive();
  533.     void            FindLinkedSites();
  534.    
  535.     //Alpha blending support....
  536.     CHXMapPtrToPtr  m_AlphaBlendSites;     //Who is under us that we blend with
  537.     CHXMapPtrToPtr  m_AlphaBlendNotifiers; //who we notify when we change.
  538.     BOOL            m_bSiteNeverBlts;
  539.     BOOL            _CheckForVisibleChild();
  540.     void            AlphaBlendComputeSubRects( CHXBaseSite* pIgnoredSite );
  541.     void            AlphaBlendBuildParnetClipping( HXREGION* hClip,
  542.                                                    CHXBaseSite* pChild,
  543.                                                    CHXBaseSite* pIgnoredSite );
  544.     void            _RemoveAllNotifiers();
  545.     void            _RemoveAllYUVImageLists();
  546.     void            _EmptyBlenderList();
  547.     void            _EmptyNotifierList();
  548.     void            _AlphaBlendAddNotifier(CHXBaseSite* it);
  549.     void            _RemoveHigherOrderSiblings( HXREGION* hClip, CHXBaseSite* pChild );
  550.     BOOL            _BlendedBordersActive();
  551.     BOOL            _FadeTransitionActive();
  552.     BOOL            _BordersActive();
  553.     BOOL            _IsAlphaBlending();
  554.    
  555.     //End alpha support....
  556.     //IHXComposition support
  557.     BOOL            m_bCompositionLocked;
  558.     BOOL            m_bCompositionMode;
  559.     void            UpdateModes();
  560.     BOOL            DoesPrefExist(INT32 resolutionX,
  561.                                   INT32 resolutionY,
  562.                                   INT32 colorDepth);
  563.     void            UpdatePrefs(INT32 resolutionX,
  564.                                 INT32 resolutionY,
  565.                                 INT32 colorDepth,
  566.                                 ULONG32 ulBltTime,
  567.                                 BOOL bPassed,
  568.                                 BOOL bTested);
  569.    
  570.     void              ScheduleCallback( INT32 nWhichCallback,
  571.                                         INT32 nMilliseconds,
  572.                                         BOOL  bOverrideCompositionMode=FALSE);
  573.     BOOL            IsPointInClippingRegion(HXxPoint* pPoint);
  574.     void            SetEvent(REF(HXxEvent) theEvent,
  575.                              ULONG32 event,
  576.                              void* window,
  577.                              void* param1,
  578.                              void* param2);
  579.     void            CheckDisplayMode(void* hdc);
  580.     void            ChangeResolution();
  581.     void            DestroySurfaces();
  582.     void            ReInitSurfaces();
  583.     void            RecomputeClip();
  584.     void             FindVideoSites();
  585.     INT32           GetTopMostSiteZOrder();
  586.     void            SetParentWindow(HXxWindow* pWindow);
  587.     void            SetRootSurface(CBaseRootSurface* pSurface);
  588.     virtual void    CheckColorSettings();
  589.     BOOL            SharpenImage( HXBitmapInfoHeader* pOptimizedFormat,
  590.                                   UCHAR* pImageBits,
  591.                                   REF(HXxRect) rSrcRect);
  592.     void            SiteMoving(INT32 x, INT32 y);
  593.     void            ResetOrigin();
  594.     void            GetAbsoluteCords(REF(HXxPoint) point);
  595.     void            AboutToBlt();
  596.     void            FillColorKey();
  597.     BOOL            SafeMoveWindow(void* hWnd,
  598.                                    INT32 X,
  599.                                    INT32 Y,
  600.                                    INT32 nWidth,
  601.                                    INT32 nHeight,
  602.                                    BOOL bRepaint);
  603.     BOOL            SafeUpdateWindow(void* hWnd);
  604.     BOOL            SafeShowWindow(void* hWnd, INT32 nCmdShow);
  605.     BOOL            SafeSetWindowPos(void* hWnd,
  606.                                      void* hWndInsertAfter,
  607.                                      INT32 X,
  608.                                      INT32 Y,
  609.                                      INT32 cx,
  610.                                      INT32 cy,
  611.                                      UINT uFlags);
  612.     INT32           SafeSetWindowRgn(void* hWnd, HXREGION* hRgn, BOOL bRedraw);
  613.     void            SafeSetXSliderRange(INT32 range);
  614.     void            SafeSetYSliderRange(INT32 range);
  615.     void            SafeSetFocus(HXxWindow* pWindow);
  616.     HX_RESULT       _SafeSetSize(HXxSize size);
  617.     HX_RESULT       _SafeSetPosition(HXxPoint position);
  618.    
  619.     void            ExecutePendingTasks();
  620.     void            RemovePendingTasks(CHXBaseSite*);
  621.     void            ResetUpdateOverlay();
  622.     void            SiteNotMoving();
  623.     void            _ForceRedrawAll();
  624.     void            InternalForceRedraw();
  625.     void            LockBlitters();
  626.     void            UnlockBlitters();
  627.     void            FlushSurfaces();
  628.     
  629.     void            DisableColorControls(float &fBrightness,
  630.                                          float &fContrast,
  631.                                          float &fSaturation,
  632.                                          float &fHue);
  633.     void            EnableColorControls(float fBrightness,
  634.                                         float fContrast,
  635.                                         float fSaturation,
  636.                                         float fHue);
  637.     /*
  638.      * Small HXColor support
  639.      */
  640.     void ColorConverterRequest(int CIDin, int CIDout, BOOL bFoundConverter);
  641.     void InternalColorConverterRequest(int CIDin, int CIDout, BOOL bFoundConverter, CHXBaseSite* pSite);
  642.     void ScheduleUpgrade();
  643.     void InternalScheduleUpgrade(UINT32 CIDIn, UINT32 CIDOut, IHXSite* pSite);
  644.     /*
  645.      *  OS Specific Functions
  646.      */
  647.     /************************************************************************
  648.      *  Method:
  649.      *      _NeedWindowedSite
  650.      *  Purpose:
  651.      *      Create a windowed site
  652.      */
  653.     virtual void        _NeedWindowedSite() = 0;
  654.     /************************************************************************
  655.      *  Method:
  656.      *      _AttachWindow
  657.      *  Purpose:
  658.      *      A window is assigned to the site so perform any required window
  659.      *      initialization code.
  660.      */
  661.     virtual void        _AttachWindow() = 0;
  662.     /************************************************************************
  663.      *  Method:
  664.      *      _DetachWindow
  665.      *  Purpose:
  666.      *      The window is removed from the site so perform any required window
  667.      *      clean-up code.
  668.      */
  669.     virtual void        _DetachWindow() = 0;
  670.     /************************************************************************
  671.      *  Method:
  672.      *      _Create
  673.      *  Purpose:
  674.      *      Create a window of type style with ParentWindow as its parent
  675.      */
  676.     virtual void*       _Create(void* ParentWindow, UINT32 style) = 0;
  677.     /************************************************************************
  678.      *  Method:
  679.      *      _Destroy
  680.      *  Purpose:
  681.      *      Destroy this window
  682.      */
  683.     virtual void        _Destroy(HXxWindow* pWindow) = 0;
  684.     /************************************************************************
  685.      *  Method:
  686.      *      _SetSize
  687.      *  Purpose:
  688.      *      Set the size of the window to size
  689.      */
  690.     virtual void        _SetSize(HXxSize size) = 0;
  691.     /************************************************************************
  692.      *  Method:
  693.      *      _SetPosition
  694.      *  Purpose:
  695.      *      Set the position of the window to position
  696.      */
  697.     virtual void        _SetPosition(HXxPoint position) = 0;
  698.     /************************************************************************
  699.      *  Method:
  700.      *      _DamageRect
  701.      *  Purpose:
  702.      *      Mark this area of the window for redrawing
  703.      */
  704.     virtual void        _DamageRect(HXxRect rect) = 0;
  705.     /************************************************************************
  706.      *  Method:
  707.      *      _DamageRegion
  708.      *  Purpose:
  709.      *      Mark this area of the window for redrawing
  710.      */
  711.     virtual void        _DamageRegion(HXxRegion rect) = 0;
  712.     /************************************************************************
  713.      *  Method:
  714.      *      _ShouldEnterForceRedraw
  715.      *  Purpose:
  716.      *      Serialize our drawing routines
  717.      */
  718.     virtual BOOL        _ShouldEnterForceRedraw() = 0;
  719.     /************************************************************************
  720.      *  Method:
  721.      *      _ExitForceRedraw
  722.      *  Purpose:
  723.      *      Serialize our drawing routines
  724.      */
  725.     virtual void        _ExitForceRedraw() = 0;
  726.     /************************************************************************
  727.      *  Method:
  728.      *      _SendOSUpdateMessage
  729.      *  Purpose:
  730.      *      Instruct the window to update itself
  731.      */
  732.     virtual void        _SendOSUpdateMessage() = 0;
  733.     /************************************************************************
  734.      *  Method:
  735.      *      _ShowSite
  736.      *  Purpose:
  737.      *      Show/hide the site
  738.      */
  739.     virtual void        _ShowSite(BOOL bShow) = 0;
  740.     /************************************************************************
  741.      *  Method:
  742.      *      _AtSystemTime
  743.      *  Purpose:
  744.      *      Determines if this call is on the main app thread
  745.      */
  746.     virtual BOOL        _AtSystemTime() = 0;
  747.     /************************************************************************
  748.      *  Method:
  749.      *      _EventOccurred
  750.      *  Purpose:
  751.      *      Process the current event
  752.      */
  753.     virtual HX_RESULT   _EventOccurred(HXxEvent* /*IN*/ pEvent) = 0;
  754.     /************************************************************************
  755.      *  Method:
  756.      *      _GetDeviceCaps
  757.      *  Purpose:
  758.      *      Query the current display mode for bit depth, width and height
  759.      */
  760.     virtual void        _GetDeviceCaps( void* hdc,
  761.                                         UINT16& uBitesPerPixel,
  762.                                         UINT16& uHorzRes,
  763.                                         UINT16& uVertRes) = 0;
  764.     /************************************************************************
  765.      *  Method:
  766.      *      _GetWindowRect
  767.      *  Purpose:
  768.      *      Get the screen coordinates of the window
  769.      */
  770.     virtual void        _GetWindowRect(HXxRect* destRect) = 0;
  771.     /************************************************************************
  772.      *  Method:
  773.      *      _DestroySliders
  774.      *  Purpose:
  775.      *      Destroys the x/y scroll bars
  776.      */
  777.     virtual void        _DestroySliders() = 0;
  778.     /************************************************************************
  779.      *  Method:
  780.      *      _HandleOSEvents
  781.      *  Purpose:
  782.      *      Handle this event
  783.      */
  784.     virtual BOOL        _HandleOSEvents(HXxEvent* /*IN*/ pEvent) = 0;
  785.     /************************************************************************
  786.      *  Method:
  787.      *      _ConvertToHXEvent
  788.      *  Purpose:
  789.      *      Convert an OS event to a Helix event
  790.      */
  791.     virtual BOOL        _ConvertToHXEvent( HXxEvent* pEvent ) = 0;
  792.     /************************************************************************
  793.      *  Method:
  794.      *      _GenerateOSEvent
  795.      *  Purpose:
  796.      *      Generate an OS event from a Helix event
  797.      */
  798.     virtual void        _GenerateOSEvent(HXxEvent* pEvent, HXxEvent* pEvent2) = 0;
  799.     /************************************************************************
  800.      *  Method:
  801.      *      _GenerateSetCursorEvent
  802.      *  Purpose:
  803.      *      Generate as OS set cursor event
  804.      */
  805.     virtual void        _GenerateSetCursorEvent() = 0;
  806.     /************************************************************************
  807.      *  Method:
  808.      *      _EnterFullScreen
  809.      *  Purpose:
  810.      *      Enter into full screen display mode
  811.      */
  812.     virtual HX_RESULT   _EnterFullScreen() = 0;
  813.     /************************************************************************
  814.      *  Method:
  815.      *      _ExitFullScreen
  816.      *  Purpose:
  817.      *      Leave full screen display mode
  818.      */
  819.     virtual HX_RESULT   _ExitFullScreen() = 0;
  820.     /************************************************************************
  821.      *  Method:
  822.      *      _TestFullScreen
  823.      *  Purpose:
  824.      *      Test full screen performance
  825.      */
  826.     virtual HX_RESULT   _TestFullScreen( void* hTestBitmap,
  827.                                          const char* pszStatusText) = 0;
  828.     /************************************************************************
  829.      *  Method:
  830.      *      _TryCreateXSlider
  831.      *  Purpose:
  832.      *      Create a horizontal scroll bar
  833.      */
  834.     virtual void _TryCreateXSlider() = 0;
  835.     /************************************************************************
  836.      *  Method:
  837.      *      _SetXSliderValues
  838.      *  Purpose:
  839.      *      Set the range and step size of the horizontal scroll bar
  840.      */
  841.     virtual void _SetXSliderValues(INT32 range, INT32 pageSize) = 0;
  842.     /************************************************************************
  843.      *  Method:
  844.      *      _TryCreateYSlider
  845.      *  Purpose:
  846.      *      Create a vertical scroll bar
  847.      */
  848.     virtual void _TryCreateYSlider() = 0;
  849.     /************************************************************************
  850.      *  Method:
  851.      *      _SetYSliderValues
  852.      *  Purpose:
  853.      *      Set the range and step size of the vertical scroll bar
  854.      */
  855.     virtual void _SetYSliderValues(INT32 range, INT32 pageSize) = 0;
  856.     /************************************************************************
  857.      *  Method:
  858.      *      _GetSystemSizeOfSliders
  859.      *  Purpose:
  860.      *      Get the pixel size of a scroll bar
  861.      */
  862.     virtual void _GetSystemSizeOfSliders(INT32* pWidth, INT32* pHeight) = 0;
  863.     /************************************************************************
  864.      *  Method:
  865.      *      _IsWindowVisible
  866.      *  Purpose:
  867.      *      Is this site's window visible
  868.      */
  869.     virtual BOOL _IsWindowVisible() = 0;
  870.     /************************************************************************
  871.      *  Method:
  872.      *      _ShowXSlider
  873.      *  Purpose:
  874.      *      Show/hide the horizontal scroll bar
  875.      */
  876.     virtual void _ShowXSlider(BOOL bShow) = 0;
  877.     /************************************************************************
  878.      *  Method:
  879.      *      _MoveXSlider
  880.      *  Purpose:
  881.      *      Set the size and position of the horizontal scroll bar
  882.      */
  883.     virtual void _MoveXSlider(INT32 left, INT32 top,
  884.                               INT32 right, INT32 bottom,
  885.                               BOOL bRedraw) = 0;
  886.     /************************************************************************
  887.      *  Method:
  888.      *      _ShowXSlider
  889.      *  Purpose:
  890.      *      Show/hide the vertical scroll bar
  891.      */
  892.     virtual void _ShowYSlider(BOOL bShow) = 0;
  893.     /************************************************************************
  894.      *  Method:
  895.      *      _MoveYSlider
  896.      *  Purpose:
  897.      *      Set the size and position of the vertical scroll bar
  898.      */
  899.     virtual void _MoveYSlider(INT32 left, INT32 top,
  900.                               INT32 right, INT32 bottom,
  901.                               BOOL bRedraw) = 0;
  902.     
  903.     /************************************************************************
  904.      *  Method:
  905.      *      _DoesXSliderExist
  906.      *  Purpose:
  907.      *      Have we created a horizontal slider
  908.      */
  909.     virtual BOOL _DoesXSliderExist() = 0;
  910.     /************************************************************************
  911.      *  Method:
  912.      *      _GetContainingWindow
  913.      *  Purpose:
  914.      *      Get the window that contains the full screen window
  915.      */
  916.     virtual void*_GetContainingWindow() = 0; // XXXAH void*? Not HXxWindow??
  917.     /************************************************************************
  918.      *  Method:
  919.      *      _GetCursorPos
  920.      *  Purpose:
  921.      *      Get the position of the cursor in screen coordinates
  922.      */
  923.     virtual void _GetCursorPos(HXxPoint* pPoint) = 0;
  924.     /************************************************************************
  925.      *  Method:
  926.      *      _MapPointToOSWindow
  927.      *  Purpose:
  928.      *      Find which window contains this point
  929.      */
  930.     virtual void _MapPointToOSWindow(HXxPoint* pPt, void** pWindowHandle) = 0;
  931.    
  932.     /************************************************************************
  933.      *  Method:
  934.      *      _GetWindowWithCursor
  935.      *  Purpose:
  936.      *      This returns the OS specific window handle, as void*, that the
  937.      *      pointer is currently in.
  938.      */
  939.     virtual void* _GetWindowWithCursor() = 0;
  940.     /************************************************************************
  941.      *  Method:
  942.      *      _ReInitPrimarySurface
  943.      *  Purpose:
  944.      *      Restore the primary surface, if necessary, after a mode/resolution
  945.      *      change.
  946.      */
  947.     virtual void  _ReInitPrimarySurface() = 0; // XXXAH may want to move this to root.
  948.                  
  949.     /************************************************************************
  950.      *  Method:
  951.      *      _MoveWindow
  952.      *  Purpose:
  953.      *      Change the size and position of the window.  For the top level
  954.      *      site, these are screen coordinates, for children sites, they
  955.      *      are relative.
  956.      */
  957.     virtual BOOL  _MoveWindow( void* ,
  958.                                INT32 X, INT32 Y,
  959.                                INT32 nWidth, INT32 nHeight,
  960.                                BOOL bRepaint) = 0;
  961.     /************************************************************************
  962.      *  Method:
  963.      *      _UpdateWindow
  964.      *  Purpose:
  965.      *      Sends an OS message to the window to updat the client area
  966.      */
  967.     virtual BOOL  _UpdateWindow(void* hWnd) = 0;
  968.     /************************************************************************
  969.      *  Method:
  970.      *      _ShowWindow
  971.      *  Purpose:
  972.      *      Show/hide the window
  973.      */
  974.     virtual BOOL  _ShowWindow(void* hWnd, INT32 nCmdShow) = 0;
  975.     /************************************************************************
  976.      *  Method:
  977.      *      _SetWindowPos
  978.      *  Purpose:
  979.      *      Sets the size, position, and z-order of the window
  980.      */
  981.     virtual BOOL  _SetWindowPos(void* hWnd,
  982.                                 void* hWndInsertAfter,
  983.                                 INT32 X, INT32 Y,
  984.                                 INT32 cx, INT32 cy,
  985.                                 INT32 uFlags) = 0;
  986.     virtual void  _DrawFocusRect(UCHAR* pImage,
  987.                                  HXBitmapInfoHeader* pImageInfo,
  988.                                  HXxRect* pImageSize,
  989.                                  void* pOsSpecificData=NULL);
  990.     BOOL           HasFocusRect() {return m_rcFocusRect.bRectActive;}
  991.     
  992.     void ManageExposeEvents( HXxRect* dirtyRect );
  993.     void _RecursiveDamageRect( HXxRect* dirtyRect, BOOL bForce=FALSE );
  994.     void DamageRectWindowRel(HXxRect rect);
  995.     // this is going to be a nice one.
  996.     virtual BOOL _SetWindowRgn(void* hWnd, HXREGION* hRgn, BOOL bRedraw) = 0;
  997.     // XXXAH it would be nice to get the return value here
  998.     virtual void _SetFocus(void* pWindow) = 0;
  999.     BOOL         _TakesPartInAlphaChain();
  1000.     HXREGION*      Transition(INT32 left, INT32 top, INT32 right, INT32 bottom, tranLines* lines = NULL);
  1001.     //XXXgfw just some hacks to help us get trylocks with the top
  1002.     //level site mutexes.
  1003.     void _TLSLock();
  1004.     void _TLSUnlock();
  1005.     BOOL _TLSIsLocked();
  1006.     inline BOOL SiteScaleingInfoAvailable(){
  1007.         return m_bSiteScalingInfo;
  1008.     }
  1009.     
  1010.   protected:
  1011.     void         _HandleMouseEvent(HXxEvent* pEvent);
  1012.     CHXBaseSite* _GetSiteFromPixel(HXxPoint& point);
  1013.     virtual void CreateColorAccess(IUnknown* pUnk) {zm_pColorAcc = new ColorFuncAccess(pUnk);}
  1014.     
  1015.     INT32      m_nTLSMutexLockCount;
  1016.     UINT32     m_ulTLSMutexOwningThread;
  1017.     HXThread* m_pDummyThread;
  1018.     BOOL       m_bMoving;
  1019.     BOOL       m_bUserWantsSubRects;
  1020.     BOOL       m_bSiteScalingInfo;
  1021. };
  1022. class BaseSiteCallback : public IHXCallback
  1023. {
  1024.   public:
  1025.     CHXBaseSite*  m_pSite;
  1026.     CBaseSurface* m_pSurf;
  1027.    
  1028.     BaseSiteCallback(CHXBaseSite* pSite);
  1029.     ~BaseSiteCallback();
  1030.     /*
  1031.      *  IUnknown methods
  1032.      */
  1033.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  1034.     STDMETHOD_(ULONG32,AddRef) (THIS);
  1035.     STDMETHOD_(ULONG32,Release) (THIS);
  1036.     /*
  1037.      *  IHXCallback methods
  1038.      */
  1039.     STDMETHOD(Func) (THIS);
  1040.   protected:
  1041.     LONG32 m_lRefCount;
  1042. };
  1043. class ScrollSiteCallback : public IHXCallback
  1044. {
  1045. public:
  1046.     ScrollSiteCallback(CHXBaseSite* pSite);
  1047.     ~ScrollSiteCallback();
  1048.     /*
  1049.      *  IUnknown methods
  1050.      */
  1051.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  1052.     STDMETHOD_(ULONG32,AddRef) (THIS);
  1053.     STDMETHOD_(ULONG32,Release) (THIS);
  1054.     /*
  1055.      *  IHXCallback methods
  1056.      */
  1057.     STDMETHOD(Func) (THIS);
  1058. protected:
  1059.     LONG32       m_lRefCount;
  1060.     CHXBaseSite* m_pSite;
  1061. };
  1062. #endif /* _BASESITE_H_ */