View.st
changeset 121 306a2d195c0a
parent 118 25e775072a89
child 123 9f8c7f20fdb2
--- a/View.st	Mon Mar 20 13:27:08 1995 +0100
+++ b/View.st	Thu Mar 23 17:54:10 1995 +0100
@@ -34,7 +34,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libview/View.st,v 1.35 1995-03-18 05:12:23 claus Exp $
+$Header: /cvs/stx/stx/libview/View.st,v 1.36 1995-03-23 16:53:18 claus Exp $
 '!
 
 !View class methodsFor:'documentation'!
@@ -55,7 +55,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libview/View.st,v 1.35 1995-03-18 05:12:23 claus Exp $
+$Header: /cvs/stx/stx/libview/View.st,v 1.36 1995-03-23 16:53:18 claus Exp $
 "
 !
 
@@ -962,22 +962,33 @@
 
 computeCorner
     "compute my corner; if I have relative
-     origins or blocks to evaluate, do it now .."
-
-    |org newCorner newExt|
+     origins or blocks to evaluate, do it now ..
+     Blocks may return relative values or nil; nil means: take current value."
+
+    |org newCorner newExt x y|
 
     (cornerRule notNil) ifTrue:[
-	newCorner := cornerRule value
+	newCorner := cornerRule value.
+	"
+	 allow return of relative values ...
+	"
+	x := newCorner x.
+	y := newCorner y.
+	x isNil ifTrue:[x := self corner x].
+	y isNil ifTrue:[y := self corner y].
+	((x isInteger not) or:[y isInteger not]) ifTrue:[
+	    newCorner := self cornerFromRelativeCorner:x@y 
+	]
     ] ifFalse:[
 	(relativeCorner notNil) ifTrue:[
-	    newCorner := self cornerFromRelativeCorner
+	    newCorner := self cornerFromRelativeCorner:relativeCorner
 	] ifFalse:[
 	    org := self computeOrigin.
 	    (extentRule notNil) ifTrue:[
 		newExt := extentRule value
 	    ] ifFalse:[
 		(relativeExtent notNil) ifTrue:[
-		    newExt := self extentFromRelativeExtent
+		    newExt := self extentFromRelativeExtent:relativeExtent 
 		]
 	    ].
 	    newCorner := org + newExt
@@ -988,31 +999,44 @@
 
 computeExtent
     "compute my extent; if I have relative
-     extent or blocks to evaluate, do it now .."
-
-    |newOrg newExt newCorner|
-
-    (originRule notNil) ifTrue:[
-	newOrg := originRule value
-    ] ifFalse:[
-	(relativeOrigin notNil) ifTrue:[
-	    newOrg := self originFromRelativeOrigin.
-	] ifFalse:[
-	    newOrg := (left @ top).
-	].
-    ].
+     extent or blocks to evaluate, do it now ..
+     There is one catch here, if the dimension was defined
+     by origin/corner, compute them here and take that value.
+     I.e. origin/corner definition has precedence over extent definition."
+
+    |newOrg newExt newCorner x y|
 
     (cornerRule notNil) ifTrue:[
-	newCorner := cornerRule value
+	newCorner := cornerRule value.
+	"
+	 allow return of relative values ...
+	"
+	x := newCorner x.
+	y := newCorner y.
+	x isNil ifTrue:[x := self corner x].
+	y isNil ifTrue:[y := self corner y].
+	((x isInteger not) or:[y isInteger not]) ifTrue:[
+	    newCorner := self cornerFromRelativeCorner:x@y
+	]
     ] ifFalse:[
 	(relativeCorner notNil) ifTrue:[
-	    newCorner := self cornerFromRelativeCorner
+	    newCorner := self cornerFromRelativeCorner:relativeCorner
 	] ifFalse:[
 	    (extentRule notNil) ifTrue:[
-		newExt := extentRule value
+		newExt := extentRule value.
+		"
+		 allow return of relative values ...
+		"
+		x := newExt x.
+		y := newExt y.
+		x isNil ifTrue:[x := width].
+		y isNil ifTrue:[y := height].
+		((x isInteger not) or:[y isInteger not]) ifTrue:[
+		    newExt := self extentFromRelativeExtent:x@y
+		]
 	    ] ifFalse:[
 		(relativeExtent notNil) ifTrue:[
-		    newExt := self extentFromRelativeExtent
+		    newExt := self extentFromRelativeExtent:relativeExtent
 		] ifFalse:[
 		    newExt := (width @ height).
 		].
@@ -1021,6 +1045,7 @@
     ].
 
     newCorner notNil ifTrue:[
+	newOrg := self computeOrigin.
 	^ newCorner - newOrg.
     ].
     ^ newExt.
@@ -1028,18 +1053,26 @@
 
 computeOrigin
     "compute my origin; if I have relative
-     origins or blocks to evaluate, do it now .."
-
-    |newOrg newCorner|
+     origins or blocks to evaluate, do it now ..
+     Blocks may return relative values or nil; nil means: take current value."
+
+    |newOrg x y|
 
     (originRule notNil) ifTrue:[
 	newOrg := originRule value.
-	(newOrg x isInteger not or:[newOrg y isInteger not]) ifTrue:[
-	    newOrg := self originFromRelativeOrigin:newOrg.
+	"
+	 allow return of relative values ...
+	"
+	x := newOrg x.
+	y := newOrg y.
+	x isNil ifTrue:[x := self origin x].
+	y isNil ifTrue:[y := self origin y].
+	((x isInteger not) or:[y isInteger not]) ifTrue:[
+	    newOrg := self originFromRelativeOrigin:x@y.
 	]
     ] ifFalse:[
 	(relativeOrigin notNil) ifTrue:[
-	    newOrg := self originFromRelativeOrigin.
+	    newOrg := self originFromRelativeOrigin:relativeOrigin.
 	] ifFalse:[
 	    ^ (left @ top).
 	].
@@ -1568,7 +1601,7 @@
 extentFromRelativeExtent:aPoint
     "compute & return pixel extent from relativeExtent, aPoint"
 
-    |rel newX newY inRect bw2 r b|
+    |rel newX newY inRect bw2 i|
 
     superView isNil ifTrue:[
 	inRect := 0@0 extent:device extent
@@ -1599,13 +1632,21 @@
     ].
 
     insets notNil ifTrue:[
-	r := insets at:3.
-	(r  ~~ 0) ifTrue:[
-	    newX := newX - r
+	i := insets at:1.
+	(i  ~~ 0) ifTrue:[
+	    newX := newX - i
+	].
+	i := insets at:3.
+	(i  ~~ 0) ifTrue:[
+	    newX := newX - i
 	].
-	b := insets at:4.
-	(b ~~ 0) ifTrue:[
-	    newY := newY - b
+	i := insets at:4.
+	(i ~~ 0) ifTrue:[
+	    newY := newY - i
+	].
+	i := insets at:4.
+	(i ~~ 0) ifTrue:[
+	    newY := newY - i
 	].
     ].
     ^ newX @ newY
@@ -2921,6 +2962,12 @@
     ]
 !
 
+processName
+    "return a string to be shown in the process monitor"
+
+    ^ self name
+!
+
 name
     "return my name component to be used for resource-access"