@@ -2452,7 +2452,7 @@ void LVDocView::Draw(LVDrawBuf & drawbuf, int position, int page, bool rotate, b
2452
2452
return ;
2453
2453
if (isScrollMode ()) {
2454
2454
drawbuf.SetClipRect (NULL );
2455
- drawbuf.setHidePartialGlyphs (false );
2455
+ drawbuf.setHidePartialGlyphs (true );
2456
2456
drawPageBackground (drawbuf, 0 , position);
2457
2457
int cover_height = 0 ;
2458
2458
if (m_pages.length () > 0 && (m_pages[0 ]->flags & RN_PAGE_TYPE_COVER))
@@ -2468,9 +2468,37 @@ void LVDocView::Draw(LVDrawBuf & drawbuf, int position, int page, bool rotate, b
2468
2468
rc.right -= m_pageMargins.right ;
2469
2469
drawCoverTo (&drawbuf, rc);
2470
2470
}
2471
- DrawDocument (drawbuf, m_doc->getRootNode (), m_pageMargins.left , 0 , drawbuf.GetWidth ()
2472
- - m_pageMargins.left - m_pageMargins.right , drawbuf.GetHeight (), 0 , -position,
2473
- drawbuf.GetHeight (), &m_markRanges, &m_bmkRanges);
2471
+
2472
+ int curPage = m_pages.FindNearestPage (position, 0 );
2473
+ int totalPages = m_pages.length ();
2474
+
2475
+ lvRect info;
2476
+ getPageHeaderRectangle (curPage, info);
2477
+ drawPageHeader (&drawbuf, info, curPage, m_pageHeaderInfo, totalPages);
2478
+
2479
+ int top = m_pageMargins.top
2480
+ + (PAGE_HEADER_POS_TOP == m_pageHeaderPos ? info.height () : 0 );
2481
+ int left = m_pageMargins.left ;
2482
+
2483
+ int contentWidth = drawbuf.GetWidth ()
2484
+ - left
2485
+ - m_pageMargins.right ;
2486
+ int contentHeight = drawbuf.GetHeight ()
2487
+ - top
2488
+ - m_pageMargins.bottom ;
2489
+
2490
+ lvRect clip;
2491
+ clip.top = top;
2492
+ clip.bottom = top + contentHeight;
2493
+ // do not clip left/right
2494
+ // (ignore left/right margins, allow partial glyphs to dangle)
2495
+ clip.left = 0 ;
2496
+ clip.right = drawbuf.GetWidth ();
2497
+
2498
+ drawbuf.SetClipRect (&clip);
2499
+
2500
+ DrawDocument (drawbuf, m_doc->getRootNode (), left, top, contentWidth,
2501
+ contentHeight, 0 , -position, m_dy, &m_markRanges, &m_bmkRanges);
2474
2502
} else {
2475
2503
int pc = getVisiblePageCount ();
2476
2504
// CRLog::trace("searching for page with offset=%d", position);
@@ -2510,7 +2538,8 @@ bool LVDocView::windowToDocPoint(lvPoint & pt) {
2510
2538
#endif
2511
2539
if (getViewMode () == DVM_SCROLL) {
2512
2540
// SCROLL mode
2513
- pt.y += _pos;
2541
+ int headerHeight = (PAGE_HEADER_POS_TOP == m_pageHeaderPos) ? getPageHeaderHeight () : 0 ;
2542
+ pt.y += _pos + m_pageMargins.top + headerHeight;
2514
2543
pt.x -= m_pageMargins.left ;
2515
2544
return true ;
2516
2545
} else {
@@ -2558,7 +2587,8 @@ bool LVDocView::docToWindowPoint(lvPoint & pt, bool isRectBottom, bool fitToPage
2558
2587
// TODO: implement coordinate conversion here
2559
2588
if (getViewMode () == DVM_SCROLL) {
2560
2589
// SCROLL mode
2561
- pt.y -= _pos;
2590
+ int headerHeight = (PAGE_HEADER_POS_TOP == m_pageHeaderPos) ? getPageHeaderHeight () : 0 ;
2591
+ pt.y -= _pos + m_pageMargins.top + headerHeight;
2562
2592
pt.x += m_pageMargins.left ;
2563
2593
return true ;
2564
2594
} else {
0 commit comments