--- a/DisplaySurface.st Thu Jul 07 20:22:05 2016 +0200
+++ b/DisplaySurface.st Tue Jul 12 16:53:52 2016 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1992 by Claus Gittinger
All Rights Reserved
@@ -1465,108 +1467,111 @@
|delegate selector delegateMessage delegateQuery
eventReceiver controller deviceMessage
- isKeyEvent isButtonEvent isMouseWheelEvent isPointerEvent
+ isKeyEvent isButtonEvent isMouseWheelEvent isPointerEvent isExposeEvent
+
rect x y w h delegatedEvent rgn|
type == #damage ifTrue:[
- "/ OLDdamage scheme - this will vanish
- self shown ifTrue:[
- rect := argArray.
- x := rect left.
- y := rect top.
- w := rect width.
- h := rect height.
- transformation notNil ifTrue:[
- self deviceExposeX:x y:y width:w height:h
- ] ifFalse:[
- self exposeX:x y:y width:w height:h
- ]
- ].
- ^ self
+ "/ OLDdamage scheme - this will vanish
+ self shown ifTrue:[
+ rect := argArray.
+ x := rect left.
+ y := rect top.
+ w := rect width.
+ h := rect height.
+ transformation notNil ifTrue:[
+ self deviceExposeX:x y:y width:w height:h
+ ] ifFalse:[
+ self exposeX:x y:y width:w height:h
+ ]
+ ].
+ ^ self
].
type == #newDamage ifTrue:[
- "/ New damage scheme
- rgn := updateRegion.
- updateRegion := nil.
- self shown ifTrue:[
- rgn notNil ifTrue:[
- rgn do:[:rect |
- "/ cg: I think the check for being realized may not be enough;
- "/ there is a race here, if the view gets closed, while in the loop...
- realized ifTrue:[
- x := rect left.
- y := rect top.
- w := rect width.
- h := rect height.
- transformation notNil ifTrue:[
- self deviceExposeX:x y:y width:w height:h
- ] ifFalse:[
- self exposeX:x y:y width:w height:h
- ]
- ]
- ]
- ]
- ].
- ^ self
+ "/ New damage scheme
+ rgn := updateRegion.
+ updateRegion := nil.
+ self shown ifTrue:[
+ rgn notNil ifTrue:[
+ rgn do:[:rect |
+ "/ cg: I think the check for being realized may not be enough;
+ "/ there is a race here, if the view gets closed, while in the loop...
+ realized ifTrue:[
+ x := rect left.
+ y := rect top.
+ w := rect width.
+ h := rect height.
+ transformation notNil ifTrue:[
+ self deviceExposeX:x y:y width:w height:h
+ ] ifFalse:[
+ self exposeX:x y:y width:w height:h
+ ]
+ ]
+ ]
+ ]
+ ].
+ ^ self
].
- isKeyEvent := isButtonEvent := isPointerEvent := isMouseWheelEvent := false.
+ isKeyEvent := isButtonEvent := isPointerEvent := isMouseWheelEvent := isExposeEvent := false.
(type == #'keyPress:x:y:') ifTrue:[
- isKeyEvent := true.
- deviceMessage := #'deviceKeyPress:x:y:'.
- delegateMessage := #'keyPress:x:y:view:'.
- delegateQuery := #'handlesKeyPress:inView:'.
+ isKeyEvent := true.
+ deviceMessage := #'deviceKeyPress:x:y:'.
+ delegateMessage := #'keyPress:x:y:view:'.
+ delegateQuery := #'handlesKeyPress:inView:'.
] ifFalse:[ (type == #'keyRelease:x:y:') ifTrue:[
- isKeyEvent := true.
- deviceMessage := #'deviceKeyRelease:x:y:'.
- delegateMessage := #'keyRelease:x:y:view:'.
- delegateQuery := #'handlesKeyRelease:inView:'.
+ isKeyEvent := true.
+ deviceMessage := #'deviceKeyRelease:x:y:'.
+ delegateMessage := #'keyRelease:x:y:view:'.
+ delegateQuery := #'handlesKeyRelease:inView:'.
] ifFalse:[ (type == #'buttonMotion:x:y:') ifTrue:[
- isButtonEvent := true.
- deviceMessage := #'deviceButtonMotion:x:y:'.
- delegateMessage := #'buttonMotion:x:y:view:'.
- delegateQuery := #'handlesButtonMotion:inView:'.
+ isButtonEvent := true.
+ deviceMessage := #'deviceButtonMotion:x:y:'.
+ delegateMessage := #'buttonMotion:x:y:view:'.
+ delegateQuery := #'handlesButtonMotion:inView:'.
] ifFalse:[ (type == #'buttonPress:x:y:') ifTrue:[
- isButtonEvent := true.
- deviceMessage := #'deviceButtonPress:x:y:'.
- delegateMessage := #'buttonPress:x:y:view:'.
- delegateQuery := #'handlesButtonPress:inView:'.
+ isButtonEvent := true.
+ deviceMessage := #'deviceButtonPress:x:y:'.
+ delegateMessage := #'buttonPress:x:y:view:'.
+ delegateQuery := #'handlesButtonPress:inView:'.
] ifFalse:[ (type == #'buttonRelease:x:y:') ifTrue:[
- isButtonEvent := true.
- deviceMessage := #'deviceButtonRelease:x:y:'.
- delegateMessage := #'buttonRelease:x:y:view:'.
- delegateQuery := #'handlesButtonRelease:inView:'.
+ isButtonEvent := true.
+ deviceMessage := #'deviceButtonRelease:x:y:'.
+ delegateMessage := #'buttonRelease:x:y:view:'.
+ delegateQuery := #'handlesButtonRelease:inView:'.
] ifFalse:[ (type == #'buttonShiftPress:x:y:') ifTrue:[
- isButtonEvent := true.
- deviceMessage := #'deviceButtonShiftPress:x:y:'.
- delegateMessage := #'buttonShiftPress:x:y:view:'.
- delegateQuery := #'handlesButtonShiftPress:inView:'.
+ isButtonEvent := true.
+ deviceMessage := #'deviceButtonShiftPress:x:y:'.
+ delegateMessage := #'buttonShiftPress:x:y:view:'.
+ delegateQuery := #'handlesButtonShiftPress:inView:'.
] ifFalse:[ (type == #'buttonMultiPress:x:y:') ifTrue:[
- isButtonEvent := true.
- deviceMessage := #'deviceButtonMultiPress:x:y:'.
- delegateMessage := #'buttonMultiPress:x:y:view:'.
- delegateQuery := #'handlesButtonMultiPress:inView:'.
+ isButtonEvent := true.
+ deviceMessage := #'deviceButtonMultiPress:x:y:'.
+ delegateMessage := #'buttonMultiPress:x:y:view:'.
+ delegateQuery := #'handlesButtonMultiPress:inView:'.
] ifFalse:[ (type == #mouseWheelMotion:x:y:amount:deltaTime:) ifTrue:[
- isMouseWheelEvent := true.
- deviceMessage := type.
- delegateMessage := #mouseWheelMotion:x:y:amount:deltaTime:view:.
- delegateQuery := #handlesMouseWheelMotion:inView:.
+ isMouseWheelEvent := true.
+ deviceMessage := type.
+ delegateMessage := #mouseWheelMotion:x:y:amount:deltaTime:view:.
+ delegateQuery := #handlesMouseWheelMotion:inView:.
] ifFalse:[ (type == #'pointerEnter:x:y:') ifTrue:[
- isPointerEvent := true.
- deviceMessage := #'devicePointerEnter:x:y:'.
- delegateMessage := #'pointerEnter:x:y:view:'.
- delegateQuery := #'handlesPointerEnter:inView:'.
+ isPointerEvent := true.
+ deviceMessage := #'devicePointerEnter:x:y:'.
+ delegateMessage := #'pointerEnter:x:y:view:'.
+ delegateQuery := #'handlesPointerEnter:inView:'.
] ifFalse:[ (type == #'pointerLeave:') ifTrue:[
- isPointerEvent := true.
- deviceMessage := type.
- delegateMessage := #'pointerLeave:view:'.
- delegateQuery := #'handlesPointerLeave:inView:'.
+ isPointerEvent := true.
+ deviceMessage := type.
+ delegateMessage := #'pointerLeave:view:'.
+ delegateQuery := #'handlesPointerLeave:inView:'.
] ifFalse:[ (type == #'exposeX:y:width:height:') ifTrue:[
- deviceMessage := #'deviceExposeX:y:width:height:'.
+ isExposeEvent := true.
+ deviceMessage := #'deviceExposeX:y:width:height:'.
] ifFalse:[ (type == #'graphicsExposeX:y:width:height:final:') ifTrue:[
- deviceMessage := #'deviceGraphicsExposeX:y:width:height:final:'.
+ isExposeEvent := true.
+ deviceMessage := #'deviceGraphicsExposeX:y:width:height:final:'.
]]]]]]]]]]]].
"
@@ -1577,56 +1582,56 @@
"
((isKeyEvent "or:[isMouseWheelEvent]")
and:[focusView notNil and:[self ~~ focusView]]) ifTrue:[
- delegatedEvent := ev shallowCopy.
- delegatedEvent delegatedFrom:ev.
- delegatedEvent arguments:(ev arguments shallowCopy).
- delegatedEvent x:-1; y:-1.
-
- focusView
- dispatchEvent:delegatedEvent
- withFocusOn:nil
- delegate:doDelegate.
- ^ self
+ delegatedEvent := ev shallowCopy.
+ delegatedEvent delegatedFrom:ev.
+ delegatedEvent arguments:(ev arguments shallowCopy).
+ delegatedEvent x:-1; y:-1.
+
+ focusView
+ dispatchEvent:delegatedEvent
+ withFocusOn:nil
+ delegate:doDelegate.
+ ^ self
].
doDelegate ifTrue:[
- "
- handle delegated messages
- "
- (isKeyEvent
- or:[isButtonEvent
- or:[isMouseWheelEvent
- or:[isPointerEvent]]]) ifTrue:[
- delegate := self delegate.
-
- "
- what a kludge - sending to delegate requires
- another selector and an additional argument ...
- "
- (delegate notNil) ifTrue:[
- "
- is the delegate interested in that event ?
- (if it does not respond to the handlesXXX message, assume: NO)
- "
- (delegate askFor:delegateQuery with:(argArray at:1) with:self) ifTrue:[
- "
- mhmh ... have to convert to logical coordinates
- "
- transformation notNil ifTrue:[
- argArray size > 2 ifTrue:[
- argArray at:2 put:(transformation applyInverseToX:(argArray at:2)).
- argArray at:3 put:(transformation applyInverseToY:(argArray at:3)).
- ].
- ].
- argArray isNil ifTrue:[
- delegate perform:delegateMessage with:self
- ] ifFalse:[
- delegate perform:delegateMessage withArguments:(argArray copyWith:self)
- ].
- ^ self
- ]
- ].
- ].
+ "
+ handle delegated messages
+ "
+ (isKeyEvent
+ or:[isButtonEvent
+ or:[isMouseWheelEvent
+ or:[isPointerEvent]]]) ifTrue:[
+ delegate := self delegate.
+
+ "
+ what a kludge - sending to delegate requires
+ another selector and an additional argument ...
+ "
+ (delegate notNil) ifTrue:[
+ "
+ is the delegate interested in that event ?
+ (if it does not respond to the handlesXXX message, assume: NO)
+ "
+ (delegate askFor:delegateQuery with:(argArray at:1) with:self) ifTrue:[
+ "
+ mhmh ... have to convert to logical coordinates
+ "
+ transformation notNil ifTrue:[
+ argArray size > 2 ifTrue:[
+ argArray at:2 put:(transformation applyInverseToX:(argArray at:2)).
+ argArray at:3 put:(transformation applyInverseToY:(argArray at:3)).
+ ].
+ ].
+ argArray isNil ifTrue:[
+ delegate perform:delegateMessage with:self
+ ] ifFalse:[
+ delegate perform:delegateMessage withArguments:(argArray copyWith:self)
+ ].
+ ^ self
+ ]
+ ].
+ ].
].
"
@@ -1636,9 +1641,9 @@
or:[isButtonEvent
or:[isMouseWheelEvent
or:[isPointerEvent]]]) ifTrue:[
- realized ifFalse:[
- ^ self
- ]
+ realized ifFalse:[
+ ^ self
+ ]
].
"
@@ -1646,14 +1651,14 @@
"
eventReceiver := self.
(controller := self controller) notNil ifTrue:[
- (isKeyEvent
- or:[isButtonEvent
- or:[isMouseWheelEvent
- or:[isPointerEvent
- or:[(type == #focusIn)
- or:[(type == #focusOut)]]]]]) ifTrue:[
- eventReceiver := controller.
- ]
+ (isKeyEvent
+ or:[isButtonEvent
+ or:[isMouseWheelEvent
+ or:[isPointerEvent
+ or:[(type == #focusIn)
+ or:[(type == #focusOut)]]]]]) ifTrue:[
+ eventReceiver := controller.
+ ]
].
"
@@ -1669,14 +1674,13 @@
selector := type.
transformation notNil ifTrue:[
- (isKeyEvent
- or:[isButtonEvent
- or:[isMouseWheelEvent
- or:[isPointerEvent
- or:[(type == #'exposeX:y:width:height:')
- or:[(type == #'graphicsExposeX:y:width:height:final:')]]]]]) ifTrue:[
- selector := deviceMessage
- ]
+ (isKeyEvent
+ or:[isButtonEvent
+ or:[isMouseWheelEvent
+ or:[isPointerEvent
+ or:[isExposeEvent]]]]) ifTrue:[
+ selector := deviceMessage
+ ]
].
eventReceiver perform:selector withArguments:argArray