DisplaySurface.st
changeset 7410 7324cb6c30dc
parent 7302 bc00d96fd11f
child 7416 bd3b9e9edd9e
child 7490 315ec0fa53bc
--- 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