[squeak-dev] Re: [JIRA] Commented: (SQ-1119) Rotating flaps DNU and other mishaps

karl ramberg karlramberg at gmail.com
Wed Feb 6 07:12:41 UTC 2013


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 at squeakland.org>wrote:

>
>     [
> http://tracker.squeakland.org/browse/SQ-1119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=40892#action_40892]
>
> 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 at 105 corner: 207 at 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 at 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 at 105 corner: 207 at 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 at 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 at 105 corner: 207 at 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 at 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20130206/5ca58288/attachment.htm


More information about the Squeak-dev mailing list