uiacceltk/hitchcock/coretoolkit/src/HuiFxFilterLayer.cpp
changeset 0 15bf7259bb7c
child 11 46927d61fef3
--- /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;
+    }