javauis/m2g_qt/src/CM2GRenderContext.cpp
changeset 87 1627c337e51e
parent 80 d6dafc5d983f
equal deleted inserted replaced
80:d6dafc5d983f 87:1627c337e51e
     1 /*
     1 /*
     2 * Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    91     M2G_DEBUG_2("M2G_DEBUG: CM2GRenderContext::~CM2GRenderContext() - proxy=%d, engine=%d", iProxy, iEngineHandle);
    91     M2G_DEBUG_2("M2G_DEBUG: CM2GRenderContext::~CM2GRenderContext() - proxy=%d, engine=%d", iProxy, iEngineHandle);
    92     if ((iEngineHandle != M2G_INVALID_HANDLE) && (iProxy != NULL))
    92     if ((iEngineHandle != M2G_INVALID_HANDLE) && (iProxy != NULL))
    93     {
    93     {
    94         TRAP_IGNORE(iProxy->DeleteSvgEngineL(iEngineHandle));
    94         TRAP_IGNORE(iProxy->DeleteSvgEngineL(iEngineHandle));
    95     }
    95     }
    96     if(iWindowSurface)
    96     if (iWindowSurface)
    97         {
    97     {
    98             delete iWindowSurface;
    98         delete iWindowSurface;
    99         }
    99     }
   100     if(targetBitmap)
   100     if (targetBitmap)
   101         {
   101     {
   102         delete targetBitmap;
   102         delete targetBitmap;
   103         }
   103     }
   104     if(iTargetQImage)
   104     if (iTargetQImage)
   105         {
   105     {
   106         delete iTargetQImage;
   106         delete iTargetQImage;
   107         }
   107     }
   108     if(tempBitmapForMask)
   108     if (tempBitmapForMask)
   109         {
   109     {
   110         delete tempBitmapForMask;
   110         delete tempBitmapForMask;
   111         }
   111     }
   112     delete iImgBmp;
   112     delete iImgBmp;
   113     iFbsSession.Disconnect();
   113     iFbsSession.Disconnect();
   114 }
   114 }
   115 
   115 
   116 // -----------------------------------------------------------------------------
   116 // -----------------------------------------------------------------------------
   117 // CM2GRenderContext::BindL
   117 // CM2GRenderContext::BindL
   118 // -----------------------------------------------------------------------------
   118 // -----------------------------------------------------------------------------
   119 void CM2GRenderContext::BindL(TInt& aTargetHandle)
   119 void CM2GRenderContext::BindL(TInt& aTargetHandle)
   120     {
   120 {
   121     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::BindL()");
   121     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::BindL()");
   122     // get the screen size
   122     // get the screen size
   123     TSize screenSize = CEikonEnv::Static()->ScreenDevice()->SizeInPixels();             
   123     TSize screenSize = CEikonEnv::Static()->ScreenDevice()->SizeInPixels();
   124         
   124 
   125     iWindowSurface = (reinterpret_cast<Java::GFX::WindowSurface*>(aTargetHandle));
   125     iWindowSurface = (reinterpret_cast<Java::GFX::WindowSurface*>(aTargetHandle));
   126     //wSurfaceType   = (Java::GFX::WindowSurfaceType)iWindowSurface->getType();
   126 
   127     wSurfaceType = Java::GFX::WsTypeQtImage;
   127     iWindowSurface->bind(Java::GFX::WsTypeQtImage);
   128     
   128 
   129     iWindowSurface->bind(wSurfaceType);
   129     wSurfaceType = (Java::GFX::WindowSurfaceType)iWindowSurface->getType();
   130         
   130 
   131     switch(wSurfaceType)
   131     switch (wSurfaceType)
   132         {
   132     {
   133         case Java::GFX::WsTypeQtImage:
   133     case Java::GFX::WsTypeQtImage:
   134             User::LeaveIfNull(iOffScreenQImage = iWindowSurface->getQtImage());
   134         User::LeaveIfNull(iOffScreenQImage = iWindowSurface->getQtImage());
   135             targetBitmap = new CSvgtBitmap ((TInt8*)iOffScreenQImage->bits(),
   135         targetBitmap = new CSvgtBitmap((TInt8*)iOffScreenQImage->bits(),
   136                     TSize(iOffScreenQImage->size().width(),iOffScreenQImage->size().height()),
   136                                        TSize(iOffScreenQImage->size().width(),iOffScreenQImage->size().height()),
   137                             EColor16MA,iOffScreenQImage->bytesPerLine());
   137                                        EColor16MA,iOffScreenQImage->bytesPerLine());
   138             break;
   138         break;
   139 
   139 
   140         /*TODO for time being..case Java::GFX::WsTypeQtImage:
   140     case Java::GFX::WsTypeSymbianBitmap:
   141             User::LeaveIfNull(iTargetQImage   = iWindowSurface->getQtImage());
   141         break;
   142             InitializeQImageOffscreenBufferL(screenSize,iTargetQImage);
   142 
   143             break;*/
   143     default:
   144             
   144         User::Leave(KErrNotSupported);
   145         case Java::GFX::WsTypeSymbianBitmap:
   145         break;
   146             CFbsBitmap* tempBitmap;
   146     }
   147             User::LeaveIfNull(tempBitmap = (reinterpret_cast<Java::GFX::WindowSurface*>(aTargetHandle)->getSymbianBitmap()));
   147 
   148             InitializeCFbsBitmapOffscreenBufferL(screenSize,tempBitmap);
   148 }
   149             //iOffScreenBitmap = new(ELeave) CFbsBitmap();
   149 
   150             break;
   150 // -----------------------------------------------------------------------------
   151             
       
   152         default:
       
   153             User::Leave(KErrNotSupported);
       
   154             break;
       
   155         }
       
   156     
       
   157     }
       
   158 
       
   159 // -----------------------------------------------------------------------------
       
   160 // CM2GRenderContext::InitializeQImageOffscreenBufferL
       
   161 // -----------------------------------------------------------------------------
       
   162 void CM2GRenderContext::InitializeQImageOffscreenBufferL(TSize aScreenSize,QImage* aQimage)
       
   163     {
       
   164     QSize aSize;
       
   165     aSize.setHeight(aScreenSize.iHeight);
       
   166     aSize.setWidth(aScreenSize.iWidth);
       
   167     iOffScreenQImage = new QImage(aSize,aQimage->format());
       
   168     
       
   169     //TODO For time being the format is EColor16MU 
       
   170     targetBitmap = new CSvgtBitmap ((TInt8*)iOffScreenQImage->bits(),
       
   171     TSize(iOffScreenQImage->size().width(),iOffScreenQImage->size().height()),
       
   172             EColor16MU,iOffScreenQImage->bytesPerLine());
       
   173     }
       
   174 
       
   175 // -----------------------------------------------------------------------------
       
   176 // CM2GRenderContext::InitializeCFbsBitmapOffscreenBufferL
       
   177 // -----------------------------------------------------------------------------
       
   178 void CM2GRenderContext::InitializeCFbsBitmapOffscreenBufferL(TSize aScreenSize,CFbsBitmap* aBitmap)
       
   179     {
       
   180     
       
   181     iOffScreenBitmap = new(ELeave) CFbsBitmap();
       
   182     User::LeaveIfError(
       
   183             iOffScreenBitmap->Create(aScreenSize, aBitmap->DisplayMode()));
       
   184     
       
   185 //    TODO check for stride in case of bitmap.
       
   186 //    iTargetBitmap = new CSvgtBitmap( (TInt8*)iOffScreenBitmap->DataAddress() ,aScreenSize,iOffScreenBitmap->DisplayMode()/*KDefaultDisplayMode TODO chk this*/,iOffScreenBitmap->ScanLineLength(iOffScreenBitmap->SizeInPixels().iWidth,KDefaultDisplayMode) );
       
   187     }
       
   188 
       
   189 // -----------------------------------------------------------------------------
       
   190 // CM2GRenderContext::GetImgHandleL
       
   191 // -----------------------------------------------------------------------------
       
   192 /*
       
   193  * TODO we don't need method anymore as now we need Surface handle
       
   194  * TM2GBitmapHandle CM2GRenderContext::GetImgHandleL() const
       
   195 {
       
   196     User::LeaveIfNull(iImgBmp);
       
   197 
       
   198     return REINTERPRET_CAST(TM2GBitmapHandle, iImgBmp);
       
   199 }*/
       
   200 
       
   201 
       
   202 // -----------------------------------------------------------------------------
   151 // -----------------------------------------------------------------------------
   203 // CM2GRenderContext::InitImageBitmapL
   152 // CM2GRenderContext::InitImageBitmapL
   204 // -----------------------------------------------------------------------------
   153 // -----------------------------------------------------------------------------
   205 void CM2GRenderContext::InitImageBitmapL()
   154 void CM2GRenderContext::InitImageBitmapL()
   206     {
   155 {
   207     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::InitImageBitmapL() - begin");
   156     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::InitImageBitmapL() - begin");
   208     // get the screen size
   157     // get the screen size
   209     TSize screenSize = CEikonEnv::Static()->ScreenDevice()->SizeInPixels();
   158     TSize screenSize = CEikonEnv::Static()->ScreenDevice()->SizeInPixels();
   210     switch (wSurfaceType)
   159     switch (wSurfaceType)
   211         {
   160     {
   212         case Java::GFX::WsTypeQtImage:
   161     case Java::GFX::WsTypeQtImage:
   213             {
   162     {
   214             break;
   163         break;
   215             }
   164     }
   216         case Java::GFX::WsTypeSymbianBitmap:
   165     case Java::GFX::WsTypeSymbianBitmap:
   217             {
   166     {
   218              break;   
   167         break;
   219             }
   168     }
   220         
   169 
   221         default:
   170     default:
   222             break;
   171         break;
   223         }
   172     }
   224     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::InitImageBitmapL() - end");
   173     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::InitImageBitmapL() - end");
   225     }
   174 }
   226 // -----------------------------------------------------------------------------
       
   227 // CM2GRenderContext::ReleaseL
   175 // CM2GRenderContext::ReleaseL
   228 // -----------------------------------------------------------------------------
   176 // -----------------------------------------------------------------------------
   229 void CM2GRenderContext::ReleaseL()
   177 void CM2GRenderContext::ReleaseL()
   230     {
   178 {
   231     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ReleaseL() - begin");
   179     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ReleaseL() - begin");
   232     
   180 
   233     iTargetQImage = NULL;
   181     iTargetQImage = NULL;
   234     iOffScreenQImage = NULL;
   182     iOffScreenQImage = NULL;
   235     iWindowSurface->release();
   183     iWindowSurface->release();
   236 
   184 
   237     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ReleaseL() - end");
   185     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ReleaseL() - end");
   238     }
   186 }
   239 
   187 
   240 // -----------------------------------------------------------------------------
   188 // -----------------------------------------------------------------------------
   241 // CM2GRenderContext::RenderL
   189 // CM2GRenderContext::RenderL
   242 // -----------------------------------------------------------------------------
   190 // -----------------------------------------------------------------------------
   243 void CM2GRenderContext::RenderLCDUIL(
   191 void CM2GRenderContext::RenderLCDUIL(
   305 
   253 
   306 // -----------------------------------------------------------------------------
   254 // -----------------------------------------------------------------------------
   307 // CM2GRenderContext::ConstructL
   255 // CM2GRenderContext::ConstructL
   308 // -----------------------------------------------------------------------------
   256 // -----------------------------------------------------------------------------
   309 void CM2GRenderContext::ConstructL(MM2GSVGProxy* aProxy)
   257 void CM2GRenderContext::ConstructL(MM2GSVGProxy* aProxy)
   310     {
   258 {
   311     // Init member variables
   259     // Init member variables
   312     SetTransparency(MM2GRenderContext::KFullOpaque);
   260     SetTransparency(MM2GRenderContext::KFullOpaque);
   313 
   261 
   314     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - begin");
   262     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - begin");
   315 
   263 
   325         M2G_THROW(KM2GArgNotOk);
   273         M2G_THROW(KM2GArgNotOk);
   326     }
   274     }
   327 
   275 
   328     User::LeaveIfError(iFbsSession.Connect());
   276     User::LeaveIfError(iFbsSession.Connect());
   329     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - end");
   277     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - end");
   330     }
   278 }
   331 // -----------------------------------------------------------------------------
   279 // -----------------------------------------------------------------------------
   332 // CM2GRenderContext::PrepareViewbox
   280 // CM2GRenderContext::PrepareViewbox
   333 // -----------------------------------------------------------------------------
   281 // -----------------------------------------------------------------------------
   334 void CM2GRenderContext::PrepareViewbox(
   282 void CM2GRenderContext::PrepareViewbox(
   335     TM2GRenderRect& aRr,
   283     TM2GRenderRect& aRr,
   364     }
   312     }
   365     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::PrepareViewbox() - end");
   313     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::PrepareViewbox() - end");
   366 }
   314 }
   367 
   315 
   368 void CM2GRenderContext::RenderLCDUIL(
   316 void CM2GRenderContext::RenderLCDUIL(
   369                 TM2GSvgDocumentHandle& aSvgDocHandle,
   317     TM2GSvgDocumentHandle& aSvgDocHandle,
   370                 TReal32 aCurrentTime,
   318     TReal32 aCurrentTime,
   371                 const TRect& aViewbox,
   319     const TRect& /*aViewbox*/,
   372                 const TPoint& aAnchor)
   320     const TPoint& /*aAnchor*/)
   373     {
   321 {
   374     M2G_DEBUG_4("M2G_DEBUG: CM2GRenderContext::RenderL() viewbox: x=%d, y=%d, w=%d, h=%d begin", aViewbox.iTl.iX, aViewbox.iTl.iY, aViewbox.Size().iWidth, aViewbox.Size().iHeight);
   322     M2G_DEBUG_4("M2G_DEBUG: CM2GRenderContext::RenderL() viewbox: x=%d, y=%d, w=%d, h=%d begin", aViewbox.iTl.iX, aViewbox.iTl.iY, aViewbox.Size().iWidth, aViewbox.Size().iHeight);
   375 
   323 
   376     // No need to render if content is fully transparency (i.e. alpha=0)
   324     // No need to render if content is fully transparency (i.e. alpha=0)
   377     if (iScaledAlpha == 0)
   325     if (iScaledAlpha == 0)
   378     {
   326     {
   379         return;
   327         return;
   380     }
   328     }
   381 
   329 
   382     QStringList list;
       
   383     list <<"QImage-Format_RGB32";
       
   384     TBuf8<32> fname;
       
   385     
       
   386     // 1: render the svg document on the iImgBmp
   330     // 1: render the svg document on the iImgBmp
   387     iProxy->RenderDocumentL(
   331     iProxy->RenderDocumentL(
   388         iEngineHandle,
   332         iEngineHandle,
   389         aSvgDocHandle,
   333         aSvgDocHandle,
   390         (TM2GSvgBitmapHandle)targetBitmap 
   334         (TM2GSvgBitmapHandle)targetBitmap
   391         , (TUint)NULL, aCurrentTime);
   335         , (TUint)NULL, aCurrentTime);
   392       
   336 
   393       fname.Zero();
   337     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderL() end");
   394       fname.Format(_L8("c:\\%s.bmp"), list.at(0).toLocal8Bit().constData());
   338 }
   395       TBool ret = iOffScreenQImage->save((const char*)fname.PtrZ());
   339 
   396       
   340 // -----------------------------------------------------------------------------
   397       QPixmap pixmap = QPixmap::fromImage(*iOffScreenQImage);
   341 /*
   398       tempBitmapForMask  = pixmap.toSymbianCFbsBitmap();
   342  * Write the separate RenderDocumentL method for QImage and CFbsBitmap
   399       
       
   400       TFileName       bitmapFilename;
       
   401       bitmapFilename.Copy(_L("c:\\bugbitmap"));
       
   402       bitmapFilename.AppendNum(tempBitmapForMask->Handle());
       
   403       bitmapFilename.Append(_L(".bmp"));
       
   404       SaveBitmapL(*tempBitmapForMask, bitmapFilename);
       
   405       //TODO Release function should be called from FrameWork
       
   406       //iWindowSurface->release();
       
   407       M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderL() end");
       
   408     }
       
   409 
       
   410 // -----------------------------------------------------------------------------
       
   411 /*TODO
       
   412  * Write the separate RenderDocumentL method for QImage and CFbsBitmap 
       
   413  * also handle subsequent BitBlt and
   343  * also handle subsequent BitBlt and
   414  * CreateAlphaBlendMaskL
   344  * CreateAlphaBlendMaskL
   415  * */
   345  * */
   416 void CM2GRenderContext::RenderESWTL(
   346 void CM2GRenderContext::RenderESWTL(
   417     TM2GSvgDocumentHandle& aSvgDocHandle,
   347     TM2GSvgDocumentHandle& aSvgDocHandle,
   418     TReal32 aCurrentTime,
   348     TReal32 aCurrentTime,
   419     const TRect& aViewbox,
   349     const TRect& /*aViewbox*/,
   420     const TPoint& aAnchor,
   350     const TPoint& /*aAnchor*/,
   421     TBool /*aUseNativeClear*/,
   351     TBool /*aUseNativeClear*/,
   422     TInt* aReturnData)
   352     TInt* /*aReturnData*/)
   423 {
   353 {
   424     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderESWTL() Start");
   354     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderESWTL() Start");
   425     // No need to render if content is fully transparency (i.e. alpha=0)
   355     // No need to render if content is fully transparency (i.e. alpha=0)
   426     if (iScaledAlpha == 0)
   356     if (iScaledAlpha == 0)
   427     {
   357     {
   428         return;
   358         return;
   429     }
   359     }
   430     
   360 
   431     // 1: render the svg document on the iImgBmp
   361     // 1: render the svg document on the iImgBmp
   432    iProxy->RenderDocumentL(iEngineHandle,
   362     iProxy->RenderDocumentL(iEngineHandle,
   433        aSvgDocHandle,
   363                             aSvgDocHandle,
   434        (TM2GSvgBitmapHandle)targetBitmap, (TUint)NULL, aCurrentTime);
   364                             (TM2GSvgBitmapHandle)targetBitmap, (TUint)NULL, aCurrentTime);
   435    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderESWTL() end");
   365     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderESWTL() end");
   436     
   366 
   437 }
   367 }
   438 // CM2GRenderContext::CreateAlphaBlendMask
       
   439 // -----------------------------------------------------------------------------
       
   440 // -----------------------------------------------------------------------------
       
   441 // CM2GRenderContext::ClearBitmapL
       
   442 // -----------------------------------------------------------------------------
       
   443 void CM2GRenderContext::ClearBitmapL(CFbsBitmap* aBmp)
       
   444 {
       
   445     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap - begin");
       
   446 
       
   447     User::LeaveIfNull(aBmp);
       
   448 
       
   449     TM2GBitmapLock lock(aBmp);
       
   450 
       
   451     TSize   size            = aBmp->SizeInPixels();
       
   452     TInt    scanlineLength  = aBmp->ScanLineLength(size.iWidth, aBmp->DisplayMode());
       
   453 
       
   454     TUint32* buf = aBmp->DataAddress();
       
   455     char* bufBytes = REINTERPRET_CAST(char*, buf);
       
   456 
       
   457     Mem::FillZ(bufBytes,  size.iHeight * scanlineLength);
       
   458 
       
   459     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap - end");
       
   460 }
       
   461 
       
   462 
       
   463 void CM2GRenderContext::ClearSurfaceL(TM2GSvgBitmapHandle aSvgtBmpHandle )
       
   464     {
       
   465     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap - begin");
       
   466 //TODO As Currently we are not using this functionality.     
       
   467 /*     switch(wSurfaceType)
       
   468          {
       
   469          case Java::GFX::WsTypeQtImage:
       
   470              QImage* tempQImage;
       
   471              User::LeaveIfNull(tempQImage = (reinterpret_cast<Java::GFX::WindowSurface*>(aSvgtBmpHandle)->getQtImage()));
       
   472              //TODO Do we need to lock the qimage as implemented below        TM2GBitmapLock lock(tempBitmap);?
       
   473              QSize   sizeQimage            = tempQImage->size();//TODO Check for SizeInPixels
       
   474              TInt    scanlineLengthQimage  = tempQImage->bytesPerLine();
       
   475              //uchar* bufBytesQimage = REINTERPRET_CAST(uchar*, tempQImage->bits());
       
   476              
       
   477              Mem::FillZ(tempQImage->bits(),  sizeQimage.height() * scanlineLengthQimage);
       
   478              
       
   479              M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearSurface Qimage Clear function- end");
       
   480              break;
       
   481              
       
   482          case Java::GFX::WsTypeSymbianBitmap:
       
   483              CFbsBitmap* tempBitmap;
       
   484              User::LeaveIfNull(tempBitmap = (reinterpret_cast<Java::GFX::WindowSurface*>(aSvgtBmpHandle)->getSymbianBitmap()));
       
   485              TM2GBitmapLock lock(tempBitmap);
       
   486              TSize   sizeBmp            = tempBitmap->SizeInPixels();
       
   487              TInt    scanlineLengthBmp  = tempBitmap->ScanLineLength(sizeBmp.iWidth, tempBitmap->DisplayMode());
       
   488              TUint32* bufBmp = tempBitmap->DataAddress();
       
   489              char* bufBytesBmp = REINTERPRET_CAST(char*, bufBmp);
       
   490 
       
   491              Mem::FillZ(bufBytesBmp,  sizeBmp.iHeight * scanlineLengthBmp);
       
   492 
       
   493              M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearSurface Bitmap Clear function- end");
       
   494              break;
       
   495              
       
   496          default:
       
   497              M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap Type Not Supported.- end");
       
   498              User::Leave(KErrNotSupported);
       
   499              break;
       
   500          }
       
   501  */
       
   502     }
       
   503 
       
   504 // -----------------------------------------------------------------------------
       
   505 // CM2GRenderContext::FillBitmapL
       
   506 // -----------------------------------------------------------------------------
       
   507 void CM2GRenderContext::FillBitmapL(CFbsBitmap* aBmp, const TUint8& aChar)
       
   508 {
       
   509     M2G_DEBUG_1("M2G_DEBUG: CM2GRenderContext::FillBitmap() filled with=%d - begin", aChar);
       
   510     User::LeaveIfNull(aBmp);
       
   511     TM2GBitmapLock lock(aBmp);
       
   512 
       
   513     TSize   size            = aBmp->SizeInPixels();
       
   514     TInt    scanlineLength  = aBmp->ScanLineLength(size.iWidth, aBmp->DisplayMode());
       
   515 
       
   516     TUint32* buf = aBmp->DataAddress();
       
   517     char* bufBytes = REINTERPRET_CAST(char*, buf);
       
   518 
       
   519     Mem::Fill(bufBytes, size.iHeight * scanlineLength, aChar);
       
   520 
       
   521     M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::FillBitmap - end");
       
   522 }
       
   523 
       
   524 // -----------------------------------------------------------------------------
       
   525 // CM2GRenderContext::GetBufferHandleL
       
   526 // -----------------------------------------------------------------------------
       
   527 TM2GSvgBitmapHandle CM2GRenderContext::GetBufferHandleL() const
       
   528     {
       
   529     switch(wSurfaceType)
       
   530            {
       
   531            case Java::GFX::WsTypeQtImage:
       
   532                User::LeaveIfNull(iOffScreenQImage);
       
   533                return REINTERPRET_CAST(TM2GSvgBitmapHandle , iOffScreenQImage);
       
   534 	           break;
       
   535 
       
   536            case Java::GFX::WsTypeSymbianBitmap:
       
   537                User::LeaveIfNull(iOffScreenBitmap);
       
   538                return REINTERPRET_CAST(TM2GSvgBitmapHandle , iOffScreenBitmap);
       
   539                break;
       
   540                
       
   541            default:
       
   542                User::Leave(KErrNotSupported);
       
   543                break;
       
   544            }
       
   545     
       
   546     }
       
   547 
       
   548 //CODE to check the Bitmap Contain.
       
   549 TInt CM2GRenderContext::SaveBitmapL(const CFbsBitmap& aNVGBitmap, const TFileName& aFileName)
       
   550     {
       
   551         TFileName       bitmapFilename;
       
   552         bitmapFilename.Copy(aFileName);
       
   553         RFs aFs;
       
   554         User::LeaveIfError(aFs.Connect());
       
   555         CImageEncoder * imgEncoder = 0;
       
   556         TRequestStatus  requesStatus = 0;
       
   557         imgEncoder = CImageEncoder::FileNewL(aFs, bitmapFilename, _L8("image/bmp"), CImageEncoder::EOptionAlwaysThread);
       
   558         imgEncoder->Convert(&requesStatus, aNVGBitmap);
       
   559         User::WaitForRequest(requesStatus);
       
   560         delete imgEncoder;       
       
   561         aFs.Close();
       
   562         return 0;
       
   563     }
       
   564 
   368 
   565 M2G_NS_END
   369 M2G_NS_END