]> source.dussan.org Git - tigervnc.git/commitdiff
Refactoring: now PollingManager is owned by XPixelBuffer. No other classes
authorConstantin Kaplinsky <const@tightvnc.com>
Wed, 4 Jun 2008 05:57:06 +0000 (05:57 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Wed, 4 Jun 2008 05:57:06 +0000 (05:57 +0000)
know about PollingManager.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2576 3789f03b-4d11-0410-bbf8-ca57d06f2519

unix/x0vncserver/PollingManager.cxx
unix/x0vncserver/PollingManager.h
unix/x0vncserver/XPixelBuffer.cxx
unix/x0vncserver/XPixelBuffer.h
unix/x0vncserver/x0vncserver.cxx

index 9951883347ca16ea705bb51c88173ab44cc045e6..81624a9ce3540f5a6e5adf56f269ec86442f74a4 100644 (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();
index 779e88b853eae9cae84ce648a85cca613f98e214..2ed9ff5e7c1b01243f5a0c9b30a950bc3ab2d0b7 100644 (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:
index ed22508dfcda300b4593d64405d9891d4c737952..f691c5769cf57a52a5708679e91c5b5ab7fb24ac 100644 (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;
 }
 
index 3632f804c318381f53651d14c2447c06efd8303e..29ae94a82e80e37630b29a1c6a72dd779cbc4343 100644 (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;
index b63e9379337e8b449b233674d0c4c61c181eafbd..2fe599e8f21662445891c362940bac8c9c1d23b4 100644 (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;