Browse Source

Refactoring: now PollingManager is owned by XPixelBuffer. No other classes

know about PollingManager.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2576 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v0.0.90
Constantin Kaplinsky 16 years ago
parent
commit
303433aae8

+ 3
- 3
unix/x0vncserver/PollingManager.cxx View File

@@ -48,7 +48,7 @@ const int PollingManager::m_pollingOrder[32] = {
//

PollingManager::PollingManager(Display *dpy, const Image *image,
ImageFactory *factory,
ImageFactory &factory,
int offsetLeft, int offsetTop)
: m_dpy(dpy),
m_image(image),
@@ -66,8 +66,8 @@ PollingManager::PollingManager(Display *dpy, const Image *image,
// Create additional images used in polling algorithm, warn if
// underlying class names are different from the class name of the
// primary image.
m_rowImage = factory->newImage(m_dpy, m_width, 1);
m_columnImage = factory->newImage(m_dpy, 1, m_height);
m_rowImage = factory.newImage(m_dpy, m_width, 1);
m_columnImage = factory.newImage(m_dpy, 1, m_height);
const char *primaryImgClass = m_image->className();
const char *rowImgClass = m_rowImage->className();
const char *columnImgClass = m_columnImage->className();

+ 1
- 10
unix/x0vncserver/PollingManager.h View File

@@ -38,19 +38,10 @@ class PollingManager {

public:

PollingManager(Display *dpy, const Image *image, ImageFactory *factory,
PollingManager(Display *dpy, const Image *image, ImageFactory &factory,
int offsetLeft = 0, int offsetTop = 0);
virtual ~PollingManager();

// Currently, these functions do nothing. In past versions, we used
// to poll area around the pointer if its position has been changed
// recently. But that rather decreased overal polling performance,
// so we don't do that any more. However, pointer position may be a
// useful hint and might be used in future code, so we do not remove
// these functions, just in case.
void setPointerPos(const Point &pos) {}
void unsetPointerPos() {}

void poll(VNCServer *server);

protected:

+ 6
- 0
unix/x0vncserver/XPixelBuffer.cxx View File

@@ -30,6 +30,7 @@ using namespace rfb;
XPixelBuffer::XPixelBuffer(Display *dpy, ImageFactory &factory,
const Rect &rect, ColourMap* cm)
: FullFramePixelBuffer(),
m_poller(0),
m_dpy(dpy),
m_image(factory.newImage(dpy, rect.width(), rect.height())),
m_offsetLeft(rect.tl.x),
@@ -60,10 +61,15 @@ XPixelBuffer::XPixelBuffer(Display *dpy, ImageFactory &factory,

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

// PollingManager will detect changed pixels.
m_poller = new PollingManager(dpy, getImage(), factory,
m_offsetLeft, m_offsetTop);
}

XPixelBuffer::~XPixelBuffer()
{
delete m_poller;
delete m_image;
}


+ 8
- 1
unix/x0vncserver/XPixelBuffer.h View File

@@ -24,7 +24,9 @@
#define __XPIXELBUFFER_H__

#include <rfb/PixelBuffer.h>
#include <rfb/VNCServer.h>
#include <x0vncserver/Image.h>
#include <x0vncserver/PollingManager.h>

using namespace rfb;

@@ -40,7 +42,10 @@ public:
virtual ~XPixelBuffer();

// Provide access to the underlying Image object.
virtual const Image *getImage() const { return m_image; }
const Image *getImage() const { return m_image; }

// Detect changed pixels, notify the server.
inline void poll(VNCServer *server) { m_poller->poll(server); }

// Override PixelBuffer::getStride().
virtual int getStride() const { return m_stride; }
@@ -49,6 +54,8 @@ public:
virtual void grabRegion(const rfb::Region& region);

protected:
PollingManager *m_poller;

Display *m_dpy;
Image* m_image;
int m_offsetLeft;

+ 3
- 13
unix/x0vncserver/x0vncserver.cxx View File

@@ -47,7 +47,6 @@
#include <x0vncserver/Geometry.h>
#include <x0vncserver/Image.h>
#include <x0vncserver/XPixelBuffer.h>
#include <x0vncserver/PollingManager.h>
#include <x0vncserver/PollingScheduler.h>

// XXX Lynx/OS 2.3: protos for select(), bzero()
@@ -138,7 +137,7 @@ class XDesktop : public SDesktop, public ColourMap
{
public:
XDesktop(Display* dpy_, Geometry *geometry_)
: dpy(dpy_), geometry(geometry_), pb(0), server(0), pollmgr(0),
: dpy(dpy_), geometry(geometry_), pb(0), server(0),
oldButtonMask(0), haveXtest(false), maxButtons(0), running(false)
{
#ifdef HAVE_XTEST
@@ -186,10 +185,6 @@ public:
server = vs;
server->setPixelBuffer(pb);

// Create polling manager object for detection of pixel changes.
pollmgr = new PollingManager(dpy, pb->getImage(), &factory,
geometry->offsetLeft(),
geometry->offsetTop());
running = true;
}

@@ -197,10 +192,7 @@ public:
running = false;

delete pb;
delete pollmgr;

pb = 0;
pollmgr = 0;
}

inline bool isRunning() {
@@ -208,12 +200,11 @@ public:
}

inline void poll() {
if (pollmgr)
pollmgr->poll(server);
if (pb)
pb->poll(server);
}

virtual void pointerEvent(const Point& pos, int buttonMask) {
pollmgr->setPointerPos(pos);
#ifdef HAVE_XTEST
if (!haveXtest) return;
XTestFakeMotionEvent(dpy, DefaultScreen(dpy),
@@ -270,7 +261,6 @@ protected:
Geometry* geometry;
XPixelBuffer* pb;
VNCServer* server;
PollingManager* pollmgr;
int oldButtonMask;
bool haveXtest;
int maxButtons;

Loading…
Cancel
Save