Yes we should really refactor this hierarchy. We should finish first the event model cleaning at VM/Image border then we work on this one.
On Aug 31, 2012, at 9:21 PM, Igor Stasenko wrote: > 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. >
