void RasterShape::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList& result) const { const RasterShapeIntervals& intervals = marginIntervals(); if (intervals.isEmpty()) return; IntShapeIntervals excludedIntervals; intervals.getExcludedIntervals(logicalTop, logicalTop + logicalHeight, excludedIntervals); appendLineSegments(excludedIntervals, result); }
void RasterShape::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList& result) const { const RasterShapeIntervals& intervals = marginIntervals(); if (intervals.isEmpty()) return; float y1 = logicalTop; float y2 = logicalTop + logicalHeight; if (y2 < intervals.bounds().y() || y1 >= intervals.bounds().maxY()) return; intervals.getExcludedIntervals(y1, y2, result); }
void RasterShape::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList& result) const { const RasterShapeIntervals& intervals = marginIntervals(); if (intervals.isEmpty()) return; int y1 = logicalTop; int y2 = logicalTop + logicalHeight; ASSERT(y2 >= y1); if (y2 < intervals.bounds().y() || y1 >= intervals.bounds().maxY()) return; y1 = std::max(y1, intervals.bounds().y()); y2 = std::min(y2, intervals.bounds().maxY()); IntShapeInterval excludedInterval; for (int y = y1; y < y2; y++) excludedInterval.unite(intervals.intervalAt(y)); // Note: |marginIntervals()| returns end-point exclusive // intervals. |excludedInterval.x2()| contains the left-most pixel // offset to the right of the calculated union. result.append(LineSegment(excludedInterval.x1(), excludedInterval.x2())); }