Added support for new `Geometry' option which allows serving an arbitrary
regtangular screen area instead of the whole screen.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@569 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/x0vncserver/PollingManager.h b/x0vncserver/PollingManager.h
index 797f3f6..b8eef50 100644
--- a/x0vncserver/PollingManager.h
+++ b/x0vncserver/PollingManager.h
@@ -38,7 +38,8 @@
public:
- PollingManager(Display *dpy, Image *image, ImageFactory *factory);
+ PollingManager(Display *dpy, Image *image, ImageFactory *factory,
+ int offsetLeft = 0, int offsetTop = 0);
virtual ~PollingManager();
void setVNCServer(VNCServer *s);
@@ -71,6 +72,8 @@
VNCServer *m_server;
Image *m_image;
+ int m_offsetLeft;
+ int m_offsetTop;
int m_width;
int m_height;
int m_widthTiles;
@@ -83,6 +86,38 @@
private:
+ inline void getScreen() {
+ m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop);
+ }
+
+ inline void getRow(int y) {
+ m_rowImage->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop + y);
+ }
+
+ inline void getTile32(int tx, int ty, int w, int h) {
+ if (w == 32 && h == 32) {
+ // This version of get() may be better optimized.
+ m_tileImage->get(DefaultRootWindow(m_dpy),
+ m_offsetLeft + tx * 32, m_offsetTop + ty * 32);
+ } else {
+ // Generic version of get() for arbitrary width and height.
+ m_tileImage->get(DefaultRootWindow(m_dpy),
+ m_offsetLeft + tx * 32, m_offsetTop + ty * 32, w, h);
+ }
+ }
+
+ inline void getArea128(int x, int y, int w, int h) {
+ if (w == 128 && h == 128) {
+ // This version of get() may be better optimized.
+ m_areaImage->get(DefaultRootWindow(m_dpy),
+ m_offsetLeft + x, m_offsetTop + y);
+ } else {
+ // Generic version of get() for arbitrary width and height.
+ m_areaImage->get(DefaultRootWindow(m_dpy),
+ m_offsetLeft + x, m_offsetTop + y, w, h);
+ }
+ }
+
void adjustVideoArea();
// Additional images used in polling algorithms.