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;
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: