Merged the changes from revision range 582:588 into reorganized sources. These changes accidentally were not included in files copied during directory structure reorganization.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@594 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/win/rfb_win32/ScaledDIBSectionBuffer.cxx b/win/rfb_win32/ScaledDIBSectionBuffer.cxx
index e6c15b8..bd6b4d3 100644
--- a/win/rfb_win32/ScaledDIBSectionBuffer.cxx
+++ b/win/rfb_win32/ScaledDIBSectionBuffer.cxx
@@ -40,23 +40,28 @@
 void ScaledDIBSectionBuffer::setScale(int scale_) {
   if (scale_ == getScale()) return;
 
-  if (src_buffer) {
-    delete src_buffer;
-    src_buffer = 0;
-  }
   if (scale_ != 100) {
     scaling = true;
-    src_buffer = new ManagedPixelBuffer(format, src_width, src_height);
-    src_data = &(src_buffer->data);
+    if (!src_buffer) {
+      src_buffer = new ManagedPixelBuffer(format, src_width, src_height);
+      src_data = &(src_buffer->data);
+    }
   } else {
     scaling = false;
+    if (src_buffer) delete src_buffer;
+    src_buffer = 0;
+    src_data = 0;
   }
   ScaledPixelBuffer::setScale(scale_);
+  recreateScaledBuffer();
 }
 
-void ScaledDIBSectionBuffer::setPF(const PixelFormat &pf) {
-  if (scaling) src_buffer->setPF(pf);
-  DIBSectionBuffer::setPF(pf);
+void ScaledDIBSectionBuffer::setPF(const PixelFormat &pf_) {
+  if (scaling) {
+    ScaledPixelBuffer::setPF(pf_);
+    src_buffer->setPF(pf_);
+  }
+  DIBSectionBuffer::setPF(pf_);
   scaled_data = data;
 }