Changeset 74


Ignore:
Timestamp:
Jul 16, 2006, 11:28:02 AM (15 years ago)
Author:
Eugene Romanenko
Message:

Centers pages if smaller than window, draw gray border (closes #33)

File:
1 edited

Legend:

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

    r72 r74  
    6363
    6464#define LINE_HEIGHT     16
     65#define BORDER_COLOR    0x808080L
    6566
    6667// DocumentViewer constructor
     
    884885}
    885886
    886 // handles WM_PAINT if document supports asynch rendering.
     887// handles WM_PAINT if singlepage asynchronous rendering used
    887888// posts events to drawthread
    888889void DocumentViewer::wmPaintAsynch( HWND hwnd )
     
    890891    RECTL rcl;
    891892    HPS hps = WinBeginPaint( hwnd, 0L, &rcl );
    892     RECTL rclWin = { 0 };
    893     WinQueryWindowRect( hwnd, &rclWin );
    894     if ( WinEqualRect( hab, &rcl, &rclWin ) ) {
    895         GpiErase( hps );
    896     }
     893    GpiCreateLogColorTable( hpsBuffer, 0, LCOLF_RGB, 0, 0, NULL );
     894    WinFillRect( hpsBuffer, &rcl, BORDER_COLOR );
     895    BlitGraphicsBuffer( hps, hpsBuffer, &rcl );
    897896    WinEndPaint( hps );
    898897
    899898    if ( doc != NULL )
    900899    {
    901         RECTL rclPage = { 0, 0, width, height };
    902         if ( height < cyClient )
    903         {
    904             rclPage.yBottom = cyClient - height;
    905             rclPage.yTop = cyClient;
    906         }
     900        LONG xPos = 0, yPos = 0;
     901        if ( width < cxClient ) {
     902            xPos = ( cxClient - width ) / 2;
     903        }
     904        if ( height < cyClient ) {
     905            yPos = ( cyClient - height ) / 2;
     906        }
     907
     908        RECTL rclPage = { xPos, yPos, width + xPos, height + yPos };
    907909        RECTL rclDraw = { 0 };
    908910        if ( WinIntersectRect( hab, &rclDraw, &rcl, &rclPage ) )
     
    944946            }
    945947            WinUnionRect( hab, &ppda->drawrect, &ppda->drawrect, &rclDraw );
    946             ppda->startpos.x = sHscrollPos + ppda->drawrect.xLeft;
    947             ppda->startpos.y = ( cyClient - ppda->drawrect.yTop ) + sVscrollPos;
    948 
    949             // workaround ?
    950             ppda->drawrect.xRight++;
    951             ppda->drawrect.yTop++;
     948            ppda->startpos.x = sHscrollPos + ppda->drawrect.xLeft - xPos;
     949            ppda->startpos.y = ( yPos > 0 ) ? rclPage.yTop - ppda->drawrect.yTop :
     950                    ( cyClient - ppda->drawrect.yTop ) + sVscrollPos;
    952951
    953952            DosReleaseMutexSem( todrawAccess );
     
    963962    RECTL rcl, rclWin, rclDraw = { 0 };
    964963    HPS hps = WinBeginPaint( hwnd, 0L, &rcl );
    965     GpiErase( hpsBuffer );
     964    GpiCreateLogColorTable( hpsBuffer, 0, LCOLF_RGB, 0, 0, NULL );
     965    WinFillRect( hpsBuffer, &rcl, BORDER_COLOR );
    966966    BlitGraphicsBuffer( hps, hpsBuffer, &rcl );
    967967    WinEndPaint( hps );
     
    10191019    RECTL rcl;
    10201020    HPS hps = WinBeginPaint( hwnd, 0L, &rcl );
    1021     GpiErase( hpsBuffer );
     1021    GpiCreateLogColorTable( hpsBuffer, 0, LCOLF_RGB, 0, 0, NULL );
     1022    WinFillRect( hpsBuffer, &rcl, BORDER_COLOR );
    10221023
    10231024    if ( doc != NULL )
    10241025    {
    1025         RECTL rclPage = { 0, 0, width, height };
    1026         if ( height < cyClient )
    1027         {
    1028             rclPage.yBottom = cyClient - height;
    1029             rclPage.yTop = cyClient;
    1030         }
     1026        LONG xPos = 0, yPos = 0;
     1027        if ( width < cxClient ) {
     1028            xPos = ( cxClient - width ) / 2;
     1029        }
     1030        if ( height < cyClient ) {
     1031            yPos = ( cyClient - height ) / 2;
     1032        }
     1033
     1034        RECTL rclPage = { xPos, yPos, width + xPos, height + yPos };
    10311035        RECTL rclDraw = { 0 };
    10321036        if ( WinIntersectRect( hab, &rclDraw, &rcl, &rclPage ) )
    10331037        {
    1034             spos_x = sHscrollPos + rclDraw.xLeft;
    1035             spos_y = (cyClient - rclDraw.yTop) + sVscrollPos;
     1038            spos_x = sHscrollPos + rclDraw.xLeft - xPos;
     1039            spos_y = ( yPos > 0 ) ? rclPage.yTop - rclDraw.yTop : (cyClient - rclDraw.yTop) + sVscrollPos;
    10361040            LONG rclx = rclDraw.xRight - rclDraw.xLeft;
    10371041            LONG rcly = rclDraw.yTop - rclDraw.yBottom;
     
    11201124            if ( pg != foundpage )
    11211125            {
     1126                double w = pagesizes[ pg ].x * realzoom;
     1127
    11221128                PageDrawArea pda;
    11231129                pda.pagenum = pg;
    1124                 pda.drawrect.xLeft   = __min( pagesizes[ pg ].x * realzoom, r->xLeft );
    1125                 pda.drawrect.yBottom = __max( i - pageRest, r->yBottom );
    1126                 pda.drawrect.xRight  = __min( pagesizes[ pg ].x * realzoom, r->xRight );
    1127                 pda.drawrect.yTop    = i;
    1128 
    1129                 pda.startpos.x = sHscrollPos + pda.drawrect.xLeft;
    1130                 pda.startpos.y = ( pagesizes[ pg ].y * realzoom ) - pageRest;
    1131 
    1132                 areas->push_back( pda );
     1130
     1131                LONG xPos = 0;
     1132                if ( w < cxClient ) {
     1133                    xPos = ( cxClient - w ) / 2;
     1134                }
     1135                RECTL rclPage = { xPos, 0, width + xPos, height };
     1136                RECTL rclDraw = { 0 };
     1137                if ( WinIntersectRect( hab, &rclDraw, r, &rclPage ) )
     1138                {
     1139                    pda.drawrect.xLeft   = __min( w + xPos, rclDraw.xLeft );
     1140                    pda.drawrect.yBottom = __max( i - pageRest, rclDraw.yBottom );
     1141                    pda.drawrect.xRight  = __min( w + xPos, rclDraw.xRight );
     1142                    pda.drawrect.yTop    = i;
     1143
     1144                    pda.startpos.x = sHscrollPos + pda.drawrect.xLeft - xPos;
     1145                    pda.startpos.y = ( pagesizes[ pg ].y * realzoom ) - pageRest;
     1146
     1147                    areas->push_back( pda );
     1148                }
    11331149                foundpage = pg;
    11341150                i -= pageRest;
     
    11731189    RECTL rcl;
    11741190    HPS hps = WinBeginPaint( hwnd, 0L, &rcl );
    1175     GpiErase( hpsBuffer );
     1191    GpiCreateLogColorTable( hpsBuffer, 0, LCOLF_RGB, 0, 0, NULL );
     1192    WinFillRect( hpsBuffer, &rcl, BORDER_COLOR );
    11761193
    11771194    if ( doc != NULL )
     
    11901207
    11911208            spos_x = pda->startpos.x;
    1192             //spos_y = ( cyClient - pda->drawrect.yTop ) + ( sVscrollPos * VScrollStep );
    11931209            spos_y = pda->startpos.y;
    11941210            LONG rclx = pda->drawrect.xRight - pda->drawrect.xLeft;
Note: See TracChangeset for help on using the changeset viewer.