[Pharo-dev] Coordinates problem with Athens and Morphic while coding Hyperion

Igor Stasenko siguctua at gmail.com
Fri Nov 29 06:37:39 EST 2013


On 29 November 2013 09:42, kilon alios <kilon.alios at gmail.com> wrote:

> please note that the button for inserting an image is different to the
> button for attaching an image. Strange that it does not let you attach
> files, maybe if you zip, but in any case why dont you make smalltalkhub
> repo and publish the code there and give me  the link to it ?
>
> because i don't publish every bit of experimental code i did , only less
experimental :)
another try, sent you files privately by normal attachment.



>
> On Fri, Nov 29, 2013 at 6:36 AM, Igor Stasenko <siguctua at gmail.com> wrote:
>
>>
>>
>>
>> On 28 November 2013 22:49, kilon alios <kilon.alios at gmail.com> wrote:
>>
>>> well I could ask you to give me access to those files , that would be a
>>> good start  ;)
>>>
>>> I am so new to this google drive thing
>>>
>>> hehe.. me too.. apperently it doesn't wants to just attach files,
>> and need multiple more clicks to enable weird sharing, like sending a
>> copy is not
>> good enough :)
>>
>>
>>>
>>> On Thu, Nov 28, 2013 at 10:08 PM, Igor Stasenko <siguctua at gmail.com>wrote:
>>>
>>>>
>>>>  BezierMorph.st.gz<https://docs.google.com/file/d/0B7dd-52sqS20SW9JMUxZREh1ZkJEc1UwZkNiYy1jbnZnV2Y0/edit?usp=drive_web>
>>>>
>>>>  Morphic-BezierCurve.st<https://docs.google.com/file/d/0B7dd-52sqS20LW5XV2NwaFpPeEJudFFGZ3ZsZFBxZC0zaVBr/edit?usp=drive_web>
>>>>
>>>> On 28 November 2013 16:54, kilon alios <kilon.alios at gmail.com> wrote:
>>>>
>>>>> absolutely, more code mean deeper understanding how to be more
>>>>> dangerous as a coder
>>>>>
>>>>
>>>> here it is.. it took me some effort to find it, buried under piles of
>>>> other things.
>>>> i don't know which one is latest/working, and don't ask me how it works
>>>> .. it was long ago i was young and sky was blue :)
>>>>
>>>>
>>>> On Thu, Nov 28, 2013 at 4:16 PM, Igor Stasenko <siguctua at gmail.com>wrote:
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 28 November 2013 13:52, kilon alios <kilon.alios at gmail.com> wrote:
>>>>>
>>>>>> thats all I got I am afraid right now. A simple editing of a straight
>>>>>> line, but I am learning athens, roassal, morphic so it takes time. Its my
>>>>>> first with everything and my very first project with pharo. I am not aiming
>>>>>> for something super sophisticated, bezier lines, gradients, bitmaps etc
>>>>>> simple stuff but I am having so much fun with this project I wont give up
>>>>>> until I have it finished. :)
>>>>>>
>>>>>>
>>>>> btw, if you want, i got somewhere code for Bezier curve editing (in
>>>>> morphic)..
>>>>> it is not fully working, but at least something you can look at:
>>>>>  - if i remember you can add control points and move them around.
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> On Thu, Nov 28, 2013 at 2:30 PM, Alexandre Bergel <
>>>>>> alexandre.bergel at me.com> wrote:
>>>>>>
>>>>>>> Do you have  more screenshots of Hyperion?
>>>>>>>
>>>>>>> Alexandre
>>>>>>> --
>>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>>> Alexandre Bergel  http://www.bergel.eu
>>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Nov 28, 2013, at 7:49 AM, kilon alios <kilon.alios at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> > Ok I have verified and indeed its not an Athens problem. My bad.
>>>>>>> The position of the morph is reported at 5 at 30 and the not the
>>>>>>> correct 0 at 0. So it looks like Morphic for some strange reason it
>>>>>>> offsets it.
>>>>>>> >
>>>>>>> > I knew about translateBy but I did not know about restoreAfter. so
>>>>>>> thank you.
>>>>>>> >
>>>>>>> > I prefer my version of the code because it makes clearer what I am
>>>>>>> trying to do. However ideally because I am drawing a box inside another box
>>>>>>> the best way would be to follow your approach and scale the second box
>>>>>>> using one shape instead of two I am currently doing. But thats the price I
>>>>>>> am paying from not knowing exactly how to do this.
>>>>>>> >
>>>>>>> > Also trying to painstakingly find the correct transform and scale
>>>>>>> values requires A LOT of testing . This is why I find a vector editor for
>>>>>>> Athens and Pharo absolutely essential. No coding can beat designing via
>>>>>>> mouse.
>>>>>>> >
>>>>>>> > On the other hand I could use Inkscape and import the svg to
>>>>>>> Athens , which what I am about to research. Designing all GUI elements by
>>>>>>> code is a very bad idea, but no less a learning experience.
>>>>>>> >
>>>>>>> > I will most probably move to Roassal too.
>>>>>>> >
>>>>>>> > As always thanks for the help.
>>>>>>> >
>>>>>>> >
>>>>>>> > On Thu, Nov 28, 2013 at 12:29 PM, Igor Stasenko <
>>>>>>> siguctua at gmail.com> wrote:
>>>>>>> > well, by default the athens canvas coordinate system matches
>>>>>>> morphic one..
>>>>>>> > but you know, it always hard to be sure, especially if you perform
>>>>>>> any local coordinate transformations before that morph has any chance to
>>>>>>> draw itself..
>>>>>>> >
>>>>>>> > You can figure this out easily: draw something at 0 at 0 and see
>>>>>>> where it is.
>>>>>>> > then draw something at morph's x at y position and see it too.
>>>>>>> >
>>>>>>> > btw, you know you don't have to create same paths over and over.
>>>>>>> > you can easily put static parts out of regularly (and costly)
>>>>>>> evaluated code:
>>>>>>> >
>>>>>>> > shape := canvas cacheAt: self "morph" ifAbsentPut: [
>>>>>>> >                 aCanvas createPath: [:path |
>>>>>>> >               path relative.
>>>>>>> > " no move-to here ***  path moveTo: ((self position x )+5)@(self
>>>>>>> position y);"
>>>>>>> >               lineTo: 20 at 0;
>>>>>>> >               cwArcTo: 5 at 5 angle: 45;
>>>>>>> >               lineTo: 0 at 20;
>>>>>>> >               cwArcTo: (-5)@5 angle: 45;
>>>>>>> >               lineTo: (-20)@0;
>>>>>>> >               cwArcTo: (-5)@(-5) angle: 45;
>>>>>>> >               lineTo: 0@(-20);
>>>>>>> >               cwArcTo: 5@(-5) angle: 45.
>>>>>>> >                 ].
>>>>>>> > ].
>>>>>>> >
>>>>>>> > "and here we're using coordinate transform to translate origin
>>>>>>> point to
>>>>>>> > given position, so it will be the starting point (0 at 0) of our
>>>>>>> shape"
>>>>>>> >
>>>>>>> > canvas pathTransform restoreAfter: [
>>>>>>> >    canvas pathTransform translateBy:((self position x )+5)@(self
>>>>>>> position y).
>>>>>>> >    canvas drawShape: shape.
>>>>>>> > ]
>>>>>>> >
>>>>>>> > by analogy you can cache all static pieces, just do something:
>>>>>>> >
>>>>>>> > shapes := canvas cacheAt: self ifAbsentPut: [ self
>>>>>>> constructStaticShapesOn: aCanvas ]
>>>>>>> >
>>>>>>> > where #constructStaticShapesOn: must answer an array of them.
>>>>>>> >
>>>>>>> >
>>>>>>> > On 28 November 2013 11:12, kilon alios <kilon.alios at gmail.com>
>>>>>>> wrote:
>>>>>>> > wow you guys are fast at replying :)
>>>>>>> >
>>>>>>> > I did
>>>>>>> >
>>>>>>> >
>>>>>>> >       self changeProportionalLayout.
>>>>>>> >       editButton := HypEditButton new .
>>>>>>> >       editButton position: 0 at 0.
>>>>>>> >       self addMorph: editButton fullFrame: #(0 0 0 0 0 0 100 100).
>>>>>>> >
>>>>>>> > I am afraid Igor I still see no change with your code.
>>>>>>> >
>>>>>>> > I like to note here, that when I first created the editButton as
>>>>>>> morph , it indeed placed it in correct place. A 0 at 0 placed it in
>>>>>>> top left corner as expected. But I did overide its DrawOn:  with an empty
>>>>>>> method and used my own method to render it with Athens. So it looks like
>>>>>>> the problem is Athens related and not Morphic related or maybe a
>>>>>>> disagreement between Morphic and Athens.
>>>>>>> >
>>>>>>> > just for the record here is the code I use to render the
>>>>>>> HypEditButton morph
>>>>>>> >
>>>>>>> > render:aCanvas
>>>>>>> >       |shape1 shape2 shape3 editButtonColor |
>>>>>>> > shape1 := aCanvas createPath: [:path |
>>>>>>> >               path relative .
>>>>>>> >
>>>>>>> >               path moveTo: ((self position x )+5)@(self position
>>>>>>> y);
>>>>>>> >               lineTo: 20 at 0;
>>>>>>> >               cwArcTo: 5 at 5 angle: 45;
>>>>>>> >               lineTo: 0 at 20;
>>>>>>> >               cwArcTo: (-5)@5 angle: 45;
>>>>>>> >               lineTo: (-20)@0;
>>>>>>> >               cwArcTo: (-5)@(-5) angle: 45;
>>>>>>> >               lineTo: 0@(-20);
>>>>>>> >               cwArcTo: 5@(-5) angle: 45.
>>>>>>> >                 ].
>>>>>>> >
>>>>>>> >       shape2 := aCanvas createPath: [:path |
>>>>>>> >               path relative .
>>>>>>> >
>>>>>>> >               path moveTo: ((self position x +7))@((self position
>>>>>>> y +3));
>>>>>>> >               lineTo: 18 at 0;
>>>>>>> >               cwArcTo: 2 at 2 angle: 45;
>>>>>>> >               lineTo: 0 at 20;
>>>>>>> >               cwArcTo: (-2)@2 angle: 45;
>>>>>>> >          lineTo: (-20)@0;
>>>>>>> >               cwArcTo: (-2)@(-2) angle: 45;
>>>>>>> >               lineTo: 0@(-20);
>>>>>>> >               cwArcTo: 4@(-2) angle: 45.
>>>>>>> >                 ].
>>>>>>> >       shape3 := aCanvas createPath: [:path |
>>>>>>> >               path relative .
>>>>>>> >
>>>>>>> >               path moveTo: ((self position x +15))@((self position
>>>>>>> y +10));
>>>>>>> >
>>>>>>> >               cwArcTo: 5 at 5 angle: 90;
>>>>>>> >               cwArcTo: (-5)@5 angle: 90;
>>>>>>> >               cwArcTo: (-5)@(-5) angle: 90;
>>>>>>> >               cwArcTo: 5@(-5) angle: 90.
>>>>>>> >
>>>>>>> >
>>>>>>> >                 ].
>>>>>>> >
>>>>>>> > ( editMode = true) ifTrue: [ editButtonColor := Color green]
>>>>>>> ifFalse: [ editButtonColor := Color red ].
>>>>>>> > (aCanvas setStrokePaint: editButtonColor) width: 1.
>>>>>>> >
>>>>>>> > aCanvas drawShape: shape1 .
>>>>>>> > aCanvas drawShape: shape2.
>>>>>>> > aCanvas setPaint: (editButtonColor alpha: 0.3 ).
>>>>>>> > aCanvas drawShape: shape3.
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > On Thu, Nov 28, 2013 at 12:03 PM, Igor Stasenko <
>>>>>>> siguctua at gmail.com> wrote:
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > On 28 November 2013 10:59, kilon alios <kilon.alios at gmail.com>
>>>>>>> wrote:
>>>>>>> > just tried it, I see no change
>>>>>>> >
>>>>>>> > try:
>>>>>>> >  self changeProportionalLayout
>>>>>>> >
>>>>>>> > editButton := HypEditButton new .
>>>>>>> >       self addMorph: editButton fullFrame: #(0 0 0 0 0 0 100 100).
>>>>>>> >
>>>>>>> >
>>>>>>> > On Thu, Nov 28, 2013 at 11:54 AM, Benjamin <
>>>>>>> Benjamin.VanRyseghem.Pharo at gmail.com> wrote:
>>>>>>> > Can you try to do something like
>>>>>>> >
>>>>>>> > self changeProportionalLayout
>>>>>>> > before adding the morph ?
>>>>>>> >
>>>>>>> > Ben
>>>>>>> >
>>>>>>> > On 28 Nov 2013, at 10:51, kilon alios <kilon.alios at gmail.com>
>>>>>>> wrote:
>>>>>>> >
>>>>>>> >> So I have found some strange problems with my vector editor ,
>>>>>>> Hyperion.
>>>>>>> >>
>>>>>>> >> Hyperion is a Morph openInWindow. Code can be found in the class
>>>>>>> side of Hyperion>>open.
>>>>>>> >>
>>>>>>> >>  The coordinate system when detecting events (mouseOver, mouseUp
>>>>>>> and mouseDown events of the Hyperion instance) looks like it takes to
>>>>>>> account also beyond the morph as coordinates as a result events happening
>>>>>>> at the top right edge of the morph where Hyperion is rendered is 6 at 30(
>>>>>>> which is the size of the window's title bar plus its borders). Thats ok, I
>>>>>>> have taken these offsets to account when computing the position of the
>>>>>>> mouse. I guess it uses the global coordinated and not the local coordinates
>>>>>>> of the morph.
>>>>>>> >>
>>>>>>> >> I am adding a button to control the edit mode of a line, when in
>>>>>>> edit mode handles for line's control points are shown and those handles can
>>>>>>> be dragged around to control the shape of the line , when off edit mode,
>>>>>>> the line will be able to be drag around (not implemented yet).
>>>>>>> >>
>>>>>>> >> My problem is that when I add that button as morph to the
>>>>>>> existing morph of Hyperion in 0 at 0 , it actually appears in 0 at 30 in
>>>>>>> local coordinated of the Hyperion moprh which in global coordinates it 6 at 60( 0 at 0+ 6 at 30+ 0 at 30= 6 at 60).
>>>>>>> Why is that ?
>>>>>>> >>
>>>>>>> >> I have no clue why I am getting an offset of 0 at 30 in local
>>>>>>> coordinates of the Hyperion morph.
>>>>>>> >>
>>>>>>> >> here is the picture showing a) how it looks like b) the code that
>>>>>>> set the position c) transcript showing mouse coordinates when clicked in
>>>>>>> the top left corner of Hyperion morph
>>>>>>> >>  Hyperion coordinates problem.JPG
>>>>>>> >>
>>>>>>> >> if anyone wants to try the code himself the repo is here
>>>>>>> >>
>>>>>>> >> http://www.smalltalkhub.com/#!/~kilon/Hyperion
>>>>>>> >>
>>>>>>> >> To sum up, to place that button on top left, I will have to
>>>>>>> position it 0@(-30) which for me makes no sense at all.
>>>>>>> >>
>>>>>>> >> Please note that everything is rendered with Athens.
>>>>>>> >>
>>>>>>> >> Maybe I have messed up the code myself somewhere but I have
>>>>>>> looked it again and again I cant find a problem with my code.
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > --
>>>>>>> > Best regards,
>>>>>>> > Igor Stasenko.
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > --
>>>>>>> > Best regards,
>>>>>>> > Igor Stasenko.
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Best regards,
>>>>> Igor Stasenko.
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Best regards,
>>>> Igor Stasenko.
>>>>
>>>
>>>
>>
>>
>> --
>> Best regards,
>> Igor Stasenko.
>>
>
>


-- 
Best regards,
Igor Stasenko.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20131129/36cbac03/attachment-0002.html>


More information about the Pharo-dev mailing list