examples/Graphics/GraphicsShell/Zoom.cpp

00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
00002 // All rights reserved.
00003 // This component and the accompanying materials are made available
00004 // under the terms of "Eclipse Public License v1.0"
00005 // which accompanies this distribution, and is available
00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
00007 //
00008 // Initial Contributors:
00009 // Nokia Corporation - initial contribution.
00010 //
00011 // Contributors:
00012 //
00013 // Description:
00014 //
00015 
00016 #include "GraphicsControl.h"
00017 
00018 // header for multi-bitmap file grbitmap.mbm containing 2 bitmaps to use
00019 #include <grbmap2.mbg>
00020 
00021 #include <coemain.h>
00022 
00023 _LIT(KTxtCDrive,"\\");
00024 _LIT(KTxtZDrive,"Z:");
00025 
00026 void CZoomControl::LoadBitmapL(CFbsBitmap* aBitMap,const TDesC& aPathAndFile,TInt aId,TBool aShareIfLoaded)
00027         {
00028         TParse mbfn;
00029         
00030         mbfn.Set(aPathAndFile,&KTxtCDrive,NULL);
00031         if (!aBitMap->Load(mbfn.FullName(),aId,aShareIfLoaded))
00032                 return;
00033 
00034         mbfn.Set(aPathAndFile,&KTxtZDrive,NULL);
00035         User::LeaveIfError(aBitMap->Load(mbfn.FullName(),aId,aShareIfLoaded));
00036         return;
00037         }
00038 
00039 // Name of the multi-bitmap file containing the bitmap
00040 // and bitmap mask files
00041 _LIT(KTxtFileName,"\\resource\\apps\\grbmap2.mbm");
00042 
00043 void CZoomControl::UpdateModelL()
00044         {
00045         // set up name for bitmap sharing
00046         TBool shareIfLoaded(ETrue);
00047 
00048         // set up two zoom factor objects (one for examples, one for commentary)
00049         iLeftZf.SetGraphicsDeviceMap(iCoeEnv->ScreenDevice());
00050         iRightZf.SetGraphicsDeviceMap(iCoeEnv->ScreenDevice());
00051         //iLeftZf.SetDevice(iCoeEnv->ScreenDevice());
00052         //iRightZf.SetDevice(iCoeEnv->ScreenDevice());
00053         
00054         // set the zoom factor of the objects (example is dependent on phase of example, commentary is fixed)
00055         iLeftZf.SetZoomFactor(TZoomFactor::EZoomOneToOne*2*(Phase()+1)/5);
00056         iRightZf.SetZoomFactor(TZoomFactor::EZoomOneToOne*2*(5-Phase())/5);
00057 
00058         // use graphics device maps for drawing and getting fonts
00059         iLeftMap=&iLeftZf;
00060         iRightMap=&iRightZf;
00061 
00062         if (Phase()==0) {
00063                 iBitmap = new (ELeave) CFbsBitmap();
00064                 LoadBitmapL(iBitmap,KTxtFileName,EMbmGrbmap2Smiley,shareIfLoaded);
00065         }
00066         
00067         // set up descriptor for commentary area
00068         _LIT(KFormat1,"Left zoom factor=%1.1f:1  Right zoom factor=%1.1f:1");
00069         TBuf<128> commentaryText;
00070         TReal leftValue = 2*(Phase()+1)/5.0;
00071         TReal rightValue = 2*(5-Phase())/5.0;
00072         commentaryText.Format(KFormat1,leftValue,rightValue);
00073         iGraphObserver->NotifyStatus(commentaryText);
00074         };
00075 
00076 void CZoomControl::Draw(const TRect& /* aRect */) const
00077         {
00078         // setup screen for example: get graphics context and draw surrounding rectangle
00079         CWindowGc& gc=SystemGc();
00080         gc.Clear();     
00081         
00082         // create a centered rectangle of the default size
00083         TRect screenRect=Rect();
00084         TInt bisect = (screenRect.iBr.iX-screenRect.iTl.iX)/2 + screenRect.iTl.iX;
00085         TRect leftRect(screenRect.iTl,TPoint(bisect,screenRect.iBr.iY));
00086         TRect rightRect(TPoint(bisect,screenRect.iTl.iY),screenRect.iBr);
00087 
00088         DrawLeft(leftRect,gc);
00089         DrawRight(rightRect,gc);
00090         }
00091 
00092 
00093         _LIT(KTxtTimesNewRoman,"Times New Roman");
00094         _LIT(KTxtGrzoomExampleText,"grzoom example text");
00095 
00096 void CZoomControl::DrawLeft(TRect screenRect,CWindowGc& SystemGc) const
00097         {
00098         // set up absolute font-spec and text box for 200 twip Times font
00099         TFontSpec fontSpec(KTxtTimesNewRoman,200);
00100         // find the nearest font to the specified one
00101         CFont* screenFont;                                                                              
00102         iLeftMap->GetNearestFontInTwips(screenFont,fontSpec);
00103         // use it for this graphics context
00104         SystemGc.UseFont(screenFont);
00105         // get height of screen box
00106     TInt screenHeight=screenRect.Height();
00107         // get font height
00108     TInt textHeight = screenFont->HeightInPixels();
00109         // 1/2 font height below halfway down box
00110     TInt exampleOffset=(screenHeight+textHeight)/2;
00111     TInt exampleMargin=0;
00112     SystemGc.DrawText(KTxtGrzoomExampleText,screenRect,exampleOffset,CGraphicsContext::ECenter,exampleMargin);
00113         // discard and release font
00114         SystemGc.DiscardFont();
00115         iLeftMap->ReleaseFont(screenFont);      
00116         
00117         // set up example box in twips
00118         TRect boxInTwips(TPoint(0,0),TPoint(500,300));
00119         // convert rectangle co-ordinates into pixels
00120         TRect boxInPixels = iLeftMap->TwipsToPixels(boxInTwips);
00121         SystemGc.DrawRect(boxInPixels);
00122 
00123         // set up rectangle for bitmap to be stretched into
00124         TRect bitmapRectInTwips(TPoint(0,0),TPoint(500,500));
00125         TRect bitmapRectInPixels = iLeftMap->TwipsToPixels(bitmapRectInTwips);
00126         bitmapRectInPixels.iTl.iY+=125;
00127         bitmapRectInPixels.iBr.iY+=125;
00128         bitmapRectInPixels.iTl.iX+=100;
00129         bitmapRectInPixels.iBr.iX+=100;
00130         // draw the bitmap, stretched into the rectangle
00131         SystemGc.DrawBitmap(bitmapRectInPixels, iBitmap);
00132         }
00133 
00134 void CZoomControl::DrawRight(TRect screenRect,CWindowGc& SystemGc) const
00135         {
00136         // set up colors: black and a white RGB color
00137         TRgb black(0,0,0);
00138         TRgb white(255,255,255); // appears as blank screen gray-green color
00139     SystemGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
00140     SystemGc.SetBrushColor(black);
00141     SystemGc.SetPenColor(white);
00142 
00143         // set up absolute font-spec and text box for 200 twip Times font
00144         TFontSpec fontSpec(KTxtTimesNewRoman,200);
00145         // find the nearest font to the specified one
00146         CFont* commentFont;
00147         iRightMap->GetNearestFontInTwips(commentFont,fontSpec);
00148         // use it for this graphics context
00149         SystemGc.UseFont(commentFont);
00150         // get font height
00151     TInt textHeight = commentFont->HeightInPixels();
00152     // get height of text box
00153     TInt boxHeight=screenRect.Height();
00154         // 1/2 font height below halfway down box
00155     TInt commentOffset=(boxHeight+textHeight)/2;
00156     TInt commentMargin=0;
00157         // draw text
00158     SystemGc.DrawText(KTxtGrzoomExampleText,screenRect,commentOffset,CGraphicsContext::ECenter,commentMargin);
00159         // discard and release font
00160         SystemGc.DiscardFont();
00161         iRightMap->ReleaseFont(commentFont);
00162         
00163         // set up example box in twips
00164         TRect boxInTwips(TPoint(0,0),TPoint(500,300));
00165         // convert rectangle co-ordinates into pixels
00166         TRect boxInPixels = iRightMap->TwipsToPixels(boxInTwips);
00167         boxInPixels.Move(screenRect.iTl);
00168         SystemGc.DrawRect(boxInPixels);
00169 
00170         // set up rectangle for bitmap to be stretched into
00171         TRect bitmapRectInTwips(TPoint(0,0),TPoint(500,500));
00172         TRect bitmapRectInPixels = iRightMap->TwipsToPixels(bitmapRectInTwips);
00173         bitmapRectInPixels.Move(screenRect.iTl);
00174         bitmapRectInPixels.iTl.iY+=125;
00175         bitmapRectInPixels.iBr.iY+=125;
00176         bitmapRectInPixels.iTl.iX+=100;
00177         bitmapRectInPixels.iBr.iX+=100;
00178         // draw the bitmap, stretched into the rectangle
00179         SystemGc.DrawBitmap(bitmapRectInPixels, iBitmap);
00180         }

Generated by  doxygen 1.6.2