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
diff --git a/unix/x0vncserver/XPixelBuffer.cxx b/unix/x0vncserver/XPixelBuffer.cxx
index 2692c18..164c704 100644
--- a/unix/x0vncserver/XPixelBuffer.cxx
+++ b/unix/x0vncserver/XPixelBuffer.cxx
@@ -29,16 +29,33 @@
 
 XPixelBuffer::XPixelBuffer(Display *dpy, Image* image,
                            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_image(image),
     m_offsetLeft(offsetLeft),
     m_offsetTop(offsetTop),
     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);
 }