aboutsummaryrefslogtreecommitdiffstats
path: root/vncviewer/Viewport.cxx
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2011-06-01 09:31:53 +0000
committerPierre Ossman <ossman@cendio.se>2011-06-01 09:31:53 +0000
commite00f0aa62b8631456dce54a82211cd779f99ae68 (patch)
tree6293e21e79f165b77294ac79544503880c26b177 /vncviewer/Viewport.cxx
parentb043ad143dbf333dd6d23da1736744f94f79e302 (diff)
downloadtigervnc-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.cxx42
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;