]> source.dussan.org Git - tigervnc.git/commitdiff
[Bugfix] Geometry::getVideoRect() should return coordinates relative to the
authorConstantin Kaplinsky <const@tightvnc.com>
Tue, 2 Sep 2008 10:33:23 +0000 (10:33 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Tue, 2 Sep 2008 10:33:23 +0000 (10:33 +0000)
framebuffer shown to RFB clients. Previously, it returned absolute screen
coordinates so that the origin of video area could be displaced.

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

unix/x0vncserver/Geometry.cxx
unix/x0vncserver/Geometry.h

index 728c1136df47fdc455bc56ebd9a956a27b89d032..94e2df68f79b3e4f6c0e8eed1d147ea5eb166c89 100644 (file)
@@ -60,16 +60,20 @@ Geometry::Geometry(int fullWidth, int fullHeight)
             width(), height(), offsetLeft(), offsetTop());
 
   // Handle the VideoArea parameter, save the result in m_videoRect.
+  // Note that we log absolute coordinates but save relative ones.
   param = m_videoAreaParam.getData();
   bool videoAreaSpecified = (strlen(param) > 0);
   if (videoAreaSpecified) {
-    m_videoRect = parseString(param);
-    if (isVideoAreaSet()) {
+    Rect absVideoRect = parseString(param);
+    if (!absVideoRect.is_empty()) {
       vlog.info("Video area set to %dx%d+%d+%d",
-                m_videoRect.width(), m_videoRect.height(),
-                m_videoRect.tl.x, m_videoRect.tl.y);
+                absVideoRect.width(), absVideoRect.height(),
+                absVideoRect.tl.x, absVideoRect.tl.y);
+      Point base(-offsetLeft(), -offsetTop());
+      m_videoRect = absVideoRect.translate(base);
     } else {
       vlog.info("Video area was not set");
+      m_videoRect.clear();
     }
   }
   delete[] param;
index 82da9c6ef3b613f5229e1a6fb266e62b66f7971a..69ab687d09b5381b69b0de82e2fcc0d6a6630df6 100644 (file)
@@ -33,13 +33,23 @@ class Geometry
 public:
   Geometry(int fullWidth, int fullHeight);
 
+  // Return coordinates and dimensions that specify a rectangular part
+  // of the desktop that would be shown to RFB clients. This
+  // information is extracted in the constructor from the "Geometry"
+  // parameter.
   int width() const { return m_rect.width(); }
   int height() const { return m_rect.height(); }
   int offsetLeft() const { return m_rect.tl.x; }
   int offsetTop() const { return m_rect.tl.y; }
+
+  // Return the same information as a Rect structure.
   const Rect& getRect() const { return m_rect; }
 
-  bool isVideoAreaSet() const { return !m_videoRect.is_empty(); }
+  // Return coordinates of the video rectangle if one was set with the
+  // "VideoArea" parameter. The coordinates are relative to the whole
+  // rectangle as returned by getRect(). In other words, the
+  // coordinate (0, 0) corresponds to the top left corner of the
+  // rectangle shown to RFB clients.
   const Rect& getVideoRect() const { return m_videoRect; }
 
 protected: