Changeset 268


Ignore:
Timestamp:
Apr 12, 2009, 10:08:49 AM (13 years ago)
Author:
Eugene Romanenko
Message:

RMB vertical drag, intermediate commit, works incorrectly on some files

Location:
trunk/Lucide/SOURCE/gui
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/Lucide.rc

    r267 r268  
    2222POINTER IDP_ZOOM_IN     "bitmaps\\zoom_in.ptr"
    2323POINTER IDP_ZOOM_OUT    "bitmaps\\zoom_out.ptr"
     24POINTER IDP_HAND_CLOSED "bitmaps\\hand_closed.ptr"
     25
    2426
    2527MENU IDM_MAINMENU
  • trunk/Lucide/SOURCE/gui/Lucide_res.H

    r267 r268  
    4242#define IDP_ZOOM_IN             11
    4343#define IDP_ZOOM_OUT    12
     44#define IDP_HAND_CLOSED 13
    4445
    4546#define IDB_OPEN        20
  • trunk/Lucide/SOURCE/gui/docViewer.cpp

    r266 r268  
    6464#define VERT_SPACE      2
    6565#define NO_MOUSE_TIMER  1
     66#define SB_PAGEDRAG     100
    6667
    6768// DocumentViewer constructor
     
    106107    WinSetRectEmpty( hab, &savedRcl );
    107108    drawPS = false;
     109    // mouse drag using right button
     110    docDraggingStarted = false;
     111    docDraggingStart.x = 0;  docDraggingStart.y = 0;
     112    docDraggingEnd.x = 0;  docDraggingEnd.y = 0;
    108113    // fullscreen
    109114    fullscreen     = false;
     
    128133    links = NULL;
    129134    handPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_HAND );
     135    handClosedPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_HAND_CLOSED );
    130136    zoomInPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_ZOOM_IN );
    131137    zoomOutPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_ZOOM_OUT );
     
    170176
    171177    WinDestroyPointer( handPtr );
     178    WinDestroyPointer( handClosedPtr );
    172179    WinDestroyPointer( zoomInPtr );
    173180    WinDestroyPointer( zoomOutPtr );
     
    350357        bool needRedraw = ( page == currentpage );
    351358        double pgpos = pagenumToPos( page ) / VScrollStep;
    352         vertScroll( hWndDoc, MPFROM2SHORT( pgpos, SB_SLIDERPOSITION ), NULLHANDLE );
     359        vertScroll( hWndDoc, MPFROM2SHORT( pgpos, SB_SLIDERPOSITION ) );
    353360        if ( needRedraw ) {
    354361            drawPage();
     
    554561                RECTL r;
    555562                _this->docPosToWinPos( i, &(_this->foundrects[i]->_buffer[0]), &r );
    556                 _this->scrollToPos( _this->hWndDoc, NULLHANDLE, r.xLeft, r.yBottom, false );
     563                _this->scrollToPos( _this->hWndDoc, r.xLeft, r.yBottom, false );
    557564            }
    558565            break;
     
    633640
    634641// handles vertical scrolling
    635 MRESULT DocumentViewer::vertScroll( HWND hwnd, MPARAM mp2, HRGN hrgn )
     642MRESULT DocumentViewer::vertScroll( HWND hwnd, MPARAM mp2 )
    636643{
    637644    if ( fullscreen ) {
     
    659666            sVscrollInc = ( SHORT1FROMMP( mp2 ) - sVscrollPos ) * VScrollStep;
    660667            break;
    661     }
    662 
    663     sVscrollInc = __max( -sVscrollPos * VScrollStep, __min( sVscrollInc,
     668        case SB_PAGEDRAG:
     669            sVscrollInc = (SHORT)SHORT1FROMMP( mp2 );
     670            break;
     671    }
     672
     673    if ( SHORT2FROMMP( mp2 ) != SB_PAGEDRAG ) {
     674        sVscrollInc = __max( -sVscrollPos * VScrollStep, __min( sVscrollInc,
    664675                              ( sVscrollMax - sVscrollPos ) * VScrollStep ) );
    665     sVscrollInc = ( sVscrollInc / VScrollStep ) * VScrollStep;
     676        sVscrollInc = ( sVscrollInc / VScrollStep ) * VScrollStep;
     677    }
     678
    666679    if ( sVscrollInc != 0 )
    667680    {
    668681        sVscrollPos += (SHORT)( sVscrollInc / VScrollStep );
    669         WinScrollWindow( hwnd, 0, sVscrollInc, NULL, NULL, hrgn, NULL, SW_INVALIDATERGN );
     682        WinScrollWindow( hwnd, 0, sVscrollInc, NULL, NULL, NULLHANDLE, NULL, SW_INVALIDATERGN );
    670683        WinSendMsg( hWndVscroll, SBM_SETPOS, MPFROMSHORT( sVscrollPos ), MPVOID );
    671684        WinUpdateWindow( hwnd );
     
    676689
    677690// handles horizontal scrolling
    678 MRESULT DocumentViewer::horizScroll( HWND hwnd, MPARAM mp2, HRGN hrgn )
     691MRESULT DocumentViewer::horizScroll( HWND hwnd, MPARAM mp2 )
    679692{
    680693    if ( fullscreen ) {
     
    709722    {
    710723        sHscrollPos += (SHORT)sHscrollInc;
    711         WinScrollWindow( hwnd, -sHscrollInc, 0, NULL, NULL, hrgn, NULL, SW_INVALIDATERGN );
     724        WinScrollWindow( hwnd, -sHscrollInc, 0, NULL, NULL, NULLHANDLE, NULL, SW_INVALIDATERGN );
    712725        WinSendMsg( hWndHscroll, SBM_SETPOS, MPFROMSHORT( sHscrollPos ), MPVOID );
    713726        WinUpdateWindow( hwnd );
     
    796809
    797810        SHORT realScrollPos = (SHORT)(sVscrollMax * relativeScrollPos);
    798         vertScroll( hWndDoc, MPFROM2SHORT( realScrollPos, SB_SLIDERPOSITION ), NULLHANDLE );
     811        vertScroll( hWndDoc, MPFROM2SHORT( realScrollPos, SB_SLIDERPOSITION ) );
    799812    }
    800813}
     
    15521565
    15531566// scrolls window to specified pos (optionally with text selection)
    1554 void DocumentViewer::scrollToPos( HWND hwnd, HRGN hrgn, LONG xpos, LONG ypos,
     1567void DocumentViewer::scrollToPos( HWND hwnd, LONG xpos, LONG ypos,
    15551568                                  bool withSelection )
    15561569{
     
    15711584
    15721585    if ( xinc != 0 ) {
    1573         horizScroll( hwnd, MPFROM2SHORT( sHscrollPos + xinc, SB_SLIDERPOSITION ), hrgn );
     1586        horizScroll( hwnd, MPFROM2SHORT( sHscrollPos + xinc, SB_SLIDERPOSITION ) );
    15741587        if ( withSelection ) {
    15751588            selectionStart.x -= xinc;
     
    15861599
    15871600        vertScroll( hwnd, MPFROM2SHORT( ( ( sVscrollPos * VScrollStep ) + yinc ) / VScrollStep,
    1588                                         SB_SLIDERPOSITION ), hrgn );
     1601                                        SB_SLIDERPOSITION ) );
    15891602        if ( withSelection ) {
    15901603            selectionStart.y += yinc;
     
    16281641            if ( isContinuous() )
    16291642            {
    1630                 scrollToPos( hwnd, NULLHANDLE, xpos, ypos, true );
     1643                scrollToPos( hwnd, xpos, ypos, true );
    16311644
    16321645                RECTL selRect = {
     
    16671680
    16681681                HPS hps = WinGetPS( hwnd );
    1669                 HRGN scrolledRegion = NULLHANDLE; //GpiCreateRegion( hps, 0, NULL );
    1670 
    1671                 scrollToPos( hwnd, scrolledRegion, xpos, ypos, true );
     1682
     1683                scrollToPos( hwnd, xpos, ypos, true );
    16721684
    16731685                // 127/191/255
     
    16931705                HRGN selectRegion = rectsToRegion( currentpage, hps, selrects[ currentpage ] );
    16941706                GpiCombineRegion( hps, selectRegion, selectRegion, clearRegion, CRGN_XOR );
    1695                 //GpiCombineRegion( hps, selectRegion, selectRegion, scrolledRegion, CRGN_DIFF );
    16961707                GpiPaintRegion( hps, selectRegion );
    16971708                GpiDestroyRegion( hps, clearRegion );
    16981709                GpiDestroyRegion( hps, selectRegion );
    1699                 //GpiDestroyRegion( hps, scrolledRegion );
    17001710
    17011711                WinReleasePS( hps );
    17021712            }
     1713        }
     1714        else if ( docDraggingStarted && ( doc != NULL ) )
     1715        {
     1716            WinSetPointer( HWND_DESKTOP, handClosedPtr );
     1717            docDraggingEnd.x = xpos;
     1718            docDraggingEnd.y = ypos;
     1719
     1720            SHORT vMove = docDraggingEnd.y - docDraggingStart.y;
     1721            if ( abs( vMove ) > 5 )
     1722            {           
     1723                vertScroll( hwnd, MPFROM2SHORT( vMove, SB_PAGEDRAG ) );
     1724                docDraggingStart.x = xpos;
     1725                docDraggingStart.y = ypos;
     1726            }
     1727            return TRUE;
    17031728        }
    17041729        else if ( links != NULL )
     
    18191844}
    18201845
    1821 
    18221846BOOL DocumentViewer::wmChar( HWND hwnd, MPARAM mp1, MPARAM mp2 )
    18231847{
     
    18441868                        goToPage( 0 );
    18451869                    } else {
    1846                         vertScroll( hwnd, MPFROM2SHORT( 0, SB_SLIDERPOSITION ), NULLHANDLE );
     1870                        vertScroll( hwnd, MPFROM2SHORT( 0, SB_SLIDERPOSITION ) );
    18471871                    }
    18481872                }
     
    18551879                        goToPage( currentpage - 1 );
    18561880                        if ( dojump ) {
    1857                             vertScroll( hwnd, MPFROM2SHORT( sVscrollMax, SB_SLIDERPOSITION ), NULLHANDLE );
     1881                            vertScroll( hwnd, MPFROM2SHORT( sVscrollMax, SB_SLIDERPOSITION ) );
    18581882                        }
    18591883                    } else {
     
    18691893                        goToPage( totalpages - 1 );
    18701894                    } else {
    1871                         vertScroll( hwnd, MPFROM2SHORT( sVscrollMax, SB_SLIDERPOSITION ), NULLHANDLE );
     1895                        vertScroll( hwnd, MPFROM2SHORT( sVscrollMax, SB_SLIDERPOSITION ) );
    18721896                    }
    18731897                }
     
    18931917
    18941918            case VK_HOME:
    1895                 horizScroll( hwnd, MPFROM2SHORT( 0, SB_SLIDERPOSITION ), NULLHANDLE );
     1919                horizScroll( hwnd, MPFROM2SHORT( 0, SB_SLIDERPOSITION ) );
    18961920                return TRUE;
    18971921
    18981922            case VK_END:
    1899                 horizScroll( hwnd, MPFROM2SHORT( sHscrollMax, SB_SLIDERPOSITION ), NULLHANDLE );
     1923                horizScroll( hwnd, MPFROM2SHORT( sHscrollMax, SB_SLIDERPOSITION ) );
    19001924                return TRUE;
    19011925        }
     
    19741998}
    19751999
     2000
    19762001// handles WM_BUTTON1UP
    19772002void DocumentViewer::wmButton1Up()
     
    19892014
    19902015    Lucide::enableCopy( haveSelection );
     2016}
     2017
     2018
     2019// handles WM_BUTTON2DOWN
     2020void DocumentViewer::wmButton2Down( HWND hwnd, SHORT xpos, SHORT ypos )
     2021{
     2022    if ( doc != NULL )
     2023    {
     2024        WinSetCapture( HWND_DESKTOP, hwnd );
     2025        docDraggingStarted = true;
     2026        docDraggingStart.x = xpos;
     2027        docDraggingStart.y = ypos;
     2028    }
     2029}
     2030
     2031
     2032// handles WM_BUTTON2UP
     2033void DocumentViewer::wmButton2Up()
     2034{
     2035    if ( docDraggingStarted )
     2036    {
     2037        WinSetCapture( HWND_DESKTOP, NULLHANDLE );
     2038        docDraggingStarted = false;
     2039    }
    19912040}
    19922041
     
    20952144
    20962145        case WM_HSCROLL:
    2097             _this->horizScroll( hwnd, mp2, NULLHANDLE );
     2146            _this->horizScroll( hwnd, mp2 );
    20982147            break;
    20992148
    21002149        case WM_VSCROLL:
    2101             _this->vertScroll( hwnd, mp2, NULLHANDLE );
     2150            _this->vertScroll( hwnd, mp2 );
    21022151            break;
    21032152
     
    21262175            break;
    21272176
     2177        case WM_BUTTON2DOWN:
     2178            _this->wmButton2Down( hwnd, SHORT1FROMMP( mp1 ), SHORT2FROMMP( mp1 ) );
     2179            break;
     2180           
     2181        case WM_BUTTON2UP:
     2182            _this->wmButton2Up();
     2183            break;
     2184           
    21282185        case WM_MOUSEMOVE:
    21292186            if ( _this->wmMouseMove( hwnd, SHORT1FROMMP( mp1 ), SHORT2FROMMP( mp1 ) ) ) {
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r266 r268  
    9393                void countPagesizes();
    9494
    95         MRESULT vertScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
    96         MRESULT horizScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
     95        MRESULT vertScroll( HWND hwnd, MPARAM mp2 );
     96        MRESULT horizScroll( HWND hwnd, MPARAM mp2 );
    9797        MRESULT wmDragOver( PDRAGINFO dragInfo );
    9898                void wmDrop( PDRAGINFO dragInfo );
     
    104104        void wmButton1Down( HWND hwnd, SHORT xpos, SHORT ypos );
    105105        void wmButton1Up();
     106        void wmButton2Down( HWND hwnd, SHORT xpos, SHORT ypos );
     107        void wmButton2Up();
    106108        BOOL wmMouseMove( HWND hwnd, SHORT xpos, SHORT ypos );
    107109        BOOL wmClick( HWND hwnd, SHORT xpos, SHORT ypos );
     
    114116        HRGN rectsToRegion( long pagenum, HPS hps, LuDocument_LuRectSequence *rects );
    115117        void drawSelection( long pagenum, HPS hps, PRECTL r );
    116         void scrollToPos( HWND hwnd, HRGN hrgn, LONG xpos, LONG ypos, bool withSelection );
     118        void scrollToPos( HWND hwnd, LONG xpos, LONG ypos, bool withSelection );
    117119        void freeRects( LuDocument_LuRectSequence **rects );
    118120        void freeLinks();
     
    165167        bool drawPS;
    166168        PgLayout layout;
     169
     170        // mouse drag using right button
     171        bool docDraggingStarted;
     172        POINTL docDraggingStart;
     173        POINTL docDraggingEnd;
    167174       
    168175        // fullscreen
     
    208215        // pointers
    209216        HPOINTER handPtr;
     217        HPOINTER handClosedPtr;
    210218        HPOINTER zoomInPtr;
    211219        HPOINTER zoomOutPtr;
  • trunk/Lucide/SOURCE/gui/makefile

    r265 r268  
    11.autodepend
    22
    3 TEST=0
    4 VERSION=1.21
     3TEST=1
     4VERSION=1.22
    55
    66!if $(TEST)==1
Note: See TracChangeset for help on using the changeset viewer.