CharacterBlocks are featherweight objects in the Block hierarchy. For each DVICharacter which is needed as part of a document, a unique CharacterBlock object is created. These are managed by static methods of the CharacterBlock class. Every occurance of a computer modern roman 12 pt 300 dpi capital A in any document which has been viewed with idvi is represented by the same CharacterBlock object, appearing in many different places in many different Block hierarchies.
For each scale factor at which a given CharacterBlock needs to be displayed, a unique ScaledCharacter object is created. These are managed by static methods of the ScaledCharacter class. A ScaledCharacter caches the scaled antialiased image of a single character.
For each ScaledColorScheme which is used to display a given ScaledCharacter, a unique CharacterView object is created. These are managed by static methods of the CharacterView class. The first time that a CharacterView object is asked to paint itself, it creates a java.awt.Image object from the ScaledCharacter data and its ScaledColorScheme.