TLF supports a new property on TextFlow called formatResolver of type IFormatResolver. Clients can supply an implementation that can be used to do CSS or “based-on” styling (ala traditional word processors).
The following link is a sample implementation with a primitive styling editor.Download fileThis is the SimpleEditor application from the labs release plus some new UI. The application loads a CSS style sheet at startup that supplied a few styles. The editor lets you modify the “id” or “styleName” property of a particular element or selection range.The example style sheet has a few simple styles. These are available for use in the editor.
- element selectors for span and TextFlow
- class selectors named italic and center
- an id selector named bold
Modify the style sheet and rebuild it to make additional styles available.Class CSSFormatResolver is an implementation of IFormatResolver for simple CSS styling. IFormatResolver requires 5 methods.
/** cached information on this element is now invalid (e.g. parent changed, id changed, styleName changed) */
/** Given a FlowElement or IContainerController return any TLFFormat style settings */
/** Given a FlowElement or IContainerController and the name of a style property return a style value or undefined*/
/** Called when the owning TextFlow is copied. Return a styleresolver for the copy. */
TLF calls the resolveTextLayoutFormat function when it is doing its cascade of attributes. Only styles set by the particular elements styling are set into the returned TextLayoutFormat. Other styles should be undefined. These styles take precedence over any inherited styles from the parent. Any styles directly set on the element take precendence over the styles returned by the formatResolver.Whenever an elements id or styleName is changed the invalidateTarget API is called from within TLF.The resolveUserFormat API is called when the client calls getStyle on a FlowElement using a non-TLF styleName. This lets user styles cascade through the TLF elements.