x11_display.hpp
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:4k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * x11_display.hpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 VideoLAN
  5.  * $Id: x11_display.hpp 7264 2004-04-03 17:02:59Z asmax $
  6.  *
  7.  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
  8.  *          Olivier Teuli鑢e <ipkiss@via.ecp.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  23.  *****************************************************************************/
  24. #ifndef X11_DISPLAY_HPP
  25. #define X11_DISPLAY_HPP
  26. #include <X11/Xlib.h>
  27. #include "../src/skin_common.hpp"
  28. // Helper macros
  29. #define XDISPLAY m_rDisplay.getDisplay()
  30. #define XVISUAL m_rDisplay.getVisual()
  31. #define XPIXELSIZE m_rDisplay.getPixelSize()
  32. #define XGC m_rDisplay.getGC()
  33. /// Class for encapsulation of a X11 Display
  34. class X11Display: public SkinObject
  35. {
  36.     public:
  37.         X11Display( intf_thread_t *pIntf );
  38.         virtual ~X11Display();
  39.         /// Get the display
  40.         Display *getDisplay() const { return m_pDisplay; }
  41.         /// Get the visual
  42.         Visual *getVisual() const { return m_pVisual; }
  43.         /// Get the pixel size
  44.         int getPixelSize() const { return m_pixelSize; }
  45.         /// Get the graphics context
  46.         GC getGC() const { return m_gc; }
  47.         /// Get the colormap
  48.         Colormap getColormap() const { return m_colormap; }
  49.         /// Type of function to convert RGB values into a pixel
  50.         typedef void (X11Display::*MakePixelFunc_t)( uint8_t *pPixel,
  51.             uint8_t r, uint8_t g, uint8_t b, uint8_t a ) const;
  52.         /// Get a pointer on the right makePixel implementation
  53.         MakePixelFunc_t getMakePixel() const { return makePixelImpl; }
  54.         /// Get the pixel value corresponding to the given colors
  55.         unsigned long getPixelValue( uint8_t r, uint8_t g, uint8_t b ) const;
  56.         /// Get the main window ID
  57.         Window getMainWindow() const { return m_mainWindow; }
  58.         //XXX
  59.         Window m_voutWindow;
  60.     private:
  61.         /// Dummy parent window for the task bar
  62.         Window m_mainWindow;
  63.         /// Display parameters
  64.         Display *m_pDisplay;
  65.         Visual *m_pVisual;
  66.         int m_pixelSize;
  67.         GC m_gc;
  68.         Colormap m_colormap;
  69.         int m_redLeftShift, m_redRightShift;
  70.         int m_greenLeftShift, m_greenRightShift;
  71.         int m_blueLeftShift, m_blueRightShift;
  72.         /// Pointer on the right implementation of getPixel
  73.         MakePixelFunc_t makePixelImpl;
  74.         /// Calculate shifts from a color mask
  75.         void getShifts( uint32_t mask, int &rLeftShift,
  76.                         int &rRightShift ) const;
  77.         /// 8 bpp version of makePixel
  78.         void makePixel8( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  79.                          uint8_t a ) const;
  80.         /// 16 bpp MSB first version of makePixel
  81.         void makePixel16MSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  82.                              uint8_t a ) const;
  83.         /// 16 bpp LSB first version of makePixel
  84.         void makePixel16LSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  85.                              uint8_t a ) const;
  86.         /// 24/32 bpp MSB first version of makePixel
  87.         void makePixel32MSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  88.                              uint8_t a ) const;
  89.         /// 24/32 bpp LSB first version of makePixel
  90.         void makePixel32LSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  91.                              uint8_t a ) const;
  92. };
  93. #endif