--- a/ViewScroller.st Mon Mar 06 22:24:53 1995 +0100
+++ b/ViewScroller.st Sat Mar 18 06:17:38 1995 +0100
@@ -10,6 +10,8 @@
hereby transferred.
"
+'From Smalltalk/X, Version:2.10.5 on 14-mar-1995 at 11:14:10 am'!
+
View subclass:#ViewScroller
instanceVariableNames:'frame scrolledView'
classVariableNames:''
@@ -155,14 +157,6 @@
^ scrolledView height
! !
-!ViewScroller methodsFor:'initialization'!
-
-initialize
- super initialize.
- frame := View origin:0.0@0.0 corner:1.0@1.0.
- super addSubView:frame
-! !
-
!ViewScroller methodsFor:'scrolling'!
scrollUp:nPixels
@@ -265,11 +259,11 @@
scrolledView:aView
scrolledView notNil ifTrue:[
- self error:'can only scroll a single view'.
- ^ self
+ self error:'can only scroll a single view'.
+ ^ self
].
scrolledView := aView.
- frame addSubView:aView.
+ self addSubView:aView.
aView borderWidth:0; level:0.
aView origin:0@0 extent:(aView preferedExtent)
!
@@ -281,3 +275,36 @@
aView origin:0@0 extent:(aView preferedExtent)
! !
+!ViewScroller methodsFor:'event handling'!
+
+sizeChanged:how
+ |newOrigin|
+
+ super sizeChanged:how.
+ self changed:#sizeOfContents. "update possible scrollers"
+
+ "
+ if we are beyond the end, scroll up a bit
+ "
+ ((self viewOrigin y + self height) > self heightOfContents) ifTrue:[
+ newOrigin := self heightOfContents - self height.
+ newOrigin < 0 ifTrue:[
+ newOrigin := 0
+ ].
+ self scrollVerticalTo: newOrigin.
+ ].
+ "
+ if we are right of the end, scroll left a bit
+ "
+ ((self viewOrigin x + self width) > self widthOfContents) ifTrue:[
+ newOrigin := self widthOfContents - self width.
+ newOrigin < 0 ifTrue:[
+ newOrigin := 0
+ ].
+ self scrollHorizontalTo: newOrigin.
+ ].
+
+
+
+! !
+