[squeak-dev] The Trunk: Morphic-mt.1876.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Feb 8 12:42:53 UTC 2022


Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1876.mcz

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

Name: Morphic-mt.1876
Author: mt
Time: 8 February 2022, 1:42:46.446027 pm
UUID: 87a2cb9b-a3da-a444-b6cb-cd2c2ac9eead
Ancestors: Morphic-mt.1875

Various fixes around layouting in tools. Mostly concerns construction code only. So, you open tools should not be affected.

Complements ToolBuilder-Kernel-mt.152.

=============== Diff against Morphic-mt.1875 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
  	"Add aMorph according to aLayoutFrame."
  
+ 	self removeCellGapFromLayoutFrames.
- 	self cellGap > 0 ifTrue: [
- 		| left right bottom top spacing |
- 
- 		spacing := self cellGap.
- 		left := aLayoutFrame leftOffset.
- 		right := aLayoutFrame rightOffset.
- 
- 		bottom := aLayoutFrame bottomOffset.
- 		top := aLayoutFrame topOffset.
- 		
- 		"Add a spacing to the frame if it is not top or leftmost."
- 		aLayoutFrame leftFraction = 0
- 			ifFalse: [left := left + spacing]
- 			ifTrue: [
- 				"Expect another, resizable widget besides me if I have a fixed width."
- 				aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
- 		aLayoutFrame topFraction = 0
- 			ifFalse: [top := top + spacing]
- 			ifTrue: [
- 				"Expect another, resizable widget besides me if I have a fixed height."
- 				aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].
- 			
- 		aLayoutFrame
- 			topOffset: top;
- 			bottomOffset: bottom;
- 			leftOffset: left;
- 			rightOffset: right].
- 	
  	super addMorph: aMorph fullFrame: aLayoutFrame.
+ 	self addCellGapToLayoutFrames.
  	
  	self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs
  
  	| targetY minX maxX splitter |
  	targetY := someMorphs first layoutFrame bottomFraction.
  
  	minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
  	maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.
  
  	splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
  	splitter layoutFrame: (LayoutFrame
  		fractions: (minX @ targetY corner: maxX @ targetY)
+ 		offsets: (someMorphs first layoutFrame leftOffset @ self cellGap negated 
+ 			corner: someMorphs first layoutFrame rightOffset @ 0)).
- 		offsets: (someMorphs first layoutFrame leftOffset @ 0 
- 			corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
  
  	self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitters (in category 'resize handling') -----
  addPaneHSplitters
  
  	| remaining targetY sameY |
  	remaining := self paneMorphs reject: [:each |
+ 		each layoutFrame isNil
+ 			or: [each layoutFrame bottomFraction = 1
+ 			or: [each layoutFrame hasFixedHeight]]].
- 		each layoutFrame bottomFraction = 1
- 			or: [each layoutFrame hasFixedHeight]].
  	[remaining notEmpty] whileTrue:
  		[targetY := remaining first layoutFrame bottomFraction.
  		sameY := self paneMorphs select: [:each | each layoutFrame bottomFraction = targetY].
  		self addPaneHSplitterAtBottomOfRow: sameY.
  		remaining := remaining copyWithoutAll: sameY]!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs
  
  	| targetX minY maxY splitter |
  	targetX := someMorphs first layoutFrame rightFraction.
  	
  	minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
  	maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.
  	
  	splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
  	splitter layoutFrame: (LayoutFrame
  		fractions: (targetX @ minY corner: targetX @ maxY)
  		offsets: (0 @ (someMorphs first layoutFrame topOffset)
+ 			corner: (self cellGap@ (someMorphs first layoutFrame bottomOffset)))).
- 			corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
  
  	self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitters (in category 'resize handling') -----
  addPaneVSplitters
  
  	| remaining targetX sameX |
  	remaining := self paneMorphs reject: [:each |
+ 		each layoutFrame isNil
+ 			or: [each layoutFrame rightFraction = 1
+ 			or: [each layoutFrame hasFixedWidth]]].
- 		each layoutFrame rightFraction = 1
- 			or: [each layoutFrame hasFixedWidth]].
  	[remaining notEmpty] whileTrue:
  		[targetX := remaining first layoutFrame rightFraction.
  		sameX := self paneMorphs select: [:each | each layoutFrame rightFraction = targetX].
  		self addPaneVSplitterAtRightOfColumn: sameX.
  		remaining := remaining copyWithoutAll: sameX]!

Item was added:
+ ----- Method: BorderedMorph>>cellGap: (in category 'layout properties') -----
+ cellGap: aNumber
+ 
+ 	self cellGap = aNumber ifTrue: [^ self].
+ 
+ 	self removeCellGapFromLayoutFrames.
+ 	super cellGap: aNumber.
+ 	self addCellGapToLayoutFrames.!

Item was changed:
  ----- Method: BorderedMorph>>paneMorphs (in category 'resize handling') -----
  paneMorphs
  
+ 	^ self submorphs copyWithoutAll: self splitters, self grips!
- 	^ self submorphs copyWithoutAll: self splitters!

Item was changed:
  ----- Method: BorderedMorph>>removeCornerGrips (in category 'resize handling') -----
  removeCornerGrips
  
+ 	self cornerGrips do: [:each | each delete].!
- 	| corners |
- 	corners := self submorphsSatisfying: [:each | each isKindOf: CornerGripMorph].
- 	corners do: [:each | each delete]!

Item was added:
+ ----- Method: BorderedMorph>>removeEdgeGrips (in category 'resize handling') -----
+ removeEdgeGrips
+ 
+ 	self edgeGrips do: [:ea | ea delete].!

Item was added:
+ ----- Method: BorderedMorph>>removeGrips (in category 'resize handling') -----
+ removeGrips
+ 
+ 	self removeCornerGrips.
+ 	self removeEdgeGrips.!

Item was changed:
  ----- Method: DialogWindow>>updateButtonExtent (in category 'updating') -----
  updateButtonExtent
  	
+ 	self updateButtonExtent: (20 at 0 * RealEstateAgent scaleFactor) rounded.!
- 	self updateButtonExtent: (20 at 10 * RealEstateAgent scaleFactor) rounded.!

Item was changed:
  ----- Method: DialogWindow>>updateButtonExtent: (in category 'updating') -----
  updateButtonExtent: margin
  
  	"Update all button extents."
+ 	| preferredButtonHeight |
+ 	preferredButtonHeight := ToolBuilder default buttonRowHeight.
  	(buttonRow submorphs collect: [:ea | ea minimumExtent]) max + margin in: [:preferredExtent |
+ 		buttonRow submorphsDo: [:ea | ea extent: preferredExtent x @ preferredButtonHeight]].
- 		buttonRow submorphsDo: [:ea | ea extent: preferredExtent]].
  	
  	"See if horizontal button layout would be more appropriate."
  	self flag: #magicNumber. "mt: Remove number with computation, maybe choose button font and 20 characters"
  	(buttonRow submorphs collect: [:ea | ea fullBounds width]) sum > (400 * RealEstateAgent scaleFactor)
  		ifTrue: [buttonRow
  					hResizing: #shrinkWrap;
  					listDirection: #topToBottom;
  					wrapDirection: #none;
  					layoutInset: (buttonRow owner fullBounds width - (buttonRow owner layoutInset left*2) - buttonRow submorphs first fullBounds width // 2 at 0)]
  		ifFalse: [buttonRow
  					hResizing: #spaceFill;
  					listDirection: #leftToRight;
  					wrapDirection: #topToBottom;
  					layoutInset: 0].!

Item was changed:
  ----- Method: DockingBarMorph>>setDefaultParameters (in category 'initialize-release') -----
  setDefaultParameters
  	"private - set the default parameter using Preferences as the inspiration source"
  
  	self
  		color: (self userInterfaceTheme color ifNil: [Color r: 0.9 g: 0.9 b: 0.9]);
  		borderStyle: (self userInterfaceTheme borderStyle ifNil: [BorderStyle simple]) copy;
  		borderColor: (self userInterfaceTheme borderColor ifNil: [Color gray]);
  		borderWidth: (self userInterfaceTheme borderWidth ifNil: [0]).
  		
+ 	self extent: (Preferences standardMenuFont lineGridForMorphs asPoint).!
- 	self extent: (Preferences standardMenuFont height asPoint).!

Item was changed:
  ----- Method: MenuItemMorph>>stringMargin (in category 'layout') -----
  stringMargin
  
+ 	^ Preferences tinyDisplay
+ 		ifTrue: [ 0 "Rely on other measures"]
+ 		ifFalse: [ ((self fontToUse widthOf: Character space) * 1.5) truncated " 100% = 6px "]
+ !
- 	^Preferences tinyDisplay
- 		ifTrue: [ 1 ]
- 		ifFalse: [ 6 ]!

Item was changed:
  ----- Method: PluggableButtonMorph>>updateMinimumExtent (in category 'layout') -----
  updateMinimumExtent
  
  	| hMin vMin |
  	self label isMorph
  		ifTrue: [^ self minimumExtent: self label minExtent].
  
  	hMin := vMin := 0.
  	self hResizing ~~ #spaceFill
  		ifTrue: [hMin := (self font widthOfString: self label) max: (self font widthOf: $x) * 3].
  	self vResizing ~~ #spaceFill
+ 		ifTrue: [vMin := self font lineGrid].
- 		ifTrue: [vMin := self font lineGridForMorphs].
  
  	hMin := hMin + (2* self borderStyle width).
  	vMin := vMin + (2* self borderStyle width).
  			
  	self layoutInset isRectangle
  		ifTrue: [
  			hMin := hMin + self layoutInset left + self layoutInset right.
  			vMin := vMin + self layoutInset top + self layoutInset bottom]
  		ifFalse: [self layoutInset isPoint
  			ifTrue: [
  				hMin := hMin + (2* self layoutInset x).
  				vMin := vMin + (2* self layoutInset y)]
  			ifFalse: [
  				hMin := hMin + (2* self layoutInset).
  				vMin := vMin + (2* self layoutInset)]].
  	
  	self minimumExtent: hMin @ vMin.
  
  	"Since we have no submorphs, we have to resize here if we want to shrink wrap."
  	self hResizing == #shrinkWrap ifTrue: [self width: hMin].
  	self vResizing == #shrinkWrap ifTrue: [self height: vMin].!

Item was removed:
- ----- Method: SystemWindow>>addCornerGrips (in category 'initialization') -----
- addCornerGrips
- 	"When enabled via preference, also add edge grips"
- 	super addCornerGrips.
- 	self class resizeAlongEdges ifTrue:[self addEdgeGrips].!

Item was added:
+ ----- Method: SystemWindow>>addGrips (in category 'initialization') -----
+ addGrips
+ 	"Only when enabled via preference, also add edge grips."
+ 
+ 	self removeGrips.
+ 	
+ 	self addCornerGrips.
+ 	self class resizeAlongEdges ifTrue:[self addEdgeGrips].!

Item was changed:
  ----- Method: SystemWindow>>addMorph:fullFrame: (in category 'panes') -----
  addMorph: aMorph fullFrame: aLayoutFrame
+ 	"Overwritten to maintain custom paneMorphs cache."
- 	"Add aMorph according to aLayoutFrame."
  
+ 	self removeCellGapFromLayoutFrames.
- 	super addMorph: aMorph fullFrame: aLayoutFrame.
  
+ 	aMorph layoutFrame: aLayoutFrame.
+ 	aMorph hResizing: #spaceFill; vResizing: #spaceFill.
+ 	self addMorph: aMorph.
+ 
  	paneMorphs := paneMorphs copyReplaceFrom: 1 to: 0 with: (Array with: aMorph).
+ 	aMorph isImageMorph ifFalse: [aMorph adoptPaneColor: self paneColor].
+ 	
+ 	self addCellGapToLayoutFrames.
+ 
+ 	self wantsPaneSplitters ifTrue: [
+ 		"Splitters and grips share a preference. Tweak via #resizeAlongEges."
+ 		self addPaneSplitters.
+ 		self addGrips].!
- 	aMorph isImageMorph ifFalse: [aMorph adoptPaneColor: self paneColor].!

Item was removed:
- ----- Method: SystemWindow>>addPaneSplitters (in category 'initialization') -----
- addPaneSplitters
- 
- 	self removeCornerGrips.
- 
- 	super addPaneSplitters.
- 	
- 	self addCornerGrips.!

Item was added:
+ ----- Method: SystemWindow>>changeCellGapOfLayoutFrames: (in category 'layout') -----
+ changeCellGapOfLayoutFrames: delta
+ 	"Overwritten to adapt labelArea (not part of #paneMorphs), which has topFraction = 0 but still grows upwards. Thus, we have to negate the given delta."
+ 
+ 	labelArea ifNotNil: [labelArea layoutFrame ifNotNil: [:frame |
+ 		frame topOffset: frame topOffset - delta]].
+ 	
+ 	super changeCellGapOfLayoutFrames: delta.!

Item was changed:
  ----- Method: SystemWindow>>collapseOrExpand (in category 'resize/collapse') -----
  collapseOrExpand
  	"Collapse or expand the window, depending on existing state"
  	| cf |
  	isCollapsed
  		ifTrue: 
  			["Expand -- restore panes to morphics structure"
  			isCollapsed := false.
  			self beKeyWindow.  "Bring to frint first"
  			Preferences collapseWindowsInPlace
  				ifTrue: 
  					[fullFrame := fullFrame align: fullFrame topLeft with: self getBoundsWithFlex topLeft]
  				ifFalse:
  					[collapsedFrame := self getBoundsWithFlex].
  			collapseBox ifNotNil: [collapseBox setBalloonText: 'collapse this window' translated].
  			self setBoundsWithFlex: fullFrame.
  			paneMorphs reverseDo: 
  					[:m |  self addMorph: m unlock.
  					self world startSteppingSubmorphsOf: m].
  			self addPaneSplitters.
+ 			self addGrips.
  			(self hasProperty: #applyTheme) ifTrue: [
  				self removeProperty: #applyTheme.
  				self userInterfaceTheme applyTo: self allMorphs]]
  		ifFalse: 
  			["Collapse -- remove panes from morphics structure"
  			isCollapsed := true.
  			fullFrame := self getBoundsWithFlex.
  			"First save latest fullFrame"
  			paneMorphs do: [:m | m delete; releaseCachedState].
  			self removePaneSplitters.
+ 			self removeGrips.
- 			self removeCornerGrips.
  			model modelSleep.
  			cf := self getCollapsedFrame.
  			(collapsedFrame isNil and: [Preferences collapseWindowsInPlace not]) ifTrue:
  				[collapsedFrame := cf].
  			self setBoundsWithFlex: cf.
  			collapseBox ifNotNil: [collapseBox setBalloonText: 'expand this window' translated ].
  			expandBox ifNotNil: [expandBox setBalloonText: 'expand this window' translated ].
  			self sendToBack].
  	self layoutChanged!

Item was changed:
  ----- Method: SystemWindow>>initialize (in category 'initialization') -----
  initialize
  	"Initialize a system window. Add label, stripes, etc., if desired"
  
  	super initialize.
  
+ 	allowReframeHandles := true.
+ 	isCollapsed := false.
+ 	paneMorphs := Array new.
+ 	mustNotClose := false.
+ 	updatablePanes := Array new.
+ 
  	self layoutPolicy: ProportionalLayout new.
  
  	self wantsPaneSplitters: true.
  	self layoutInset: ProportionalSplitterMorph gripThickness.
  	self cellGap: ProportionalSplitterMorph gripThickness.
  
  	self initializeLabelArea.				
+ 	self addGrips.
- 	self addCornerGrips.
  	self setDefaultParameters.
  
- 	allowReframeHandles := true.
- 	isCollapsed := false.
- 	paneMorphs := Array new.
- 	mustNotClose := false.
- 	updatablePanes := Array new.
- 
  	self initializeKeyboardShortcuts.!

Item was changed:
  ----- Method: TheWorldMainDockingBar>>searchBarOn: (in category 'right side') -----
  searchBarOn: aDockingBar
  
  	aDockingBar 
+ 		addMorphBack: (SearchBar build
+ 			hResizing: #rigid; vResizing: #rigid;
+ 			width: (TextStyle defaultFont widthOf: $x) * 30; "Optimized for #scaleFactor * (1024 at 764) -- thus not full-screen mode..."
+ 			height: ToolBuilder default inputFieldHeight;
+ 			yourself);
- 		addMorphBack: (SearchBar build vResizing: #spaceFill; width: 200);
  		addDefaultSpace!



More information about the Squeak-dev mailing list