diff --git a/src/apps/haiku-depot/textview/TextDocumentLayout.cpp b/src/apps/haiku-depot/textview/TextDocumentLayout.cpp index b728b7bcf3..4ce8f11d69 100644 --- a/src/apps/haiku-depot/textview/TextDocumentLayout.cpp +++ b/src/apps/haiku-depot/textview/TextDocumentLayout.cpp @@ -88,14 +88,19 @@ TextDocumentLayout::Height() void -TextDocumentLayout::Draw(BView* view, const BPoint& offset) +TextDocumentLayout::Draw(BView* view, const BPoint& offset, + const BRect& updateRect) { _ValidateLayout(); int layoutCount = fParagraphLayouts.CountItems(); for (int i = 0; i < layoutCount; i++) { const ParagraphLayoutInfo& layout = fParagraphLayouts.ItemAtFast(i); - layout.layout->Draw(view, BPoint(offset.x, offset.y + layout.y)); + BPoint location(offset.x, offset.y + layout.y); + if (location.y > updateRect.bottom) + break; + if (location.y + layout.layout->Height() > updateRect.top) + layout.layout->Draw(view, location); } } diff --git a/src/apps/haiku-depot/textview/TextDocumentLayout.h b/src/apps/haiku-depot/textview/TextDocumentLayout.h index 2cf1dbf937..0c2e061abf 100644 --- a/src/apps/haiku-depot/textview/TextDocumentLayout.h +++ b/src/apps/haiku-depot/textview/TextDocumentLayout.h @@ -83,7 +83,8 @@ public: { return fWidth; } float Height(); - void Draw(BView* view, const BPoint& offset); + void Draw(BView* view, const BPoint& offset, + const BRect& updateRect); private: void _Init(); diff --git a/src/apps/haiku-depot/textview/TextDocumentView.cpp b/src/apps/haiku-depot/textview/TextDocumentView.cpp index db4579a7c7..c0b880087e 100644 --- a/src/apps/haiku-depot/textview/TextDocumentView.cpp +++ b/src/apps/haiku-depot/textview/TextDocumentView.cpp @@ -36,7 +36,7 @@ TextDocumentView::Draw(BRect updateRect) FillRect(updateRect, B_SOLID_LOW); fTextDocumentLayout.SetWidth(_TextLayoutWidth(Bounds().Width())); - fTextDocumentLayout.Draw(this, BPoint(fInsetLeft, fInsetTop)); + fTextDocumentLayout.Draw(this, BPoint(fInsetLeft, fInsetTop), updateRect); } @@ -107,6 +107,7 @@ TextDocumentView::SetTextDocument(const TextDocumentRef& document) fTextDocument = document; fTextDocumentLayout.SetTextDocument(fTextDocument); InvalidateLayout(); + _UpdateScrollBars(); }