diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_picture_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_picture_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,427 +0,0 @@ - - -TB10.1 Example Applications: examples/Graphics/Embedding/Picture.cpp Source File - - - - -

examples/Graphics/Embedding/Picture.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 "EmbeddingGraphicsControl.h"
-00017 #include <coemain.h>
-00018 
-00019 // for the store
-00020 #include <s32std.h>
-00021 
-00022 static const TUid KUidExampleSmileyPicture = { 0x100000E6 } ;
-00023 
-00024 /*
-00025         CExamplePictureFactory
-00026 
-00027         Give picture header, checks UID and only if it's KUidExampleSmileyPicture will this restore
-00028         a picture - changing the swizzle in aHeader from a stream id into a pointer.
-00029         [incidentally, what errors should result if either the picture is already restored, or the UID
-00030         isn't recognized?]
-00031 */
-00032 
-00033 class TExamplePictureFactory : public MPictureFactory
-00034         {
-00035 public:
-00036         void NewPictureL(TPictureHeader& aHeader,const CStreamStore& aDeferredPictureStore) const;
-00037         };
-00038 
-00039 void TExamplePictureFactory::NewPictureL(TPictureHeader& aHeader,const CStreamStore& aDeferredPictureStore) const
-00040         {
-00041         if (aHeader.iPictureType == KUidExampleSmileyPicture)
-00042                 {
-00043                 // restore new picture from store into the TSwizzle
-00044                 // (which changes from stream id to pointer)
-00045                 // Construct a CSmileyPicture object and restore from the stream
-00046             if (aHeader.iPicture.IsId())
-00047                         aHeader.iPicture = CSmileyPicture::NewL(aDeferredPictureStore,aHeader.iPicture.AsId());
-00048                         
-00049                 }
-00050         else
-00051                 {
-00052                         // output error and panic
-00053                         User::Leave(KErrNoMemory);
-00054                 }
-00055         }
-00056 
-00057 // implementation of the CSmileyPicture class
-00058 
-00059 CSmileyPicture::CSmileyPicture()
-00060         {
-00061         // do nothing
-00062         }
-00063 
-00064 CSmileyPicture* CSmileyPicture::NewL(TMood aMood, TSizeSpec aSizeSpec)
-00065         {
-00066         CSmileyPicture* self = new (ELeave) CSmileyPicture();
-00067         self->iMood = aMood;
-00068         self->iSizeSpec = aSizeSpec;
-00069         return self;
-00070         }
-00071 
-00072 CSmileyPicture* CSmileyPicture::NewL(const CStreamStore& aStore, TStreamId aStreamId) 
-00073 // create from store
-00074         {
-00075         RStoreReadStream inStream;
-00076         inStream.OpenLC(aStore,aStreamId);
-00077         CSmileyPicture* self = new (ELeave) CSmileyPicture();
-00078         self->InternalizeL(inStream);
-00079         CleanupStack::PopAndDestroy();
-00080         return self;
-00081         }
-00082 
-00083 TStreamId CSmileyPicture::StoreL(CStreamStore& aStore) const
-00084 // stores the CSmileyPicture in a new stream of the specified store (using ExternalizeL())
-00085         {
-00086         RStoreWriteStream stream;
-00087         TStreamId id=stream.CreateLC(aStore);
-00088         ExternalizeL(stream);  
-00089         stream.CommitL();
-00090         CleanupStack::PopAndDestroy();
-00091         return id;
-00092         }
-00093 
-00094 void CSmileyPicture::ExternalizeL(RWriteStream& aStream) const
-00095         {
-00096         aStream.WriteInt8L(iMood);
-00097         aStream.WriteInt8L(iSizeSpec);
-00098         }
-00099 
-00100 void CSmileyPicture::InternalizeL(RReadStream& aStream)
-00101         {
-00102         iMood = TMood(aStream.ReadInt8L());
-00103         iSizeSpec = TSizeSpec(aStream.ReadInt8L());
-00104         }
-00105 
-00106 TInt CSmileyPicture::SpecToFactor() const
-00107         {
-00108         switch (iSizeSpec)
-00109                 {
-00110                 case ESmall:
-00111                         return 1;
-00112                 case EMedium:
-00113                         return 2;
-00114                 case ELarge:
-00115                         return 3;
-00116                 default:
-00117                         return 0;
-00118                 }
-00119         }
-00120 
-00121 void CSmileyPicture::Draw(CGraphicsContext& aGc,const TPoint& aTopLeft,const TRect& aClipRect,
-00122                                                 MGraphicsDeviceMap* /*aMap*/) const
-00123         {
-00124         aGc.SetClippingRect(aClipRect);  
-00125 
-00126         TInt scaleFactor = SpecToFactor();
-00127 
-00128         TSize penSizeBold(3*scaleFactor,3*scaleFactor);
-00129         TSize penSizeFat(5*scaleFactor,5*scaleFactor);
-00130         aGc.SetPenSize(penSizeFat);
-00131 
-00132         TInt leftOffset = 13*scaleFactor;
-00133         TInt rightOffset = 27*scaleFactor;
-00134         TInt circleSize = 40*scaleFactor;
-00135         TInt shrinkSize = 10*scaleFactor;
-00136         TInt halfCircle = 20*scaleFactor;
-00137         TInt neutralSize = 13*scaleFactor;
-00138 
-00139         TPoint leftEye(aTopLeft.iX+leftOffset,aTopLeft.iY+leftOffset);
-00140         TPoint rightEye(aTopLeft.iX+rightOffset,aTopLeft.iY+leftOffset);
-00141         aGc.Plot(leftEye);
-00142         aGc.Plot(rightEye);
-00143         aGc.SetPenSize(penSizeBold);
-00144         TRect circle(aTopLeft,TPoint(aTopLeft.iX+circleSize,aTopLeft.iY+circleSize));
-00145         aGc.DrawEllipse(circle);
-00146 
-00147         // draw the smile
-00148         TRect smile = circle;
-00149         switch (iMood)
-00150                 {
-00151                 case EHappy:
-00152                         {
-00153                         smile.Shrink(shrinkSize,shrinkSize);
-00154                         aGc.DrawArc(smile,TPoint(aTopLeft.iX,aTopLeft.iY+circleSize-shrinkSize),TPoint(aTopLeft.iX+circleSize,aTopLeft.iY+circleSize-shrinkSize));
-00155                         }
-00156                         break;
-00157                 case ENeutral:
-00158                         {
-00159                         aGc.DrawLine(TPoint(leftEye.iX,leftEye.iY+neutralSize),TPoint(rightEye.iX,rightEye.iY+neutralSize));
-00160                         }
-00161                         break;
-00162                 case ESad:
-00163                         {
-00164                         smile.Shrink(shrinkSize,shrinkSize);
-00165                         smile.Move(0,15*scaleFactor);
-00166                         aGc.DrawArc(smile,TPoint(aTopLeft.iX+circleSize,aTopLeft.iY+halfCircle),TPoint(aTopLeft.iX,aTopLeft.iY+halfCircle));
-00167                         }
-00168                         break;
-00169                 }
-00170         }
-00171 
-00172 void CSmileyPicture::SetMood(TMood aMood)
-00173         {
-00174         iMood = aMood;  
-00175         }
-00176 
-00177 CSmileyPicture::TMood CSmileyPicture::Mood()
-00178         {
-00179         return iMood;
-00180         }
-00181 
-00182 void CSmileyPicture::SetSize(TSizeSpec aSizeSpec)
-00183         {
-00184         iSizeSpec = aSizeSpec;  
-00185         }
-00186 
-00187 CSmileyPicture::TSizeSpec CSmileyPicture::Size()
-00188         {
-00189         return iSizeSpec;
-00190         }
-00191 
-00192 void CSmileyPicture::GetOriginalSizeInTwips(TSize& /*aSize*/) const
-00193         {
-00194         // do nothing
-00195         }
-00196 
-00197 
-00198 void CSmileyPicture::SetScaleFactor(TInt /*aScaleFactorWidth*/,TInt /*aScaleFactorHeight*/)
-00199         {
-00200         // do nothing
-00201         }
-00202 
-00203 
-00204 TInt CSmileyPicture::ScaleFactorWidth()const
-00205         {
-00206         return 1;
-00207         }
-00208 
-00209 
-00210 TInt CSmileyPicture::ScaleFactorHeight()const
-00211         {
-00212         return 1;
-00213         }
-00214 
-00215 
-00216 void CSmileyPicture::SetCropInTwips(const TMargins& /*aMargins*/)
-00217         {
-00218         // do nothing
-00219         }
-00220 
-00221 
-00222 void CSmileyPicture::GetCropInTwips(TMargins& aMargins)const
-00223         {
-00224         CPicture::GetCropInTwips(aMargins); // no crop
-00225         }
-00226 
-00227 TPictureCapability CSmileyPicture::Capability()const
-00228         {
-00229         return CPicture::Capability(); // no scale, no crop
-00230         }
-00231 
-00232 // example really starts here
-00233 CPictureControl::CPictureControl()
-00234         { 
-00235         SetMaxPhases(7);
-00236         iValidDocument = CPictureControl::EPicture;
-00237         iOffset = TPoint(50,50);
-00238         }
-00239 
-00240 // The file name
-00241 _LIT(KFileName,"\\grpict.dat");
-00242 
-00243 // Literal text
-00244 _LIT(KTxtUpdateModelCase0,"draw happy face at (50,50)");
-00245 _LIT(KTxtUpdateModelCase1,"draw sad face at (50,50)");
-00246 _LIT(KTxtUpdateModelCase2,"draw neutral face at (50,50)");
-00247 _LIT(KTxtUpdateModelCase3,"store picture in file");
-00248 _LIT(KTxtUpdateModelCase4,"delete picture from memory");
-00249 _LIT(KTxtUpdateModelCase5,"restore picture header from file");
-00250 _LIT(KTxtUpdateModelCase6,"restore picture from file");
-00251 
-00252 void CPictureControl::UpdateModelL()
-00253         {
-00254         // set up zoom factor object
-00255         testZf.SetGraphicsDeviceMap(iCoeEnv->ScreenDevice());
-00256         // set the zoom factor of the object
-00257         testZf.SetZoomFactor(TZoomFactor::EZoomOneToOne);
-00258         // use graphics device maps for drawing and getting fonts
-00259         testMap=&testZf;
-00260 
-00261         // the file session used in the example
-00262         RFs fsSession;
-00263         TParse filestorename;
-00264         
-00265         switch (Phase())
-00266                 {
-00267                 case 0:
-00268                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase0);
-00269                         iPicture = CSmileyPicture::NewL(CSmileyPicture::EHappy,CSmileyPicture::ESmall);
-00270                         break;
-00271                 case 1:
-00272                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase1);
-00273                         iPicture->SetMood(CSmileyPicture::ESad);
-00274                         iPicture->SetSize(CSmileyPicture::EMedium);
-00275                         break;
-00276                 case 2:
-00277                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase2);
-00278                         iPicture->SetMood(CSmileyPicture::ENeutral);
-00279                         iPicture->SetSize(CSmileyPicture::ELarge);
-00280                         break;
-00281                 case 3:
-00282                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase3);
-00283                         // set up the permament direct file store for the picture
-00284                         fsSession.Connect();
-00285                         
-00286                         // Create (replace, if it exists) the direct file store
-00287                         fsSession.Parse(KFileName,filestorename);
-00288                         iStore = CDirectFileStore::ReplaceLC(fsSession,filestorename.FullName(),EFileWrite);
-00289                         // Must say what kind of file store.
-00290                         iStore->SetTypeL(KDirectFileStoreLayoutUid);
-00291 
-00292                         // create picture header
-00293                         iHeader.iPicture = iPicture;
-00294                         iHeader.iSize = TSize(iPicture->SpecToFactor()*40,iPicture->SpecToFactor()*40);
-00295                         iHeader.iPictureType = KUidExampleSmileyPicture;
-00296 
-00297                         // store picture header and picture
-00298                         iHeaderId = StoreHeaderL(*iStore);
-00299                         // make header stream the root stream
-00300                         iStore->SetRootL(iHeaderId);
-00301 
-00302                         // close store
-00303                         CleanupStack::PopAndDestroy();
-00304                         fsSession.Close();
-00305                         break;
-00306                 case 4:
-00307                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase4);
-00308                         delete iPicture;
-00309                         iPicture = NULL;
-00310                         iValidDocument = CPictureControl::EFalse;
-00311                         break;
-00312                 case 5:
-00313                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase5);
-00314                         // set up the permament direct file store for the picture
-00315                         fsSession.Connect();
-00316                         
-00317                         // Open the direct file store and read the header
-00318                         fsSession.Parse(KFileName,filestorename);
-00319                         iStore = CDirectFileStore::OpenLC(fsSession,filestorename.FullName(),EFileRead);
-00320 
-00321                         RestoreHeaderL(*iStore,iStore->Root());
-00322                         // close store
-00323                         CleanupStack::PopAndDestroy();
-00324                         fsSession.Close();
-00325                         iValidDocument = CPictureControl::EHeader;
-00326                         break;
-00327                 case 6:
-00328                         iGraphObserver->NotifyStatus(KTxtUpdateModelCase6);
-00329 
-00330                         fsSession.Connect();
-00331                         
-00332                         // Open the direct file store and read the header
-00333                         fsSession.Parse(KFileName,filestorename);
-00334                         iStore = CDirectFileStore::OpenLC(fsSession,filestorename.FullName(),EFileRead);
-00335                         
-00336                         TExamplePictureFactory factory;
-00337                         factory.NewPictureL(iHeader,*iStore);
-00338                                                 
-00339                         iPicture = (CSmileyPicture *) iHeader.iPicture.AsPtr();
-00340 
-00341                         // close store
-00342                         CleanupStack::PopAndDestroy();
-00343                         fsSession.Close();
-00344                         iValidDocument = CPictureControl::EPicture;
-00345                         break;
-00346                 }
-00347         }
-00348 
-00349 void CPictureControl::RestoreHeaderL(CStreamStore& aStore, TStreamId aId)
-00350         {
-00351         RStoreReadStream stream;
-00352         stream.OpenLC(aStore,aId);
-00353         iHeader.InternalizeL(stream);
-00354         CleanupStack::PopAndDestroy();          // close and delete the stream
-00355         }
-00356 
-00357 TStreamId CPictureControl::StoreHeaderL(CStreamStore& aStore) const
-00358         {
-00359         CStoreMap* map=CStoreMap::NewLC(aStore);
-00360         StoreHeaderComponentsL(*map,aStore);
-00361 
-00362         RStoreWriteStream stream(*map);
-00363         TStreamId id = stream.CreateLC(aStore);
-00364         iHeader.ExternalizeL(stream);
-00365         stream.CommitL();
-00366         map->Reset();
-00367         CleanupStack::PopAndDestroy(2);
-00368         return id;
-00369         }
-00370 
-00371 void CPictureControl::StoreHeaderComponentsL(CStoreMap& aMap,CStreamStore& aStore) const
-00372         {
-00373         TStreamId id;
-00374 
-00375         id = iPicture->StoreL(aStore);
-00376         aMap.BindL(iPicture,id);
-00377         }
-00378 
-00379 void CPictureControl::Draw(const TRect& /* aRect */) const
-00380         {
-00381         // draw surrounding rectangle
-00382         CWindowGc& gc=SystemGc(); // graphics context we draw to
-00383         gc.UseFont(iMessageFont); // use the system message font
-00384         gc.Clear(); // clear the area to be drawn to
-00385         SystemGc().DrawRect(Rect()); // surrounding rectangle to draw into
-00386         TRect rect=Rect(); // a centered rectangle of the default size
-00387         TRgb darkGray(85,85,85);
-00388 
-00389         // decide what to do, and do it
-00390         switch (iValidDocument)
-00391                 {
-00392         case CPictureControl::EFalse:
-00393                 // if document is not valid then Draw() draws gray screen
-00394                 gc.SetBrushColor(darkGray);
-00395                 gc.Clear(rect);
-00396                 break;
-00397         case CPictureControl::EPicture:
-00398                 // if picture in is memory then draw it
-00399                 iPicture->Draw(gc,iOffset,rect,testMap);
-00400                 break;
-00401         case CPictureControl::EHeader: 
-00402                 // if no iPicture, draw picture outline to specified size at iOffset
-00403                 TInt bottomRightX = iOffset.iX + iHeader.iSize.iWidth;
-00404                 TInt bottomRightY = iOffset.iY + iHeader.iSize.iHeight;
-00405                 TRect outlineBox(iOffset,TPoint(bottomRightX,bottomRightY));
-00406         
-00407                 gc.SetPenStyle(CGraphicsContext::EDottedPen);
-00408                 gc.DrawRect(outlineBox);
-00409                 break;
-00410                 }
-00411 
-00412         //iConEnv->ScreenDevice()->ReleaseFont(iMessageFont);
-00413         //gc.ReleaseFont(iMessageFont);
-00414         //gc.DiscardFont(); // discard font
-00415         }
-

Generated on Thu Jan 21 10:32:58 2010 for TB10.1 Example Applications by  - -doxygen 1.5.3
- -