[squeak-dev] The Trunk: Graphics-nice.428.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Mar 3 21:11:38 UTC 2020


Nicolas Cellier uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-nice.428.mcz

==================== Summary ====================

Name: Graphics-nice.428
Author: nice
Time: 3 March 2020, 10:11:33.559746 pm
UUID: b9310c73-f7b2-43d3-b457-16b9d8b0b0dc
Ancestors: Graphics-nice.427

Really expunge ifNil: guards from LayoutFrame

We can now do it, because we provided proper fixup for upgrading existing instances in previous commit/update map.

Note: explicit the layout constraints that we want to respect when calculating #minWidthFrom: and #minHeightFrom: 
See how we can do it without having to revert to right or bottom fraction = 1.
Those methods are unused in trunk image, but might be in additional packages, if you depend on it, please test it.

=============== Diff against Graphics-nice.427 ===============

Item was changed:
  ----- Method: LayoutFrame>>layout:in: (in category 'layout') -----
  layout: oldBounds in: newBounds
  	"Return the proportional rectangle insetting the given bounds"
+ 	| left right top bottom | 
+ 	left := newBounds left + (newBounds width * leftFraction).
+ 	left := left + leftOffset.
+ 	right := newBounds right - (newBounds width * (1.0 - rightFraction)).
+ 	right := right + rightOffset.
+ 	top := newBounds top + (newBounds height * topFraction).
+ 	top := top + topOffset.
+ 	bottom := newBounds bottom - (newBounds height * (1.0 - bottomFraction)).
+ 	bottom := bottom + bottomOffset.
- 	| left right top bottom |
- 	leftFraction ifNotNil:[
- 		left := newBounds left + (newBounds width * leftFraction).
- 		leftOffset ifNotNil:[left := left + leftOffset]].
- 	rightFraction ifNotNil:[
- 		right := newBounds right - (newBounds width * (1.0 - rightFraction)).
- 		rightOffset ifNotNil:[right := right + rightOffset]].
- 	topFraction ifNotNil:[
- 		top := newBounds top + (newBounds height * topFraction).
- 		topOffset ifNotNil:[top := top + topOffset]].
- 	bottomFraction ifNotNil:[
- 		bottom := newBounds bottom - (newBounds height * (1.0 - bottomFraction)).
- 		bottomOffset ifNotNil:[bottom := bottom + bottomOffset]].
- 	left ifNil:[ right 
- 			ifNil:[left := oldBounds left. right := oldBounds right]
- 			ifNotNil:[left := right - oldBounds width]].
- 	right ifNil:[right := left + oldBounds width].
- 	top ifNil:[ bottom 
- 			ifNil:[top := oldBounds top. bottom := oldBounds bottom]
- 			ifNotNil:[top := bottom - oldBounds height]].
- 	bottom ifNil:[bottom := top + oldBounds height].
  	^(left rounded @ top rounded) corner: (right rounded @ bottom rounded)!

Item was changed:
  ----- Method: LayoutFrame>>minHeightFrom: (in category 'layout') -----
  minHeightFrom: minHeight
+ 	"Return the minimal height the given bounds can be represented in
+ 	we have:
+ 		top = (height * topFraction + topOffset)
+ 		bottom = (height * bottomFraction + bottomOffset)
+ 	we want to fullfill those constraints if possible:
+ 		0 <= top <= height
+ 		0 <= bottom <= heigth
+ 		bottom - top >= minHeight"
+ 	| height |
+ 	height := bottomFraction = topFraction
- 	"Return the minimal extent the given bounds can be represented in"
- 	| height top bottom |
- 	top := topFraction ifNil: [0.0].
- 	bottom := bottomFraction ifNil: [1.0].
- 	height := bottom = top
  		ifTrue: [0]
+ 		ifFalse: [minHeight + topOffset - bottomOffset / (bottomFraction - topFraction) max: 0].
+ 	topFraction < 1 ifTrue: [height := height max: topOffset / (1 - topFraction)].
+ 	bottomFraction < 1 ifTrue: [height := height max: bottomOffset / (1 - bottomFraction)].
+ 	topFraction > 0 ifTrue: [height := height max: topOffset negated / topFraction].
+ 	bottomFraction > 0 ifTrue: [height := height max: bottomOffset negated / bottomFraction].
- 		ifFalse: [minHeight / (bottom - top)].
- 	topOffset ifNotNil:[height := height + topOffset].
- 	bottomOffset ifNotNil:[height := height + bottomOffset].
  	^ height truncated!

Item was changed:
  ----- Method: LayoutFrame>>minWidthFrom: (in category 'layout') -----
  minWidthFrom: minWidth
+ 	"Return the minimal width the given bounds can be represented in
+ 	we have:
+ 		left = (width * leftFraction + leftOffset)
+ 		right = (width * rightFraction + rightOffset)
+ 	we want to fullfill those constraints if possible:
+ 		0 <= left <= width
+ 		0 <= right <= heigth
+ 		right - left >= minwidth"
+ 	| width |
+ 	width := rightFraction = leftFraction
- 	"Return the minimal extent the given bounds can be represented in"
- 	| width left right |
- 	left := leftFraction ifNil: [0.0].
- 	right := rightFraction ifNil: [1.0].
- 	width := left = right
  		ifTrue: [0]
+ 		ifFalse: [minWidth + leftOffset - rightOffset / (rightFraction - leftFraction) max: 0].
+ 	leftFraction < 1 ifTrue: [width := width max: leftOffset / (1 - leftFraction)].
+ 	rightFraction < 1 ifTrue: [width := width max: rightOffset / (1 - rightFraction)].
+ 	leftFraction > 0 ifTrue: [width := width max: leftOffset negated / leftFraction].
+ 	rightFraction > 0 ifTrue: [width := width max: rightOffset negated / rightFraction].
+ 	^ width truncated!
- 		ifFalse: [minWidth / (right - left)].
- 	leftOffset ifNotNil:[width := width + leftOffset].
- 	rightOffset ifNotNil:[width := width + rightOffset].
- 	^width truncated!

Item was changed:
  ----- Method: LayoutFrame>>printOn: (in category 'printing') -----
  printOn: aStream
  
  	super printOn: aStream.
  	
  	aStream nextPutAll: '( '.
  	
  	{ {'l'. self leftFraction. self leftOffset}. {'t'. self topFraction. self topOffset}. {'r'. self rightFraction. self rightOffset}. {'b'. self bottomFraction. self bottomOffset} } do: [:spec |
  		aStream nextPutAll: spec first; space.
  		
+ 		spec second printOn: aStream maxDecimalPlaces: 2.
- 		(spec second ifNil: [0]) printOn: aStream maxDecimalPlaces: 2.
  		
+ 		aStream nextPutAll: (spec third >= 0 ifTrue: ['+'] ifFalse: ['-']).
+ 		spec third abs printOn: aStream maxDecimalPlaces: 0]
- 		aStream nextPutAll: ((spec third ifNil: [0]) >= 0 ifTrue: ['+'] ifFalse: ['-']).
- 		(spec third ifNil: [0]) abs printOn: aStream maxDecimalPlaces: 0]
  			separatedBy: [aStream space].
  			
  	aStream nextPutAll: ' )'.!



More information about the Squeak-dev mailing list