diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/src/ncscustomdraw.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/src/ncscustomdraw.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,219 @@ +/* +* Copyright (c) 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: Custom draw component for message editor. +* +*/ + + +#include "emailtrace.h" +#include +#include +#include + +#include "ncscustomdraw.h" +#include "ncseditor.h" + +// ========================= MEMBER FUNCTIONS ================================== + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::CNcsCustomDraw +// --------------------------------------------------------------------------- +// +CNcsCustomDraw::CNcsCustomDraw( + const MLafEnv& aEnv, + const CCoeControl& aControl, + CLafEdwinCustomDrawBase* aCustomDrawer, + CNcsEditor* aEditor, + TBool aHeaderField ) : + CLafEdwinCustomDrawBase( aEnv, aControl ), iCustomDrawer( aCustomDrawer ), + iEditor( aEditor ), iHeaderField( aHeaderField ) + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::~CNcsCustomDraw +// --------------------------------------------------------------------------- +// +CNcsCustomDraw::~CNcsCustomDraw() + { + FUNC_LOG; + delete iCustomDrawer; + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::UpdateColors +// --------------------------------------------------------------------------- +// +void CNcsCustomDraw::UpdateColors() + { + FUNC_LOG; + iColors = 0; + + TInt err = KErrNotFound; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + if ( iHeaderField ) + { + err = AknsUtils::GetCachedColor( + skin, + iBackgroundColor, + KAknsIIDFsOtherColors, + EAknsCIFsOtherColorsCG12 ); + + if ( err == KErrNone ) + { + SetHasColor( EColorBackground ); + } + } + + err = AknsUtils::GetCachedColor( + skin, + iSelectionTextColor, + KAknsIIDFsTextColors, + EAknsCIFsTextColorsCG5 ); + + if ( err == KErrNone ) + { + SetHasColor( EColorSelectionText ); + } + + err = AknsUtils::GetCachedColor( + skin, + iSelectionBackgroundColor, + KAknsIIDFsHighlightColors, + EAknsCIFsHighlightColorsCG2 ); + + if ( err == KErrNone ) + { + SetHasColor( EColorSelectionBackground ); + } + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::DrawBackground +// --------------------------------------------------------------------------- +// +void CNcsCustomDraw::DrawBackground( + const TParam& aParam, + const TRgb& aBackground, + TRect& aDrawn ) const + { + FUNC_LOG; + // Use custom drawing for fields with background color. Othwerwise use + // the base implementation which draws white background. + if ( HasColor( EColorBackground ) ) + { + iCustomDrawer->DrawBackground( aParam, iBackgroundColor, aDrawn ); + } + else + { + CLafEdwinCustomDrawBase::DrawBackground( aParam, aBackground, aDrawn ); + } + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::DrawLineGraphics +// --------------------------------------------------------------------------- +// +void CNcsCustomDraw::DrawLineGraphics( + const TParam& aParam, + const TLineInfo& aLineInfo ) const + { + FUNC_LOG; + iCustomDrawer->DrawLineGraphics( aParam, aLineInfo ); + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::DrawText +// --------------------------------------------------------------------------- +// +void CNcsCustomDraw::DrawText( + const TParam& aParam, + const TLineInfo& aLineInfo, + const TCharFormat& aFormat, + const TDesC& aText, + const TPoint& aTextOrigin, + TInt aExtraPixels ) const + { + FUNC_LOG; + iCustomDrawer->DrawText( + aParam, + aLineInfo, + aFormat, + aText, + aTextOrigin, + aExtraPixels ); + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::SystemColor +// --------------------------------------------------------------------------- +// +TRgb CNcsCustomDraw::SystemColor( TUint aColorIndex, TRgb aDefaultColor ) const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TInt err = KErrNotFound; + TRgb ret = aDefaultColor; + + if ( aColorIndex == TLogicalRgb::ESystemSelectionForegroundIndex ) + { + if ( HasColor( EColorSelectionText ) ) + { + err = KErrNone; + ret = iSelectionTextColor; + } + } + else if ( aColorIndex == TLogicalRgb::ESystemSelectionBackgroundIndex ) + { + if ( HasColor( EColorSelectionBackground ) ) + { + err = KErrNone; + ret = iSelectionBackgroundColor; + } + } + + if ( err != KErrNone ) + { + return iCustomDrawer->SystemColor( aColorIndex, aDefaultColor ); + } + else + { + return ret; + } + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::SetHasColor +// --------------------------------------------------------------------------- +// +void CNcsCustomDraw::SetHasColor( TColors aColor ) + { + FUNC_LOG; + iColors |= ( TInt )aColor; + } + +// --------------------------------------------------------------------------- +// CNcsCustomDraw::HasColor +// --------------------------------------------------------------------------- +// +TBool CNcsCustomDraw::HasColor( TColors aColor ) const + { + FUNC_LOG; + TInt color = ( TInt )aColor; + return iColors & color; + } +