~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/comctl32/smoothscroll.c

Version: ~ [ wine-1.1.40 ] ~ [ wine-1.1.39 ] ~ [ wine-1.1.38 ] ~ [ wine-1.1.37 ] ~ [ wine-1.1.36 ] ~ [ wine-1.1.35 ] ~ [ wine-1.1.34 ] ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * Undocumented SmoothScrollWindow function from COMCTL32.DLL
  3  *
  4  * Copyright 2000 Marcus Meissner <marcus@jet.franken.de>
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  *
 20  * TODO
 21  *     - actually add smooth scrolling
 22  */
 23 
 24 #include <stdarg.h>
 25 
 26 #include "windef.h"
 27 #include "winbase.h"
 28 #include "winreg.h"
 29 #include "winerror.h"
 30 #include "winuser.h"
 31 #include "wine/debug.h"
 32 
 33 WINE_DEFAULT_DEBUG_CHANNEL(commctrl);
 34 
 35 static DWORD    smoothscroll = 2;
 36 
 37 typedef BOOL (CALLBACK *SCROLLWINDOWEXPROC)(HWND,INT,INT,LPRECT,LPRECT,HRGN,LPRECT,DWORD);
 38 typedef struct tagSMOOTHSCROLLSTRUCT {
 39         DWORD                   dwSize;
 40         DWORD                   x2;
 41         HWND                    hwnd;
 42         DWORD                   dx;
 43 
 44         DWORD                   dy;
 45         LPRECT                  lpscrollrect;
 46         LPRECT                  lpcliprect;
 47         HRGN                    hrgnupdate;
 48 
 49         LPRECT                  lpupdaterect;
 50         DWORD                   flags;
 51         DWORD                   stepinterval;
 52         DWORD                   dx_step;
 53 
 54         DWORD                   dy_step;
 55         SCROLLWINDOWEXPROC      scrollfun;      /* same parameters as ScrollWindowEx */
 56 } SMOOTHSCROLLSTRUCT;
 57 
 58 /**************************************************************************
 59  * SmoothScrollWindow [COMCTL32.382]
 60  *
 61  * Lots of magic for smooth scrolling windows.
 62  *
 63  * RETURNS
 64  *     Success: TRUE
 65  *     Failure: FALSE
 66  *
 67  * BUGS
 68  *     Currently only scrolls ONCE. The comctl32 implementation uses GetTickCount
 69  *     and what else to do smooth scrolling.
 70  */
 71 BOOL WINAPI SmoothScrollWindow( const SMOOTHSCROLLSTRUCT *smooth ) {
 72    LPRECT       lpupdaterect = smooth->lpupdaterect;
 73    HRGN         hrgnupdate = smooth->hrgnupdate;
 74    RECT         tmprect;
 75    DWORD        flags = smooth->flags;
 76 
 77    if (smooth->dwSize!=sizeof(SMOOTHSCROLLSTRUCT))
 78        return FALSE;
 79 
 80    if (!lpupdaterect)
 81        lpupdaterect = &tmprect;
 82    SetRectEmpty(lpupdaterect);
 83 
 84    if (!(flags & 0x40000)) { /* no override, use system wide defaults */
 85        if (smoothscroll == 2) {
 86            HKEY hkey;
 87 
 88            smoothscroll = 0;
 89            if (!RegOpenKeyA(HKEY_CURRENT_USER,"Control Panel\\Desktop",&hkey)) {
 90                DWORD    len = 4;
 91 
 92                RegQueryValueExA(hkey,"SmoothScroll",0,0,(LPBYTE)&smoothscroll,&len);
 93                RegCloseKey(hkey);
 94            }
 95        }
 96        if (!smoothscroll)
 97            flags |= 0x20000;
 98    }
 99 
100    if (flags & 0x20000) { /* are we doing jump scrolling? */
101        if ((smooth->x2 & 1) && smooth->scrollfun)
102            return smooth->scrollfun(
103                smooth->hwnd,smooth->dx,smooth->dy,smooth->lpscrollrect,
104                smooth->lpcliprect,hrgnupdate,lpupdaterect,
105                flags & 0xffff
106            );
107        else
108            return ScrollWindowEx(
109                smooth->hwnd,smooth->dx,smooth->dy,smooth->lpscrollrect,
110                smooth->lpcliprect,hrgnupdate,lpupdaterect,
111                flags & 0xffff
112            );
113    }
114 
115    FIXME("(hwnd=%p,flags=%x,x2=%x): should smooth scroll here.\n",
116            smooth->hwnd,flags,smooth->x2
117    );
118    /* FIXME: do timer based smooth scrolling */
119    if ((smooth->x2 & 1) && smooth->scrollfun)
120        return smooth->scrollfun(
121            smooth->hwnd,smooth->dx,smooth->dy,smooth->lpscrollrect,
122            smooth->lpcliprect,hrgnupdate,lpupdaterect,
123            flags & 0xffff
124        );
125    else
126        return ScrollWindowEx(
127            smooth->hwnd,smooth->dx,smooth->dy,smooth->lpscrollrect,
128            smooth->lpcliprect,hrgnupdate,lpupdaterect,
129            flags & 0xffff
130        );
131 }
132 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.