It turns out that this problem was caused by a change I made in the
horizontal typesetter. There when the width of the text container is
above 1e7 we now ignore the alignment attribute, just as Apple does.
This change is correct, but it requires an additional change in the
string drawing code. There we can no longer reuse a layout manager
that has been set up without a container size when we require the
layout in a container with a given size. That change itself was easy
to make and is now in the code. But it has a big downside. Now when we
first ask for the size of the attributed string and later draw it, we
now longer find the layout already in that cache. Most likely this was
the biggest source of cache hits that we had and now they are gone,
the string needs to be processed twice. We really need a better
solution here. The old code was incorrect as it did give different
results from what Apple displayed, but the new code is inefficient,
which is almost as bad.
Any help here to come up with a better way is highly appreciated.
Fred