diff -r 43e37759235e -r 51a74ef9ed63 Symbian3/SDK/Source/GUID-9E2AEFF3-6C6E-5F09-B5C0-A70AECB421B0-GENID-1-8-1-6-1-1-4-1-6-1-7-1-10-1.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/SDK/Source/GUID-9E2AEFF3-6C6E-5F09-B5C0-A70AECB421B0-GENID-1-8-1-6-1-1-4-1-6-1-7-1-10-1.dita Wed Mar 31 11:11:55 2010 +0100 @@ -0,0 +1,81 @@ + + + + + +Text +and Zooming +
Text Style and Colour

Note that the following does +not yet apply for S60 and MOAP.

The style (plain, bold, shadowed etc.) +and colour of text in a control typically depends upon the state or properties +of its parent control. Prior to Symbian OS 9.1 a control was able to use the MCoeControlContext interface +to share properties. That interface is now deprecated. Text is now drawn using +a Text Drawer. The Text Drawer takes the text itself as a parameter along +with the font, graphics context and text location rectangle.

The text +drawer is provided by the run-time hierarchy. Each control in the hierarchy, +from the topmost downwards, has the option of modifying or replacing the text +drawer.

Text drawers are derived from CCoeTextDrawerBase (a +default CCoePlainTextDrawer is provided by Cone) and require +special use to avoid multiple allocations on the heap. Instead of being allocated +directly text drawers must be used through the XCoeTextDrawer class +which acts as a smart-pointer to a single CCoeTextDrawerBase derived +class on the heap. The smart-pointer deletes or resets the text drawer on +the heap if necessary and provides fail-safe measures to ensure that a valid +text drawer is returned.

A control that draws text calls its TextDrawer() function +to retrieve the appropriate text drawer from the run-time hierarchy

XCoeTextDrawer textDrawer( TextDrawer() ); +textDrawer->SetAlignment( iAlignment ); +textDrawer->SetMargins( iMargin ); +textDrawer->SetLineGapInPixels( iGapBetweenLines ); +textDrawer.SetClipRect( aRect ); + +textDrawer.DrawText( gc, *iTextToDraw, Rect(), *Font() ); +

Note that XCoeTextDrawer's ->() operator +is overriden to return a pointer to the CCoeTextDrawerBase object. +i.e.

+ textDrawer->SetAlignment(iAlignment); +

is equivalent to

+ textDrawer.(iTextDrawer*).SetAlignment(iAlignment); +

Unfortunately, as SetClipRect() is not a function +of CCoeTextDrawerBase, but of XCoeTextDrawer, +it can only be accessed through the . [dot] operator. There are worse things +in life.

A control that wishes to provide its own text drawer, or to +modify its parent's text drawer, may do so by providing its own implementation +of the virtual function GetTextDrawer().

+
Fonts

The control framework provides a mechanism +for delivering the correct font at run-time. The mechanism consists of a Font +Provider (CCoeFontProvider) and a TCoeFont class, +which represents a font's size (logical or absolute in pixels) and style (plain, +bold, italic, subscript or superscript). Along similar lines to the Text Drawer, +the Font Provider is attached to a parent control and serves controls further +down the run-time hierarchy.

CCoeEnv includes a +default CCoeFontProvider: UI-variant specific libraries +are expected to provide their own.

The desired font is affected by +the control's zoom state (see below) which must be included when requesting +a font from a font provider.

CCoeControl includes +a ScreenFont() method which encapsulates the font +provider and zoom APIs to provide a simple means of obtaining a CFont object +for drawing text.

The final line of the code snippet above should, +therefore, look like this:

textDrawer.DrawText(gc, *iTextToDraw, Rect(), ScreenFont(TCoeFont::NormalFont());

Controls must not keep references or pointers to CFont objects +in member data. Nor should they use the CCoeEnv functions NormalFont(), LegendFont(), TitleFont(), AnnotationFont() and DenseFont(). +Moreover, instances of these calls should be removed from old code and replaced +with code like that above. This is so that run-time font changes can be propagated +and is essential for zoom support.

+
Zooming

Each control may have a TZoomFactor attached. +It applies to the control itself and all of its component controls. The factor +can be absolute or relative to a control's parent and influences the size +of the font in the control and all of its children.

CCoeControl has +an AccumulatedZoom() function which aggregates its own zoom +factor with those of its parents.

+
See also
    +
  • Run-time control +hierarchy

  • +
  • How to write +controls

  • +
+
\ No newline at end of file