and to give an idea, how current Morphic doing that, a starting point is
MorphicEventDispatcher

personally, i find this code too complex to understand, given heavy
use of case statements and branches.

But i figured out, that this method:


dispatchEvent: anEvent with: aMorph
        "Dispatch the given event for a morph that has chosen the receiver to
dispatch its events. The method implements a shortcut for repeated
dispatches of events using the same dispatcher."
        anEvent type == lastType ifTrue:[^self perform: lastDispatch with:
anEvent with: aMorph].
        "Otherwise classify"
        lastType := anEvent type.
        anEvent isMouse ifTrue:[
                anEvent isMouseDown ifTrue:[
                        lastDispatch := #dispatchMouseDown:with:.
                        ^self dispatchMouseDown: anEvent with: aMorph]].
        anEvent type == #dropEvent ifTrue:[
                lastDispatch := #dispatchDropEvent:with:.
                ^self dispatchDropEvent: anEvent with: aMorph].
        anEvent isWindowEvent ifTrue:[
                lastDispatch := #dispatchWindowEvent:with:.
                ^self dispatchWindowEvent: anEvent with: aMorph].       
        lastDispatch := #dispatchDefault:with:.
        ^self dispatchDefault: anEvent with: aMorph

---

actually can be replaced by one-liner:

dispatchEvent: anEvent with: aMorph
    morph := aMorph.
   ^ anEvent sentTo: self

.. yeah.. my favorite thing:  double-dispatch.

-- 
Best regards,
Igor Stasenko.

Reply via email to