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

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.  *                 Phil Dibowitz (jaymzh)
  34.  *  
  35.  * ***** END LICENSE BLOCK ***** */ 
  36. #ifndef _UNIXSITE_H
  37. #define _UNIXSITE_H
  38. #include <X11/Xatom.h>
  39. #include <X11/Xlib.h>
  40. #include <X11/Xutil.h>
  41. #include <X11/Xos.h>
  42. #include <X11/Intrinsic.h>
  43. #include <X11/extensions/XShm.h>
  44. #include "basesite.h"
  45. class CHXUnixSite : public CHXBaseSite
  46. {
  47. public:
  48.    friend class CUnixSurf;
  49.    friend class CUnixRootSurf;
  50.    
  51.    CHXUnixSite( IUnknown* pContext,
  52.                 IUnknown* pUnkOuter,
  53.                 INT32 lInitialZorder);
  54.    
  55.    static void ProcessEvent(HXxEvent* pEvent);
  56.    Window CreateXWindow( Window win ); 
  57.    void _ForwardUpdateEvent(HXxEvent* pEvent);
  58.    //static member vars.
  59.    static Display* zm_display;
  60.    void _UpdateOverlayIfNeeded();
  61.    BOOL m_bIgnoreFocusOutInFS;
  62. protected:
  63.    
  64.    virtual ~CHXUnixSite();
  65.    
  66.    //
  67.    // CHXUnixSite only methods....
  68.    //
  69.    HX_RESULT   _OpenXDisplay(char* DiplayString);
  70.    static void _CollapseExposeEvents(XEvent* xevent);
  71.    BOOL        _ShouldProcess(HXxEvent* pEvent);
  72.    void        _DrawArrows();
  73.    void        _CreateHorizScrollBar(void);
  74.    void        _CreateVertScrollBar(void);
  75.    BOOL        _InButton(HXxPoint& pt, int x, int y );
  76.    void        _DestroyScrollButtons();
  77.    void        _MapScrollButtons();
  78.    void        _MapHorzScroll();
  79.    void        _MapVertScroll();
  80.    void        _UnmapHorzScroll();
  81.    void        _UnmapVertScroll();
  82.    void        _UnmapScrollButtons();
  83.    void        _BuildClipRegion();
  84.    void        _ReleaseClippingRegion();
  85.    //
  86.    // Seperate object for our callbacks to keep the events flowing.
  87.    //
  88.    class UnixEventHandler : public IHXCallback
  89.    {
  90.    public:
  91.       UnixEventHandler(CHXUnixSite* pParent);
  92.         
  93.       //IUnknown methods
  94.       virtual HX_RESULT QueryInterface(REFIID riid, void** ppvObj);
  95.       virtual ULONG32 AddRef();
  96.       virtual ULONG32 Release();
  97.       //IHXCallback methods
  98.       virtual HX_RESULT Func(); 
  99.       void CancelCallback();
  100.         
  101.    private:
  102.       virtual ~UnixEventHandler();
  103.       PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  104.        
  105.       UnixEventHandler();
  106.       UnixEventHandler(const UnixEventHandler&);
  107.       UnixEventHandler& operator=(const UnixEventHandler& it );
  108.         
  109.       CHXUnixSite*   m_pParent;
  110.       LONG32         m_lRefCount;
  111.       CallbackHandle m_cbHandle;
  112.    };
  113.     
  114.    //
  115.    // CHXBaseSite inherited methods
  116.    //
  117.    virtual void  _NeedWindowedSite();
  118.    virtual void  _AttachWindow();
  119.    virtual void  _DetachWindow();
  120.    virtual void* _Create(void* ParentWindow, UINT32 style);
  121.    virtual void  _Destroy(HXxWindow* pWindow); 
  122.    virtual void  _SetSize(HXxSize size); 
  123.    virtual void  _SetPosition(HXxPoint position); 
  124.    virtual void  _DamageRect(HXxRect rect);
  125.    virtual void  _DamageRegion(HXxRegion rect);
  126.    virtual BOOL  _ShouldEnterForceRedraw(); 
  127.    virtual void  _ExitForceRedraw(); 
  128.    virtual void  _SendOSUpdateMessage(); 
  129.    virtual void  _ShowSite(BOOL bShow); 
  130.    virtual BOOL  _AtSystemTime(); 
  131.    virtual void  _GetDeviceCaps( void* hdc,
  132.                                  UINT16& uBitesPerPixel,
  133.                                  UINT16& uHorzRes,
  134.                                  UINT16& uVertRes ); 
  135.    virtual void  _GetWindowRect(HXxRect* destRect);
  136.    virtual void  _DestroySliders();
  137.    virtual BOOL  _HandleOSEvents(HXxEvent* pEvent);
  138.    virtual BOOL  _ConvertToHXEvent(HXxEvent* pEvent);
  139.    virtual void  _GenerateOSEvent(HXxEvent* pEvent, HXxEvent* pEvent2);
  140.    virtual void  _GenerateSetCursorEvent();
  141.    virtual void  _TryCreateXSlider();
  142.    virtual void  _SetXSliderValues(INT32 range, INT32 pageSize);
  143.    virtual void  _TryCreateYSlider();
  144.    virtual void  _SetYSliderValues(INT32 range, INT32 pageSize);
  145.    virtual void  _GetSystemSizeOfSliders(INT32* pWidth, INT32* pHeight);
  146.    virtual BOOL  _IsWindowVisible();
  147.    virtual void  _ShowXSlider(BOOL bShow);
  148.    virtual void  _MoveXSlider( INT32 left,
  149.                                INT32 top,
  150.                                INT32 right,
  151.                                INT32 bottom,
  152.                                BOOL bRedraw );
  153.    virtual void  _ShowYSlider(BOOL bShow);
  154.    virtual void  _MoveYSlider( INT32 left,
  155.                                INT32 top,
  156.                                INT32 right,
  157.                                INT32 bottom,
  158.                                BOOL bRedraw);
  159.    virtual BOOL  _DoesXSliderExist();
  160.    virtual void* _GetContainingWindow();
  161.    virtual void  _GetCursorPos(HXxPoint* pPoint);
  162.    virtual void  _MapPointToOSWindow(HXxPoint* pPt, void** pWindowHandle);
  163.    virtual void* _GetWindowWithCursor();
  164.    virtual void  _ReInitPrimarySurface();
  165.    virtual BOOL  _MoveWindow( void* ,
  166.                               INT32 X,
  167.                               INT32 Y,
  168.                               INT32 nWidth,
  169.                               INT32 nHeight,
  170.                               BOOL bRepaint);
  171.    virtual BOOL  _UpdateWindow(void* hWnd);
  172.    virtual BOOL  _ShowWindow(void* hWnd, INT32 nCmdShow);
  173.    virtual BOOL  _SetWindowPos(void* hWnd,
  174.                                void* hWndInsertAfter,
  175.                                INT32 X,
  176.                                INT32 Y,
  177.                                INT32 cx,
  178.                                INT32 cy,
  179.                                INT32 uFlags);
  180.    virtual BOOL  _SetWindowRgn(void* hWnd, HXREGION* hRgn, BOOL bRedraw);
  181.    virtual void _SetFocus(void* pWindow);
  182.     
  183.    virtual HX_RESULT _EnterFullScreen();
  184.    virtual HX_RESULT _EventOccurred(HXxEvent* pEvent);
  185.    virtual HX_RESULT _ExitFullScreen();
  186.    virtual HX_RESULT _TestFullScreen( void* hTestBitmap,
  187.                                       const char* pszStatusText );
  188. private:
  189.    //Protect unintentional copy and default ctors.
  190.    CHXUnixSite();
  191.    CHXUnixSite( const CHXUnixSite& );
  192.    CHXUnixSite& operator=( const CHXUnixSite& it );
  193.     
  194.    //member vars.
  195.    UnixEventHandler* m_pUnixEventHandler;
  196.    static Cursor zm_GrabCursor;
  197.    Window        m_ScrollHorizButtonL;
  198.    Window        m_ScrollHorizButtonR;
  199.    Window        m_ScrollVertButtonT;
  200.    Window        m_ScrollVertButtonB;
  201.    Window        m_winFullScreenWindow;
  202.    Window        m_winOldParent;
  203.    HXxPoint      m_ptScrollHorizPosL;
  204.    HXxPoint      m_ptScrollHorizPosR;
  205.    HXxPoint      m_ptScrollVertPosT;
  206.    HXxPoint      m_ptScrollVertPosB;
  207.    HXxPoint      m_ptFullScreenOffset;
  208.    HXxSize       m_PreFullScreenSize;
  209.    BOOL          m_bScrollingInProgress;
  210.    int           m_nScrollDir;
  211.    BOOL          m_bLastPointInSite;
  212.    BOOL          m_bDamaged;
  213.    //
  214.    //Private helpers...
  215.    //
  216.    //returns the HX_VK associated with this keysym....
  217.    UINT32 _MapKeySymToHXVK(KeySym tmpSym, UINT32& uFlags);
  218. };
  219. /////////////////////////////////////////////////////////
  220. //
  221. // CHXSiteEventHandler
  222. //
  223. /////////////////////////////////////////////////////////
  224. class CHXSiteEventHandler : public IHXSiteEventHandler
  225. {
  226. public:
  227.    CHXSiteEventHandler(IUnknown* pContext);
  228.    virtual HX_RESULT QueryInterface(REFIID riid, void** ppvObj);
  229.    virtual ULONG32 AddRef();
  230.    virtual ULONG32 Release();
  231.    virtual HX_RESULT EventOccurred(HXxEvent* pEvent);
  232. private:
  233.    ~CHXSiteEventHandler();
  234.    PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  235.    IUnknown* m_pContext; 
  236.    ULONG32   m_lRefCount;
  237. };
  238. #endif //_UNIXSITE_H