diff -r f80c7cd310dc -r 3f8d31db2b1c ViewScroller.st --- 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. + ]. + + + +! ! +