Code refactoring - PollingManager's constructor is given an XPixelBuffer*
instead of an Image*.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2567 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/unix/x0vncserver/PollingManager.cxx b/unix/x0vncserver/PollingManager.cxx
index bcc9547..71b5d66 100644
--- a/unix/x0vncserver/PollingManager.cxx
+++ b/unix/x0vncserver/PollingManager.cxx
@@ -43,27 +43,25 @@
//
// Constructor.
//
-// Note that dpy and image should remain valid during the object
+// Note that dpy and buffer should remain valid during the object
// lifetime, while factory is used only in the constructor itself.
//
-// FIXME: Pass XPixelBuffer* instead of Image*.
-//
-PollingManager::PollingManager(Display *dpy, Image *image,
+PollingManager::PollingManager(Display *dpy, XPixelBuffer *buffer,
ImageFactory *factory,
int offsetLeft, int offsetTop)
: m_dpy(dpy),
m_server(0),
- m_image(image),
- m_bytesPerPixel(image->xim->bits_per_pixel / 8),
+ m_image(buffer->getImage()),
+ m_bytesPerPixel(buffer->getPF().bpp / 8),
m_offsetLeft(offsetLeft),
m_offsetTop(offsetTop),
- m_width(image->xim->width),
- m_height(image->xim->height),
- m_widthTiles((image->xim->width + 31) / 32),
- m_heightTiles((image->xim->height + 31) / 32),
- m_numTiles(((image->xim->width + 31) / 32) *
- ((image->xim->height + 31) / 32)),
+ m_width(buffer->width()),
+ m_height(buffer->height()),
+ m_widthTiles((buffer->width() + 31) / 32),
+ m_heightTiles((buffer->height() + 31) / 32),
+ m_numTiles(((buffer->width() + 31) / 32) *
+ ((buffer->height() + 31) / 32)),
m_pollingStep(0)
{
// Get initial screen image.
diff --git a/unix/x0vncserver/PollingManager.h b/unix/x0vncserver/PollingManager.h
index cedac1a..015b3ca 100644
--- a/unix/x0vncserver/PollingManager.h
+++ b/unix/x0vncserver/PollingManager.h
@@ -27,6 +27,7 @@
#include <rfb/VNCServer.h>
#include <x0vncserver/Image.h>
+#include <x0vncserver/XPixelBuffer.h>
#ifdef DEBUG
#include <x0vncserver/TimeMillis.h>
@@ -38,7 +39,7 @@
public:
- PollingManager(Display *dpy, Image *image, ImageFactory *factory,
+ PollingManager(Display *dpy, XPixelBuffer *buffer, ImageFactory *factory,
int offsetLeft = 0, int offsetTop = 0);
virtual ~PollingManager();
diff --git a/unix/x0vncserver/XPixelBuffer.cxx b/unix/x0vncserver/XPixelBuffer.cxx
index 2947007..78ac558 100644
--- a/unix/x0vncserver/XPixelBuffer.cxx
+++ b/unix/x0vncserver/XPixelBuffer.cxx
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Constantin Kaplinsky. All Rights Reserved.
+/* Copyright (C) 2007-2008 Constantin Kaplinsky. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/unix/x0vncserver/XPixelBuffer.h b/unix/x0vncserver/XPixelBuffer.h
index 010763b..2f84245 100644
--- a/unix/x0vncserver/XPixelBuffer.h
+++ b/unix/x0vncserver/XPixelBuffer.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Constantin Kaplinsky. All Rights Reserved.
+/* Copyright (C) 2007-2008 Constantin Kaplinsky. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -40,6 +40,12 @@
const PixelFormat& pf, ColourMap* cm);
virtual ~XPixelBuffer();
+ // We allow public access to the underlying Image object.
+ // The image is heavily used by the PollingManager.
+ // TODO: Allow read-only (const Image *) access only.
+ // Or better do not allow public access at all.
+ virtual Image *getImage() const { return m_image; }
+
virtual int getStride() const { return m_stride; }
// Override PixelBuffer's function.
diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx
index ab93984..8489290 100644
--- a/unix/x0vncserver/x0vncserver.cxx
+++ b/unix/x0vncserver/x0vncserver.cxx
@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- * Copyright (C) 2004-2006 Constantin Kaplinsky. All Rights Reserved.
+ * Copyright (C) 2004-2008 Constantin Kaplinsky. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -180,13 +180,6 @@
image = factory.newImage(dpy, geometry->width(), geometry->height());
vlog.info("Allocated %s", image->classDesc());
- // Create polling manager object. It will track screen changes and
- // keep pixels of the `image' object up to date.
- pollmgr = new PollingManager(dpy, image, &factory,
- geometry->offsetLeft(),
- geometry->offsetTop());
- pollmgr->setVNCServer(vs);
-
pf.bpp = image->xim->bits_per_pixel;
pf.depth = image->xim->depth;
pf.bigEndian = (image->xim->byte_order == MSBFirst);
@@ -205,6 +198,12 @@
server = vs;
server->setPixelBuffer(pb);
+ // Create polling manager object for detection of pixel changes.
+ pollmgr = new PollingManager(dpy, pb, &factory,
+ geometry->offsetLeft(),
+ geometry->offsetTop());
+ pollmgr->setVNCServer(vs);
+
running = true;
}
@@ -286,7 +285,7 @@
Display* dpy;
Geometry* geometry;
PixelFormat pf;
- PixelBuffer* pb;
+ XPixelBuffer* pb;
VNCServer* server;
Image* image;
PollingManager* pollmgr;