Scrollbar Fix

Phillip Ezolt ezolt at perf.zko.dec.com
Wed Feb 13 10:50:56 CST 2002


Hi All,

	This fixes fixes the scrollbar when 'info->MaxVal' is close to
MAX_RANGE for scrollbars. (MAX_RANGE=0x7fffffff)

	It converts the intermediate variables to floats instead of
int, which guarantees that multiplication of large values of don't
overflow.  (with a small sacrifice of accuracy)

This fixes one of the problems found in the MSDN scrollbar example (in
1902.exe) at:
http://msdn.microsoft.com/library/en-us/dnwui/html/msdn_scroll32.asp?frame=true

Formerly, the multiplication would cause the truncations of thumbpos, and the
thumb would remain fixed at zero.  (No matter what the position was set to.)

The fixed behavior is how Windows NT behaves.

(There are still some scrollbar behavior differences, but this patch gets it
closer.)

Cheers,
--Phil

Compaq:   High Performance Server Systems Quality & Performance Engineering
---------------------------------------------------------------------------
Phillip.Ezolt at compaq.com                         Performance Tools/Analysis

-------------- next part --------------
--- controls/scroll.c.orig	Wed Feb 13 11:24:41 2002
+++ controls/scroll.c	Wed Feb 13 11:25:08 2002
@@ -195,7 +195,7 @@
                                        INT *arrowSize, INT *thumbSize,
                                        INT *thumbPos )
 {
-    INT pixels;
+    FLOAT pixels;
     BOOL vertical;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
 
@@ -293,7 +293,7 @@
                                   BOOL vertical, INT pos )
 {
     INT thumbSize;
-    INT pixels = vertical ? rect->bottom-rect->top : rect->right-rect->left;
+    FLOAT pixels = vertical ? rect->bottom-rect->top : rect->right-rect->left;
 
     if ((pixels -= 2*(GetSystemMetrics(SM_CXVSCROLL) - SCROLL_ARROW_THUMB_OVERLAP)) <= 0)
         return infoPtr->MinVal;


More information about the wine-patches mailing list