Changeset 72 for trunk/Lucide/SOURCE


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.

Location:
trunk/Lucide/SOURCE/gui
Files:
6 edited

Legend:

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

    r66 r72  
    7474    BEGIN
    7575        MENUITEM "MENU_SHOW_NAV_PANE", CM_NAVPANE
     76        MENUITEM "MENU_MAXVIEW", CM_MAXVIEW
    7677        MENUITEM "MENU_FULLSCREEN", CM_FULLSCREEN
    7778    END
     
    99100    "G", CM_FINDAGAIN, CONTROL
    100101    "g", CM_FINDAGAIN, CONTROL
    101     "-", CM_PREVPAGE
    102     "+", CM_NEXTPAGE
    103     VK_F11, CM_FULLSCREEN, VIRTUALKEY
     102    VK_F11, CM_MAXVIEW, VIRTUALKEY
    104103END
    105104
  • trunk/Lucide/SOURCE/gui/Lucide_res.H

    r66 r72  
    8888
    8989#define CM_NAVPANE              501
    90 #define CM_FULLSCREEN   502
     90#define CM_MAXVIEW              502
     91#define CM_FULLSCREEN   503
    9192
    9293#define CM_PRODINFO             601
  • 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
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r67 r72  
    6161
    6262        void setPageLayout( PgLayout layout );
    63 
    64         HWND getHWND() { return hWndDocFrame; }
     63        PgLayout getPageLayout() { return ( continuous ? Continuous : SinglePage ); }
     64
     65        HWND getFrameHWND() { return hWndDocFrame; }
     66        HWND getViewHWND() { return hWndDoc; }
    6567
    6668        void setDocument( LuDocument *_doc );
     
    7779        void searchDocument( const char *_searchString, bool _caseSensitive,
    7880                             bool _continueSearch );
     81        void setFullscreen( bool _fullscreen );
    7982
    8083        static void registerClass( HAB hab );
     
    156159        bool closed;
    157160        bool drawPS;
     161       
     162        // fullscreen
     163        bool fullscreen;
     164        PgLayout pglSave;
     165        double zoomSave;
    158166
    159167        // continuous view
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r69 r72  
    9494SHORT Lucide::splitterPos    = 100;
    9595bool  Lucide::showIndex      = true;
     96bool  Lucide::isMaxview      = false;
    9697bool  Lucide::isFullscreen   = false;
    9798LuWindowPos Lucide::winPos   = {0};
     
    463464
    464465
    465 void Lucide::toggleFullscreen()
     466void Lucide::toggleMaxview()
    466467{
    467468    ULONG ulFrameStyle = WinQueryWindowULong( hWndFrame, QWL_STYLE );
    468469
    469     if ( isFullscreen )
     470    if ( isMaxview )
    470471    {
    471472        WinSetParent( hFrameSysmenu,  hWndFrame, FALSE );
     
    495496                MPVOID );
    496497
    497     if ( isFullscreen )
     498    if ( isMaxview )
    498499    {
    499500        WinSetWindowUShort( hWndFrame, QWS_XRESTORE,  winPos.XRestore );
     
    511512    {
    512513        WinSetWindowPos( hWndFrame, HWND_TOP, 0, 0,
    513                          WinQuerySysValue( HWND_DESKTOP, SV_CXFULLSCREEN ) - 1,
    514                          WinQuerySysValue( HWND_DESKTOP, SV_CYFULLSCREEN ) +
    515                             WinQuerySysValue( HWND_DESKTOP, SV_CYTITLEBAR ),
     514                         WinQuerySysValue( HWND_DESKTOP, SV_CXSCREEN ),
     515                         WinQuerySysValue( HWND_DESKTOP, SV_CYSCREEN ),
     516                         SWP_SIZE | SWP_MOVE | SWP_ZORDER );
     517    }
     518
     519    isMaxview = !isMaxview;
     520}
     521
     522
     523void Lucide::toggleFullscreen()
     524{
     525    if ( isFullscreen )
     526    {
     527        docViewer->setFullscreen( false );
     528        WinSetParent( docViewer->getFrameHWND(), hWndFrame, TRUE );
     529        WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
     530                    MPFROMHWND( indexWin->getHWND() ),
     531                    MPFROMHWND( docViewer->getFrameHWND() ) );
     532    }
     533    else
     534    {
     535        docViewer->setFullscreen( true );
     536        WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
     537                    MPFROMHWND( indexWin->getHWND() ),
     538                    MPFROMHWND( NULLHANDLE ) );
     539        WinSetParent( docViewer->getFrameHWND(), HWND_DESKTOP, FALSE );
     540        WinSetWindowPos( docViewer->getFrameHWND(), HWND_TOP, 0, 0,
     541                         WinQuerySysValue( HWND_DESKTOP, SV_CXSCREEN ),
     542                         WinQuerySysValue( HWND_DESKTOP, SV_CYSCREEN ),
    516543                         SWP_SIZE | SWP_MOVE | SWP_ZORDER );
    517544    }
     
    664691                    return (MRESULT)FALSE;
    665692
     693                case CM_MAXVIEW:
     694                    Lucide::toggleMaxview();
     695                    return (MRESULT)FALSE;
     696
    666697                case CM_FULLSCREEN:
    667698                    Lucide::toggleFullscreen();
     
    733764
    734765    WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
    735                 MPFROMHWND( indexWin->getHWND() ), MPFROMHWND( docViewer->getHWND() ) );
     766                MPFROMHWND( indexWin->getHWND() ), MPFROMHWND( docViewer->getFrameHWND() ) );
    736767    Lucide::splitterPos = PrfQueryProfileInt( HINI_USERPROFILE, appName, splpos, Lucide::splitterPos );
    737768    Lucide::showIndex = PrfQueryProfileInt( HINI_USERPROFILE, appName, showind, Lucide::showIndex );
     
    767798    }
    768799
    769     WinSetFocus( HWND_DESKTOP, WinWindowFromID( docViewer->getHWND(), FID_CLIENT ) );
     800    WinSetFocus( HWND_DESKTOP, docViewer->getViewHWND() );
    770801
    771802    if ( argc > 1 ) {
  • trunk/Lucide/SOURCE/gui/lucide.h

    r50 r72  
    6666                static bool docLoaded;
    6767                static char *loadError;
     68                static bool isMaxview;
    6869                static bool isFullscreen;
    6970                static LuWindowPos winPos;
     
    9091        static void enableCopy( bool enable );
    9192        static void setPageLayout( PgLayout layout );
     93        static void toggleMaxview();
    9294        static void toggleFullscreen();
    9395};
Note: See TracChangeset for help on using the changeset viewer.