//
// 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.
#include <rfb/VNCServer.h>
#include <x0vncserver/Image.h>
+#include <x0vncserver/XPixelBuffer.h>
#ifdef DEBUG
#include <x0vncserver/TimeMillis.h>
public:
- PollingManager(Display *dpy, Image *image, ImageFactory *factory,
+ PollingManager(Display *dpy, XPixelBuffer *buffer, ImageFactory *factory,
int offsetLeft = 0, int offsetTop = 0);
virtual ~PollingManager();
-/* 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
-/* 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
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.
/* 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
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);
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;
}
Display* dpy;
Geometry* geometry;
PixelFormat pf;
- PixelBuffer* pb;
+ XPixelBuffer* pb;
VNCServer* server;
Image* image;
PollingManager* pollmgr;