Search code examples
smalltalkmorphic

Having a dropped morph to snap to a grid (Cuis Smalltalk)


Which method do I need to change in Cuis, class PasteUpMorph to have a dropped morph to snap to a 10 by 10 pixel grid?


Solution

  • Open the Method Finder: World / Open / Message Names Enter 'drop' in the text box. Click (search) . First message shown is #acceptDroppingMorph:event: We are lucky! At the end of the implementation in PasteUpMorph add:

    p := aMorph morphPosition.
    p := (p x roundTo: 10) @ (p y roundTo: 10).
    aMorph morphPosition: p.
    

    That's it. Maybe instead of the World you want to use a morph of your own, then you can add a DragAndDropAreaMorph to the world, and it that class add this method:

    acceptDroppingMorph: aMorph event: evt
        | p |
        super
            acceptDroppingMorph: aMorph
            event: evt.
        p := aMorph morphPosition.
        p := (p x roundTo: 10) @ (p y roundTo: 10).
        aMorph morphPosition: p