Nicolas Cellier uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-nice.143.mcz ==================== Summary ==================== Name: MorphicExtras-nice.143 Author: nice Time: 15 December 2013, 10:55:31.161 pm UUID: f8c6df1c-bcd3-409a-98bb-8530a01bae91 Ancestors: MorphicExtras-nice.142 Reintegrate methods for supporting strictlyStaggered window placement policy in System. The methods do not refer to Flaps directly anymore. =============== Diff against MorphicExtras-nice.142 =============== Item was removed: - ----- Method: RealEstateAgent class>>strictlyStaggeredInitialFrameFor:initialExtent: (in category '*MorphicExtras-framing') ----- - strictlyStaggeredInitialFrameFor: aStandardSystemView initialExtent: initialExtent - - self error: 'please use #strictlyStaggeredInitialFrameFor:initialExtent:world:'! Item was removed: - ----- Method: RealEstateAgent class>>strictlyStaggeredInitialFrameFor:initialExtent:world: (in category '*MorphicExtras-framing') ----- - strictlyStaggeredInitialFrameFor: aStandardSystemView initialExtent: initialExtent world: aWorld - "This method implements a staggered window placement policy that I (di) like. - Basically it provides for up to 4 windows, staggered from each of the 4 corners. - The windows are staggered so that there will always be a corner visible." - - | allowedArea grid initialFrame otherFrames cornerSel corner delta putativeCorner free maxLevel | - - allowedArea :=(self maximumUsableAreaInWorld: aWorld) - insetBy: (self scrollBarSetback @ self screenTopSetback extent: 0@0). - (Smalltalk isMorphic and: [Flaps sharedFlapsAllowed]) ifTrue: - [allowedArea := self reduceByFlaps: allowedArea]. - "Number to be staggered at each corner (less on small screens)" - maxLevel := allowedArea area > 300000 ifTrue: [3] ifFalse: [2]. - "Amount by which to stagger (less on small screens)" - grid := allowedArea area > 500000 ifTrue: [40] ifFalse: [20]. - initialFrame := 0@0 extent: ((initialExtent - "min: (allowedArea extent - (grid*(maxLevel+1*2) + (grid//2)))) - min: 600@400")). - otherFrames := Smalltalk isMorphic - ifTrue: [(SystemWindow windowsIn: aWorld satisfying: [:w | w isCollapsed not]) - collect: [:w | w bounds]] - ifFalse: [ScheduledControllers scheduledWindowControllers - select: [:aController | aController view ~~ nil] - thenCollect: [:aController | aController view isCollapsed - ifTrue: [aController view expandedFrame] - ifFalse: [aController view displayBox]]]. - 0 to: maxLevel do: - [:level | - 1 to: 4 do: - [:ci | cornerSel := #(topLeft topRight bottomRight bottomLeft) at: ci. - corner := allowedArea perform: cornerSel. - "The extra grid//2 in delta helps to keep title tabs distinct" - delta := (maxLevel-level*grid+(grid//2)) @ (level*grid). - 1 to: ci-1 do: [:i | delta := delta rotateBy: #right centerAt: 0@0]. "slow way" - putativeCorner := corner + delta. - free := true. - otherFrames do: - [:w | - free := free & ((w perform: cornerSel) ~= putativeCorner)]. - free ifTrue: - [^ (initialFrame align: (initialFrame perform: cornerSel) - with: putativeCorner) - translatedAndSquishedToBeWithin: allowedArea]]]. - "If all else fails..." - ^ (self scrollBarSetback @ self screenTopSetback extent: initialFrame extent) - translatedAndSquishedToBeWithin: allowedArea! |
Free forum by Nabble | Edit this page |