Le 9/1/16 11:15, Tudor Girba a écrit :
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.
Yes please. I should said that I was discouraged when I saw Glamour code
but this is easy to fix.
There is one spec left and we can be done. I fixed the paginated I do
not what.
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."