ViewScroller.st
changeset 42 3f8d31db2b1c
parent 36 160b8f0dfd7d
child 49 4dd0f5c3353e
--- 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.
+    ].
+
+
+
+! !
+