[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
|