]> source.dussan.org Git - tigervnc.git/commitdiff
Code refactoring - PollingManager's constructor is given an XPixelBuffer*
authorConstantin Kaplinsky <const@tightvnc.com>
Fri, 30 May 2008 11:02:04 +0000 (11:02 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Fri, 30 May 2008 11:02:04 +0000 (11:02 +0000)
instead of an Image*.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2567 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 bcc9547c02987051184d58726bc3bec13fda7e63..71b5d660c8578e44c30f29b68308dc3fa930339d 100644 (file)
@@ -43,27 +43,25 @@ const int PollingManager::m_pollingOrder[32] = {
 //
 // 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.
index cedac1a3c128c4e794dbfe72f0f79f6d83236108..015b3ca63583a31325e90b125039787f76b8b9f7 100644 (file)
@@ -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 @@ class PollingManager {
 
 public:
 
-  PollingManager(Display *dpy, Image *image, ImageFactory *factory,
+  PollingManager(Display *dpy, XPixelBuffer *buffer, ImageFactory *factory,
                  int offsetLeft = 0, int offsetTop = 0);
   virtual ~PollingManager();
 
index 294700730d899157cd089501b5c463422082db68..78ac558886292c55494ede2fa628a984f937b176 100644 (file)
@@ -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
index 010763bb7352de01fc456fbbed1b6e5afdf5c183..2f84245e7ed9ce90197cb67d79cfc0528e4cc3c0 100644 (file)
@@ -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 @@ public:
                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.
index ab93984628982c2f870672ff962bd02931e25d1d..8489290a1f6c105163c5a1e09b9ee5e56eb5bb05 100644 (file)
@@ -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 @@ public:
     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 @@ public:
     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 @@ protected:
   Display* dpy;
   Geometry* geometry;
   PixelFormat pf;
-  PixelBuffer* pb;
+  XPixelBuffer* pb;
   VNCServer* server;
   Image* image;
   PollingManager* pollmgr;