[fun] Editing graphic vectorial content

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[fun] Editing graphic vectorial content

abergel
Just to share a 10 min coding session, just before lunch.

Result here:
https://www.facebook.com/photo.php?fbid=564129843673617&set=a.341189379300999.82969.340543479365589&type=1&theater

code:
-=-=-=-=-=-=-=-=
| view stack selected statusBar |
stack := ROViewStack new.
view := ROView new.
selected := nil.
statusBar := nil.

view on: ROMouseClick do: [ :evt |
        selected == #line ifTrue: [
                | ex1 ex2 line |
                ex1 := (ROBox new size: 10; color: (Color purple alpha: 0.2)) element.
                ex2 := (ROBox new size: 10; color: (Color purple alpha: 0.2)) element.
                ex1 translateTo: evt position.
                ex2 translateTo: evt position + (100 @ 60).
                ex1 @ ROLightlyHighlightable.
                ex2 @ ROLightlyHighlightable.
                ex1 @ RODraggable.
                ex2 @ RODraggable.
                line := (ROLine new width: 3; color: (Color blue alpha: 0.2)) elementFrom: ex1 to: ex2.
                view addAll: { ex1 . ex2 . line }.
        ].

        selected == #circle ifTrue: [
                | ellipse |
                ellipse := (ROEllipse new size: 40; color: (Color yellow alpha: 0.2)) element.
                ellipse translateTo: evt position.
                ellipse @ RODraggable.
                view add: ellipse.
        ].

       
        selected == #rectangle ifTrue: [
                | box |
                box := (ROBox new width: 40; height: 30; color: (Color blue alpha: 0.2)) element.
                box translateTo: evt position.
                box @ RODraggable.
                view add: box.
        ].
        view signalUpdate.
].



view @ RODraggable.

stack zoomInButton; zoomOutButton.
stack addMenu: '+ line' callBack: [ :evt | selected := #line. statusBar model: 'line' ].
stack addMenu: '+ rectangle' callBack: [ :evt | selected := #rectangle. statusBar model: 'rectangle' ].
stack addMenu: '+ circle' callBack: [ :evt | selected := #circle. statusBar model: 'circle' ].
stack addMenu: 'Info' callBack: [ :evt | UIManager default inform: 'Vectorial editing is hyper cool' ].

stack addView: view.
stack title: 'Vectorial edition'.

"Status bar at the bottom of the window"
statusBar := (ROElement new) + ROLabel + ROBox white.
stack add: statusBar.
ROConstraint stickAtTheBottomOfTheWindow: statusBar.

stack open
-=-=-=-=-=-=-=-=

Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-dev] [fun] Editing graphic vectorial content

Tudor Girba-2
Excellent!

It would be great to build on this.

Cheers,
Doru




On Sat, Dec 28, 2013 at 12:51 PM, Alexandre Bergel <[hidden email]> wrote:
Just to share a 10 min coding session, just before lunch.

Result here:
https://www.facebook.com/photo.php?fbid=564129843673617&set=a.341189379300999.82969.340543479365589&type=1&theater

code:
-=-=-=-=-=-=-=-=
| view stack selected statusBar |
stack := ROViewStack new.
view := ROView new.
selected := nil.
statusBar := nil.

view on: ROMouseClick do: [ :evt |
        selected == #line ifTrue: [
                | ex1 ex2 line |
                ex1 := (ROBox new size: 10; color: (Color purple alpha: 0.2)) element.
                ex2 := (ROBox new size: 10; color: (Color purple alpha: 0.2)) element.
                ex1 translateTo: evt position.
                ex2 translateTo: evt position + (100 @ 60).
                ex1 @ ROLightlyHighlightable.
                ex2 @ ROLightlyHighlightable.
                ex1 @ RODraggable.
                ex2 @ RODraggable.
                line := (ROLine new width: 3; color: (Color blue alpha: 0.2)) elementFrom: ex1 to: ex2.
                view addAll: { ex1 . ex2 . line }.
        ].

        selected == #circle ifTrue: [
                | ellipse |
                ellipse := (ROEllipse new size: 40; color: (Color yellow alpha: 0.2)) element.
                ellipse translateTo: evt position.
                ellipse @ RODraggable.
                view add: ellipse.
        ].


        selected == #rectangle ifTrue: [
                | box |
                box := (ROBox new width: 40; height: 30; color: (Color blue alpha: 0.2)) element.
                box translateTo: evt position.
                box @ RODraggable.
                view add: box.
        ].
        view signalUpdate.
].



view @ RODraggable.

stack zoomInButton; zoomOutButton.
stack addMenu: '+ line' callBack: [ :evt | selected := #line. statusBar model: 'line' ].
stack addMenu: '+ rectangle' callBack: [ :evt | selected := #rectangle. statusBar model: 'rectangle' ].
stack addMenu: '+ circle' callBack: [ :evt | selected := #circle. statusBar model: 'circle' ].
stack addMenu: 'Info' callBack: [ :evt | UIManager default inform: 'Vectorial editing is hyper cool' ].

stack addView: view.
stack title: 'Vectorial edition'.

"Status bar at the bottom of the window"
statusBar := (ROElement new) + ROLabel + ROBox white.
stack add: statusBar.
ROConstraint stickAtTheBottomOfTheWindow: statusBar.

stack open
-=-=-=-=-=-=-=-=

Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.







--

"Every thing has its own flow"

_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev