diff -r 724d4ec22f0d -r aaeeca1f15af src/screensaverindicatornumberandicon.cpp --- a/src/screensaverindicatornumberandicon.cpp Thu Aug 19 09:55:47 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,434 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorNumberAndIcon implementation. -* -*/ - - - -#include -#include -#include - -#include "screensaverindicatornumberandicon.h" - - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::~CScreensaverNumberAndIconIndicator -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorNumberAndIcon::~CScreensaverIndicatorNumberAndIcon() - { - delete iIcon; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::Draw( CWindowGc& aGc ) const - { - TBuf<10> nStr; - nStr.AppendNum( iValue ); - - aGc.SetPenColor( iTextColor ); - aGc.SetBrushColor( iBgColor ); - - if ( iFont ) - { - aGc.UseFont( iFont ); - } - else - { - ASSERT( iFont != NULL ); - aGc.UseFont( CEikonEnv::Static()->AnnotationFont() ); - } - - if ( Visible() && iIcon ) - { - // Convert number according to language - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( nStr ); - - DrawIcon( aGc ); - - // Draw number beside icon - if ( ( iTextRect.IsEmpty() ) || ( !iFont ) ) - { - // Draw using text position (old layout) - aGc.DrawText( nStr, iTextPos ); - } - else - { - // Use text rect - ASSERT( iTextOffset> 0 ); - aGc.DrawText( nStr, iTextRect, iTextOffset ); - } - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::ConstructL( TResourceReader &aReader, - TUint32 aBgColor, TUint aTextColor ) - { - CScreensaverIndicator::ConstructL( aReader, aBgColor, aTextColor ); - - iIconAlign = ( TScreensaverAlignment )aReader.ReadInt32(); - iFont = AknLayoutUtils::FontFromId( aReader.ReadInt32() ); - if ( !iFont ) - { - iFont = LatinPlain12(); - } - - // create icon - InitializeIconL( aReader ); - - // Set desired size for SVG graphics (height from LAF, width 3 x height) - InitializeLayout(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetupDrawingParameters -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetupDrawingParameters( - const TPoint& aCorner, const TRect& aParentRect ) - { - iVisible = EFalse; - - TBuf<10> nStr; - - if ( !iIcon ) - { - return; - } - - nStr.AppendNum( iValue ); - - TSize bmsize = iIcon->Bitmap()->SizeInPixels(); - TInt textWidth = iFont ? iFont->TextWidthInPixels( nStr ) + 1 : nStr.Length() - * 11; // Should be enough for APAC too - - iTopLeft.iX = aCorner.iX; - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTopLeft.iX -= bmsize.iWidth + textWidth; - } - // Center bitmap in y direction. - iTopLeft.iY = aCorner.iY + ( aParentRect.Size().iHeight / 2 ) - ( bmsize.iHeight / 2 ) - 2; - - // Calculate text corner - if ( iIconAlign == ESsAlignLeft ) - { - iTextPos.iX = iTopLeft.iX + bmsize.iWidth + 1; - } - else - { - iTextPos.iX = iTopLeft.iX; - } - - iTextPos.iY = aCorner.iY + iRect.Size().iHeight / 2 + 4; - - iRect = TRect( 0, 0, bmsize.iWidth + textWidth, aParentRect.Size().iHeight ); - - // Make sure text rect is not used - iTextRect.SetRect( 0, 0, 0, 0 ); - - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::CheckVisibilityConditions -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicatorNumberAndIcon::CheckVisibilityConditions() const - { - if ( ( iIcon ) && ( iValue > 0 ) ) - { - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::Payload -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::Payload( TIndicatorPayload& aPayload ) const - { - aPayload.iType = EPayloadTypeInteger; - aPayload.iInteger = iValue; - aPayload.iText = KNullDesC; - aPayload.iIsDisplayed = Visible(); - aPayload.iIcon = iIcon; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetPayload -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetPayload( - const TIndicatorPayload& aPayload ) - { - if ( aPayload.iType != EPayloadTypeInteger ) - { - return; - } - - iValue = aPayload.iInteger; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetIconLayout -// Sets icon position and size -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetIconLayout( TAknLayoutRect& aLayout, - TInt aX ) - { - if ( !iIcon ) - { - ASSERT( iIcon ); - return; - } - - // Resize icon according to layout - TInt height = aLayout.Rect().Height(); - TSize iconSize(KMaxTInt, height); - AknIconUtils::SetSize( iIcon->Bitmap(), iconSize, - EAspectRatioPreservedAndUnusedSpaceRemoved ); - - // Overrides vertical icon position set earlier - iTopLeft.iY = aLayout.Rect().iTl.iY; - - // Set initial rect - iRect = TRect( 0, 0, PreferredWidth(), height ); - - // Set X-position - SetXPos( aX ); - -#ifdef SS_LAYOUTTRACE - SCRLOGGER_WRITEF( _L("SCR: NumberAndIcon indicator (%d):"), iId ); - SCRLOGGER_WRITEF( _L("SCR: Icon rect: (%d,%d,%d,%d)"), - iRect.iTl.iX, - iRect.iTl.iY, - iRect.iBr.iX, - iRect.iBr.iY ); - TSize size = iIcon->Bitmap()->SizeInPixels(); - SCRLOGGER_WRITEF( _L("SCR: Icon size: (%d,%d)"), size.iWidth, size.iHeight ); - SCRLOGGER_WRITEF( _L("SCR: Icon pos: (%d,%d)"), iTopLeft.iX, iTopLeft.iY ); -#endif - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetTextLayout -// Sets text position and font -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetTextLayout( TAknLayoutText& aLayout, - TInt /* aX */ ) - { - // Font from layout - iFont = aLayout.Font(); - // Layout MUST have a font - ASSERT( iFont != NULL ); - - // Vertical dimension of text rect from layout - // (x-dims will be set separately) - iTextRect = aLayout.TextRect(); - - // Calculate text offset from rect top - const CAknLayoutFont* layoutFont = - CAknLayoutFont::AsCAknLayoutFontOrNull( iFont ); - - if ( layoutFont ) - { - iTextOffset = layoutFont->TextPaneTopToBaseline(); - } - else - { - iTextOffset = iFont->AscentInPixels(); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::PreferredWidth -// Return width where the whole indicator can be drawn -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorNumberAndIcon::PreferredWidth() - { - // Preferred width = icon width + text width + a little gap in between - TBuf<10> nStr; - nStr.AppendNum( iValue ); - - TInt width = iFont ? iFont->TextWidthInPixels( nStr ) : nStr.Length() * 11; // Should be enough for APAC too - - // Add icon width - width += MinimumWidth(); - - // Add a little gap between text and icon - return width + 1; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::MinimumWidth -// Get minimum width -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorNumberAndIcon::MinimumWidth() - { - // Minimum width is icon width - return ( iIcon ? ( iIcon->Bitmap()->SizeInPixels()).iWidth : 0 ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetXPos -// Sets the x-position for the indicator -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetXPos( TInt aX ) - { - iVisible = EFalse; - - if ( !iIcon ) - { - return; - } - - TBuf<10> nStr; - nStr.AppendNum( iValue ); - - TSize bmsize = iIcon->Bitmap()->SizeInPixels(); - TInt textWidth = iFont ? iFont->TextWidthInPixels( nStr ) + 1 : nStr.Length() - * 11; // Should be enough for APAC too - - iTopLeft.iX = aX; - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTopLeft.iX -= bmsize.iWidth + textWidth; - } - - // Calculate text corner - if ( iIconAlign == ESsAlignLeft ) - { - iTextRect.iTl.iX = iTopLeft.iX + bmsize.iWidth; - } - else - { - iTextRect.iTl.iX = iTopLeft.iX; - } - - iTextRect.SetWidth( textWidth ); - - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::InitializeLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::InitializeLayout() - { - // Set desired size for SVG graphics (height from LAF, width 3 x height) - TAknLayoutRect screenLayout; - screenLayout.LayoutRect( TRect(0, 0, 0, 0), AknLayout::screen() ); - TRect screenRect = screenLayout.Rect(); - TAknLayoutRect powerSavePaneLayout; - powerSavePaneLayout.LayoutRect( screenRect, - AknLayout::Power_save_pane_descendants_Line_1() ); - TRect powerSavePaneRect = powerSavePaneLayout.Rect(); - TAknLayoutRect rect; - rect.LayoutRect( powerSavePaneRect, - AknLayout::Power_save_pane_descendants_Line_3() ); - TInt height = rect.Rect().Height(); - TSize iconSize( 2 * height, height ); - AknIconUtils::SetSize( iIcon->Bitmap(), iconSize ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::InitializeIconL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::InitializeIconL( TResourceReader &aReader ) - { - // Icon & mask ids - TInt id = aReader.ReadInt32(); - TInt maskid = aReader.ReadInt32(); - - // Icon & mask skin identifiers - TInt skinid = aReader.ReadInt32(); - TInt skinmask = aReader.ReadInt32(); - - iIcon = CGulIcon::NewL(); - - CFbsBitmap* bmp= NULL; - CFbsBitmap* mask= NULL; - - // Load skinned bitmap - AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(), - MakeSkinItemId( skinid ), - KAknsIIDNone, // Lie so that we get default color, not skin color - 0, // No color group - bmp, mask, AknIconUtils::AvkonIconFileName(), id, maskid, - iTextColor ); - - CleanupStack::Pop( 2 ); - - // Save the icon - iIcon->SetBitmap( bmp ); - iIcon->SetMask( mask ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::DrawIcon -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::DrawIcon( CWindowGc& aGc ) const - { - if ( iIconAlign == ESsAlignLeft ) - { - if ( !iIcon->Mask() ) - { - aGc.BitBlt( iTopLeft, iIcon->Bitmap(), iRect ); - } - else - { - aGc.BitBltMasked( iTopLeft, iIcon->Bitmap(), iRect, - iIcon->Mask(), ETrue ); - } - } - else - { - // Calculate icon left point (right edge - icon width) - TPoint pTmp = TPoint( iTopLeft.iX + iRect.Size().iWidth - iIcon->Bitmap()->SizeInPixels().iWidth, iTopLeft.iY ); - - if ( !iIcon->Mask() ) - { - aGc.BitBlt( pTmp, iIcon->Bitmap(), iRect ); - } - else - { - aGc.BitBltMasked( pTmp, iIcon->Bitmap(), iRect, iIcon->Mask(), - ETrue ); - } - } - } - -// End of file