Changeset 243 for trunk/src/helpers/textview.c
- Timestamp:
- Jan 29, 2003, 7:41:39 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/helpers/textview.c
r242 r243 1522 1522 // can be NULL to paint all 1523 1523 LONG lViewXOfs, // in: x offset to paint; 0 means rightmost 1524 P ULONG pulViewYOfs,// in: y offset to paint; 0 means _top_most;1524 PLONG plViewYOfs, // in: y offset to paint; 0 means _top_most; 1525 1525 // out: y offset which should be passed to next call 1526 1526 // (if TRUE is returned and fPaintHalfLines == FALSE) … … 1534 1534 fAnyLinesPainted = FALSE; 1535 1535 ULONG ulCurrentLineIndex = *pulLineIndex; 1536 // LONG lViewYOfsSaved = *p ulViewYOfs;1536 // LONG lViewYOfsSaved = *plViewYOfs; 1537 1537 PLISTNODE pRectNode = lstNodeFromIndex(&pxfd->llRectangles, 1538 1538 ulCurrentLineIndex); … … 1550 1550 rclLine.xLeft = pLineRcl->rcl.xLeft - lViewXOfs; 1551 1551 rclLine.xRight = pLineRcl->rcl.xRight - lViewXOfs; 1552 rclLine.yBottom = pLineRcl->rcl.yBottom + *p ulViewYOfs;1553 rclLine.yTop = pLineRcl->rcl.yTop + *p ulViewYOfs;1552 rclLine.yBottom = pLineRcl->rcl.yBottom + *plViewYOfs; 1553 rclLine.yTop = pLineRcl->rcl.yTop + *plViewYOfs; 1554 1554 1555 1555 /* if (pmpf) … … 1711 1711 // return TRUE 1712 1712 brc = TRUE; 1713 // and set *p ulViewYOfs to the top of1713 // and set *plViewYOfs to the top of 1714 1714 // the next line, which wasn't visible 1715 1715 // on the page any more 1716 *p ulViewYOfs = pLineRcl2->rcl.yTop + *pulViewYOfs;1716 *plViewYOfs = pLineRcl2->rcl.yTop + *plViewYOfs; 1717 1717 } 1718 1718 break; … … 1867 1867 XFORMATDATA xfd; 1868 1868 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 1871 1873 1872 1874 BOOL fVScrollVisible, // TRUE if vscroll is currently used … … 1878 1880 rclViewText; // same as rclViewPaint, but excluding cdata borders 1879 1881 1880 ULONG ulViewXOfs,// pixels that we have scrolled to the RIGHT; 0 means very left1881 ulViewYOfs;// pixels that we have scrolled to the BOTTOM; 0 means very top1882 // 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 1882 1884 1883 1885 BOOL fAcceptsPresParamsNow; // TRUE after first WM_PAINT … … 1993 1995 if (ptxvd->fHScrollVisible) 1994 1996 ulOfs = ulScrollCX; 1995 WinSetWindowPos(ptxvd-> hwndVScroll,1997 WinSetWindowPos(ptxvd->scrw.hwndVScroll, 1996 1998 HWND_TOP, 1997 1999 ptxvd->rclViewReal.xRight - ulScrollCX, … … 2007 2009 if (ptxvd->fVScrollVisible) 2008 2010 ulOfs = ulScrollCX; 2009 WinSetWindowPos(ptxvd-> hwndHScroll,2011 WinSetWindowPos(ptxvd->scrw.hwndHScroll, 2010 2012 HWND_TOP, 2011 2013 0, … … 2043 2045 ulWinCY = (ptxvd->rclViewText.yTop - ptxvd->rclViewText.yBottom); 2044 2046 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; 2049 2051 2050 2052 // vertical scroll bar enabled at all? 2051 2053 if (ptxvd->flStyle & XS_VSCROLL) 2052 2054 { 2053 BOOL fEnabled = winhUpdateScrollBar(ptxvd-> hwndVScroll,2055 BOOL fEnabled = winhUpdateScrollBar(ptxvd->scrw.hwndVScroll, 2054 2056 ulWinCY, 2055 2057 ptxvd->xfd.szlWorkspace.cy, 2056 ptxvd-> ulViewYOfs,2058 ptxvd->scrw.ptlScrollOfs.y, 2057 2059 (ptxvd->flStyle & XS_AUTOVHIDE)); 2058 2060 // is auto-hide on? … … 2082 2084 if (ptxvd->flStyle & XS_HSCROLL) 2083 2085 { 2084 BOOL fEnabled = winhUpdateScrollBar(ptxvd-> hwndHScroll,2086 BOOL fEnabled = winhUpdateScrollBar(ptxvd->scrw.hwndHScroll, 2085 2087 ulWinCX, 2086 2088 ptxvd->xfd.szlWorkspace.cx, 2087 ptxvd-> ulViewXOfs,2089 ptxvd->scrw.ptlScrollOfs.x, 2088 2090 (ptxvd->flStyle & XS_AUTOHHIDE)); 2089 2091 // is auto-hide on? … … 2165 2167 xstrcatc(pstr, '\n'); 2166 2168 2167 ptxvd-> ulViewXOfs= 0;2168 ptxvd-> ulViewYOfs= 0;2169 ptxvd->scrw.ptlScrollOfs.x = 0; 2170 ptxvd->scrw.ptlScrollOfs.y = 0; 2169 2171 AdjustViewRects(hwndTextView, 2170 2172 ptxvd); … … 2187 2189 { 2188 2190 ULONG ulLineIndex = 0; 2189 ULONG ulYOfs = ptxvd->ulViewYOfs;2191 LONG lYOfs = ptxvd->scrw.ptlScrollOfs.y; 2190 2192 txvPaintText(ptxvd->hab, 2191 2193 ptxvd->hps, // paint PS: screen 2192 2194 &ptxvd->xfd, // formatting data 2193 2195 prcl2Paint, // update rectangle given to us 2194 ptxvd-> ulViewXOfs, // current X scrolling offset2195 & ulYOfs, // current Y scrolling offset2196 ptxvd->scrw.ptlScrollOfs.x, // current X scrolling offset 2197 &lYOfs, // current Y scrolling offset 2196 2198 TRUE, // draw even partly visible lines 2197 2199 &ulLineIndex); … … 2243 2245 2244 2246 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; 2249 2251 2250 2252 if (pWordThis->pcszLinkTarget) … … 2252 2254 2253 2255 // x start: this word's X coordinate 2254 ptlStart.x = pWordThis->lX - ptxvd-> ulViewXOfs;2256 ptlStart.x = pWordThis->lX - ptxvd->scrw.ptlScrollOfs.x; 2255 2257 // y start: bottom line of rectangle plus highest 2256 2258 // base line offset found in all words (format step 2) … … 2280 2282 &rclLine, 2281 2283 pWordThis, 2282 ptxvd-> ulViewXOfs);2284 ptxvd->scrw.ptlScrollOfs.x); 2283 2285 } 2284 2286 … … 2379 2381 ptxvd->rclViewReal.yTop = pcs->cy; 2380 2382 2381 winhCreateScrollBars(hwndTextView, 2382 &ptxvd->hwndVScroll, 2383 &ptxvd->hwndHScroll); 2383 winhCreateScroller(hwndTextView, 2384 &ptxvd->scrw, 2385 ID_VSCROLL, 2386 ID_HSCROLL); 2384 2387 2385 2388 fShow = ((ptxvd->flStyle & XS_VSCROLL) != 0); 2386 WinShowWindow(ptxvd-> hwndVScroll, fShow);2389 WinShowWindow(ptxvd->scrw.hwndVScroll, fShow); 2387 2390 ptxvd->fVScrollVisible = fShow; 2388 2391 2389 2392 fShow = ((ptxvd->flStyle & XS_HSCROLL) != 0); 2390 WinShowWindow(ptxvd-> hwndHScroll, fShow);2393 WinShowWindow(ptxvd->scrw.hwndHScroll, fShow); 2391 2394 ptxvd->fHScrollVisible = fShow; 2392 2395 … … 2552 2555 FALSE, 2553 2556 TRUE); // full reformat 2557 } 2558 } 2559 2560 /* 2561 *@@ ProcessScroll: 2562 * 2563 *@@added V1.0.1 (2003-01-25) [umoeller] 2564 */ 2565 2566 STATIC 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); 2554 2603 } 2555 2604 } … … 2635 2684 PLISTNODE pWordNodeClicked; 2636 2685 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; 2639 2688 2640 2689 if ( (!(ptxvd->flStyle & XS_STATIC)) … … 2707 2756 HWND hwndOwner = NULLHANDLE; 2708 2757 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; 2711 2760 WinSetCapture(HWND_DESKTOP, NULLHANDLE); 2712 2761 … … 2886 2935 // and then have lower y coordinates down to way in the negatives, 2887 2936 // 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; 2894 2943 2895 2944 // vertical scroll bar enabled at all? 2896 2945 if (ptxvd->flStyle & XS_VSCROLL) 2897 2946 { 2898 /* BOOL fEnabled = */ winhUpdateScrollBar(ptxvd-> hwndVScroll,2947 /* BOOL fEnabled = */ winhUpdateScrollBar(ptxvd->scrw.hwndVScroll, 2899 2948 ulWinCY, 2900 2949 ptxvd->xfd.szlWorkspace.cy, 2901 ptxvd-> ulViewYOfs,2950 ptxvd->scrw.ptlScrollOfs.y, 2902 2951 (ptxvd->flStyle & XS_AUTOVHIDE)); 2903 2952 WinInvalidateRect(hwndTextView, NULL, FALSE); … … 2990 3039 *@@changed V0.9.20 (2002-08-10) [umoeller]: added support for formatting HTML and plain text automatically 2991 3040 *@@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 2992 3042 */ 2993 3043 … … 3081 3131 3082 3132 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 3103 3133 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] 3117 3136 break; 3118 3137 … … 3777 3796 ULONG ulCurrentLineIndex = 0, 3778 3797 ulCurrentPage = 1; 3779 ULONG ulCurrentYOfs = 0;3798 LONG lCurrentYOfs = 0; 3780 3799 3781 3800 /* MATRIXLF matlf; … … 3847 3866 &rclPageWorld, 3848 3867 0, 3849 & ulCurrentYOfs,3868 &lCurrentYOfs, 3850 3869 FALSE, // draw only fully visible lines 3851 3870 &ulCurrentLineIndex); // in/out: line to start with
Note:
See TracChangeset
for help on using the changeset viewer.