Skip to content

Commit 262bef9

Browse files
committed
crengine: add pageHeader and top/bottom margins in SCROLL mode (and TTS)
1 parent cc84737 commit 262bef9

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

crengine/src/lvdocview.cpp

+36-6
Original file line numberDiff line numberDiff line change
@@ -2452,7 +2452,7 @@ void LVDocView::Draw(LVDrawBuf & drawbuf, int position, int page, bool rotate, b
24522452
return;
24532453
if (isScrollMode()) {
24542454
drawbuf.SetClipRect(NULL);
2455-
drawbuf.setHidePartialGlyphs(false);
2455+
drawbuf.setHidePartialGlyphs(true);
24562456
drawPageBackground(drawbuf, 0, position);
24572457
int cover_height = 0;
24582458
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
24682468
rc.right -= m_pageMargins.right;
24692469
drawCoverTo(&drawbuf, rc);
24702470
}
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);
24742502
} else {
24752503
int pc = getVisiblePageCount();
24762504
//CRLog::trace("searching for page with offset=%d", position);
@@ -2510,7 +2538,8 @@ bool LVDocView::windowToDocPoint(lvPoint & pt) {
25102538
#endif
25112539
if (getViewMode() == DVM_SCROLL) {
25122540
// 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;
25142543
pt.x -= m_pageMargins.left;
25152544
return true;
25162545
} else {
@@ -2558,7 +2587,8 @@ bool LVDocView::docToWindowPoint(lvPoint & pt, bool isRectBottom, bool fitToPage
25582587
// TODO: implement coordinate conversion here
25592588
if (getViewMode() == DVM_SCROLL) {
25602589
// 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;
25622592
pt.x += m_pageMargins.left;
25632593
return true;
25642594
} else {

0 commit comments

Comments
 (0)