--- a/DisplaySurface.st Thu Nov 06 12:00:33 2008 +0100
+++ b/DisplaySurface.st Sun Nov 09 12:30:41 2008 +0100
@@ -12,8 +12,8 @@
"{ Package: 'stx:libview' }"
GraphicsMedium subclass:#DisplaySurface
- instanceVariableNames:'viewBackground cursor eventMask moreAttributes unused1
- uuid backed flags delegate updateRegion'
+ instanceVariableNames:'viewBackground cursor eventMask moreAttributes unused1 uuid
+ backed flags delegate updateRegion'
classVariableNames:'SaveUnderFlagMask GotExposeFlagMask'
poolDictionaries:''
category:'Graphics-Support'
@@ -785,12 +785,6 @@
^ flags bitTest:GotExposeFlagMask.
!
-setGotExposeFlag
- "internal; used to wait for an expose-event after a scroll operation"
-
- flags := flags bitOr:GotExposeFlagMask.
-!
-
setAttribute:key to:newValue
newValue isNil ifTrue:[
moreAttributes notNil ifTrue:[
@@ -805,6 +799,12 @@
].
moreAttributes at:key put:newValue.
].
+!
+
+setGotExposeFlag
+ "internal; used to wait for an expose-event after a scroll operation"
+
+ flags := flags bitOr:GotExposeFlagMask.
! !
!DisplaySurface methodsFor:'button menus'!
@@ -1378,100 +1378,104 @@
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 |
- 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 := 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:[
- isButtonEvent := true.
- deviceMessage := type.
- delegateMessage := #mouseWheelMotion:x:y:amount:deltaTime:view:.
- delegateQuery := #handlesMouseWheelMotion:inView:.
+ isButtonEvent := 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:'.
+ deviceMessage := #'deviceExposeX:y:width:height:'.
] ifFalse:[ (type == #'graphicsExposeX:y:width:height:final:') ifTrue:[
- deviceMessage := #'deviceGraphicsExposeX:y:width:height:final:'.
+ deviceMessage := #'deviceGraphicsExposeX:y:width:height:final:'.
]]]]]]]]]]]].
"
@@ -1481,61 +1485,61 @@
the focusView (0 @ 0) is passed as x/y coordinates.
"
(focusView notNil and:[self ~~ focusView]) ifTrue:[
- (isKeyEvent or:[type == #mouseWheelMotion:x:y:amount:deltaTime:]) ifTrue:[
- delegatedEvent := ev shallowCopy.
- delegatedEvent delegatedFrom:ev.
-
- isKeyEvent ifTrue:[
- delegatedEvent arguments:(Array with:(argArray at:1) with:-1 with:-1)
- ].
- focusView
- dispatchEvent:delegatedEvent
- withFocusOn:nil
- delegate:doDelegate.
- ^ self
- ].
+ (isKeyEvent or:[type == #mouseWheelMotion:x:y:amount:deltaTime:]) ifTrue:[
+ delegatedEvent := ev shallowCopy.
+ delegatedEvent delegatedFrom:ev.
+
+ isKeyEvent ifTrue:[
+ delegatedEvent arguments:(Array with:(argArray at:1) with:-1 with:-1)
+ ].
+ focusView
+ dispatchEvent:delegatedEvent
+ withFocusOn:nil
+ delegate:doDelegate.
+ ^ self
+ ].
].
doDelegate ifTrue:[
- "
- handle delegated messages
- "
- (isKeyEvent
- or:[isButtonEvent
- or:[isPointerEvent]]) ifTrue:[
- delegate := self delegate.
-
- "
- what a kludge - sending to delegate requires
- another selector and an additional argument ...
- "
- (delegate notNil
- and:[delegate respondsTo:delegateMessage]) ifTrue:[
- "
- is the delegate interested in that event ?
- (if it does not respond to the handlesXXX message,
- we assume: NO)
- "
- ((delegate respondsTo:delegateQuery)
- and:[delegate perform: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:[isPointerEvent]]) ifTrue:[
+ delegate := self delegate.
+
+ "
+ what a kludge - sending to delegate requires
+ another selector and an additional argument ...
+ "
+ (delegate notNil
+ and:[delegate respondsTo:delegateMessage]) ifTrue:[
+ "
+ is the delegate interested in that event ?
+ (if it does not respond to the handlesXXX message,
+ we assume: NO)
+ "
+ ((delegate respondsTo:delegateQuery)
+ and:[delegate perform: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
+ ]
+ ].
+ ].
].
"
@@ -1544,9 +1548,9 @@
(isKeyEvent
or:[isButtonEvent
or:[isPointerEvent]]) ifTrue:[
- realized ifFalse:[
- ^ self
- ]
+ realized ifFalse:[
+ ^ self
+ ]
].
"
@@ -1554,13 +1558,13 @@
"
eventReceiver := self.
(controller := self controller) notNil ifTrue:[
- (isKeyEvent
- or:[isButtonEvent
- or:[isPointerEvent
- or:[(type == #focusIn)
- or:[(type == #focusOut)]]]]) ifTrue:[
- eventReceiver := controller.
- ]
+ (isKeyEvent
+ or:[isButtonEvent
+ or:[isPointerEvent
+ or:[(type == #focusIn)
+ or:[(type == #focusOut)]]]]) ifTrue:[
+ eventReceiver := controller.
+ ]
].
"
@@ -1576,13 +1580,13 @@
selector := type.
transformation notNil ifTrue:[
- (isKeyEvent
- or:[isButtonEvent
- or:[isPointerEvent
- or:[(type == #'exposeX:y:width:height:')
- or:[(type == #'graphicsExposeX:y:width:height:final:')]]]]) ifTrue:[
- selector := deviceMessage
- ]
+ (isKeyEvent
+ or:[isButtonEvent
+ or:[isPointerEvent
+ or:[(type == #'exposeX:y:width:height:')
+ or:[(type == #'graphicsExposeX:y:width:height:final:')]]]]) ifTrue:[
+ selector := deviceMessage
+ ]
].
eventReceiver perform:selector withArguments:argArray
@@ -2506,7 +2510,7 @@
!DisplaySurface class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/DisplaySurface.st,v 1.137 2008-07-23 12:00:52 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/DisplaySurface.st,v 1.138 2008-11-09 11:30:41 cg Exp $'
! !
DisplaySurface initialize!