Ignore:
Timestamp:
Jan 29, 2003, 7:41:39 PM (23 years ago)
Author:
umoeller
Message:

New build system, multimedia, other misc fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/helpers/textview.c

    r242 r243  
    15221522                                       // can be NULL to paint all
    15231523                  LONG lViewXOfs,      // in: x offset to paint; 0 means rightmost
    1524                   PULONG pulViewYOfs,  // in: y offset to paint; 0 means _top_most;
     1524                  PLONG plViewYOfs,    // in: y offset to paint; 0 means _top_most;
    15251525                                       // out: y offset which should be passed to next call
    15261526                                       // (if TRUE is returned and fPaintHalfLines == FALSE)
     
    15341534            fAnyLinesPainted = FALSE;
    15351535    ULONG   ulCurrentLineIndex = *pulLineIndex;
    1536     // LONG    lViewYOfsSaved = *pulViewYOfs;
     1536    // LONG    lViewYOfsSaved = *plViewYOfs;
    15371537    PLISTNODE pRectNode = lstNodeFromIndex(&pxfd->llRectangles,
    15381538                                           ulCurrentLineIndex);
     
    15501550        rclLine.xLeft = pLineRcl->rcl.xLeft - lViewXOfs;
    15511551        rclLine.xRight = pLineRcl->rcl.xRight - lViewXOfs;
    1552         rclLine.yBottom = pLineRcl->rcl.yBottom + *pulViewYOfs;
    1553         rclLine.yTop = pLineRcl->rcl.yTop + *pulViewYOfs;
     1552        rclLine.yBottom = pLineRcl->rcl.yBottom + *plViewYOfs;
     1553        rclLine.yTop = pLineRcl->rcl.yTop + *plViewYOfs;
    15541554
    15551555        /* if (pmpf)
     
    17111711                    // return TRUE
    17121712                    brc = TRUE;
    1713                     // and set *pulViewYOfs to the top of
     1713                    // and set *plViewYOfs to the top of
    17141714                    // the next line, which wasn't visible
    17151715                    // on the page any more
    1716                     *pulViewYOfs = pLineRcl2->rcl.yTop + *pulViewYOfs;
     1716                    *plViewYOfs = pLineRcl2->rcl.yTop + *plViewYOfs;
    17171717                }
    17181718                break;
     
    18671867    XFORMATDATA xfd;
    18681868
    1869     HWND    hwndVScroll,        // vertical scroll bar
    1870             hwndHScroll;        // horizontal scroll bar
     1869    SCROLLABLEWINDOW scrw;      // V1.0.1 (2003-01-25) [umoeller]
     1870
     1871//     HWND    hwndVScroll,        // vertical scroll bar
     1872//             hwndHScroll;        // horizontal scroll bar
    18711873
    18721874    BOOL    fVScrollVisible,    // TRUE if vscroll is currently used
     
    18781880            rclViewText;        // same as rclViewPaint, but excluding cdata borders
    18791881
    1880     ULONG   ulViewXOfs,         // pixels that we have scrolled to the RIGHT; 0 means very left
    1881             ulViewYOfs;         // pixels that we have scrolled to the BOTTOM; 0 means very top
     1882//     LONG    lViewXOfs,          // pixels that we have scrolled to the RIGHT; 0 means very left
     1883//             lViewYOfs;          // pixels that we have scrolled to the BOTTOM; 0 means very top
    18821884
    18831885    BOOL    fAcceptsPresParamsNow; // TRUE after first WM_PAINT
     
    19931995        if (ptxvd->fHScrollVisible)
    19941996            ulOfs = ulScrollCX;
    1995         WinSetWindowPos(ptxvd->hwndVScroll,
     1997        WinSetWindowPos(ptxvd->scrw.hwndVScroll,
    19961998                        HWND_TOP,
    19971999                        ptxvd->rclViewReal.xRight - ulScrollCX,
     
    20072009        if (ptxvd->fVScrollVisible)
    20082010            ulOfs = ulScrollCX;
    2009         WinSetWindowPos(ptxvd->hwndHScroll,
     2011        WinSetWindowPos(ptxvd->scrw.hwndHScroll,
    20102012                        HWND_TOP,
    20112013                        0,
     
    20432045    ulWinCY = (ptxvd->rclViewText.yTop - ptxvd->rclViewText.yBottom);
    20442046
    2045     if (ptxvd->ulViewYOfs < 0)
    2046         ptxvd->ulViewYOfs = 0;
    2047     if (ptxvd->ulViewYOfs > ((LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY))
    2048         ptxvd->ulViewYOfs = (LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY;
     2047    if (ptxvd->scrw.ptlScrollOfs.y < 0)
     2048        ptxvd->scrw.ptlScrollOfs.y = 0;
     2049    if (ptxvd->scrw.ptlScrollOfs.y > ((LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY))
     2050        ptxvd->scrw.ptlScrollOfs.y = (LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY;
    20492051
    20502052    // vertical scroll bar enabled at all?
    20512053    if (ptxvd->flStyle & XS_VSCROLL)
    20522054    {
    2053         BOOL fEnabled = winhUpdateScrollBar(ptxvd->hwndVScroll,
     2055        BOOL fEnabled = winhUpdateScrollBar(ptxvd->scrw.hwndVScroll,
    20542056                                            ulWinCY,
    20552057                                            ptxvd->xfd.szlWorkspace.cy,
    2056                                             ptxvd->ulViewYOfs,
     2058                                            ptxvd->scrw.ptlScrollOfs.y,
    20572059                                            (ptxvd->flStyle & XS_AUTOVHIDE));
    20582060        // is auto-hide on?
     
    20822084    if (ptxvd->flStyle & XS_HSCROLL)
    20832085    {
    2084         BOOL fEnabled = winhUpdateScrollBar(ptxvd->hwndHScroll,
     2086        BOOL fEnabled = winhUpdateScrollBar(ptxvd->scrw.hwndHScroll,
    20852087                                            ulWinCX,
    20862088                                            ptxvd->xfd.szlWorkspace.cx,
    2087                                             ptxvd->ulViewXOfs,
     2089                                            ptxvd->scrw.ptlScrollOfs.x,
    20882090                                            (ptxvd->flStyle & XS_AUTOHHIDE));
    20892091        // is auto-hide on?
     
    21652167            xstrcatc(pstr, '\n');
    21662168
    2167         ptxvd->ulViewXOfs = 0;
    2168         ptxvd->ulViewYOfs = 0;
     2169        ptxvd->scrw.ptlScrollOfs.x = 0;
     2170        ptxvd->scrw.ptlScrollOfs.y = 0;
    21692171        AdjustViewRects(hwndTextView,
    21702172                        ptxvd);
     
    21872189{
    21882190    ULONG   ulLineIndex = 0;
    2189     ULONG   ulYOfs = ptxvd->ulViewYOfs;
     2191    LONG    lYOfs = ptxvd->scrw.ptlScrollOfs.y;
    21902192    txvPaintText(ptxvd->hab,
    21912193                 ptxvd->hps,        // paint PS: screen
    21922194                 &ptxvd->xfd,       // formatting data
    21932195                 prcl2Paint,        // update rectangle given to us
    2194                  ptxvd->ulViewXOfs,  // current X scrolling offset
    2195                  &ulYOfs,            // current Y scrolling offset
     2196                 ptxvd->scrw.ptlScrollOfs.x,  // current X scrolling offset
     2197                 &lYOfs,            // current Y scrolling offset
    21962198                 TRUE,              // draw even partly visible lines
    21972199                 &ulLineIndex);
     
    22432245
    22442246    RECTL           rclLine;
    2245     rclLine.xLeft = pLineRcl->rcl.xLeft - ptxvd->ulViewXOfs;
    2246     rclLine.xRight = pLineRcl->rcl.xRight - ptxvd->ulViewXOfs;
    2247     rclLine.yBottom = pLineRcl->rcl.yBottom + ptxvd->ulViewYOfs;
    2248     rclLine.yTop = pLineRcl->rcl.yTop + ptxvd->ulViewYOfs;
     2247    rclLine.xLeft = pLineRcl->rcl.xLeft - ptxvd->scrw.ptlScrollOfs.x;
     2248    rclLine.xRight = pLineRcl->rcl.xRight - ptxvd->scrw.ptlScrollOfs.x;
     2249    rclLine.yBottom = pLineRcl->rcl.yBottom + ptxvd->scrw.ptlScrollOfs.y;
     2250    rclLine.yTop = pLineRcl->rcl.yTop + ptxvd->scrw.ptlScrollOfs.y;
    22492251
    22502252    if (pWordThis->pcszLinkTarget)
     
    22522254
    22532255    // x start: this word's X coordinate
    2254     ptlStart.x = pWordThis->lX - ptxvd->ulViewXOfs;
     2256    ptlStart.x = pWordThis->lX - ptxvd->scrw.ptlScrollOfs.x;
    22552257    // y start: bottom line of rectangle plus highest
    22562258    // base line offset found in all words (format step 2)
     
    22802282                       &rclLine,
    22812283                       pWordThis,
    2282                        ptxvd->ulViewXOfs);
     2284                       ptxvd->scrw.ptlScrollOfs.x);
    22832285}
    22842286
     
    23792381        ptxvd->rclViewReal.yTop = pcs->cy;
    23802382
    2381         winhCreateScrollBars(hwndTextView,
    2382                              &ptxvd->hwndVScroll,
    2383                              &ptxvd->hwndHScroll);
     2383        winhCreateScroller(hwndTextView,
     2384                           &ptxvd->scrw,
     2385                           ID_VSCROLL,
     2386                           ID_HSCROLL);
    23842387
    23852388        fShow = ((ptxvd->flStyle & XS_VSCROLL) != 0);
    2386         WinShowWindow(ptxvd->hwndVScroll, fShow);
     2389        WinShowWindow(ptxvd->scrw.hwndVScroll, fShow);
    23872390        ptxvd->fVScrollVisible = fShow;
    23882391
    23892392        fShow = ((ptxvd->flStyle & XS_HSCROLL) != 0);
    2390         WinShowWindow(ptxvd->hwndHScroll, fShow);
     2393        WinShowWindow(ptxvd->scrw.hwndHScroll, fShow);
    23912394        ptxvd->fHScrollVisible = fShow;
    23922395
     
    25522555                              FALSE,
    25532556                              TRUE);    // full reformat
     2557    }
     2558}
     2559
     2560/*
     2561 *@@ ProcessScroll:
     2562 *
     2563 *@@added V1.0.1 (2003-01-25) [umoeller]
     2564 */
     2565
     2566STATIC VOID ProcessScroll(HWND hwndTextView,
     2567                          ULONG msg,
     2568                          MPARAM mp2)
     2569{
     2570    PTEXTVIEWWINDATA ptxvd;
     2571    if (ptxvd = (PTEXTVIEWWINDATA)WinQueryWindowPtr(hwndTextView, QWL_PRIVATE))
     2572    {
     2573        POINTL  ptlScroll = {0, 0};
     2574        if (    (msg == WM_VSCROLL)
     2575             && (ptxvd->fVScrollVisible)
     2576           )
     2577        {
     2578            LONG cy = ptxvd->rclViewText.yTop - ptxvd->rclViewText.yBottom;
     2579            ptlScroll.y = winhHandleScrollMsg(ptxvd->scrw.hwndVScroll,
     2580                                              &ptxvd->scrw.ptlScrollOfs.y,
     2581                                              cy,
     2582                                              ptxvd->xfd.szlWorkspace.cy,
     2583                                              ptxvd->cdata.ulVScrollLineUnit,
     2584                                              msg,
     2585                                              mp2);
     2586        }
     2587        else if (ptxvd->fHScrollVisible)
     2588        {
     2589            LONG cx = ptxvd->rclViewText.xRight - ptxvd->rclViewText.xLeft;
     2590            ptlScroll.x = winhHandleScrollMsg(ptxvd->scrw.hwndHScroll,
     2591                                              &ptxvd->scrw.ptlScrollOfs.x,
     2592                                              cx,
     2593                                              ptxvd->xfd.szlWorkspace.cx,
     2594                                              ptxvd->cdata.ulHScrollLineUnit,
     2595                                              msg,
     2596                                              mp2);
     2597        }
     2598
     2599        if (ptlScroll.x || ptlScroll.y)
     2600            winhScrollWindow(hwndTextView,
     2601                             &ptxvd->rclViewText,
     2602                             &ptlScroll);
    25542603    }
    25552604}
     
    26352684        PLISTNODE pWordNodeClicked;
    26362685
    2637         ptlPos.x = SHORT1FROMMP(mp1) + ptxvd->ulViewXOfs;
    2638         ptlPos.y = SHORT2FROMMP(mp1) - ptxvd->ulViewYOfs;
     2686        ptlPos.x = SHORT1FROMMP(mp1) + ptxvd->scrw.ptlScrollOfs.x;
     2687        ptlPos.y = SHORT2FROMMP(mp1) - ptxvd->scrw.ptlScrollOfs.y;
    26392688
    26402689        if (    (!(ptxvd->flStyle & XS_STATIC))
     
    27072756        HWND        hwndOwner = NULLHANDLE;
    27082757
    2709         ptlPos.x = SHORT1FROMMP(mp1) + ptxvd->ulViewXOfs;
    2710         ptlPos.y = SHORT2FROMMP(mp1) - ptxvd->ulViewYOfs;
     2758        ptlPos.x = SHORT1FROMMP(mp1) + ptxvd->scrw.ptlScrollOfs.x;
     2759        ptlPos.y = SHORT2FROMMP(mp1) - ptxvd->scrw.ptlScrollOfs.y;
    27112760        WinSetCapture(HWND_DESKTOP, NULLHANDLE);
    27122761
     
    28862935            // and then have lower y coordinates down to way in the negatives,
    28872936            // to get the y offset, we must...
    2888             ptxvd->ulViewYOfs = (-pRect->rcl.yTop) - ulWinCY;
    2889 
    2890             if (ptxvd->ulViewYOfs < 0)
    2891                 ptxvd->ulViewYOfs = 0;
    2892             if (ptxvd->ulViewYOfs > ((LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY))
    2893                 ptxvd->ulViewYOfs = (LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY;
     2937            ptxvd->scrw.ptlScrollOfs.y = (-pRect->rcl.yTop) - ulWinCY;
     2938
     2939            if (ptxvd->scrw.ptlScrollOfs.y < 0)
     2940                ptxvd->scrw.ptlScrollOfs.y = 0;
     2941            if (ptxvd->scrw.ptlScrollOfs.y > ((LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY))
     2942                ptxvd->scrw.ptlScrollOfs.y = (LONG)ptxvd->xfd.szlWorkspace.cy - ulWinCY;
    28942943
    28952944            // vertical scroll bar enabled at all?
    28962945            if (ptxvd->flStyle & XS_VSCROLL)
    28972946            {
    2898                 /* BOOL fEnabled = */ winhUpdateScrollBar(ptxvd->hwndVScroll,
     2947                /* BOOL fEnabled = */ winhUpdateScrollBar(ptxvd->scrw.hwndVScroll,
    28992948                                                    ulWinCY,
    29002949                                                    ptxvd->xfd.szlWorkspace.cy,
    2901                                                     ptxvd->ulViewYOfs,
     2950                                                    ptxvd->scrw.ptlScrollOfs.y,
    29022951                                                    (ptxvd->flStyle & XS_AUTOVHIDE));
    29032952                WinInvalidateRect(hwndTextView, NULL, FALSE);
     
    29903039 *@@changed V0.9.20 (2002-08-10) [umoeller]: added support for formatting HTML and plain text automatically
    29913040 *@@changed V1.0.0 (2002-08-12) [umoeller]: optimized locality by moving big chunks into subfuncs
     3041 *@@changed V1.0.1 (2003-01-25) [umoeller]: adjusted scroll msgs for new handler code
    29923042 */
    29933043
     
    30813131
    30823132        case WM_VSCROLL:
    3083             if (    (ptxvd = (PTEXTVIEWWINDATA)WinQueryWindowPtr(hwndTextView, QWL_PRIVATE))
    3084                  && (ptxvd->fVScrollVisible)
    3085                )
    3086             {
    3087                 winhHandleScrollMsg(hwndTextView,
    3088                                     ptxvd->hwndVScroll,
    3089                                     &ptxvd->ulViewYOfs,
    3090                                     &ptxvd->rclViewText,
    3091                                     ptxvd->xfd.szlWorkspace.cy,
    3092                                     ptxvd->cdata.ulVScrollLineUnit,
    3093                                     msg,
    3094                                     mp2);
    3095             }
    3096         break;
    3097 
    3098         /*
    3099          * WM_HSCROLL:
    3100          *
    3101          */
    3102 
    31033133        case WM_HSCROLL:
    3104             if (    (ptxvd = (PTEXTVIEWWINDATA)WinQueryWindowPtr(hwndTextView, QWL_PRIVATE))
    3105                  && (ptxvd->fHScrollVisible)
    3106                )
    3107             {
    3108                 winhHandleScrollMsg(hwndTextView,
    3109                                     ptxvd->hwndHScroll,
    3110                                     &ptxvd->ulViewXOfs,
    3111                                     &ptxvd->rclViewText,
    3112                                     ptxvd->xfd.szlWorkspace.cx,
    3113                                     ptxvd->cdata.ulHScrollLineUnit,
    3114                                     msg,
    3115                                     mp2);
    3116             }
     3134            ProcessScroll(hwndTextView, msg, mp2);
     3135                    // V1.0.1 (2003-01-22) [umoeller]
    31173136        break;
    31183137
     
    37773796    ULONG       ulCurrentLineIndex = 0,
    37783797                ulCurrentPage = 1;
    3779     ULONG       ulCurrentYOfs = 0;
     3798    LONG        lCurrentYOfs = 0;
    37803799
    37813800    /* MATRIXLF    matlf;
     
    38473866                                    &rclPageWorld,
    38483867                                    0,
    3849                                     &ulCurrentYOfs,
     3868                                    &lCurrentYOfs,
    38503869                                    FALSE,      // draw only fully visible lines
    38513870                                    &ulCurrentLineIndex); // in/out: line to start with
Note: See TracChangeset for help on using the changeset viewer.