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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: unixsurf.h,v 1.1.1.1.42.2 2004/07/09 01:58:44 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 _UNIXSURF_H
  50. #define _UNIXSURF_H
  51. #include "basesurf.h"
  52. #include "baseroot.h"
  53. #include <X11/Xatom.h>
  54. #include <X11/Xlib.h>
  55. #include <X11/Xutil.h>
  56. #include <X11/Xos.h>
  57. #include <X11/Intrinsic.h>
  58. #include <X11/extensions/XShm.h>
  59. //This was never added to the XShm.h header file for some reason.
  60. extern "C"
  61. {
  62.     extern int XShmGetEventBase( Display *);
  63. }
  64. #if defined(_LINUX) && defined(_OVERLAY)
  65. #  include <X11/extensions/Xv.h>
  66. #  include <X11/extensions/Xvlib.h>
  67. #endif
  68. #if defined(HELIX_FEATURE_HARDWARE_COLOR_CONTROLS)
  69. //For use to store min/max port attribute values for
  70. //the color controls.
  71. typedef struct _PortAttribute
  72. {
  73.     _PortAttribute(int min, int max)
  74.         :nMinValue(min),
  75.          nMaxValue(max)
  76.         {}
  77.     _PortAttribute()
  78.         :nMinValue(0),
  79.          nMaxValue(0)
  80.         {}
  81.     int nMinValue;
  82.     int nMaxValue;
  83. } stPortAttribute;
  84. #endif
  85. class CUnixSurf : public CBaseSurface
  86. {
  87. public:
  88.    CUnixSurf( IUnknown* pContext, CHXBaseSite* pSite );
  89.    
  90. protected:
  91.    virtual void      _ReleaseSurface(CBaseRootSurface* pSurface);
  92.    virtual void      _DrawBlack(void* pWindow);
  93.    virtual HX_RESULT _BltToPrimary(HXxRect& rDestRect, HXxRect& rSrcRect);
  94.    virtual void      _CreateBuffer();
  95.    virtual HX_RESULT _GetCaps(UINT32 *pfSurfaceCaps);
  96.    virtual HX_RESULT _CreateOverlay(BOOL bOverlay, int cid, int x, int y);
  97.    virtual HX_RESULT _LockInternalSurface(UCHAR** ppSurfPtr,
  98.                                           LONG32* pnSurfPitch,
  99.                                           HXxSize& notused);
  100.    virtual HX_RESULT _UnlockInternalSurface(UCHAR* pSurfPtr);
  101.    virtual void      _SetupDCObjects(HXxDC hxxDC,
  102.                                      void** phOldBrush, void** phOldPen);
  103.    virtual void      _FillRectangle(HXxDC hxxDC,
  104.                                     UINT32 left, UINT32 top,
  105.                                     UINT32 right, UINT32 bottom);
  106.    virtual void      _RestoreDCObjects(HXxDC hxxDC,
  107.                                        void* hOldBrush, void* hOldPen);
  108.    virtual void      _GetCompositionSurfaceHXxDC(HXxDC *hdc);
  109.    virtual void      _ReleaseCompositionSurfaceHXxDC(HXxDC hdc);
  110.    virtual INT32     _InsureColorMatch(INT32 InColor);
  111.    virtual void      _SetColorKey(INT32 nColorSpaceLowValue,
  112.                                   INT32 nColorSpaceHighValue);
  113.    virtual void      _UpdateOverlay(HXxRect* src, HXxRect* dest, INT32 inFlags);
  114.    virtual BOOL      _IsSurfaceVisible();
  115.    virtual void      _ReleaseSurface();
  116.    virtual HXxDC     _GetDC(HXxWindow*);
  117.    virtual void      _ReleaseDC(HXxWindow*, HXxDC);
  118.    //Helpers
  119.    // returns true if there is a port that supports the fourcc.
  120.    // if called with no parameters, return wether or not overlays
  121.    // are supported at all.
  122.    BOOL _OverlayAvailable(int fourccWanted=-1, int* nPortID=NULL );
  123.    //Converts window coordinates into device coordinates
  124.    //if needed. This is used on Windows at least because
  125.    //its overlays use screen coords instead of window coords.
  126.    //This is a noop on unix as its overlays are in window coords.
  127.    virtual void _GetWindowDeviceCords(HXxRect* rect );
  128. private:
  129.    virtual ~CUnixSurf();
  130.    int m_nCompletionEventID;
  131.     
  132.    //Protect unintentional copy and default ctors.
  133.    CUnixSurf();
  134.    CUnixSurf( const CUnixSurf& );
  135.    CUnixSurf& operator=(const CUnixSurf& it );
  136. #if defined(_LINUX) && defined(_OVERLAY)
  137.    static CUnixSurf* zm_pXvOwner;
  138.    
  139.    BOOL        m_bWallPaperMode;
  140.    ULONG32     m_ulColorKey;
  141.    BOOL        m_bPaintClipList;
  142.    BOOL        m_bStretchToFill;
  143.    INT32       m_nPortID;
  144.    XvImage**   m_pXvImage;
  145.    Atom        m_atomColorKey;
  146.    Atom        m_atomClipKey;
  147. #if defined(HELIX_FEATURE_HARDWARE_COLOR_CONTROLS)
  148.    Atom        m_atomBrightness;
  149.    Atom        m_atomContrast;
  150.    Atom        m_atomHue;
  151.    Atom        m_atomSaturation;
  152.    stPortAttribute paBrightness;
  153.    stPortAttribute paContrast;
  154.    stPortAttribute paHue;
  155.    stPortAttribute paSaturation;
  156.    int m_nCurrBrightness;
  157.    int m_nCurrContrast;
  158.    int m_nCurrSaturation;
  159.    int m_nCurrHue;
  160.    
  161.   public:
  162.    void SetHWColorControls();
  163.    BOOL HasHWColorConrols();
  164.        
  165. #endif
  166.    
  167. #endif //_OVERLAY
  168.   public:
  169.    ULONG32     m_ulLastOverlayUpdateTime;
  170.   private:
  171.    
  172.    UCHAR**     m_pcVideoBuf;
  173.    int         m_nVideoPitch;
  174.    ULONG32     m_ulFourCCID;
  175.    
  176.    //Shared memory members.
  177.    BOOL             m_bUseShm;
  178.    XShmSegmentInfo* m_shmInfo;
  179.    int*             m_nShmId;
  180.    
  181.    Display*    m_display;
  182.    GC          m_GC;
  183.    int         m_nScreenNumber;
  184.    int         m_nCurrentBuffer;
  185.    int         m_nMultiBufferCount;
  186. };
  187. #endif