diff options
author | Pierre Ossman <ossman@cendio.se> | 2011-06-01 09:31:53 +0000 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2011-06-01 09:31:53 +0000 |
commit | e00f0aa62b8631456dce54a82211cd779f99ae68 (patch) | |
tree | 6293e21e79f165b77294ac79544503880c26b177 /vncviewer/Viewport.cxx | |
parent | b043ad143dbf333dd6d23da1736744f94f79e302 (diff) | |
download | tigervnc-e00f0aa62b8631456dce54a82211cd779f99ae68.tar.gz tigervnc-e00f0aa62b8631456dce54a82211cd779f99ae68.zip |
Allow resize of the viewport widget.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4459 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'vncviewer/Viewport.cxx')
-rw-r--r-- | vncviewer/Viewport.cxx | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx index 3dd53e2f..e574903c 100644 --- a/vncviewer/Viewport.cxx +++ b/vncviewer/Viewport.cxx @@ -196,6 +196,48 @@ void Viewport::draw() } +void Viewport::resize(int x, int y, int w, int h) +{ + rfb::ManagedPixelBuffer* newBuffer; + rfb::Rect rect; + + // FIXME: Resize should probably be a feature of ManagedPixelBuffer + + if ((w == frameBuffer->width()) && (h == frameBuffer->height())) + goto end; + + newBuffer = new ManagedPixelBuffer(frameBuffer->getPF(), w, h); + assert(newBuffer); + + rect.setXYWH(0, 0, + __rfbmin(newBuffer->width(), frameBuffer->width()), + __rfbmin(newBuffer->height(), frameBuffer->height())); + newBuffer->imageRect(rect, frameBuffer->data, frameBuffer->getStride()); + + // Black out any new areas + + if (newBuffer->width() > frameBuffer->width()) { + rect.setXYWH(frameBuffer->width(), 0, + newBuffer->width() - frameBuffer->width(), + newBuffer->height()); + newBuffer->fillRect(rect, 0); + } + + if (newBuffer->height() > frameBuffer->height()) { + rect.setXYWH(0, frameBuffer->height(), + newBuffer->width(), + newBuffer->height() - frameBuffer->height()); + newBuffer->fillRect(rect, 0); + } + + delete frameBuffer; + frameBuffer = newBuffer; + +end: + Fl_Widget::resize(x, y, w, h); +} + + int Viewport::handle(int event) { char *buffer; |