diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/src/HuiFxFilterLayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxFilterLayer.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 2008 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: +* +*/ + + + +#include "HuiFxFilterLayer.h" +#include "HuiFxFilter.h" + +CHuiFxFilterLayer* CHuiFxFilterLayer::NewL(CHuiFxFilter* aFilter) + { + CHuiFxFilterLayer* e = new (ELeave) CHuiFxFilterLayer(); + CleanupStack::PushL(e); + e->ConstructL(aFilter); + CleanupStack::Pop(e); + return e; + } + +CHuiFxFilterLayer::CHuiFxFilterLayer() + { +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxFilterLayer::CHuiFxFilterLayer - 0x%x "), this); +#endif + } + +CHuiFxFilterLayer::~CHuiFxFilterLayer() + { + delete iFilter; + iFilter = NULL; +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxFilterLayer::~CHuiFxFilterLayer - 0x%x "), this); +#endif + } +EXPORT_C CHuiFxFilterLayer *CHuiFxFilterLayer::CloneL() const +{ + CHuiFxFilter *filter = iFilter->CloneL(); + CHuiFxFilterLayer *layer = CHuiFxFilterLayer::NewL(filter); + layer->CHuiFxLayer::CopyFromL(this); + return layer; +} +EXPORT_C void CHuiFxFilterLayer::SetExtRect( TRect * /*aExtRect*/ ) + { + // iFilter does not need these + } +EXPORT_C void CHuiFxFilterLayer::SetVisual( CHuiVisual * /*aVisual*/ ) + { + // iFilter does not need these + } +EXPORT_C void CHuiFxFilterLayer::SetVisual( MHuiEffectable *aVisual ) + { + // iFilter does not need these + } + + +EXPORT_C void CHuiFxFilterLayer::ConstructL(CHuiFxFilter* aFilter) + { + CHuiFxLayer::ConstructL( ELayerTypeFilter ); + iFilter = aFilter; + } + +EXPORT_C TBool CHuiFxFilterLayer::PrepareDrawL(CHuiFxEngine& aEngine) + { + return iFilter->PrepareDrawL(aEngine); + } + + +EXPORT_C TBool CHuiFxFilterLayer::Changed() const + { +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxFilterLayer::Changed - 0x%x %d"), this,iFilter->Changed() ); +#endif + return iFilter->Changed(); + } + +EXPORT_C void CHuiFxFilterLayer::AdvanceTime(TReal32 aElapsedTime) + { + iFilter->AdvanceTime(aElapsedTime); + } + +EXPORT_C void CHuiFxFilterLayer::Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource) + { +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxFilterLayer::Draw - 0x%x "), this); +#endif +// TODO: fast path + CHuiFxRenderbuffer* backBuffer = aEngine.AcquireRenderbuffer(TargetRect().Size()); + + if (!backBuffer) + { + return; + } + + // Render the filter + TRect targetRect(TPoint(0, 0), TargetRect().Size()); + TInt alpha = 0xff; // TODO + + iFilter->Draw(aEngine, aGc, *backBuffer, aSource, targetRect, SourceRect()); + + // Composite the result + TRect compositionSourceRect(targetRect); + TRect compositionTargetRect(TargetRect()); + + compositionTargetRect.Move(-aTarget.Position()); + + aEngine.Composite(aTarget, *backBuffer, compositionTargetRect, compositionSourceRect, BlendingMode(), alpha); + aEngine.ReleaseRenderbuffer(backBuffer); + } + +EXPORT_C TBool CHuiFxFilterLayer::Margin(TMargins &m) + { + TMargins s = iFilter->Margin2(); + m.iTop = s.iTop; + m.iBottom = s.iBottom; + m.iLeft = s.iLeft; + m.iRight = s.iRight; + return ETrue; + } + +EXPORT_C CHuiFxFilter& CHuiFxFilterLayer::Filter() const + { + return *iFilter; + } + +TBool CHuiFxFilterLayer::IsFiltered() const + { + return ETrue; + }