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! |
Free forum by Nabble | Edit this page |