Another use case: centering a label on an object, in this case a circle shape.
Not sure if this is the most appropriate use but just brainstorming... see attached file-in.

Ben Coman wrote:
Thanks for looking at this Alexandre.  That is an interesting approach.  I had 
been considering that each shape might just store an offset internally that cold 
be set.

Attached is "ShapeTranslation-20120916a-bencoman.st" containing some simple use 
cases for ROTranslatingShape
as well as "ROTranslatingShape-usecases.png" containing compiled screenshots.

Having worked through those use cases, it seems that how the offset shapes 
affect the element extent needs to be considered - particular in relation to 
mouse events.  For example, if an element is made up of two shapes at opposite 
corners, then the blank space at the other two corners remains selectable to 
drag the element, which might not be quite right.  So as wild and uninformed 
speculation... I wonder if rather than the element registering for events, the 
individual shapes might register for events and forward them on to the element 
for processing.

cheers -ben

Alexandre Bergel wrote:
> Hi Ben!
>
>   
>> ...where the two labels overlap.  I think you would gain a lot if you could do something like the following...
>>     n1 := ROElement spriteOn: 'XX___'.
>>     n1 + (shape1 := ROLabel new text: #model). 
>>     n1 + (ROLabel new text: #bounds; offset: [ shape1 bottomLeftCorner ] ).
>>     rawView add: n1.
>>     
>
> I have improved the way shapes are drawn. If you update, you can then create the following class:
>
> -=-=-=-=-=-=-=-=-=-=-=-=
> ROShape subclass: #ROTranslatingShape
> 	instanceVariableNames: 'offset'
>
> initialize
> 	super initialize.
> 	offset := 0 @ 0
>
> chainedDrawOn: aCanvas for: aROElement
> 	aROElement translateBy: offset negated. 
> 	super chainedDrawOn: aCanvas for: aROElement.
> 	aROElement translateBy: offset.
>
> offset: aPoint
> 	offset := aPoint
> -=-=-=-=-=-=-=-=-=-=-=-=
>
> I've attached the .cs for convenience. 
>   
> --------------------------------------------------------------------------------
>
>
>
> You can then do the following:
>
> el := ROElement new + ROBorder + (ROTranslatingShape new offset: 20 @ 20) + ROBox . 
> el extent: 50 @ 50.
> el @ RODraggable.
> rawView add: el.
>
>   
>
> --------------------------------------------------------------------------------
>
> --------------------------------------------------------------------------------
>
>
>
> Without the translation, you have 
>
> el := ROElement new + ROBorder + ROBox . 
> el extent: 50 @ 50.
> el @ RODraggable @ ROPopup. 
> rawView add: el.
>
>   
>
> --------------------------------------------------------------------------------
>
> --------------------------------------------------------------------------------
>
>
>
>
> I haven't included ROTranslatingShape in Roassal. I first would like to see use cases of it.
> Let me know how it goes.
>
> Cheers,
> Alexandre
>
>
>   
>> Alexandre Bergel wrote:
>>     
>>> Hi Ben,
>>>
>>> Currently no. We definitely need a better way to specific layouts and their composition. However this will take time before we have this. 
>>>
>>> How would you like to specific the layout?
>>>
>>> Cheers,
>>> Alexandre
>>>
>>>
>>> On Aug 30, 2012, at 6:10 PM, Ben Coman 
>>> <btc@openInWorld.com>
>>>  wrote:
>>>
>>>   
>>>
>>>       
>>>> I have been looking at the ROExample "Nesting" examples and expanded #nesting2 with another level as shown in the code below, such that there is the outer view, middle "#1" nodes and inner "#2" nodes. However the initial state of this has much of the middle node1 and inner node2 nodes overlapping. 
>>>> How can these be made for the circle layout to leave spacing between the middle node1 nodes?
>>>>
>>>> cheers -ben
>>>>
>>>> --------------------
>>>>   | view nodes1 |
>>>>   view := ROView new.
>>>>   view add: (ROElement sprite addAll: (nodes1 := ROElement spritesOn: (1 to: 10))).
>>>>   nodes1 do: [:n | n addShape: ROLabel].
>>>>   nodes1 do:
>>>>   [     :node1 |
>>>>       ( (node1 model) *100+1 to: (node1 model)*100+5 ) do:
>>>>       [    :x |
>>>>           node1 add: ( (ROElement spriteOn: x) addShape: ROLabel).
>>>>       ].
>>>>   ROGridLayout on: node1 elements.
>>>>   ].
>>>>
>>>>   ROCircleLayout on: nodes1.
>>>>   view openInWindow.
>>>> _______________________________________________
>>>>         

  




_______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev