The Trunk: MorphicExtras-fbs.108.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: MorphicExtras-fbs.108.mcz

commits-2
Frank Shearar uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-fbs.108.mcz

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

Name: MorphicExtras-fbs.108
Author: fbs
Time: 21 May 2013, 4:23:06.078 pm
UUID: 8564f17a-aa1e-41ab-8e2a-572182649f24
Ancestors: MorphicExtras-fbs.107

Move unto MorphicExtras the things that are MorphicExtras. Flaps-referencing methods, in this case.

=============== Diff against MorphicExtras-fbs.107 ===============

Item was added:
+ ----- Method: RealEstateAgent class>>reduceByFlaps: (in category '*MorphicExtras-utilities') -----
+ reduceByFlaps: aScreenRect
+ "Return a rectangle that won't interfere with default shared flaps"
+
+ Flaps sharedFlapsAllowed ifFalse: [^ aScreenRect copy].
+ (Flaps globalFlapTabsIfAny allSatisfy:
+ [:ft | ft flapID = 'Painting' translated or: [ft edgeToAdhereTo == #bottom]])
+ ifTrue: [^ aScreenRect withHeight: aScreenRect height - 18]
+ ifFalse: [^ aScreenRect insetBy: 18]!

Item was added:
+ ----- Method: RealEstateAgent class>>strictlyStaggeredInitialFrameFor:initialExtent: (in category '*MorphicExtras-framing') -----
+ strictlyStaggeredInitialFrameFor: aStandardSystemView initialExtent: initialExtent
+
+ self error: 'please use #strictlyStaggeredInitialFrameFor:initialExtent:world:'!

Item was added:
+ ----- 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!