diff -r 51a74ef9ed63 -r ae94777fff8f 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 --- a/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 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ - - - - - -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