Просмотр исходного кода

Code refactoring: setting pixel format in XPixelBuffer instead of XDesktop.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2571 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v0.0.90
Constantin Kaplinsky 16 лет назад
Родитель
Сommit
1d2967f906
3 измененных файлов: 23 добавлений и 18 удалений
  1. 21
    4
      unix/x0vncserver/XPixelBuffer.cxx
  2. 1
    1
      unix/x0vncserver/XPixelBuffer.h
  3. 1
    13
      unix/x0vncserver/x0vncserver.cxx

+ 21
- 4
unix/x0vncserver/XPixelBuffer.cxx Просмотреть файл



XPixelBuffer::XPixelBuffer(Display *dpy, Image* image, XPixelBuffer::XPixelBuffer(Display *dpy, Image* image,
int offsetLeft, int offsetTop, int offsetLeft, int offsetTop,
const PixelFormat& pf, ColourMap* cm)
: FullFramePixelBuffer(pf, image->xim->width, image->xim->height,
(rdr::U8 *)image->xim->data, cm),
ColourMap* cm)
: FullFramePixelBuffer(),
m_dpy(dpy), m_dpy(dpy),
m_image(image), m_image(image),
m_offsetLeft(offsetLeft), m_offsetLeft(offsetLeft),
m_offsetTop(offsetTop), m_offsetTop(offsetTop),
m_stride(image->xim->bytes_per_line * 8 / image->xim->bits_per_pixel) m_stride(image->xim->bytes_per_line * 8 / image->xim->bits_per_pixel)
{ {
// Get initial screen image.
// Fill in the PixelFormat structure of the parent class.
format.bpp = image->xim->bits_per_pixel;
format.depth = image->xim->depth;
format.bigEndian = (image->xim->byte_order == MSBFirst);
format.trueColour = image->isTrueColor();
format.redShift = ffs(image->xim->red_mask) - 1;
format.greenShift = ffs(image->xim->green_mask) - 1;
format.blueShift = ffs(image->xim->blue_mask) - 1;
format.redMax = image->xim->red_mask >> format.redShift;
format.greenMax = image->xim->green_mask >> format.greenShift;
format.blueMax = image->xim->blue_mask >> format.blueShift;

// Set up the remaining data of the parent class.
width_ = image->xim->width;
height_ = image->xim->height;
data = (rdr::U8 *)image->xim->data;
colourmap = cm;

// Get initial screen image from the X display.
m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop); m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop);
} }



+ 1
- 1
unix/x0vncserver/XPixelBuffer.h Просмотреть файл

public: public:
XPixelBuffer(Display *dpy, Image* image, XPixelBuffer(Display *dpy, Image* image,
int offsetLeft, int offsetTop, int offsetLeft, int offsetTop,
const PixelFormat& pf, ColourMap* cm);
ColourMap* cm);
virtual ~XPixelBuffer(); virtual ~XPixelBuffer();


// We allow public access to the underlying Image object. // We allow public access to the underlying Image object.

+ 1
- 13
unix/x0vncserver/x0vncserver.cxx Просмотреть файл

image = factory.newImage(dpy, geometry->width(), geometry->height()); image = factory.newImage(dpy, geometry->width(), geometry->height());
vlog.info("Allocated %s", image->classDesc()); vlog.info("Allocated %s", image->classDesc());


pf.bpp = image->xim->bits_per_pixel;
pf.depth = image->xim->depth;
pf.bigEndian = (image->xim->byte_order == MSBFirst);
pf.trueColour = image->isTrueColor();
pf.redShift = ffs(image->xim->red_mask) - 1;
pf.greenShift = ffs(image->xim->green_mask) - 1;
pf.blueShift = ffs(image->xim->blue_mask) - 1;
pf.redMax = image->xim->red_mask >> pf.redShift;
pf.greenMax = image->xim->green_mask >> pf.greenShift;
pf.blueMax = image->xim->blue_mask >> pf.blueShift;

// Provide pixel buffer to the server object. // Provide pixel buffer to the server object.
pb = new XPixelBuffer(dpy, image, pb = new XPixelBuffer(dpy, image,
geometry->offsetLeft(), geometry->offsetTop(), geometry->offsetLeft(), geometry->offsetTop(),
pf, this);
this);
server = vs; server = vs;
server->setPixelBuffer(pb); server->setPixelBuffer(pb);


protected: protected:
Display* dpy; Display* dpy;
Geometry* geometry; Geometry* geometry;
PixelFormat pf;
XPixelBuffer* pb; XPixelBuffer* pb;
VNCServer* server; VNCServer* server;
Image* image; Image* image;

Загрузка…
Отмена
Сохранить