Hi Christoph --
Could you align it column by column then?
Best, Marcel Am 01.09.2023 11:39:20 schrieb christoph.thiede@student.hpi.uni-potsdam.de christoph.thiede@student.hpi.uni-potsdam.de: Hi Marcel,
it is still column-by-column. Note that the RealEstateAgent logic makes very few assumptions on the collapsed extent of windows but has its own fixed grid size. So, the algorithm will always minimize the total width of all used columns in total.
Merge? :-)
Best, Christoph
--- Sent from Squeak Inbox Talk
On 2023-08-30T11:32:24+02:00, marcel.taeumel@hpi.de wrote:
Hi Christoph --
If you grow columns and enter the next one, align them vertically so reading those labels becomes easier. ... does it still grow from top to bottom, column-by-column ... or is it row-by-row? Reading those window titles from top to bottom is kind of useful and easier than from left to right....
Best, Marcel Am 29.08.2023 19:41:47 schrieb commits(a)source.squeak.org : Christoph Thiede uploaded a new version of System to project The Inbox: http://source.squeak.org/inbox/System-ct.1424.mcz
==================== Summary ====================
Name: System-ct.1424 Author: ct Time: 29 August 2023, 7:41:28.345934 pm UUID: 9af4e7bf-a99d-8a43-9de5-87c8ed70ce94 Ancestors: System-mt.1423
Revises RealEstateAgent logic for placing collapsed windows to deal with more windows than fit in one column by arranging them next to each other. Speeds up the logic for high-DPI displays by honoring the current scaleFactor.
=============== Diff against System-mt.1423 ===============
Item was changed: ----- Method: RealEstateAgent class>>assignCollapseFrameFor: (in category 'utilities') ----- assignCollapseFrameFor: aSSView "Offer up a location along the left edge of the screen for a collapsed SSView. Make sure it doesn't overlap any other collapsed frames."
- | grid verticalBorderDistance horizontalBorderDistance otherFrames viewBox collapsedFrame extent top column countInColumn topLeft newFrame row rowLeft rowFrame |
- grid := 8 px.
- verticalBorderDistance := 8 px.
- horizontalBorderDistance := 8 px.
- | grid otherFrames topLeft viewBox collapsedFrame extent newFrame verticalBorderDistance top |
- grid := 8.
- verticalBorderDistance := 8.
aSSView isMorph ifTrue: [otherFrames := (SystemWindow windowsIn: aSSView world satisfying: [:w | w ~= aSSView]) collect: [:w | w collapsedFrame] thenSelect: [:rect | rect notNil]. viewBox := self maximumUsableAreaInWorld: aSSView world] ifFalse: [otherFrames := ScheduledControllers scheduledWindowControllers collect: [:aController | aController view ~= aSSView ifTrue: [aController view collapsedFrame]] thenSelect: [:rect | rect notNil]. viewBox := Display boundingBox].
- otherFrames sort: [:w | w right] ascending.
collapsedFrame := aSSView collapsedFrame. extent := collapsedFrame notNil ifTrue: [collapsedFrame extent] ifFalse: [aSSView isMorph
- ifTrue: [aSSView getRawLabel width + aSSView labelWidgetAllowance @ (aSSView labelHeight + 2 px)]
- ifFalse: [(aSSView labelText extent x + 70 px) @ aSSView labelHeight
- ifTrue: [aSSView getRawLabel width + aSSView labelWidgetAllowance @ (aSSView labelHeight + 2)]
- ifFalse: [(aSSView labelText extent x + 70) @ aSSView labelHeight
min: aSSView labelDisplayBox extent]]. collapsedFrame notNil ifTrue: [(otherFrames anySatisfy: [:f | collapsedFrame intersects: f]) ifFalse: ["non overlapping" ^ collapsedFrame]].
- column := 0.
- countInColumn := nil.
- [countInColumn = 0]
- whileFalse:
- [top := viewBox top + verticalBorderDistance.
- countInColumn := 0.
- [topLeft := viewBox left @ top.
- newFrame := topLeft extent: extent.
- newFrame bottom
- whileTrue:
- [row := otherFrames select: [:w | newFrame intersects: w].
- column > 0 ifFalse: [rowFrame := newFrame] ifTrue: [
- rowLeft := ((otherFrames collect: [:w | w right]) take: column) last + horizontalBorderDistance.
- rowFrame := newFrame translateBy: (rowLeft @ 0).
- row := otherFrames select: [:w | rowFrame intersects: w]].
- (viewBox containsRect: rowFrame) ifTrue: [
- row ifEmpty: ["no overlap"
- ^ rowFrame].
- countInColumn := countInColumn + 1].
- top := top + grid].
- column := column + 1].
- "If all else fails... (really too many wins here)"
- top := viewBox top + verticalBorderDistance.
- [topLeft := viewBox left @ top.
- newFrame := topLeft extent: extent.
- newFrame bottom
- whileTrue:
- [(otherFrames anySatisfy: [:w | newFrame intersects: w])
- ifFalse: ["no overlap"
- ^ newFrame].
- top := top + grid].
- "If all else fails... (really to many wins here)"
aSSView isMorph ifTrue:[ Project current showWorldMainDockingBar ifTrue:[^ (0 @ Project current world mainDockingBars first height) extent: extent]]. ^ 0 @ 0 extent: extent!
Item was changed: ----- Method: RealEstateAgent class>>assignCollapsePointFor: (in category 'utilities') ----- assignCollapsePointFor: aSSView "Offer up a location along the left edge of the screen for a collapsed SSView. Make sure it doesn't overlap any other collapsed frames."
- | grid otherFrames viewBox column countInColumn y row topLeft currentRowLeft rowLeft |
- grid := 24 px. "should be mult of 8, since manual move is gridded by 8 px"
- | grid otherFrames y free topLeft viewBox |
- grid := 24. "should be mult of 8, since manual move is gridded by 8"
aSSView isMorph ifTrue: [otherFrames := (SystemWindow windowsIn: aSSView world satisfying: [:w | true]) collect: [:w | w collapsedFrame] thenSelect: [:rect | rect notNil]. viewBox := self maximumUsableAreaInWorld: aSSView world] ifFalse: [otherFrames := ScheduledControllers scheduledWindowControllers collect: [:aController | aController view collapsedFrame] thenSelect: [:rect | rect notNil]. viewBox := Display boundingBox].
- otherFrames sort: [:w | w right] ascending.
- column := 0.
- countInColumn := nil.
- [countInColumn = 0]
- whileFalse:
- [y := viewBox top.
- countInColumn := 0.
- [(y := y + grid)
- whileTrue:
- [topLeft := viewBox left(a)y.
- row := otherFrames select: [:w | topLeft = w topLeft].
- column > 0 ifFalse: [currentRowLeft := topLeft] ifTrue: [
- rowLeft := ((otherFrames collect: [:w | w right]) take: column) last + grid.
- currentRowLeft := topLeft translateBy: (rowLeft @ 0).
- row := otherFrames select: [:w | currentRowLeft = w topLeft]].
- (viewBox containsPoint: topLeft) ifTrue: [
- row ifEmpty: ["no overlap"
- ^ topLeft].
- countInColumn := countInColumn + 1]].
- column := column + 1].
- y := viewBox top.
- [(y := y + grid)
- whileTrue:
- [topLeft := viewBox left(a)y.
- free := true.
- otherFrames do: [:w | free := free & (topLeft ~= w topLeft)].
- free ifTrue: [^ topLeft]].
"If all else fails..." ^ 0 @ 0!