Implemented speed changing by spin control.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@128 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx
index bcdd631..3fab791 100644
--- a/rfbplayer/rfbplayer.cxx
+++ b/rfbplayer/rfbplayer.cxx
@@ -342,6 +342,30 @@
         InvalidateRect(getFrameHandle(), 0, TRUE);
     } 
     break;
+  
+  case WM_NOTIFY:
+    switch (((NMHDR*)lParam)->code) {
+    case UDN_DELTAPOS:
+      if ((int)wParam == ID_SPEED_UPDOWN) {
+        char speedStr[20] = "\0";
+        DWORD speedRange = SendMessage(speedUpDown, UDM_GETRANGE, 0, 0);
+        LPNM_UPDOWN upDown = (LPNM_UPDOWN)lParam;
+        double speed;
+
+        // the out of range checking
+        if (upDown->iDelta > 0) {
+          speed = min(upDown->iPos + upDown->iDelta, LOWORD(speedRange)) * 0.5;
+        } else {
+          speed = max(upDown->iPos + upDown->iDelta, HIWORD(speedRange)) * 0.5;
+        }
+        _gcvt(speed, 5, speedStr);
+        sprintf(speedStr, "%.2f", speed);
+        SetWindowText(speedEdit, speedStr);
+        setSpeed(speed);
+      }
+      return 0;
+    };
+    return 0;
 
   case WM_CLOSE:
     vlog.debug("WM_CLOSE %x", getMainHandle());
@@ -561,7 +585,7 @@
 
   speedUpDown = CreateUpDownControl(WS_CHILD | WS_VISIBLE  
     | WS_BORDER | UDS_ALIGNRIGHT, 0, 0, 0, 0, tb.getHandle(),
-    ID_SPEED_UPDOWN, GetModuleHandle(0), speedEdit, 100, 1, 10);
+    ID_SPEED_UPDOWN, GetModuleHandle(0), speedEdit, 20, 1, 2);
 }
 
 void RfbPlayer::setVisible(bool visible) {