diff -r 5a1685599b76 -r 8152b1f1763a textinput/peninputarc/src/peninputlayoutcontrol/peninputpopupbubble.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputpopupbubble.cpp Wed Sep 15 12:34:44 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,492 +0,0 @@ -/* -* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0"" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Implementation for CPopupBubbleCtrl -* -*/ - - -#include -#include -#include -#include - -#include "peninputpopupbubble.h" -#include "peninputlayout.h" -#include -#include -#include "peninputcmd.h" - -const TInt KShrinkSize = 10; -const TInt KDefaultTextColorIndex = EAknsCIQsnTextColorsCG60; -const TInt KAlpha = 200; - -// ======== MEMBER FUNCTIONS ======== - -/*****************************************************************************/ -// Implementation of Class CPopupBubbleWnd - -// --------------------------------------------------------------------------- -// c++ constructor -// --------------------------------------------------------------------------- -// -CPopupBubbleWnd::CPopupBubbleWnd(CPopupBubbleCtrl& aParent) -: iParent(aParent), -iSupportTransparent(EFalse) - { - } - -// --------------------------------------------------------------------------- -// c++ destructor -// --------------------------------------------------------------------------- -// -CPopupBubbleWnd::~CPopupBubbleWnd() - { - //delete bitmaps - iBitGc.ResetAndDestroy(); - iDevice.ResetAndDestroy(); - iBitmap.ResetAndDestroy(); - } - -// --------------------------------------------------------------------------- -// Symbian constructor -// --------------------------------------------------------------------------- -// -CPopupBubbleWnd* CPopupBubbleWnd::NewL(const TRect& aRect, CPopupBubbleCtrl& aParent) - { - CPopupBubbleWnd* self = CPopupBubbleWnd::NewLC(aRect, aParent); - CleanupStack::Pop(); // self; - return self; - } - -// --------------------------------------------------------------------------- -// Symbian constructor -// --------------------------------------------------------------------------- -// -CPopupBubbleWnd* CPopupBubbleWnd::NewLC(const TRect& aRect, CPopupBubbleCtrl& aParent) - { - CPopupBubbleWnd* self = new ( ELeave ) CPopupBubbleWnd(aParent); - CleanupStack::PushL( self ); - self->ConstructL(aRect); - return self; - } - -// --------------------------------------------------------------------------- -// Symbian second-phase constructor -// --------------------------------------------------------------------------- -// -void CPopupBubbleWnd::ConstructL(const TRect& aRect) - { - RWindowGroup& wg = CCoeEnv::Static()->RootWin(); - CreateWindowL( wg ); - SetComponentsToInheritVisibility(); - Window().SetRequiredDisplayMode( EColor16MA ); - TInt err = Window().SetTransparencyAlphaChannel(); - iSupportTransparent = ( KErrNone == err ); - Window().SetBackgroundColor( TRgb(0,0,0,0) ); - - //create bitmaps - for(TInt i = 0; iCreate(aRect.Size(), EColor16MA); - - CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(iBitmap[i]); //BitmapDevice - CleanupStack::PushL(device); - iDevice.AppendL(device); //take ownership - CleanupStack::Pop(device); - - CFbsBitGc* bitgc = CFbsBitGc::NewL(); // GraphicsContext - CleanupStack::PushL(bitgc); - iBitGc.AppendL(bitgc); //take ownership - CleanupStack::Pop(bitgc); - } - - MakeVisible( ETrue ); - SetRect(aRect); - ActivateL(); - } - -// --------------------------------------------------------------------------- -// Draw this control -// --------------------------------------------------------------------------- -// -void CPopupBubbleWnd::Draw(const TRect& aRect) const - { - if ( !iParent.AbleToDraw() ) - { - return; - } - - CWindowGc& gc = SystemGc(); - - if ( !SupportTransparent() ) - { - gc.Clear( aRect ); - } - - DrawTransparentBackground( aRect ); - - if ( iParent.iForgroundBmp ) - { - TRect innerRect = aRect; - innerRect.Shrink( KShrinkSize, 0 ); - - TRect iconRect; - iconRect.iTl = TPoint( innerRect.iTl.iX + iParent.iIconOffset.iWidth, - innerRect.iTl.iY + iParent.iIconOffset.iHeight ); - iconRect.SetWidth( iParent.iIconSize.iWidth ); - iconRect.SetHeight( iParent.iIconSize.iHeight ); - - if( iParent.iForgroundBmp->SizeInPixels() != iconRect.Size() ) - { - AknIconUtils::SetSize( iParent.iForgroundBmp, iconRect.Size(), EAspectRatioNotPreserved ); - } - - TRect srcRect( TPoint( 0, 0 ), iParent.iForgroundBmp->SizeInPixels() ); - - if( iParent.iForgroundBmpMask ) - { - if( iParent.iForgroundBmpMask->SizeInPixels() != iconRect.Size() ) - { - AknIconUtils::SetSize( iParent.iForgroundBmpMask, iconRect.Size(), EAspectRatioNotPreserved); - } - - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.BitBltMasked( iconRect.iTl, - iParent.iForgroundBmp, - srcRect, - iParent.iForgroundBmpMask, - EFalse); - } - else - { - gc.BitBlt( iconRect.iTl, - iParent.iForgroundBmp, - srcRect ); - } - } - - if ( iParent.iText && iParent.iText->Length() > 0 ) - { - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - TAknLayoutText textLayout; - textLayout.LayoutText(Rect(), iParent.iTextFormat); - TRgb color( KRgbBlack ); // sane default for nonskinned case - if ( AknsUtils::AvkonSkinEnabled() ) - { - AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), - color, KAknsIIDQsnTextColors, iParent.iTextColorIndex ); - } - textLayout.DrawText(gc, *(iParent.iText), ETrue, color); - } - } - -// --------------------------------------------------------------------------- -// Resize this control -// --------------------------------------------------------------------------- -// -void CPopupBubbleWnd::SizeChanged() - { - TRect rect = Rect(); - - iRect[EMiddleItem] = rect; - - iRect[EMiddleItem].Shrink( KShrinkSize, 0 ); - - // horizon - if( rect.iTl.iY == iRect[EMiddleItem].iTl.iY && rect.iBr.iY == iRect[EMiddleItem].iBr.iY ) - { - iRect[ELeftItem] = TRect( rect.iTl, TPoint( iRect[EMiddleItem].iTl.iX, iRect[EMiddleItem].iBr.iY ) ); - iRect[ERightItem] = TRect( TPoint( iRect[EMiddleItem].iBr.iX, iRect[EMiddleItem].iTl.iY), rect.iBr ); - } - else if( rect.iTl.iX == iRect[EMiddleItem].iTl.iX && rect.iBr.iX == iRect[EMiddleItem].iBr.iX ) - { - iRect[ELeftItem] = TRect( rect.iTl, TPoint( iRect[EMiddleItem].iBr.iX, iRect[EMiddleItem].iTl.iY ) ); - iRect[ERightItem] = TRect( TPoint( iRect[EMiddleItem].iTl.iX, iRect[EMiddleItem].iBr.iY), rect.iBr ); - } - - SizeImage( iParent.iFirstBmpId, iRect[ELeftItem], iBitmap[ELeftItem], iDevice[ELeftItem], iBitGc[ELeftItem] ); - SizeImage( iParent.iMiddleBmpId, iRect[EMiddleItem], iBitmap[EMiddleItem], iDevice[EMiddleItem], iBitGc[EMiddleItem] ); - SizeImage( iParent.iLastBmpId, iRect[ERightItem], iBitmap[ERightItem], iDevice[ERightItem], iBitGc[ERightItem] ); - } - -// --------------------------------------------------------------------------- -// Handle resource change -// --------------------------------------------------------------------------- -// -void CPopupBubbleWnd::HandleResourceChange( TInt aType ) - { - if ( aType == KAknsMessageSkinChange ) - { - // When skin changes, we need to update local bitmaps - SizeChanged(); - } - } - -// --------------------------------------------------------------------------- -// Size images used for drawing -// --------------------------------------------------------------------------- -// -void CPopupBubbleWnd::SizeImage( TAknsItemID aId, TRect aRect, CFbsBitmap* aBitmap, CFbsBitmapDevice* aDevice, CFbsBitGc* aBitGc ) - { - MAknsSkinInstance* instance = AknsUtils::SkinInstance(); - TAknsItemType type = instance->GetCachedItemData( aId )->Type(); - if ( type == EAknsITMaskedBitmap ) - { - CAknsMaskedBitmapItemData* itemData = - static_cast ( instance->GetCachedItemData( aId ) ); - - AknIconUtils::SetSize( itemData->Bitmap(), aRect.Size(), EAspectRatioNotPreserved ); - AknIconUtils::SetSize( itemData->Mask(), aRect.Size(), EAspectRatioNotPreserved ); - - TDisplayMode bitmapmode = itemData->Bitmap()->DisplayMode(); - TDisplayMode maskmode = itemData->Mask()->DisplayMode(); - - aBitmap->Resize( aRect.Size() ); - aDevice->Resize( aRect.Size() ); - aBitGc->Activate( aDevice ); - - TRect entireImage( TPoint(0, 0), itemData->Bitmap()->SizeInPixels() ); - if (itemData->Mask()) - { - aBitGc->BitBltMasked( TPoint(0, 0), itemData->Bitmap(), entireImage, - itemData->Mask(), ETrue ); - } - else - { - aBitGc->BitBlt( TPoint(0, 0), itemData->Bitmap() ); - } - - TInt size = aBitmap->DataSize(); - TUint32* data = aBitmap->DataAddress(); - TDisplayMode mode = aBitmap->DisplayMode(); - - iBitmap[ETempItem]->Resize( aRect.Size() ); - iDevice[ETempItem]->Resize( aRect.Size() ); - iBitGc[ETempItem]->Activate( iDevice[ETempItem] ); - iBitGc[ETempItem]->BitBlt( TPoint(0, 0), itemData->Mask() ); - - TUint32* mask_data = iBitmap[ETempItem]->DataAddress(); - - if (mode == EColor16MA) - { - for (TInt i = 0; i < size/sizeof( TUint32 ); i++) - { - TRgb colour; - colour.SetInternal( *(mask_data + i) ); - if (colour != TRgb( 0x00, 0x00, 0x00, 0xFF )) - { - colour.SetInternal( *(data + i) ); - colour.SetAlpha( KAlpha ); //semi transparent - *(data + i) = colour.Internal(); - } - else - { - colour.SetInternal( *(data + i) ); - colour.SetAlpha( 0x00 ); //fully transparent - *(data + i) = colour.Internal(); - } - } - } - } - } - -// --------------------------------------------------------------------------- -// Draw transparent background -// --------------------------------------------------------------------------- -// - -void CPopupBubbleWnd::DrawTransparentBackground( const TRect& aRect ) const -{ - CWindowGc& gc = SystemGc(); - - for( TInt i=0; iBaseConstructL(); - - CleanupStack::Pop( ctrl ); - return ctrl; - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::CPopupBubbleCtrl -// C++ constructor -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -EXPORT_C CPopupBubbleCtrl::CPopupBubbleCtrl( const TRect& aRect, - CFepUiLayout* aUiLayout, - TInt aCtrlId ) - :CFepUiBaseCtrl( aRect,aUiLayout,aCtrlId ), - iTextColorIndex( KDefaultTextColorIndex ) - { - SetControlType( ECtrlButton ); - SetHidenFlag( ETrue ); - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::CPopupBubbleCtrl -// C++ destructor -// --------------------------------------------------------------------------- -// -EXPORT_C CPopupBubbleCtrl::~CPopupBubbleCtrl() - { - if ( iText ) - { - delete iText; - iText = NULL; - } - if( iForgroundBmp ) - { - delete iForgroundBmp; - iForgroundBmp = NULL; - } - if( iForgroundBmpMask ) - { - delete iForgroundBmpMask; - iForgroundBmpMask = NULL; - } - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::SetBitmapParamL -// Set bitmap parameters used fot this bubble -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -EXPORT_C void CPopupBubbleCtrl::SetBitmapParamL( - CFbsBitmap* aBmpId, - CFbsBitmap* aMaskBmpId, - TAknsItemID aFirstBmpId, - TAknsItemID aMiddleBmpId, - TAknsItemID aLastBmpId) - { - if( iForgroundBmp ) - { - delete iForgroundBmp; - iForgroundBmp = NULL; - } - if( iForgroundBmpMask ) - { - delete iForgroundBmpMask; - iForgroundBmpMask = NULL; - } - - iForgroundBmp = aBmpId; - iForgroundBmpMask = aMaskBmpId; - - iFirstBmpId = aFirstBmpId; - iMiddleBmpId = aMiddleBmpId; - iLastBmpId = aLastBmpId; - - delete iWndControl; - iWndControl = NULL; - iWndControl = CPopupBubbleWnd::NewL( Rect(), *this ); - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::Hide -// Hide bubble control -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -EXPORT_C void CPopupBubbleCtrl::Hide( TBool aFlag ) - { - if ( iWndControl ) - { - iWndControl->MakeVisible( !aFlag ); - } - CFepUiBaseCtrl::Hide( aFlag ); - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::Draw -// Draw bubble control -// --------------------------------------------------------------------------- -// -EXPORT_C void CPopupBubbleCtrl::Draw() - { - if( !AbleToDraw() ) - { - return; - } - - if( iWndControl ) - { - iWndControl->DrawDeferred(); - } - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::Move -// Move bubble control -// --------------------------------------------------------------------------- -// -EXPORT_C void CPopupBubbleCtrl::Move( const TPoint& aOffset ) - { - //leave empty - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::SetTextFormat -// Set text format used for text drawing -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -EXPORT_C void CPopupBubbleCtrl::SetTextFormat( TAknTextLineLayout aTextFormat ) - { - iTextFormat = aTextFormat; - } - -// --------------------------------------------------------------------------- -// CPopupBubbleCtrl::SetTextL -// Set bubble text -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -EXPORT_C void CPopupBubbleCtrl::SetTextL( const TDesC& aText ) - { - delete iText; - iText = NULL; - iText = aText.AllocL(); - }