diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/bmcustomization/src/telbubblecallimage.cpp --- a/phoneuis/BubbleManager/bmcustomization/src/telbubblecallimage.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/bmcustomization/src/telbubblecallimage.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -203,60 +203,68 @@ { return; } - - // If bitmap is bigger than drawing area then clip from center. - TRect rect; - if ( IsFullScreenImage() ) - { - rect = Rect(); - } - else - { - rect = ImagePlacingArea(); - } - + + // If bitmap is bigger than drawing area then clip from center of the image. + TRect rect = Rect(); iSourceRect = iImage->SizeInPixels(); - + TInt offsetX = ( iSourceRect.Width() > rect.Width() ) ? ((iSourceRect.Width() - rect.Width()) / 2) : 0; TInt offsetY = ( iSourceRect.Height() > rect.Height() ) ? ((iSourceRect.Height() - rect.Height()) / 2) : 0; - iSourceRect.Shrink( offsetX, offsetY ); - // If bitmap is smaller than drawing area then center it. + iSourceRect.Shrink( offsetX, offsetY ); + + // If bitmap is smaller than the drawing area then center the image on it. iOffset.iX = ( iSourceRect.Width() < rect.Width() ) ? ((rect.Width() - iSourceRect.Width()) / 2) : 0; - iOffset.iY = ( iSourceRect.Height() < rect.Height() ) ? - ((rect.Height() - iSourceRect.Height()) / 2) : 0; + + iOffset.iY = 0; + + // lift the image higher if needed. + if ( iSourceRect.Height() < rect.Height() ) + { + // check if it fits totally above the bubble + TInt height = iImagePlacingArea.iBr.iY - iImagePlacingArea.iTl.iY; + + if ( iSourceRect.Height() < height ) + { + // if it fits then center it above the bubble + iOffset.iY = ( height - iSourceRect.Height() ) / 2; + } + } } - // --------------------------------------------------------------------------- // CTelBubbleCallImage::Draw // --------------------------------------------------------------------------- // EXPORT_C void CTelBubbleCallImage::Draw( const TRect& /*aRect*/ ) const { - if ( iImage ) + if ( iImage ) { CWindowGc& gc = SystemGc(); - const TPoint topLeft = IsFullScreenImage() ? Rect().iTl : iImagePlacingArea.iTl; + + const TPoint topLeft = Rect().iTl; const TPoint bitmapTopLeft = topLeft + iOffset; - - if( iMask ) + + // if we have y offset then the image wont go under the bubble in any case and so + // no need for masking + if ( iMask && iOffset.iY == 0 ) { gc.BitBltMasked( bitmapTopLeft, - iImage, - iSourceRect, - iMask, - EFalse ); + iImage, + iSourceRect, + iMask, + EFalse ); } - else + else { gc.BitBlt( bitmapTopLeft, - iImage, - iSourceRect ); + iImage, + iSourceRect ); } + DrawRoundRect( gc, bitmapTopLeft, iSourceRect.Size() ); } }