Ignore:
Timestamp:
Jul 15, 2006, 4:13:07 PM (15 years ago)
Author:
Eugene Romanenko
Message:

Fullscreen implemented (closes #6). Hotkey is Ctrl+L, like in Acrobat. Mozilla-like fullscreen (F11) renamed to 'Maximized view'. Currently page draws at upper-left corner, centered draw should be implemented.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/docViewer.cpp

    r70 r72  
    4141#include <process.h>
    4242#include <stdio.h>
     43#include <ctype.h>
    4344
    4445#include <ludoc.xh>
     
    324325void DocumentViewer::goToPage( long page )
    325326{
     327    if ( ( page < 0 ) || ( page >= totalpages ) ) {
     328        return;
     329    }
     330
    326331    if ( continuous && ( doc != NULL ) )
    327332    {
     
    386391        rotation = _rotation;
    387392    }
     393}
     394
     395void DocumentViewer::setFullscreen( bool _fullscreen )
     396{
     397    fullscreen = _fullscreen;
     398    ULONG ulFrameStyle = WinQueryWindowULong( hWndDocFrame, QWL_STYLE );
     399
     400    if ( fullscreen )
     401    {
     402        pglSave = getPageLayout();
     403        zoomSave = getZoom();
     404        setPageLayout( SinglePage );
     405        setZoom( -2 );
     406        WinSetParent( hWndHscroll, HWND_OBJECT, FALSE );
     407        WinSetParent( hWndVscroll, HWND_OBJECT, FALSE );
     408        ulFrameStyle &= ~FS_SIZEBORDER;
     409    }
     410    else
     411    {
     412        setPageLayout( pglSave );
     413        setZoom( zoomSave );
     414        WinSetParent( hWndHscroll, hWndDocFrame, FALSE );
     415        WinSetParent( hWndVscroll, hWndDocFrame, FALSE );
     416        ulFrameStyle &= ~FS_SIZEBORDER;
     417    }
     418
     419    WinSetWindowULong( hWndDocFrame, QWL_STYLE, ulFrameStyle );
     420    WinSendMsg( hWndDocFrame, WM_UPDATEFRAME,
     421                MPFROMLONG( FCF_VERTSCROLL | FCF_HORZSCROLL | FCF_SIZEBORDER ), MPVOID );
    388422}
    389423
     
    575609MRESULT DocumentViewer::vertScroll( HWND hwnd, MPARAM mp2, HRGN hrgn )
    576610{
     611    if ( fullscreen ) {
     612        return ( MRFROMLONG( 0 ) );
     613    }
     614
    577615    sVscrollInc = 0;
    578616
     
    614652MRESULT DocumentViewer::horizScroll( HWND hwnd, MPARAM mp2, HRGN hrgn )
    615653{
     654    if ( fullscreen ) {
     655        return ( MRFROMLONG( 0 ) );
     656    }
     657
    616658    sHscrollInc = 0;
    617659
     
    676718    WinReleasePS( hps );
    677719
    678     sHscrollMax = (SHORT)__max( 0, ( continuous ? fullwidth : width ) - cxClient );
    679     sHscrollPos = __min( sHscrollPos, sHscrollMax );
    680 
    681     WinSendMsg( hWndHscroll, SBM_SETSCROLLBAR,
    682                 MPFROMSHORT(sHscrollPos), MPFROM2SHORT(0, sHscrollMax) );
    683     WinSendMsg( hWndHscroll, SBM_SETTHUMBSIZE,
    684                 MPFROM2SHORT( cxClient, width ), MPVOID );
    685     WinEnableWindow( hWndHscroll, (BOOL)( sHscrollMax != 0 ) );
    686 
    687     if ( continuous )
    688     {
    689         realVscrollMax = __max( 0, fullheight - cyClient );
    690         VScrollStep = LINE_HEIGHT;
    691         ULONG ssize = realVscrollMax / VScrollStep;
    692         while ( ssize > 32000 ) {
    693             VScrollStep += LINE_HEIGHT;
    694             ssize = realVscrollMax / VScrollStep;
    695         }
    696 
    697         sVscrollMax = (SHORT)ssize;
    698     }
    699     else {
    700         realVscrollMax = sVscrollMax = (SHORT)__max( 0, height - cyClient );
     720    if ( fullscreen )
     721    {
     722        sHscrollMax = 0;
     723        sHscrollPos = 0;
     724        realVscrollMax = 0;
    701725        VScrollStep = 1;
    702     }
    703     sVscrollPos = __min( sVscrollPos, sVscrollMax );
    704 
    705     WinSendMsg( hWndVscroll, SBM_SETSCROLLBAR,
    706                 MPFROMSHORT(sVscrollPos), MPFROM2SHORT(0, sVscrollMax) );
    707     if ( continuous ) {
    708         WinSendMsg( hWndVscroll, SBM_SETTHUMBSIZE,
    709                     MPFROM2SHORT( cyClient/VScrollStep, fullheight/VScrollStep ), MPVOID );
    710     }
    711     else {
    712         WinSendMsg( hWndVscroll, SBM_SETTHUMBSIZE,
    713                     MPFROM2SHORT( cyClient, height ), MPVOID );
    714     }
    715     WinEnableWindow( hWndVscroll, (BOOL)( sVscrollMax != 0 ) );
    716 
    717     SHORT realScrollPos = (SHORT)(sVscrollMax * relativeScrollPos);
    718     vertScroll( hWndDoc, MPFROM2SHORT( realScrollPos, SB_SLIDERPOSITION ), NULLHANDLE );
     726        sVscrollPos = 0;
     727    }
     728    else
     729    {
     730        sHscrollMax = (SHORT)__max( 0, ( continuous ? fullwidth : width ) - cxClient );
     731        sHscrollPos = __min( sHscrollPos, sHscrollMax );
     732
     733        WinSendMsg( hWndHscroll, SBM_SETSCROLLBAR,
     734                    MPFROMSHORT(sHscrollPos), MPFROM2SHORT(0, sHscrollMax) );
     735        WinSendMsg( hWndHscroll, SBM_SETTHUMBSIZE,
     736                    MPFROM2SHORT( cxClient, width ), MPVOID );
     737        WinEnableWindow( hWndHscroll, (BOOL)( sHscrollMax != 0 ) );
     738
     739        if ( continuous )
     740        {
     741            realVscrollMax = __max( 0, fullheight - cyClient );
     742            VScrollStep = LINE_HEIGHT;
     743            ULONG ssize = realVscrollMax / VScrollStep;
     744            while ( ssize > 32000 ) {
     745                VScrollStep += LINE_HEIGHT;
     746                ssize = realVscrollMax / VScrollStep;
     747            }
     748
     749            sVscrollMax = (SHORT)ssize;
     750        }
     751        else {
     752            realVscrollMax = sVscrollMax = (SHORT)__max( 0, height - cyClient );
     753            VScrollStep = 1;
     754        }
     755        sVscrollPos = __min( sVscrollPos, sVscrollMax );
     756
     757        WinSendMsg( hWndVscroll, SBM_SETSCROLLBAR,
     758                    MPFROMSHORT(sVscrollPos), MPFROM2SHORT(0, sVscrollMax) );
     759        if ( continuous ) {
     760            WinSendMsg( hWndVscroll, SBM_SETTHUMBSIZE,
     761                        MPFROM2SHORT( cyClient/VScrollStep, fullheight/VScrollStep ), MPVOID );
     762        }
     763        else {
     764            WinSendMsg( hWndVscroll, SBM_SETTHUMBSIZE,
     765                        MPFROM2SHORT( cyClient, height ), MPVOID );
     766        }
     767        WinEnableWindow( hWndVscroll, (BOOL)( sVscrollMax != 0 ) );
     768
     769        SHORT realScrollPos = (SHORT)(sVscrollMax * relativeScrollPos);
     770        vertScroll( hWndDoc, MPFROM2SHORT( realScrollPos, SB_SLIDERPOSITION ), NULLHANDLE );
     771    }
    719772}
    720773
     
    15521605{
    15531606    USHORT fsflags = SHORT1FROMMP( mp1 );
     1607    USHORT usch = SHORT1FROMMP( mp2 );
    15541608    USHORT usvk = SHORT2FROMMP( mp2 );
    15551609
     
    15671621
    15681622            case VK_PAGEUP:
    1569                 if ( fsflags & KC_CTRL ) {
    1570                     vertScroll( hwnd, MPFROM2SHORT( 0, SB_SLIDERPOSITION ), NULLHANDLE );
    1571                 } else {
    1572                     WinSendMsg( hwnd, WM_VSCROLL, MPVOID, MPFROM2SHORT( 0, SB_PAGEUP ) );
     1623                if ( fsflags & KC_CTRL )
     1624                {
     1625                    if ( fullscreen ) {
     1626                        goToPage( 0 );
     1627                    } else {
     1628                        vertScroll( hwnd, MPFROM2SHORT( 0, SB_SLIDERPOSITION ), NULLHANDLE );
     1629                    }
     1630                }
     1631                else
     1632                {
     1633                    if ( fullscreen ) {
     1634                        goToPage( currentpage - 1 );
     1635                    } else {
     1636                        WinSendMsg( hwnd, WM_VSCROLL, MPVOID, MPFROM2SHORT( 0, SB_PAGEUP ) );
     1637                    }
    15731638                }
    15741639                return TRUE;
    15751640
    15761641            case VK_PAGEDOWN:
    1577                 if ( fsflags & KC_CTRL ) {
    1578                     vertScroll( hwnd, MPFROM2SHORT( sVscrollMax, SB_SLIDERPOSITION ), NULLHANDLE );
    1579                 } else {
    1580                     WinSendMsg( hwnd, WM_VSCROLL, MPVOID, MPFROM2SHORT( 0, SB_PAGEDOWN ) );
     1642                if ( fsflags & KC_CTRL )
     1643                {
     1644                    if ( fullscreen ) {
     1645                        goToPage( totalpages - 1 );
     1646                    } else {
     1647                        vertScroll( hwnd, MPFROM2SHORT( sVscrollMax, SB_SLIDERPOSITION ), NULLHANDLE );
     1648                    }
     1649                }
     1650                else
     1651                {
     1652                    if ( fullscreen ) {
     1653                        goToPage( currentpage + 1 );
     1654                    } else {
     1655                        WinSendMsg( hwnd, WM_VSCROLL, MPVOID, MPFROM2SHORT( 0, SB_PAGEDOWN ) );
     1656                    }
    15811657                }
    15821658                return TRUE;
     
    15971673                horizScroll( hwnd, MPFROM2SHORT( sHscrollMax, SB_SLIDERPOSITION ), NULLHANDLE );
    15981674                return TRUE;
    1599 
    1600         }
     1675        }
     1676    }
     1677
     1678    // Ctrl+L
     1679    if ( ( fsflags & KC_CTRL ) && !( fsflags & KC_KEYUP ) && ( toupper( usch ) == 'L' ) )
     1680    {
     1681        Lucide::toggleFullscreen();
     1682        return TRUE;
     1683    }
     1684
     1685    // +
     1686    if ( ( fsflags & KC_CHAR ) && !( fsflags & KC_KEYUP ) && ( usch == '+' ) ) {
     1687        goToPage( currentpage + 1 );
     1688        return TRUE;
     1689    }
     1690    // -
     1691    if ( ( fsflags & KC_CHAR ) && !( fsflags & KC_KEYUP ) && ( usch == '-' ) ) {
     1692        goToPage( currentpage - 1 );
     1693        return TRUE;
    16011694    }
    16021695
Note: See TracChangeset for help on using the changeset viewer.