In the Etoys image we found a very old bug in morphic that I'm not sure how to fix.
You can test it by trying to rotate a FlapTab in any Squeak image older than 3.1b.
For a very hard image lockup try rotating the FlapTab with the flap open. Then opening the debugger fails also.
The bug appeared between images Squeak 3.1b and Squeak 3.2 so it has been around a while.
The bug is with creating a TransformationMorph that has fullBounds nil.
TransformMorph overrides fullBounds:
fullBounds ifNotNil:[^ fullBounds]. fullBounds := bounds. submorphs do: [:m| m ownerChanged]. ^ fullBounds
Even if bounds are not nil, fullBounds gets nil'ed again when calling submorphs ownerChanged.
Any hints and good solutions appreciated :-)
Karl
On Sun, Feb 3, 2013 at 9:18 PM, Karl Ramberg (JIRA) tracker@squeakland.orgwrote:
[
http://tracker.squeakland.org/browse/SQ-1119?page=com.atlassian.jira.plugin....]
Karl Ramberg commented on SQ-1119:
It is really the FlapTab that has some issues with rotation.
Somehow the TransformationMorph fails with nil fullBounds.
I'm not sure how that can happen...
VM: Win32 - a SmalltalkImage Image: etoys5.0 [latest update: #2409]
UndefinedObject(Object)>>doesNotUnderstand: #hasPositiveExtent Receiver: nil Arguments and temporary variables: aMessage: hasPositiveExtent Receiver's instance variables: nil
TransformationMorph(Morph)>>invalidRect:from: Receiver: a TransformationMorph(2153) on a FlapTab<Flap>(1211) "My Flap" Arguments and temporary variables: aRectangle: nil aMorph: a TransformationMorph(2153) on a FlapTab<Flap>(1211) "My Flap" damageRect: nil Receiver's instance variables: bounds: 99@105 corner: 207@132 owner: nil submorphs: #(a FlapTab<Flap>(1211) "My Flap") fullBounds: nil color: Color lightGreen extension: nil transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = 0@0) smoothing: 1 localBounds: nil
TransformationMorph(TransformMorph)>>invalidRect:from: Receiver: a TransformationMorph(2153) on a FlapTab<Flap>(1211) "My Flap" Arguments and temporary variables: damageRect: nil aMorph: a TransformationMorph(2153) on a FlapTab<Flap>(1211) "My Flap" Receiver's instance variables: bounds: 99@105 corner: 207@132 owner: nil submorphs: #(a FlapTab<Flap>(1211) "My Flap") fullBounds: nil color: Color lightGreen extension: nil transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = 0@0) smoothing: 1 localBounds: nil
TransformationMorph(Morph)>>invalidRect: Receiver: a TransformationMorph(2153) on a FlapTab<Flap>(1211) "My Flap" Arguments and temporary variables: damageRect: nil Receiver's instance variables: bounds: 99@105 corner: 207@132 owner: nil submorphs: #(a FlapTab<Flap>(1211) "My Flap") fullBounds: nil color: Color lightGreen extension: nil transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = 0@0) smoothing: 1 localBounds: nil
--- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #hasPositiveExtent TransformationMorph(Morph)>>invalidRect:from: TransformationMorph(TransformMorph)>>invalidRect:from: TransformationMorph(Morph)>>invalidRect:
TransformationMorph(Morph)>>position: TransformationMorph>>asFlexOf: FlapTab(Morph)>>addFlexShell FlapTab(Morph)>>addFlexShellIfNecessary HaloMorph>>startRot:with: EventHandler>>send:to:withEvent:fromMorph: EventHandler>>mouseDown:fromMorph: ThreePhaseButtonMorph(Morph)>>mouseDown: ThreePhaseButtonMorph>>mouseDown: ThreePhaseButtonMorph(Morph)>>handleMouseDown: MouseButtonEvent>>sentTo: ThreePhaseButtonMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: ThreePhaseButtonMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: HaloMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: PasteUpMorph(Morph)>>processEvent:using: PasteUpMorph>>processEvent:using: PasteUpMorph(Morph)>>processEvent: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in Project class>>spawnNewProcess {[[World doOneCycle. Processor yield. false] whileFalse. nil]} [] in BlockContext>>newProcess {[self value. Processor terminateActive]}
Rotating flaps DNU and other mishaps
Key: SQ-1119 URL: http://tracker.squeakland.org/browse/SQ-1119 Project: squeakland Issue Type: Bug Components: etoys Reporter: Karl Ramberg Fix For: future release
Most flaps can be rotated by rotation handle but none of them do this
gracefully. Viewer flaps give DNU when collapsed and opened again. 'About' flap leaves a green transformation morph on the desktop.
Should we disable the rotation handle for flaps ? I can't really see a use case for rotating a flap, except for a cool
factor ;-)
-- This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators: http://tracker.squeakland.org/secure/Administrators.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
etoys-dev@lists.squeakfoundation.org