webengine/osswebengine/WebCore/platform/symbian/bitmap/MaskedBitmap.cpp
branchRCL_3
changeset 47 e1bea15f9a39
parent 38 4917f9bf7995
child 48 79859ed3eea9
--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/MaskedBitmap.cpp	Thu Jul 15 19:53:20 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/MaskedBitmap.cpp	Thu Aug 19 10:58:56 2010 +0300
@@ -83,7 +83,7 @@
 
 
 CMaskedBitmap::CMaskedBitmap(CFbsBitmap* aBitmap, CFbsBitmap* aMask)
-: iBitmap(aBitmap),iMask(aMask)
+: iBitmap(aBitmap),iMask(aMask),i_DecodingCompleted(ETrue)
     {
     }
 
@@ -186,6 +186,8 @@
             err = BitmapUtil::CopyBitmap( aBitmap, *iBitmap );
             }
         }
+    if(!err)
+        SetInitialisationCompletionStatus(ETrue);
     return err;
     }
 
@@ -232,6 +234,8 @@
             iBitmap->Reset();
             }
         }
+    if(!err)
+        SetInitialisationCompletionStatus(ETrue);
     return err;
     }
 
@@ -250,6 +254,7 @@
     {
     iBitmap->Reset();
     if(iMask) iMask->Reset();
+    SetInitialisationCompletionStatus(EFalse);
     }
 
 
@@ -487,7 +492,12 @@
 void CMaskedBitmap::TileInBitmapRect( CFbsBitmap* trgBmp, const TRect& aTrgRect, const TPoint& aOffset )
     {
     trgBmp->LockHeap();
-
+    
+    if ( aTrgRect.Width() < 0 || aTrgRect.Height() < 0 )
+        {
+        trgBmp->UnlockHeap();
+        return; 
+        }
     TSize sz = trgBmp->SizeInPixels();
     TUint32* buf = (TUint32*)(trgBmp->DataAddress());
 
@@ -634,16 +644,15 @@
         
     }
 
-CMaskedBitmap* CMaskedBitmap::ScaleImageToSize( TSize newSize )
+CMaskedBitmap* CMaskedBitmap::ScaleImageToSize( TSize newSize, bool storeScaledImage)
 {
-    if (iScaledBitmap && iScaledBitmap->SizeInPixels() == newSize)
+    
+    if (storeScaledImage && iScaledBitmap && iScaledBitmap->SizeInPixels() == newSize)
         return iScaledBitmap;
 
-    delete iScaledBitmap;
-    iScaledBitmap = NULL;
-    iScaledBitmap = CMaskedBitmap::NewL();
+    CMaskedBitmap* scaledBitmap = CMaskedBitmap::NewL();
 
-    CFbsBitmap& bmp = iScaledBitmap->BitmapModifyable();
+    CFbsBitmap& bmp = scaledBitmap->BitmapModifyable();
     bmp.Create(newSize, iBitmap->DisplayMode());
 
     // scale the image quickly
@@ -655,7 +664,7 @@
     bitGc->DrawBitmap(TRect(TPoint(0,0), newSize), iBitmap, iBitmap->SizeInPixels());
     CleanupStack::PopAndDestroy(2);
 
-    CFbsBitmap& msk = iScaledBitmap->MaskModifyable();
+    CFbsBitmap& msk = scaledBitmap->MaskModifyable();
     if( HasMask() ) {
         msk.Create(newSize, iMask->DisplayMode());
 
@@ -668,8 +677,24 @@
         bitGc->DrawBitmap(TRect(TPoint(0,0), newSize), iMask, iMask->SizeInPixels());
         CleanupStack::PopAndDestroy(2);
     }
-
-    return iScaledBitmap;
+    if (storeScaledImage) {
+        delete iScaledBitmap;
+        iScaledBitmap = NULL;
+        iScaledBitmap = scaledBitmap;
+    }
+    return scaledBitmap;
 }
 
+void CMaskedBitmap::SetInitialisationCompletionStatus(TBool aDecodingCompleted)
+{
+    i_DecodingCompleted = aDecodingCompleted;
+}
+
+
+TBool CMaskedBitmap::IsCompletlyInitialised()
+{
+    return i_DecodingCompleted;
+}
+
+
 //  End of File