#BUGFIX by Stefan Reise
authorsr
Thu, 14 Nov 2019 13:46:37 +0100
changeset 8860 221bf6fa2dfc
parent 8859 4f228c89da55
child 8861 0471653a6a2d
#BUGFIX by Stefan Reise care about user defined scaling class: DeviceWorkstation class definition added: #rectangleFromUser:keepExtent:scaleFactor: changed: #rectangleFromUser:keepExtent: class: DeviceWorkstation class added: #scaleFactorForRootDisplayCoordinates
DeviceWorkstation.st
--- a/DeviceWorkstation.st	Sat Nov 02 15:27:40 2019 +0100
+++ b/DeviceWorkstation.st	Thu Nov 14 13:46:37 2019 +0100
@@ -22,15 +22,15 @@
 		resolutionHor resolutionVer lastId lastView knownViews
 		dispatching dispatchProcess exitOnLastClose ctrlDown leftCtrlDown
 		rightCtrlDown shiftDown leftShiftDown rightShiftDown metaDown
-		altDown superDown motionEventCompression keyboardMap modifiedMap rootView
-		isSlow activeKeyboardGrab activePointerGrab buttonTranslation
-		multiClickTimeDelta altModifiers metaModifiers ctrlModifiers
-		shiftModifiers superModifiers buttonModifiers supportsDeepIcons
-		preferredIconSize ditherColors fixColors numFixRed numFixGreen
-		numFixBlue fixGrayColors copyBuffer blackColor whiteColor
-		focusMode activeView clipBoardEncoding maxClipBoardSize focusView
-		focusWindowGroup deviceErrorSignal deviceIOErrorSignal
-		mayOpenDebugger suppressDebugger eventSema
+		altDown superDown motionEventCompression keyboardMap modifiedMap
+		rootView isSlow activeKeyboardGrab activePointerGrab
+		buttonTranslation multiClickTimeDelta altModifiers metaModifiers
+		ctrlModifiers shiftModifiers superModifiers buttonModifiers
+		supportsDeepIcons preferredIconSize ditherColors fixColors
+		numFixRed numFixGreen numFixBlue fixGrayColors copyBuffer
+		blackColor whiteColor focusMode activeView clipBoardEncoding
+		maxClipBoardSize focusView focusWindowGroup deviceErrorSignal
+		deviceIOErrorSignal mayOpenDebugger suppressDebugger eventSema
 		buttonLongPressedHandlerProcess buttonPressTimeForMenu
 		aboutToOpenModalWindowHooks aboutToOpenNonModalWindowHooks'
 	classVariableNames:'AllScreens ButtonTranslation CopyBufferHistory
@@ -957,6 +957,19 @@
     ^ #unknown
 
     "Modified (comment): / 17-05-2017 / 18:25:06 / mawalch"
+!
+
+scaleFactorForRootDisplayCoordinates
+    "this is the factor we need to adopt for the root display coordinates,
+     if windows did scale the application"
+
+    "
+        self scaleFactorForRootDisplayCoordinates              
+    "
+
+    ^ 1@1
+
+    "Created: / 14-11-2019 / 13:43:12 / Stefan Reise"
 ! !
 
 !DeviceWorkstation class methodsFor:'standalone setup'!
@@ -6912,7 +6925,24 @@
     "Modified: 24.7.1997 / 16:04:54 / cg"
 !
 
-rectangleFromUser:initialRectangle keepExtent:keepExtent
+rectangleFromUser:initialRectangle 
+    keepExtent:keepExtent
+
+    ^ self 
+        rectangleFromUser:initialRectangle 
+        keepExtent:keepExtent
+        scaleFactor:self class scaleFactorForRootDisplayCoordinates
+
+    "Created: / 24-07-1997 / 15:26:47 / cg"
+    "Modified: / 10-09-1998 / 17:38:41 / cg"
+    "Modified: / 23-02-2017 / 13:30:21 / stefan"
+    "Modified: / 14-11-2019 / 13:43:28 / Stefan Reise"
+!
+
+rectangleFromUser:initialRectangle 
+    keepExtent:keepExtent
+    scaleFactor:scaleFactor 
+
     "{ Pragma: +optSpace }"
 
     "let user specify a rectangle on the screen, return the rectangle.
@@ -6927,9 +6957,9 @@
     doRegrab := self class ~~ WinWorkstation.
 
     keepExtent ifTrue:[
-	curs1 := Cursor origin
+        curs1 := Cursor origin
     ] ifFalse:[
-	curs1 := Cursor corner
+        curs1 := Cursor corner
     ].
     curs1 := curs1 onDevice:self.
     root := self rootView.
@@ -6945,91 +6975,91 @@
     delay := Delay forSeconds:0.05.
 
     root xoring:[
-	|left right top bottom newOrigin newCorner p curs|
-
-	keepExtent ifFalse:[
-	    corner := origin.
-	    rect := origin corner:corner.
-	    root displayRectangle:rect.
-	].
-
-	prevGrab := activePointerGrab.
-	self grabPointerInView:root withCursor:curs1.
-
-	"
-	 just in case; wait for button to be down ...
-	"
-	[self leftButtonPressed] whileFalse:[delay wait].
-
-	keepExtent ifTrue:[
-	    p := self pointerPosition.
-	    origin := p.
-	    corner := origin + initialRectangle extent.
-	    rect := origin corner:corner.
-	    root displayRectangle:rect.
-	].
-
-	[self leftButtonPressed] whileTrue:[
-	    left := initialRectangle origin x.
-	    top := initialRectangle origin y.
-	    right := initialRectangle corner x.
-	    bottom := initialRectangle corner y.
-
-	    p := self pointerPosition.
-	    keepExtent ifTrue:[
-		newOrigin := p.
-		newCorner := newOrigin + initialRectangle extent.
-		curs := curs1.
-	    ] ifFalse:[
-		p x < initialRectangle left ifTrue:[
-		    p y < initialRectangle top ifTrue:[
-			curs := Cursor topLeft.
-			left := p x.
-			top := p y.
-		    ] ifFalse:[
-			curs := Cursor bottomLeft.
-			left := p x.
-			bottom := p y
-		    ]
-		] ifFalse:[
-		    p y < initialRectangle top ifTrue:[
-			curs := Cursor topRight.
-			right := p x.
-			top := p y
-		    ] ifFalse:[
-			curs := Cursor bottomRight.
-			right := p x.
-			bottom := p y
-		    ]
-		].
-
-		newOrigin := left @ top.
-		newCorner := right @ bottom.
-	    ].
-
-	    ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[
-		root displayRectangle:rect.
-		doRegrab ifTrue:[
-		    self grabPointerInView:root withCursor:curs1.
-		].
-
-		origin :=  newOrigin.
-		corner :=  newCorner.
-		rect := origin corner:corner.
-		root displayRectangle:rect.
-		self disposeButtonEventsFor:nil.
-		self flush.
-	    ] ifFalse:[
-		delay wait.
-	    ]
-	].
-	root displayRectangle:rect.
+        |left right top bottom newOrigin newCorner p curs|
+
+        keepExtent ifFalse:[
+            corner := origin.
+            rect := origin corner:corner.
+            root displayRectangle:rect.
+        ].
+
+        prevGrab := activePointerGrab.
+        self grabPointerInView:root withCursor:curs1.
+
+        "
+         just in case; wait for button to be down ...
+        "
+        [self leftButtonPressed] whileFalse:[delay wait].
+
+        keepExtent ifTrue:[
+            p := (self pointerPosition * scaleFactor) rounded.
+            origin := p.
+            corner := origin + initialRectangle extent.
+            rect := origin corner:corner.
+            root displayRectangle:rect.
+        ].
+
+        [self leftButtonPressed] whileTrue:[
+            left := initialRectangle origin x.
+            top := initialRectangle origin y.
+            right := initialRectangle corner x.
+            bottom := initialRectangle corner y.
+
+            p := (self pointerPosition * scaleFactor) rounded.
+            keepExtent ifTrue:[
+                newOrigin := p.
+                newCorner := newOrigin + initialRectangle extent.
+                curs := curs1.
+            ] ifFalse:[
+                p x < initialRectangle left ifTrue:[
+                    p y < initialRectangle top ifTrue:[
+                        curs := Cursor topLeft.
+                        left := p x.
+                        top := p y.
+                    ] ifFalse:[
+                        curs := Cursor bottomLeft.
+                        left := p x.
+                        bottom := p y
+                    ]
+                ] ifFalse:[
+                    p y < initialRectangle top ifTrue:[
+                        curs := Cursor topRight.
+                        right := p x.
+                        top := p y
+                    ] ifFalse:[
+                        curs := Cursor bottomRight.
+                        right := p x.
+                        bottom := p y
+                    ]
+                ].
+
+                newOrigin := left @ top.
+                newCorner := right @ bottom.
+            ].
+
+            ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[
+                root displayRectangle:rect.
+                doRegrab ifTrue:[
+                    self grabPointerInView:root withCursor:curs1.
+                ].
+
+                origin :=  newOrigin.
+                corner :=  newCorner.
+                rect := origin corner:corner.
+                root displayRectangle:rect.
+                self disposeButtonEventsFor:nil.
+                self flush.
+            ] ifFalse:[
+                delay wait.
+            ]
+        ].
+        root displayRectangle:rect.
     ].
 
 
     self ungrabPointer.
     prevGrab notNil ifTrue:[
-	self grabPointerInView:prevGrab
+        self grabPointerInView:prevGrab
     ].
 
     "flush all events pending on my display"
@@ -7047,9 +7077,7 @@
      Display rectangleFromUser:(100@100 corner:300@300) keepExtent:true
     "
 
-    "Created: / 24-07-1997 / 15:26:47 / cg"
-    "Modified: / 10-09-1998 / 17:38:41 / cg"
-    "Modified: / 23-02-2017 / 13:30:21 / stefan"
+    "Created: / 14-11-2019 / 13:40:45 / Stefan Reise"
 !
 
 topviewFromUser