Made BPrintJob layout aware: while drawing recursively, we can't anymore

assume that all children B_WILL_DRAW.
Also call Draw() only when the view said it will.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40439 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin 2011-02-11 17:06:41 +00:00
parent 46f8ab6c60
commit 9fd5bdcbd4
1 changed files with 6 additions and 4 deletions

View File

@ -527,16 +527,18 @@ BPrintJob::_RecurseView(BView* view, BPoint origin, BPicture* picture,
view->SetHighColor(highColor); view->SetHighColor(highColor);
} }
view->fIsPrinting = true; if ((view->Flags() & B_WILL_DRAW) != 0) {
view->Draw(rect); view->fIsPrinting = true;
view->fIsPrinting = false; view->Draw(rect);
view->fIsPrinting = false;
}
view->PopState(); view->PopState();
view->EndPicture(); view->EndPicture();
BView* child = view->ChildAt(0); BView* child = view->ChildAt(0);
while (child != NULL) { while (child != NULL) {
if ((child->Flags() & B_WILL_DRAW) && !child->IsHidden()) { if (!child->IsHidden()) {
BPoint leftTop(view->Bounds().LeftTop() + child->Frame().LeftTop()); BPoint leftTop(view->Bounds().LeftTop() + child->Frame().LeftTop());
BRect printRect(rect.OffsetToCopy(rect.LeftTop() - leftTop) BRect printRect(rect.OffsetToCopy(rect.LeftTop() - leftTop)
& child->Bounds()); & child->Bounds());