x11_display.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * x11_display.hpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 the VideoLAN team
  5.  * $Id: bda1bc6e585cf9922155151aa64e10abf5d8cc18 $
  6.  *
  7.  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
  8.  *          Olivier Teulière <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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 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 put RGBA 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 blendPixel implementation
  53.         MakePixelFunc_t getBlendPixel() const { return blendPixelImpl; }
  54.         /// Get a pointer on the right putPixel implementation
  55.         MakePixelFunc_t getPutPixel() const { return putPixelImpl; }
  56.         /// Get the pixel value corresponding to the given colors
  57.         unsigned long getPixelValue( uint8_t r, uint8_t g, uint8_t b ) const;
  58.         /// Get the main window ID
  59.         Window getMainWindow() const { return m_mainWindow; }
  60.         //XXX
  61.         Window m_voutWindow;
  62.     private:
  63.         /// Dummy parent window for the task bar
  64.         Window m_mainWindow;
  65.         /// Display parameters
  66.         Display *m_pDisplay;
  67.         Visual *m_pVisual;
  68.         int m_pixelSize;
  69.         GC m_gc;
  70.         Colormap m_colormap;
  71.         int m_redLeftShift, m_redRightShift;
  72.         int m_greenLeftShift, m_greenRightShift;
  73.         int m_blueLeftShift, m_blueRightShift;
  74.         /// Pointer on the right implementation of blendPixel
  75.         MakePixelFunc_t blendPixelImpl;
  76.         /// Pointer on the right implementation of putPixel
  77.         MakePixelFunc_t putPixelImpl;
  78.         /// Calculate shifts from a color mask
  79.         void getShifts( uint32_t mask, int &rLeftShift,
  80.                         int &rRightShift ) const;
  81.         /// 8 bpp version of blendPixel
  82.         void blendPixel8( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  83.                           uint8_t a ) const;
  84.         /// 16 bpp MSB first version of blendPixel
  85.         void blendPixel16MSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  86.                               uint8_t a ) const;
  87.         /// 16 bpp LSB first version of blendPixel
  88.         void blendPixel16LSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  89.                               uint8_t a ) const;
  90.         /// 24/32 bpp MSB first version of blendPixel
  91.         void blendPixel32MSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  92.                               uint8_t a ) const;
  93.         /// 24/32 bpp LSB first version of blendPixel
  94.         void blendPixel32LSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  95.                               uint8_t a ) const;
  96.         /// 8 bpp version of putPixel
  97.         void putPixel8( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  98.                         uint8_t a ) const;
  99.         /// 16 bpp MSB first version of putPixel
  100.         void putPixel16MSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  101.                             uint8_t a ) const;
  102.         /// 16 bpp LSB first version of putPixel
  103.         void putPixel16LSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  104.                             uint8_t a ) const;
  105.         /// 24/32 bpp MSB first version of putPixel
  106.         void putPixel32MSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  107.                             uint8_t a ) const;
  108.         /// 24/32 bpp LSB first version of putPixel
  109.         void putPixel32LSB( uint8_t *pPixel, uint8_t r, uint8_t g, uint8_t b,
  110.                             uint8_t a ) const;
  111. };
  112. #endif