pack figure不适用于computeFigure

时间:2016-01-16 21:09:36

标签: rascal

我似乎对pack-figure和使用computeFigure有问题。

下面是一些重现我的行为的代码。

public void main() {
    bool redraw = false;
    str boxWidthProp = "";

    Figure topBar = hcat([text("Width"), combo(["1", "2"], void(str s){ boxWidthProp = s; }, hshrink(0.1))
    , button("Redraw", void() {redraw = true; }, resizable(false))], vshrink(0.05), hgap(5));

    Figure getTreemap() {
    return computeFigure(bool () { bool temp = redraw; redraw = false; return temp; }, Figure() {
                int sz = 20;
                if (boxWidthProp == "2")
                    sz = 100;
                b = box(size(sz, sz), fillColor("Red"), resizable(false));
                t = text(str() {return "w: <sz>; prop: <boxWidthProp>"; });
                Figures boxes = [];
                boxes += b;
                boxes += t;

                //return pack(boxes, std(gap(5)));
                return vcat([t,b]);
            });
    }

    vc = vcat([topBar, getTreemap()]);
    render(vc);
}

运行此代码时,您会看到一个带有组合,按钮,标签和框的新屏幕。

  • 当您更改组合时,您将看到标签更改的值。
  • 当您点击该按钮时,该框将会改变(它的大小)。
  • 当您再次更改组合时,您会看到标签更改并单击 - 该按钮将再次执行该作业。
  • 这可以继续。

现在取消注释&#34;返回包...&#34;并评论&#34;返回vcat&#34;。 再次运行代码。

您将看到相同的屏幕。

  • 更改组合。
  • 单击该按钮将更改该框。
  • 但从现在开始,一切都停止了。
  • 更改组合,没有。
  • 点击按钮,没有。

我的猜测是包装图有问题。但我是流氓(和日食)的新手,所以我可能会错过一些东西。

0 个答案:

没有答案