Example #1
0
void NetListView::FrameResized(float width, float height)
{
	BListView::FrameResized(width, height);
	//Ensure the bevel on the right is drawn properly
	if(width < oldWidth)
		oldWidth = width;
	PushState();
	BRect invalRect(oldWidth, 0, oldWidth, height);
	ConvertFromParent(&invalRect);
	BRegion lineRegion(invalRect);
	ConstrainClippingRegion(&lineRegion);
	Draw(invalRect);
	oldWidth = width;
	PopState();
	
	//Do word wrapping
	BFont curFont;
	GetFont(&curFont);
	float itemWidth = Bounds().Width();
	float wrapWidth = (itemWidth - 6)/curFont.Size();
	for(int itemNum = 0; itemNum < CountItems(); itemNum++)
	{
		NetListItem* item = (NetListItem*)(Items()[itemNum]);
		item->SetWidth(itemWidth);
		item->CalcWordWrap(wrapWidth);
	}
	//DoForEach(UpdateItem, (void*)this);
	Invalidate();
	
	BListView::FrameResized(width, height);
}
Example #2
0
void RasterShapeIntervals::getIncludedIntervals(int y1, int y2, SegmentList& result) const
{
    ASSERT(y2 >= y1);

    IntRect lineRect(bounds().x(), y1, bounds().width(), y2 - y1);
    Region lineRegion(lineRect);
    lineRegion.intersect(m_region);
    if (lineRegion.isEmpty())
        return;

    const Vector<IntRect>& lineRects = lineRegion.rects();
    ASSERT(lineRects.size() > 0);

    Region segmentsRegion(lineRect);
    Region intervalsRegion;

    // The loop below uses Regions to compute the intersection of the horizontal
    // shape intervals that fall within the line's box.
    int currentLineY = lineRects[0].y();
    int currentLineMaxY = lineRects[0].maxY();
    for (unsigned i = 0; i < lineRects.size(); ++i) {
        int lineY = lineRects[i].y();
        ASSERT(lineY >= currentLineY);
        if (lineY > currentLineMaxY) {
            // We've encountered a vertical gap in lineRects, there are no included intervals.
            return;
        }
        if (lineY > currentLineY) {
            currentLineY = lineY;
            currentLineMaxY = lineRects[i].maxY();
            segmentsRegion.intersect(intervalsRegion);
            intervalsRegion = Region();
        } else
            currentLineMaxY = std::max<int>(currentLineMaxY, lineRects[i].maxY());
        intervalsRegion.unite(Region(alignedRect(lineRects[i], y1, y2)));
    }
    if (!intervalsRegion.isEmpty())
        segmentsRegion.intersect(intervalsRegion);

    const Vector<IntRect>& segmentRects = segmentsRegion.rects();
    for (unsigned i = 0; i < segmentRects.size(); ++i)
        result.append(LineSegment(segmentRects[i].x(), segmentRects[i].maxX()));
}
Example #3
0
bool RasterShapeIntervals::firstIncludedIntervalY(int minY, const IntSize& minSize, LayoutUnit& result) const
{
    for (int y = minY; y <= bounds().maxY() - minSize.height(); y++) {
        Region lineRegion(IntRect(bounds().x(), y, bounds().width(), minSize.height()));
        lineRegion.intersect(m_region);
        if (lineRegion.isEmpty())
            continue;

        const Vector<IntRect>& lineRects = lineRegion.rects();
        ASSERT(lineRects.size() > 0);

        for (unsigned i = 0; i < lineRects.size(); i++) {
            IntRect rect = lineRects[i];
            if (rect.width() >= minSize.width() && lineRegion.contains(Region(IntRect(IntPoint(rect.x(), y), minSize)))) {
                result = y;
                return true;
            }
        }
    }
    return false;
}
Example #4
0
void RasterShapeIntervals::getExcludedIntervals(int y1, int y2, SegmentList& result) const
{
    ASSERT(y2 >= y1);

    IntRect lineRect(bounds().x(), y1, bounds().width(), y2 - y1);
    Region lineRegion(lineRect);
    lineRegion.intersect(m_region);
    if (lineRegion.isEmpty())
        return;

    const Vector<IntRect>& lineRects = lineRegion.rects();
    ASSERT(lineRects.size() > 0);

    Region segmentsRegion;
    for (unsigned i = 0; i < lineRects.size(); i++)
        segmentsRegion.unite(Region(alignedRect(lineRects[i], y1, y2)));

    const Vector<IntRect>& segmentRects = segmentsRegion.rects();
    for (unsigned i = 0; i < segmentRects.size(); i++)
        result.append(LineSegment(segmentRects[i].x(), segmentRects[i].maxX() + 1));
}