With shape outside on floats (bug 100398) it's become necessary to store shape info for both shape outside and shape inside.
Some suggestions for the patch:
computeShapeSize & m_shape can be lazily evaluated to avoid the m_shape asserts.
Names should be shorter, where possible.
The map add currently allocates a block every time when it doesn't need to.
The shape removal code may fail because a style has already been changed. Remove the test to make sure the shape is always removed.
This was already fixed as part of the work on bug 100766.
*** This bug has been marked as a duplicate of bug 100766 ***