Constraints can hold complex javascript. To cap constraints to a  
range (100-500 in this example), I use something like
width="{max(100, min(500, sizeslider.value))}"

A nest of trinary ? expressions would probably be faster by avoiding  
two function calls. With whitespace added for clarity:
width="${ sizeslider.value < 100
        ? 100
        : ( sizeslider.value > 500 ?
                 500
                : sizeslider.value)) }"

It is sometimes clearer to express this as a handler for  
sizeslider.onvalue, something like this:
<handler reference="sizeslider" event="onvalue"  
method="setClampedSize" />
<method name="setClampedSize" args="x">
        var xclamp = min(100, max(500, x));
        mybox.setAttribute("width", xclamp);
</method>

The compiler probably turns the first and third forms above into the  
same thing; if the compiler has an optimization for min and max (but  
I don't think it does) then all three forms would be equivalent.

-ben

On Sep 22, 2006, at 10:25 PM, [EMAIL PROTECTED] wrote:

> In my example below, I create a view with a smaller nested view.  The
> inner view gets its size from constraints based on the its parent.
> The problem is, when the parent is resized too small, the constraints
> on the inner view become negative.  If you run my app, you can adjust
> the size with the slider and see what happens.  Basically, I need some
> way to have a constraint that tracks the parent, but cannot become
> negative.  Is there some way to do this in a contstraint?  Or possibly
> a different solution that doesn't have the negative constraint  
> problem?
>
>
> <canvas>
>
>    <view x="20" y="20" layout="axis:y">
>      <view layout="axis:x">
>        <text text="outer view size: "/>
>        <slider id="sizeslider" width="100" showvalue="true"  
> value="50"/>
>      </view>
>      <view layout="axis:x">
>        <text text="inner view size: "/>
>        <text text="${box.subviews[0].height}" bgcolor="silver"/>
>      </view>
>    </view>
>
>    <view id="box" x="20" y="80" bgcolor="blue"
>          width="${sizeslider.value}" height="${sizeslider.value}">
>      <view bgcolor="green" x="10" y="10"
>            width="${parent.width - 20}" height="${parent.height -  
> 20}"/>
>    </view>
>
>
> </canvas>
>
>
> _______________________________________________
> Laszlo-user mailing list
> [email protected]
> http://www.openlaszlo.org/mailman/listinfo/laszlo-user


_______________________________________________
Laszlo-user mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-user

Reply via email to