[squeak-dev] Re: [fix] Request for help: TextAnchor display broken in 3.9 and newer

Andreas Raab andreas.raab at gmx.de
Fri Dec 19 04:41:27 UTC 2008


Lukas Renggli wrote:
> I don't think so. All subclasses of TextAttribute implement
> #emphasizeScanner:. There would be no point in having the
> TextAttribute class, if it does not implement #emphasizeScanner:. The
> #emphasizeScanner: method is like the #accept: method in the visitor
> pattern. If it is not there, the object is simply ignored.

Good point. I probably should have left it in for this reason. The 
origin of this change is that TextAttribute only modifies text and that 
the text must be drawn nonetheless. This makes it impossible to get the 
spacing "right" when you try to place small glyphs as inline graphics at 
relatively large font sizes (you really need an infinitely small empty 
glyph for that) which is what made me change this to a stop condition 
instead.

When I changed this I simply vectored the stop condition #embeddedObject 
into #placeEmbeddedObject: but as you say, this may be incorrect from a 
semantic perspective. It might be better to fix this by having the 
embeddedObject stop condition call into #skipForEmbeddedObject:
with a comment explaining that we don't want to display anything here 
because there will be a text attribute containing some graphics which is 
supposed to define the width of the glyph.

Although ... I'm not certain this all worked correctly in the original 
version - I think there were issues with line breaks and selection of 
the graphics etc. Computing this as the width of that special character 
makes it pretty straightforward to deal with all that. Or whatever :-)

In any case, calling #placeEmbeddedObject: twice is very clearly wrong.

Cheers,
   - Andreas



More information about the Squeak-dev mailing list