smalltalkpharoroassal

How to add a bounding box to a composite shape in Roassal 3?


I'm trying to draw a bounding box around a group of shapes. I get everything in the scene, but I don't know how to make the bounding box and the text get correctly aligned:

Result

    c := RSCanvas new.
    text := RSGroup new.
    foo := RSLabel new text: 'foo'.
    bar := RSLabel new text: 'bar'.
    text add: foo; add: bar.
    RSVerticalLineLayout on: text.
    bound := RSShapeFactory box
        model: self;
        border: (RSBorder new width: 1; color: Color black);
        cornerRadius: 5;
        width: text encompassingRectangle width + 15;
        height: text encompassingRectangle height + 10.
    all := RSComposite new shapes: { bound. text asShape }.
    c add: all.
    c  @ RSCanvasController.
    ^ c

Solution

  • So here is how I did it. The missing key point was to put an RSLocation.

    enter image description here

        c := RSCanvas new.
        text := RSGroup new.
        foo := RSLabel new text: 'foo'.
        bar := RSLabel new text: 'bar'.
        text add: foo; add: bar.
        RSVerticalLineLayout on: text.
        bound := RSShapeFactory box
            model: self;
            border: (RSBorder new width: 1; color: Color black);
            cornerRadius: 5;
            width: text encompassingRectangle width + 15;
            height: text encompassingRectangle height + 10.
        contents := text asShape.
        all := RSComposite new shapes: { bound. contents }.
        RSLocation new center; outer; stick: contents on: bound.
        c add: all.
        c  @ RSCanvasController.
        ^ c