Hi,

This issue is still pending:
https://pharo.fogbugz.com/f/cases/7077/LayoutFrame-refactoring

Let us fix the Glamour issues and then we can deprecate it.

Cheers,
Doru


> On Jan 9, 2016, at 11:54 AM, Thierry Goubier <[email protected]> 
> wrote:
> 
> Stef,
> 
> could you deprecate the use of fractions:offsets: ? It's a nice way of 
> shooting oneself in the foot.
> 
> Create a LayoutFrame taking all space:
> 
> LayoutFrame fractions: (0@0 corner: 1@1)
> 
> right?
> 
> Create a layout frame taking all space with an inset of three, so an offset 
> of +3 left and above, and -3 right and bottom:
> 
> LayoutFrame fractions: (0@0 corner: 1@1) offsets: (3@3 extent: -3@ -3)
> 
> Fail!
> 
> See what I mean? You have to forbid the use of a rectangle for offsets!
> 
> (Note: I think the easiest API is the one used by Spec and Morphic: Rectangle 
> asLayoutFrame topOffset: / bottomOffset ...)
> 
> Thierry
> 
> Le 09/01/2016 09:56, stepharo a écrit :
>> Here is the new class comments I'm trying to write.
>> I hope that it will help people to understand the circumstances under
>> which they should use fractions:offset: creation API.
>> 
>> 
>> 
>> I define a transformation frame relative to some rectangle. I'm basic
>> data structure used for graphics.
>> I represent two groups of distances:
>> - The fractional distance (between 0 and 1) to place the morph in its
>> owner's bounds
>> - Fixed pixel offset to apply after fractional positioning (e.g., "10
>> pixel right of the center of the owner")
>> 
>> !! API usage
>> It is important to understand that it is better to use the fine grained
>> API using elementary distances (bottomFraction:, bottomOffset:,
>> leftFraction: ....) than the ones (historical) using points and
>> rectangles (fractions:offsets:)
>> 
>> The reason is that the old API (fractions:offsets:) is only interesting
>> if you already have a rectangle and points at hand. If you need to
>> create new ones, then they are created for nothing because they will be
>> destructured to extract their information to be feed into the layoutFrame.
>> So please do not blindly copy and paste code!
>> 
>> Example:
>> Favor
>> 
>>     (LayoutFrame identity
>>                 leftFraction: 0;
>>                 yourself);
>> 
>>     (LayoutFrame identity
>>             leftFraction: 0.5;
>>             rightFraction: 0.95;
>> 
>>     (LayoutFrame identity
>>             topOffset: topHeight;
>>             bottomFraction: 0;
>>             bottomOffset: self buttonsBarHeight;
>>             leftOffset: -1;
>>             rightOffset: 1)
>> over
>> 
>>     (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1))
>> 
>> because you are creating for nothing a new rectangle and some points.
>> 
>> 
>> 
>> !! Implementation
>> 
>> Instance variables:
>> The fractional distance (between 0 and 1) to place the morph in its
>> owner's bounds is represented by the following instance variables:
>>     leftFraction
>>     topFraction
>>     rightFraction
>>     bottomFraction     <Float>
>> 
>> 
>> Fixed pixel offset to apply after fractional positioning (e.g., "10
>> pixel right of the center of the owner")  is represented by the
>> following instance variables:
>>     leftOffset
>>     topOffset
>>     rightOffset
>>     bottomOffset     <Integer>
>> 
>> 
> 
> 

--
www.tudorgirba.com
www.feenk.com

"The coherence of a trip is given by the clearness of the goal."






Reply via email to