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.al...@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@30 and the not the correct 0@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 <siguc...@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@0 and see where it is. > then draw something at morph's x@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@0; > cwArcTo: 5@5 angle: 45; > lineTo: 0@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@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.al...@gmail.com> wrote: > wow you guys are fast at replying :) > > I did > > > self changeProportionalLayout. > editButton := HypEditButton new . > editButton position: 0@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@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@0; > cwArcTo: 5@5 angle: 45; > lineTo: 0@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@0; > cwArcTo: 2@2 angle: 45; > lineTo: 0@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@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 <siguc...@gmail.com> wrote: > > > > On 28 November 2013 10:59, kilon alios <kilon.al...@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.ph...@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.al...@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@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@0 , it actually appears in 0@30 in local coordinated of the >> Hyperion moprh which in global coordinates it 6@60 ( 0@0 + 6@30 + 0@30 = >> 6@60). Why is that ? >> >> I have no clue why I am getting an offset of 0@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. >