Esempio n. 1
0
void DiagramBox::draw(
	BRect updateRect)
{
	D_DRAW(("DiagramBox::draw()\n"));
	if (view()) {
		view()->PushState();
		if (m_flags & M_DRAW_UNDER_ENDPOINTS) {
			BRegion region, clipping;
			region.Include(frame());
			if (group()->getClippingAbove(this, &clipping))
				region.Exclude(&clipping);
			view()->ConstrainClippingRegion(&region);
			drawBox();
			for (uint32 i = 0; i < countItems(); i++) {
				DiagramItem *item = itemAt(i);
				if (region.Intersects(item->frame())) {
					item->draw(item->frame());
				}
			}
		}
		else {
			BRegion region, clipping;
			region.Include(frame());
			if (view()->getClippingAbove(this, &clipping))
				region.Exclude(&clipping);
			for (uint32 i = 0; i < countItems(); i++) {
				DiagramItem *item = itemAt(i);
				BRect r;
				if (region.Intersects(r = item->frame())) {
					item->draw(r);
					region.Exclude(r);
				}
			}
			view()->ConstrainClippingRegion(&region);
			drawBox();
		}
		view()->PopState();
	}
}