void Region::Shape::dump() const { for (Shape::SpanIterator span = spans_begin(), end = spans_end(); span != end; ++span) { printf("%6d: (", span->y); for (Shape::SegmentIterator segment = segments_begin(span), end = segments_end(span); segment != end; ++segment) printf("%d ", *segment); printf(")\n"); } printf("\n"); }
IntRect Region::Shape::bounds() const { if (isEmpty()) return IntRect(); SpanIterator span = spans_begin(); int minY = span->y; SpanIterator lastSpan = spans_end() - 1; int maxY = lastSpan->y; int minX = std::numeric_limits<int>::max(); int maxX = std::numeric_limits<int>::min(); while (span != lastSpan) { SegmentIterator firstSegment = segments_begin(span); SegmentIterator lastSegment = segments_end(span) - 1; if (firstSegment && lastSegment) { ASSERT(firstSegment != lastSegment); if (*firstSegment < minX) minX = *firstSegment; if (*lastSegment > maxX) maxX = *lastSegment; } ++span; } ASSERT(minX <= maxX); ASSERT(minY <= maxY); return IntRect(minX, minY, maxX - minX, maxY - minY); }
static inline iterator_type begin(Geometry& geometry) { return segments_begin(geometry); }