Symbian Developer Library

SYMBIAN OS V6.1 EDITION FOR C++

[Index] [Glossary] [Previous] [Next]



How to use TZoomFactor and MGraphicsDeviceMap

The example code shown here demonstrates the effects of different zoom factors on text and graphics. Example code displays some text, a rectangle, and a bitmap at various different zoom factors, with commentary text set at a fixed zoom factor.


Setting up a TZoomFactor

The following fragment of code demonstrates how to set up a zoom factor object. The zoom factor is first set to 1-to-1 (no zoom) using the value TZoomFactor::EZoomOneToOne. Then it is shown how to set a zoom factor by multiplying or dividing EZoomOneToOne.

In actual applications, for example, one zoom factor could be used for the client area of an application which can be zoomed, and another for drawing menus and button-bars which should not be zoomed.

// Create zoom factor object
TZoomFactor devicemap(iCoeEnv->ScreenDevice());

// Set zoom factor at 1 to 1
devicemap.SetZoomFactor(TZoomFactor::EZoomOneToOne);

// Set zoom factor at 200%
devicemap.SetZoomFactor(TZoomFactor::EZoomOneToOne*2);

[Top]


Twips to pixels conversions using a zoom factor

  1. Define a rectangle in twips

  2. Use the device map’s conversion function TwipsToPixels() to convert the rectangles co-ordinates into pixels

  3. Draw the rectangle using DrawRect() in the graphics context gc

// set up example box in twips
TRect boxInTwips(TPoint(0,0),TPoint(500,300));
// convert rectangle co-ordinates into pixels
TRect boxInPixels = deviceMap->TwipsToPixels(boxInTwips);
gc.DrawRect(boxInPixels);


Notes

[Top]


Drawing text using a zoom factor

This fragment of code shows how to draw text using a zoom factor.

  1. Create a font specification (in this case for a 10 point Times New Roman font)

  2. Find the nearest device font, using MGraphicsDeviceMap::GetNearestFontInTwips(), to that specification for the particular device map. This takes into account the map’s zoom factor and twip to pixel mapping.

  3. Use this device font to draw the text using CGraphicsContext::DrawText()

  4. Discard the font using CGraphicsContext::DiscardFont() and MGraphicsDeviceMap::ReleaseFont()

// set up absolute font-spec and text box for 200 twip Roman font
TFontSpec fontSpec(_L("Times New Roman"),200);
// find the nearest font to the specified one
CFont* screenFont;
deviceMap->GetNearestFontInTwips(screenFont,fontSpec);
// use it for this graphics context
gc.UseFont(screenFont);
gc.DrawText(_L("grzoom example text"),TPoint(20,20));
// discard and release font
gc.DiscardFont();
deviceMap->ReleaseFont(screenFont);


Note

[Top]


Zooming bitmaps

You can draw a bitmap to the graphics device, scaled according to the current zoom factor.

  1. Define a rectangle in twips

  2. Use the device map’s conversion function TwipsToPixels() to convert the rectangle's co-ordinates into pixels according to the current zoom factor.

  3. Draw the bitmap using DrawBitmap() stretched/compressed into the rectangle.

// set up rectangle for bitmap to be stretched into
TRect bitmapRectInTwips(TPoint(0,0),TPoint(500,500));
TRect bitmapRectInPixels = iLeftMap->TwipsToPixels(bitmapRectInTwips);
bitmapRectInPixels.iTl.iY+=125;
bitmapRectInPixels.iBr.iY+=125;
bitmapRectInPixels.iTl.iX+=100;
bitmapRectInPixels.iBr.iX+=100;
// draw the bitmap, stretched into the rectangle
SystemGc.DrawBitmap(bitmapRectInPixels, iBitmap);


See also

Bitmaps