Re: Found Bug But Not Sure How to Proceed To Fix

Bob Arning <[email protected]> Fri, 2 Mar 2018 22:36:22 -0500
Newsgroups gmane.comp.lang.smalltalk.squeak.squeakland
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--===============0685091186393935678==
Content-Type: multipart/alternative;
 boundary="------------C01C266CB11A60827F5D91B5"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------C01C266CB11A60827F5D91B5
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Here is a little help in visualizing the problem with rotated rectangles.

========================

FormCanvas>>transformBy: aDisplayTransform clippingTo: aClipRect during: 
aBlock  smoothing: cellSize

     "Note: This method has been originally copied from 
TransformationMorph."
     | innerRect patchRect sourceQuad warp start subCanvas |
     (aDisplayTransform isPureTranslation) ifTrue:[
         ^aBlock value: (self copyOffset: aDisplayTransform offset 
negated truncated
                             clipRect: aClipRect)
     ].
     "Prepare an appropriate warp from patch to innerRect"
     innerRect := aClipRect.
*self fillRectangle: aClipRect color: Color magenta.    "<---show the 
space we are working in"*
     patchRect := (aDisplayTransform globalBoundsToLocal: innerRect) 
truncated.
     sourceQuad := (aDisplayTransform sourceQuadFor: innerRect)
                     collect: [:p | p - patchRect topLeft].
     warp := self warpFrom: sourceQuad toRect: innerRect.

     "Render the submorphs visible in the clipping rectangle, as patchForm"
     start := (self depth = 1 and: [self isShadowDrawing not])
         "If this is true B&W, then we need a first pass for erasure."
         ifTrue: [1] ifFalse: [2].
     start to: 2 do:
         [:i | "If i=1 we first make a shadow and erase it for opaque 
whites in B&W"
         subCanvas := self class extent: patchRect extent depth: self depth.
         i=1    ifTrue: [subCanvas shadowColor: Color black.
                     warp combinationRule: Form erase]
             ifFalse: [self isShadowDrawing ifTrue:
                     [subCanvas shadowColor: self shadowColor].
                     warp combinationRule: Form paint].
         subCanvas translateBy: patchRect topLeft negated
             during:[:offsetCanvas| aBlock value: offsetCanvas].
         warp sourceForm: subCanvas form; cellSize: cellSize; warpBits.
         warp sourceForm: nil.  subCanvas := nil "release space for next 
loop"]

=======================

Make the one change highlighted above and no others (to avoid clashes). 
Get 4 RectangleMorphs, rotate them 0, 90, 180 and 270 degrees. Observe 
that they are placed in the magenta area differently based on the angle. 
It's the topLeft of the magenta area that will align with other morphs 
when gridding is on, so the fact that the rectangles start at different 
distances from that corner is what makes their alignments not the same. 
Hopefully we can convince WarpBlt to position them the same way, 
although the absence of a transformation on the 0 degree version means 
there is still an issue to make it line up with the rotated ones.


On 3/2/18 10:11 PM, Jeremy Landry wrote:
> Update: I've traced it down to bitBlt destRect:.
>
> Not only is it affecting how sketches (which would be scaled/rotated 
> items) are drawn and aligned to real shapes (like rectangles) but it's 
> also having an effect on how the cursor in playfield is drawn.  I'm 
> adding small 'offsets' in-code for now, but I suspect there's 
> something else at play here, possible with some rotation/scaling math 
> handing off bad values?  But then again, this would mean that cursors 
> would not leave trails for rectangles and WOULD leave trails for 
> rotated ones...hmmm...
>
>
> On Fri, Mar 2, 2018 at 6:18 PM, Jeremy Landry <[email protected] 
> <mailto:[email protected]>> wrote:
>
>     And I can back that up, now...
>
>     PasteUpMorph cursor  _also_ uses the expandBy: method and has
>     redrawing issues.
>
>     Somehow I think morphs are either giving wrong information to the
>     the expandBy: method or expandBy: is doing it's own calculations
>     incorrectly....
>
>     Change the expandBy: to any number and the cursor square will
>     change (use a larger number, btw) and it will still not erase
>     correctly.  It has a 2 pixel offset, the same as the thickness of
>     the cursor.
>
>     On Fri, Mar 2, 2018 at 5:59 PM, Jeremy Landry <[email protected]
>     <mailto:[email protected]>> wrote:
>
>         So far, with a little testing, everything lines up much better
>         with .1 instead of removing it.  removing that offset still
>         sees to make it offset, but .1 lines everything up visually
>         more...still not perfect, but much less flagrant.  It still
>         has a clipping glitch (you can see it with a rectangle when
>         rotating: the border gets clipped off) but it does visually
>         appear more 'solid' and expected when aligning rectangular
>         shapes together.
>
>         I'm going to keep experimenting to find something that keeps
>         the rotated bitmap in tact while still aligning properly.  I
>         feel like I probably glanced at a method that needs an edit
>         over and over but haven't realized which one it is yet. I
>         still need to look into the cursor not being properly redrawn
>         as well.  I might be stretching or trying to make a connection
>         that isn't there, but something 'feels' related to this and
>         the cursor, like some common reference point is being shifted
>         so that the cursor's area for drawing doesn't reach the left
>         and bottom edges just like the origin doesn't reach the left
>         and bottom edges correctly for the this rotation issue.
>
>
>
>
>
>         On Fri, Mar 2, 2018 at 5:37 PM, David T. Lewis
>         <[email protected] <mailto:[email protected]>> wrote:
>
>             Does anything bad happen if the "expandBy: 1" is removed?
>             I tried removing it
>             in my Squeak trunk image, and "CompassDialMorph new
>             openInWorld" (which is one
>             user of TransformationMorph) seems to work nicely.
>
>             And if the "expandBy: 1" is removed in an Etoys image,
>             does anything bad happen?
>             Does it fix the issue that Jeremy is seeing?
>
>             This would be an easy thing to fix in Squeak trunk, which
>             hopefully will become
>             part of future Etoys releases, knock wood.
>
>             Dave
>
>
>             On Fri, Mar 02, 2018 at 03:19:54PM -0500, Bob Arning wrote:
>             > TransformationMorph>>computeBounds
>             > ?????? self hasSubmorphs ifTrue:
>             > ?????? ?????? [bounds _ (transform localBoundsToGlobal:
>             > ?????? ?????? ?????? ?????? ?????? (Rectangle merging:
>             > ?????? ?????? ?????? ?????? ?????? ?????? (self
>             submorphs collect: [:m | m
>             > fullBounds]))) truncated
>             > ?????? ?????? ?????? ?????? expandBy: 1].
>             > ?????? fullBounds _ bounds.
>             >
>             > Note the expandBy: 1
>             >
>             >
>             > On 3/2/18 1:59 PM, Jeremy Landry wrote:
>             > >Actually to add a little more insight if possible, you
>             can create bug
>             > >with the following actions:
>             > >
>             > >make a new playfield
>             > >make 2 new rectangles and place them into the playfield.
>             > >Rotate one of them 90 degrees.
>             > >Turn gridding on in the playfield.
>             > >
>             > >The rotated and unscaled rectangle will not align with
>             the non-rotated
>             > >one with gridding.?? Something about making a bitmap
>             copy is offsetting
>             > >the values, my guess is there's a rounding problem that is popping up
>             > >on these objects, thus scale and rotation get offset
>             for some reason,
>             > >and specifically changes the origin by 1@-1
>             somewhere...it causes
>             > >graphical glitches leaving 'garbage' with playfield
>             indicators when
>             > >the object that has the indicator is moved and also
>             shows up with
>             > >rotated ellipses.?? What is the common thread through
>             them all??? What
>             > >method are they all accessing?
>             > >
>             > >On Fri, Mar 2, 2018 at 10:45 AM, Jeremy Landry
>             <[email protected] <mailto:[email protected]>
>             > ><mailto:[email protected] <mailto:[email protected]>>> wrote:
>             > >
>             > >    You will also notice if you rotate any shape, it
>             becomes a bit
>             > >    map.?? Scale it and you will see that problem
>             re-occur even with
>             > >    built-in objects.?? Could it be the masking offset,
>             too??? that
>             > >    causes this??? I'm still investigating, but I'm not
>             sure how to
>             > >    step through 'already working' things specifically related to what
>             > >    I'm trying to look at.
>             > >
>             > >    On Fri, Mar 2, 2018 at 10:42 AM, Jeremy Landry
>             <[email protected] <mailto:[email protected]>
>             > >    <mailto:[email protected]
>             <mailto:[email protected]>>> wrote:
>             > >
>             > >        Hi, it only appears when scaling a morph.?? Here is
>             > >        example...it is my belief (how does one step through code with
>             > >        debugger if there's no bug happening?);
>             > >
>             > >        Whatever code is common that scales morphs is
>             being offset
>             > >        incorrectly. The first image shows the
>             'garbage' left behind
>             > >        by playfield indicator if that option is set.??
>             It seems it was
>             > >        only tested in 'holders' and thus likely not picked up during
>             > >        'intended' use.
>             > >
>             > >        Next, two pictures show scaling as where the
>             misalignment
>             > >        starts.?? This might be why you could not
>             recreate bug;
>             > >        resizing rectangle changes rectangle morph extent, whereas
>             > >        scaling is a differnet piece of code and
>             therefore different
>             > >        outcome.
>             > >
>             > >        Image included.?? This works with *anything*
>             scaled.
>             > >        https://imgur.com/a/6zEWq
>             > >
>             > >        On Fri, Mar 2, 2018 at 10:20 AM, Bob Arning
>             > >        <[email protected] <mailto:[email protected]>
>             <mailto:[email protected]
>             <mailto:[email protected]>>> wrote:
>             > >
>             > >            I tried to recreate your example and could
>             not. How did
>             > >            you create the two morphs in your example?
>             Are you certain
>             > >            the read/gray morph does not have some
>             transparent pixels
>             > >            along the top and left?
>             > >
>             > >
>             > >            On 3/2/18 12:50 PM, Jeremy Landry wrote:
>             > >>            I did a little more digging, just for the
>             record...and it
>             > >>            turns out it's scaling error.?? No matter
>             what, scaling
>             > >>            offsets morphs by 1@-1.?? I'm still
>             looking for where this
>             > >>            occurs and why.?? So far, injecting
>             intentionally bad
>             > >>            values into bordered morph and sketch classes hasn't
>             > >>            produced any change.?? It 'feels' like
>             most of that code
>             > >>            isn't even used, but then again, I might not have
>             > >>            genuinely created a new object with that
>             code and system
>             > >>            might have been giving me what was already
>             in system...
>             > >>
>             > >>
>             > >>            On Fri, Mar 2, 2018 at 7:15 AM, Bert
>             Freudenberg
>             > >>           <[email protected] <mailto:[email protected]>
>             <mailto:[email protected]
>             <mailto:[email protected]>>> wrote:
>             > >>
>             > >>                That bug tracker is pretty much dead,
>             since all
>             > >>                ongoing development moved to
>             squeak.org <http://squeak.org>
>             > >>                <http://squeak.org>.
>             > >>
>             > >>                The plan was to make a new Etoys
>             release based on the
>             > >>                latest Squeak source base, but we have
>             not have
>             > >>                enough developer time to make that
>             actually happen.
>             > >>
>             > >>                - Bert -
>             > >>
>             > >>                On 1 March 2018 at 06:03, Nicco
>             Kunzmann (rambler)
>             > >>                <[email protected]
>             <mailto:[email protected]>
>             > >>                <mailto:[email protected]
>             <mailto:[email protected]>>> wrote:
>             > >>
>             > >>                    Hi,
>             > >>
>             > >>                    I found a bug tracker on the
>             squeakland site:
>             > >> http://tracker.squeakland.org/secure/Dashboard.jspa
>             <http://tracker.squeakland.org/secure/Dashboard.jspa>
>             > >> <http://tracker.squeakland.org/secure/Dashboard.jspa
>             <http://tracker.squeakland.org/secure/Dashboard.jspa>>
>             > >>
>             > >>                    I think, you can describe the
>             problem there as an
>             > >> issue and hand in the fix.
>             > >> They may also know how to guide you further if
>             > >>                    the code base is somewhere else.
>             > >>                    If you have problems there (login,
>             no response),
>             > >>                    I guess, this mailing list is one
>             place to ask
>             > >>                    for help.
>             > >>
>             > >> Best,
>             > >> Nicco
>             > >>
>             > >>
>             > >>                    On 03/01/2018 03:34 AM, Jeremy
>             Landry wrote:
>             > >>> Hi, while working on a project needing precise
>             > >>> alignment of sketches/bitmaps and rectangles
>             > >>> using playfield 'use gridding', it seems that
>             > >>> there's a difference of detected origin.
>             > >>>
>             > >>> Here's a screenshot with magnifier showing the
>             > >>> discrepency.
>             > >>> https://imgur.com/a/tcaRu
>             > >>>
>             > >>> I'm quite certain this bug is the one that
>             > >>> causes bad redrawing, especially when showing a
>             > >>> cursor move when 'indicate cursor' is activated
>             > >>> in a playfield.
>             > >>>
>             > >>> If I correct this bug inside of a project, will
>             > >>> it load into an image where it has not been
>             > >>> fixed and be fixed?
>             > >>>
>             > >>> I haven't actually fixed the bug yet, but didn't
>             > >>> want to waste time on it if the fix will not
>             > >>> travel with the project.
>             > >>>
>             > >>> Thanks in advance for any input.
>             > >>>
>             > >>>
>             > >>> _______________________________________________
>             > >>> squeakland mailing list
>             > >>> squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             > >>> <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>>
>             > >>>
>             http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>             > >>>                   <http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>>
>             > >>
>             > >>
>             > >> _______________________________________________
>             > >> squeakland mailing list
>             > >> squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             > >> <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>>
>             > >>
>             http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>             > >>                   <http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>>
>             > >>
>             > >>
>             > >>
>             > >> _______________________________________________
>             > >> squeakland mailing list
>             > >> squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             > >> <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>>
>             > >>
>             http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>             > >>                <http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>>
>             > >>
>             > >>
>             > >>
>             > >>
>             > >> _______________________________________________
>             > >>            squeakland mailing list
>             > >> squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             > >> <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>>
>             > >>
>             http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>             > >>            <http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>>
>             > >
>             > >
>             > > _______________________________________________
>             > >            squeakland mailing list
>             > > squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             > >            <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>>
>             > >
>             http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>             > >           
>             <http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>>
>             > >
>             > >
>             > >
>             > >
>             >
>
>             > _______________________________________________
>             > squeakland mailing list
>             > squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             > http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>
>             _______________________________________________
>             squeakland mailing list
>             squeakland-bD51WKytQuId/fn+uklp/[email protected]
>             <mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]>
>             http://lists.squeakland.org/mailman/listinfo/squeakland
>             <http://lists.squeakland.org/mailman/listinfo/squeakland>
>
>
>
>
>
>
> _______________________________________________
> squeakland mailing list
> squeakland-bD51WKytQuId/fn+uklp/[email protected]
> http://lists.squeakland.org/mailman/listinfo/squeakland


--------------C01C266CB11A60827F5D91B5
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><font face="Georgia">Here is a little help in visualizing the
        problem with rotated rectangles.</font></p>
    <p><font face="Georgia">========================<br>
      </font></p>
    <p><font face="Georgia">FormCanvas&gt;&gt;transformBy:
        aDisplayTransform clippingTo: aClipRect during: aBlock   
         smoothing: cellSize<br>
        <br>
            "Note: This method has been originally copied from
        TransformationMorph."<br>
            | innerRect patchRect sourceQuad warp start subCanvas |<br>
            (aDisplayTransform isPureTranslation) ifTrue:[<br>
                ^aBlock value: (self copyOffset: aDisplayTransform
        offset negated truncated<br>
                                    clipRect: aClipRect)<br>
            ].<br>
            "Prepare an appropriate warp from patch to innerRect"<br>
            innerRect := aClipRect.<br>
        <font color="#ff0000"><b>self fillRectangle: aClipRect color:
            Color magenta.    "&lt;---show the space we are working in"</b></font><br>
            patchRect := (aDisplayTransform globalBoundsToLocal:
        innerRect) truncated.<br>
            sourceQuad := (aDisplayTransform sourceQuadFor: innerRect)<br>
                            collect: [:p | p - patchRect topLeft].<br>
            warp := self warpFrom: sourceQuad toRect: innerRect.<br>
        <br>
            "Render the submorphs visible in the clipping rectangle, as
        patchForm"<br>
            start := (self depth = 1 and: [self isShadowDrawing not])<br>
                "If this is true B&amp;W, then we need a first pass for
        erasure."<br>
                ifTrue: [1] ifFalse: [2].<br>
            start to: 2 do:<br>
                [:i | "If i=1 we first make a shadow and erase it for
        opaque whites in B&amp;W"<br>
                subCanvas := self class extent: patchRect extent depth:
        self depth.<br>
                i=1    ifTrue: [subCanvas shadowColor: Color black.<br>
                            warp combinationRule: Form erase]<br>
                    ifFalse: [self isShadowDrawing ifTrue:<br>
                            [subCanvas shadowColor: self shadowColor].<br>
                            warp combinationRule: Form paint].<br>
                subCanvas translateBy: patchRect topLeft negated<br>
                    during:[:offsetCanvas| aBlock value: offsetCanvas].<br>
                warp sourceForm: subCanvas form; cellSize: cellSize;
        warpBits.<br>
                warp sourceForm: nil.  subCanvas := nil "release space
        for next loop"]</font></p>
    <p><font face="Georgia">=======================<br>
      </font></p>
    <p>Make the one change highlighted above and no others (to avoid
      clashes). Get 4 RectangleMorphs, rotate them 0, 90, 180 and 270
      degrees. Observe that they are placed in the magenta area
      differently based on the angle. It's the topLeft of the magenta
      area that will align with other morphs when gridding is on, so the
      fact that the rectangles start at different distances from that
      corner is what makes their alignments not the same. Hopefully we
      can convince WarpBlt to position them the same way, although the
      absence of a transformation on the 0 degree version means there is
      still an issue to make it line up with the rotated ones.<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 3/2/18 10:11 PM, Jeremy Landry
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAMYa41nqgLsHpsp=jtRtPm0yEUkVk9SvdSb9PkNqMUY_j8mk2w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org">
      <div dir="ltr">
        <span
style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Update: 
          I've traced it down to bitBlt destRect:.  </span>
        <div
style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><br>
        </div>
        <div
style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">Not
          only is it affecting how sketches (which would be
          scaled/rotated items) are drawn and aligned to real shapes
          (like rectangles) but it's also having an effect on how the
          cursor in playfield is drawn.  I'm adding small 'offsets'
          in-code for now, but I suspect there's something else at play
          here, possible with some rotation/scaling math handing off bad
          values?  But then again, this would mean that cursors would
          not leave trails for rectangles and WOULD leave trails for
          rotated ones...hmmm...</div>
        <br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Fri, Mar 2, 2018 at 6:18 PM, Jeremy
          Landry <span dir="ltr">&lt;<a href="mailto:[email protected]"
              target="_blank" moz-do-not-send="true">[email protected]</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div dir="ltr">And I can back that up, now...
              <div><br>
              </div>
              <div>PasteUpMorph cursor  _also_ uses the expandBy: method
                and has redrawing issues.</div>
              <div><br>
              </div>
              <div>Somehow I think morphs are either giving wrong
                information to the the expandBy: method or expandBy: is
                doing it's own calculations incorrectly....</div>
              <div><br>
              </div>
              <div>Change the expandBy: to any number and the cursor
                square will change (use a larger number, btw) and it
                will still not erase correctly.  It has a 2 pixel
                offset, the same as the thickness of the cursor.</div>
            </div>
            <div class="HOEnZb">
              <div class="h5">
                <div class="gmail_extra"><br>
                  <div class="gmail_quote">On Fri, Mar 2, 2018 at 5:59
                    PM, Jeremy Landry <span dir="ltr">&lt;<a
                        href="mailto:[email protected]" target="_blank"
                        moz-do-not-send="true">[email protected]</a>&gt;</span>
                    wrote:<br>
                    <blockquote class="gmail_quote" style="margin:0 0 0
                      .8ex;border-left:1px #ccc solid;padding-left:1ex">
                      <div dir="ltr">So far, with a little testing,
                        everything lines up much better with .1 instead
                        of removing it.  removing that offset still sees
                        to make it offset, but .1 lines everything up
                        visually more...still not perfect, but much less
                        flagrant.  It still has a clipping glitch (you
                        can see it with a rectangle when rotating: the
                        border gets clipped off) but it does visually
                        appear more 'solid' and expected when aligning
                        rectangular shapes together.
                        <div><br>
                        </div>
                        <div>I'm going to keep experimenting to find
                          something that keeps the rotated bitmap in
                          tact while still aligning properly.  I feel
                          like I probably glanced at a method that needs
                          an edit over and over but haven't realized
                          which one it is yet. I still need to look into
                          the cursor not being properly redrawn as
                          well.  I might be stretching or trying to make
                          a connection that isn't there, but something
                          'feels' related to this and the cursor, like
                          some common reference point is being shifted
                          so that the cursor's area for drawing doesn't
                          reach the left and bottom edges just like the
                          origin doesn't reach the left and bottom edges
                          correctly for the this rotation issue.</div>
                        <div><br>
                        </div>
                        <div><br>
                        </div>
                        <div><br>
                        </div>
                        <div><br>
                        </div>
                      </div>
                      <div class="m_-3220180386521783406HOEnZb">
                        <div class="m_-3220180386521783406h5">
                          <div class="gmail_extra"><br>
                            <div class="gmail_quote">On Fri, Mar 2, 2018
                              at 5:37 PM, David T. Lewis <span
                                dir="ltr">&lt;<a
                                  href="mailto:[email protected]"
                                  target="_blank" moz-do-not-send="true">[email protected]</a>&gt;</span>
                              wrote:<br>
                              <blockquote class="gmail_quote"
                                style="margin:0 0 0 .8ex;border-left:1px
                                #ccc solid;padding-left:1ex">Does
                                anything bad happen if the "expandBy: 1"
                                is removed? I tried removing it<br>
                                in my Squeak trunk image, and
                                "CompassDialMorph new openInWorld"
                                (which is one<br>
                                user of TransformationMorph) seems to
                                work nicely.<br>
                                <br>
                                And if the "expandBy: 1" is removed in
                                an Etoys image, does anything bad
                                happen?<br>
                                Does it fix the issue that Jeremy is
                                seeing?<br>
                                <br>
                                This would be an easy thing to fix in
                                Squeak trunk, which hopefully will
                                become<br>
                                part of future Etoys releases, knock
                                wood.<br>
                                <br>
                                Dave<br>
                                <br>
                                <br>
                                On Fri, Mar 02, 2018 at 03:19:54PM
                                -0500, Bob Arning wrote:<br>
                                &gt;
                                TransformationMorph&gt;&gt;computeBo<wbr>unds<br>
                                &gt; ?????? self hasSubmorphs ifTrue:<br>
                                &gt; ?????? ?????? [bounds _ (transform
                                localBoundsToGlobal:<br>
                                &gt; ?????? ?????? ?????? ?????? ??????
                                (Rectangle merging:<br>
                                &gt; ?????? ?????? ?????? ?????? ??????
                                ?????? (self submorphs collect: [:m | m<br>
                                &gt; fullBounds]))) truncated<br>
                                &gt; ?????? ?????? ?????? ??????
                                expandBy: 1].<br>
                                &gt; ?????? fullBounds _ bounds.<br>
                                <span>&gt;<br>
                                  &gt; Note the expandBy: 1<br>
                                  &gt;<br>
                                  &gt;<br>
                                  &gt; On 3/2/18 1:59 PM, Jeremy Landry
                                  wrote:<br>
                                  &gt; &gt;Actually to add a little more
                                  insight if possible, you can create
                                  bug<br>
                                  &gt; &gt;with the following actions:<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;make a new playfield<br>
                                  &gt; &gt;make 2 new rectangles and
                                  place them into the playfield.<br>
                                  &gt; &gt;Rotate one of them 90
                                  degrees.<br>
                                  &gt; &gt;Turn gridding on in the
                                  playfield.<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;The rotated and unscaled
                                  rectangle will not align with the
                                  non-rotated<br>
                                </span>&gt; &gt;one with gridding.??
                                Something about making a bitmap copy is
                                offsetting<br>
                                <span>&gt; &gt;the values, my guess is
                                  there's a rounding problem that is
                                  popping up<br>
                                  &gt; &gt;on these objects, thus scale
                                  and rotation get offset for some
                                  reason,<br>
                                  &gt; &gt;and specifically changes the
                                  origin by 1@-1 somewhere...it causes<br>
                                  &gt; &gt;graphical glitches leaving
                                  'garbage' with playfield indicators
                                  when<br>
                                  &gt; &gt;the object that has the
                                  indicator is moved and also shows up
                                  with<br>
                                </span>&gt; &gt;rotated ellipses.?? What
                                is the common thread through them all???
                                What<br>
                                <span>&gt; &gt;method are they all
                                  accessing?<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;On Fri, Mar 2, 2018 at 10:45
                                  AM, Jeremy Landry &lt;<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a><br>
                                </span><span>&gt; &gt;&lt;mailto:<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a>&gt;&gt;
                                  wrote:<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;    You will also notice if
                                  you rotate any shape, it becomes a bit<br>
                                </span>&gt; &gt;    map.?? Scale it and
                                you will see that problem re-occur even
                                with<br>
                                &gt; &gt;    built-in objects.?? Could
                                it be the masking offset, too??? that<br>
                                &gt; &gt;    causes this??? I'm still
                                investigating, but I'm not sure how to<br>
                                <span>&gt; &gt;    step through 'already
                                  working' things specifically related
                                  to what<br>
                                  &gt; &gt;    I'm trying to look at.<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;    On Fri, Mar 2, 2018 at
                                  10:42 AM, Jeremy Landry &lt;<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a><br>
                                </span>&gt; &gt;    &lt;mailto:<a
                                  href="mailto:[email protected]"
                                  target="_blank" moz-do-not-send="true">[email protected]</a>&gt;&gt;
                                wrote:<br>
                                &gt; &gt;<br>
                                &gt; &gt;        Hi, it only appears
                                when scaling a morph.?? Here is<br>
                                <span>&gt; &gt;        example...it is
                                  my belief (how does one step through
                                  code with<br>
                                  &gt; &gt;        debugger if there's
                                  no bug happening?);<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;        Whatever code is
                                  common that scales morphs is being
                                  offset<br>
                                  &gt; &gt;        incorrectly. The
                                  first image shows the 'garbage' left
                                  behind<br>
                                </span>&gt; &gt;        by playfield
                                indicator if that option is set.?? It
                                seems it was<br>
                                <span>&gt; &gt;        only tested in
                                  'holders' and thus likely not picked
                                  up during<br>
                                  &gt; &gt;        'intended' use.<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;        Next, two pictures
                                  show scaling as where the misalignment<br>
                                </span>&gt; &gt;        starts.?? This
                                might be why you could not recreate bug;<br>
                                <span>&gt; &gt;        resizing
                                  rectangle changes rectangle morph
                                  extent, whereas<br>
                                  &gt; &gt;        scaling is a
                                  differnet piece of code and therefore
                                  different<br>
                                  &gt; &gt;        outcome.<br>
                                  &gt; &gt;<br>
                                </span>&gt; &gt;        Image
                                included.?? This works with *anything*
                                scaled.<br>
                                <span>&gt; &gt;        <a
                                    href="https://imgur.com/a/6zEWq"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true">https://imgur.com/a/6zEWq</a><br>
                                  &gt; &gt;<br>
                                  &gt; &gt;        On Fri, Mar 2, 2018
                                  at 10:20 AM, Bob Arning<br>
                                </span><span>&gt; &gt;        &lt;<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a>
                                  &lt;mailto:<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a>&gt;<wbr>&gt;
                                  wrote:<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;            I tried to
                                  recreate your example and could not.
                                  How did<br>
                                  &gt; &gt;            you create the
                                  two morphs in your example? Are you
                                  certain<br>
                                  &gt; &gt;            the read/gray
                                  morph does not have some transparent
                                  pixels<br>
                                  &gt; &gt;            along the top and
                                  left?<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;            On 3/2/18 12:50
                                  PM, Jeremy Landry wrote:<br>
                                  &gt; &gt;&gt;            I did a
                                  little more digging, just for the
                                  record...and it<br>
                                </span>&gt; &gt;&gt;            turns
                                out it's scaling error.?? No matter
                                what, scaling<br>
                                &gt; &gt;&gt;            offsets morphs
                                by 1@-1.?? I'm still looking for where
                                this<br>
                                &gt; &gt;&gt;            occurs and
                                why.?? So far, injecting intentionally
                                bad<br>
                                <span>&gt; &gt;&gt;            values
                                  into bordered morph and sketch classes
                                  hasn't<br>
                                </span>&gt; &gt;&gt;            produced
                                any change.?? It 'feels' like most of
                                that code<br>
                                <span>&gt; &gt;&gt;            isn't
                                  even used, but then again, I might not
                                  have<br>
                                  &gt; &gt;&gt;            genuinely
                                  created a new object with that code
                                  and system<br>
                                  &gt; &gt;&gt;            might have
                                  been giving me what was already in
                                  system...<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;            On Fri, Mar
                                  2, 2018 at 7:15 AM, Bert Freudenberg<br>
                                </span><span>&gt; &gt;&gt;           
                                  &lt;<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a>
                                  &lt;mailto:<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a>&gt;&gt;
                                  wrote:<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;                That bug
                                  tracker is pretty much dead, since all<br>
                                  &gt; &gt;&gt;                ongoing
                                  development moved to <a
                                    href="http://squeak.org"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true">squeak.org</a><br>
                                </span>&gt; &gt;&gt;                &lt;<a
                                  href="http://squeak.org"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">http://squeak.org</a>&gt;.<br>
                                <span>&gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;                The plan
                                  was to make a new Etoys release based
                                  on the<br>
                                  &gt; &gt;&gt;                latest
                                  Squeak source base, but we have not
                                  have<br>
                                  &gt; &gt;&gt;                enough
                                  developer time to make that actually
                                  happen.<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;                - Bert -<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;                On 1
                                  March 2018 at 06:03, Nicco Kunzmann
                                  (rambler)<br>
                                  &gt; &gt;&gt;                &lt;<a
                                    href="mailto:[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">[email protected]</a><br>
                                </span>
                                <div>
                                  <div
                                    class="m_-3220180386521783406m_-1416106533699505376h5">&gt;
                                    &gt;&gt;                &lt;mailto:<a
href="mailto:[email protected]" target="_blank"
                                      moz-do-not-send="true">niccokunzmann@rambler.<wbr>ru</a>&gt;&gt;
                                    wrote:<br>
                                    &gt; &gt;&gt;<br>
                                    &gt; &gt;&gt;                    Hi,<br>
                                    &gt; &gt;&gt;<br>
                                    &gt; &gt;&gt;                    I
                                    found a bug tracker on the
                                    squeakland site:<br>
                                    &gt; &gt;&gt;                    <a
href="http://tracker.squeakland.org/secure/Dashboard.jspa"
                                      rel="noreferrer" target="_blank"
                                      moz-do-not-send="true">http://tracker.squeakland.org/<wbr>secure/Dashboard.jspa</a><br>
                                    &gt; &gt;&gt;                   
                                    &lt;<a
                                      href="http://tracker.squeakland.org/secure/Dashboard.jspa"
                                      rel="noreferrer" target="_blank"
                                      moz-do-not-send="true">http://tracker.squeakland.org<wbr>/secure/Dashboard.jspa</a>&gt;<br>
                                    &gt; &gt;&gt;<br>
                                    &gt; &gt;&gt;                    I
                                    think, you can describe the problem
                                    there as an<br>
                                    &gt; &gt;&gt;                   
                                    issue and hand in the fix.<br>
                                    &gt; &gt;&gt;                   
                                    They may also know how to guide you
                                    further if<br>
                                    &gt; &gt;&gt;                    the
                                    code base is somewhere else.<br>
                                    &gt; &gt;&gt;                    If
                                    you have problems there (login, no
                                    response),<br>
                                    &gt; &gt;&gt;                    I
                                    guess, this mailing list is one
                                    place to ask<br>
                                    &gt; &gt;&gt;                    for
                                    help.<br>
                                    &gt; &gt;&gt;<br>
                                    &gt; &gt;&gt;                   
                                    Best,<br>
                                    &gt; &gt;&gt;                   
                                    Nicco<br>
                                    &gt; &gt;&gt;<br>
                                    &gt; &gt;&gt;<br>
                                    &gt; &gt;&gt;                    On
                                    03/01/2018 03:34 AM, Jeremy Landry
                                    wrote:<br>
                                    &gt; &gt;&gt;&gt;                   
                                    Hi, while working on a project
                                    needing precise<br>
                                    &gt; &gt;&gt;&gt;                   
                                    alignment of sketches/bitmaps and
                                    rectangles<br>
                                    &gt; &gt;&gt;&gt;                   
                                    using playfield 'use gridding', it
                                    seems that<br>
                                    &gt; &gt;&gt;&gt;                   
                                    there's a difference of detected
                                    origin.<br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;                   
                                    Here's a screenshot with magnifier
                                    showing the<br>
                                    &gt; &gt;&gt;&gt;                   
                                    discrepency.<br>
                                    &gt; &gt;&gt;&gt;                   
                                    <a href="https://imgur.com/a/tcaRu"
                                      rel="noreferrer" target="_blank"
                                      moz-do-not-send="true">https://imgur.com/a/tcaRu</a><br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;                   
                                    I'm quite certain this bug is the
                                    one that<br>
                                    &gt; &gt;&gt;&gt;                   
                                    causes bad redrawing, especially
                                    when showing a<br>
                                    &gt; &gt;&gt;&gt;                   
                                    cursor move when 'indicate cursor'
                                    is activated<br>
                                    &gt; &gt;&gt;&gt;                   
                                    in a playfield.<br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;                   
                                    If I correct this bug inside of a
                                    project, will<br>
                                    &gt; &gt;&gt;&gt;                   
                                    it load into an image where it has
                                    not been<br>
                                    &gt; &gt;&gt;&gt;                   
                                    fixed and be fixed?<br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;                   
                                    I haven't actually fixed the bug
                                    yet, but didn't<br>
                                    &gt; &gt;&gt;&gt;                   
                                    want to waste time on it if the fix
                                    will not<br>
                                    &gt; &gt;&gt;&gt;                   
                                    travel with the project.<br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;                   
                                    Thanks in advance for any input.<br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;<br>
                                    &gt; &gt;&gt;&gt;                   
                                    ______________________________<wbr>_________________<br>
                                    &gt; &gt;&gt;&gt;                   
                                    squeakland mailing list<br>
                                    &gt; &gt;&gt;&gt;                   
                                    <a
                                      href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                      target="_blank"
                                      moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                  </div>
                                </div>
                                &gt; &gt;&gt;&gt;                   
                                &lt;mailto:<a
                                  href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                  target="_blank" moz-do-not-send="true">[email protected]<wbr>kland.org</a>&gt;<br>
                                &gt; &gt;&gt;&gt;                    <a
href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                <span>&gt; &gt;&gt;&gt;                 
                                    &lt;<a
                                    href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true">http://lists.squeakland.org/m<wbr>ailman/listinfo/squeakland</a>&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;                   
                                  ______________________________<wbr>_________________<br>
                                  &gt; &gt;&gt;                   
                                  squeakland mailing list<br>
                                  &gt; &gt;&gt;                    <a
                                    href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                </span>&gt; &gt;&gt;                   
                                &lt;mailto:<a
                                  href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                  target="_blank" moz-do-not-send="true">[email protected]<wbr>kland.org</a>&gt;<br>
                                &gt; &gt;&gt;                    <a
                                  href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                <span>&gt; &gt;&gt;                   
                                  &lt;<a
                                    href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true">http://lists.squeakland.org/m<wbr>ailman/listinfo/squeakland</a>&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;               
                                  ______________________________<wbr>_________________<br>
                                  &gt; &gt;&gt;               
                                  squeakland mailing list<br>
                                  &gt; &gt;&gt;                <a
                                    href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                </span>&gt; &gt;&gt;               
                                &lt;mailto:<a
                                  href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                  target="_blank" moz-do-not-send="true">[email protected]<wbr>kland.org</a>&gt;<br>
                                &gt; &gt;&gt;                <a
                                  href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                <span>&gt; &gt;&gt;                &lt;<a
href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true">http://lists.squeakland.org/m<wbr>ailman/listinfo/squeakland</a>&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;<br>
                                  &gt; &gt;&gt;           
                                  ______________________________<wbr>_________________<br>
                                  &gt; &gt;&gt;            squeakland
                                  mailing list<br>
                                  &gt; &gt;&gt;            <a
                                    href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                </span>&gt; &gt;&gt;           
                                &lt;mailto:<a
                                  href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                  target="_blank" moz-do-not-send="true">[email protected]<wbr>kland.org</a>&gt;<br>
                                &gt; &gt;&gt;            <a
                                  href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                <span>&gt; &gt;&gt;            &lt;<a
                                    href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true">http://lists.squeakland.org/m<wbr>ailman/listinfo/squeakland</a>&gt;<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;<br>
                                  &gt; &gt;           
                                  ______________________________<wbr>_________________<br>
                                  &gt; &gt;            squeakland
                                  mailing list<br>
                                  &gt; &gt;            <a
                                    href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                    target="_blank"
                                    moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                </span>&gt; &gt;            &lt;mailto:<a
href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]" target="_blank"
                                  moz-do-not-send="true">[email protected]<wbr>kland.org</a>&gt;<br>
                                &gt; &gt;            <a
                                  href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                <div
                                  class="m_-3220180386521783406m_-1416106533699505376HOEnZb">
                                  <div
                                    class="m_-3220180386521783406m_-1416106533699505376h5">&gt;
                                    &gt;            &lt;<a
                                      href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                      rel="noreferrer" target="_blank"
                                      moz-do-not-send="true">http://lists.squeakland.org/m<wbr>ailman/listinfo/squeakland</a>&gt;<br>
                                    &gt; &gt;<br>
                                    &gt; &gt;<br>
                                    &gt; &gt;<br>
                                    &gt; &gt;<br>
                                    &gt;<br>
                                    <br>
                                    &gt; ______________________________<wbr>_________________<br>
                                    &gt; squeakland mailing list<br>
                                    &gt; <a
                                      href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                      target="_blank"
                                      moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                    &gt; <a
                                      href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                      rel="noreferrer" target="_blank"
                                      moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                    <br>
                                    ______________________________<wbr>_________________<br>
                                    squeakland mailing list<br>
                                    <a
                                      href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]"
                                      target="_blank"
                                      moz-do-not-send="true">squeakland-bD51WKytQuId/fn+uklp/[email protected]<wbr>g</a><br>
                                    <a
                                      href="http://lists.squeakland.org/mailman/listinfo/squeakland"
                                      rel="noreferrer" target="_blank"
                                      moz-do-not-send="true">http://lists.squeakland.org/ma<wbr>ilman/listinfo/squeakland</a><br>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                            <br>
                          </div>
                        </div>
                      </div>
                    </blockquote>
                  </div>
                  <br>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
squeakland mailing list
<a class="moz-txt-link-abbreviated" href="mailto:squeakland-bD51WKytQuId/fn+uklp/[email protected]">squeakland-bD51WKytQuId/fn+uklp/[email protected]</a>
<a class="moz-txt-link-freetext" href="http://lists.squeakland.org/mailman/listinfo/squeakland">http://lists.squeakland.org/mailman/listinfo/squeakland</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>

--------------C01C266CB11A60827F5D91B5--

--===============0685091186393935678==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kc3F1ZWFrbGFu
ZCBtYWlsaW5nIGxpc3QKc3F1ZWFrbGFuZEBsaXN0cy5zcXVlYWtsYW5kLm9yZwpodHRwOi8vbGlz
dHMuc3F1ZWFrbGFuZC5vcmcvbWFpbG1hbi9saXN0aW5mby9zcXVlYWtsYW5kCg==

--===============0685091186393935678==--