uiacceltk/hitchcock/coretoolkit/src/huiviewportlayout.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/src/huiviewportlayout.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,142 @@
+/*
+* 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:   Viewport visual.
+*
+*/
+
+
+
+#include "uiacceltk/huiviewportlayout.h"  // Class definition
+
+#include <uiacceltk/HuiControl.h>
+#include <uiacceltk/HuiUtil.h>
+
+
+EXPORT_C CHuiViewportLayout* CHuiViewportLayout::AddNewL(CHuiControl& aOwnerControl, CHuiLayout* aParentLayout)
+    {
+    CHuiViewportLayout* layout = new (ELeave) CHuiViewportLayout(aOwnerControl);
+    CleanupStack::PushL(layout);
+    layout->ConstructL();    
+    aOwnerControl.AppendL(layout, aParentLayout);
+    CleanupStack::Pop(layout);           
+    return layout;    
+    }
+
+
+CHuiViewportLayout::CHuiViewportLayout(MHuiVisualOwner& aOwner)
+        : CHuiLayout(aOwner)
+    {
+    iVirtualSize = THuiRealSize(1.0f, 1.0f);
+    iViewportSize = THuiRealSize(1.0f, 1.0f);  
+    iViewportPos = THuiRealPoint(0.0f, 0.0f);
+      
+    iWrappingFlags = 0;
+    }
+
+
+void CHuiViewportLayout::ConstructL()
+    {    
+    CHuiLayout::ConstructL();
+    SetClipping(ETrue);    
+    }
+    
+CHuiViewportLayout::~CHuiViewportLayout()
+    {    
+    }
+
+EXPORT_C void CHuiViewportLayout::SetVirtualSize(const THuiRealSize& aSize, TInt aTransitionTime)
+    {
+    if ( !HuiUtil::RealCompare( iVirtualSize.iHeight, aSize.iHeight ) || 
+         !HuiUtil::RealCompare( iVirtualSize.iWidth, aSize.iWidth ) )
+        {   
+        iVirtualSize = aSize;
+
+        UpdateChildrenLayout(aTransitionTime);    
+            
+        SetChanged();
+        }
+    }
+
+    
+EXPORT_C void CHuiViewportLayout::SetViewportSize(const THuiRealSize& aSize, TInt aTransitionTime)
+    {
+    // Divide by zero will be caught later.
+    if ( !HuiUtil::RealCompare( iViewportSize.iHeight, aSize.iHeight ) || 
+         !HuiUtil::RealCompare( iViewportSize.iWidth, aSize.iWidth ) )
+        { 
+        iViewportSize = aSize;
+            
+        UpdateChildrenLayout(aTransitionTime);            
+            
+        SetChanged();   
+        }
+    }
+
+EXPORT_C void CHuiViewportLayout::SetViewportPos(const THuiRealPoint& aPos, TInt aTransitionTime)
+    {
+     if ( !HuiUtil::RealCompare( iViewportPos.iY, aPos.iY ) || 
+         !HuiUtil::RealCompare( iViewportPos.iX, aPos.iX ) )
+        { 
+        iViewportPos = aPos;
+        
+        UpdateChildrenLayout(aTransitionTime);        
+        
+        SetChanged();
+        }
+    }
+
+void CHuiViewportLayout::SetSize(const THuiRealSize& aSize, TInt aTransitionTime)
+    {
+    CHuiLayout::SetSize(aSize, aTransitionTime);
+    UpdateChildrenLayout(aTransitionTime);    
+    }
+    
+
+TBool CHuiViewportLayout::ChildSize(TInt /*aOrdinal*/, TSize& aSize)
+    {
+    THuiRealSize mysize = Size().Target().AsSize();
+    
+    if ((iViewportSize.iWidth == 0.0) || (iViewportSize.iHeight == 0.0))
+        {
+        // Could not obtain new size because of divide by zero error.
+        return EFalse;            
+        }
+    
+    aSize.iWidth = HUI_ROUND_FLOAT_TO_INT((iVirtualSize.iWidth / iViewportSize.iWidth) * mysize.iWidth);
+    aSize.iHeight = HUI_ROUND_FLOAT_TO_INT((iVirtualSize.iHeight / iViewportSize.iHeight) * mysize.iHeight);
+
+    return ETrue;
+    }
+
+
+TBool CHuiViewportLayout::ChildPos(TInt /*aOrdinal*/, TPoint& aPos)
+    {
+    THuiRealSize mysize = Size().RealTarget().AsSize();
+
+    if ((iViewportSize.iWidth == 0.0) || (iViewportSize.iHeight == 0.0))
+        {
+        // Could not obtain new size because of divide by zero error.
+        return EFalse;            
+        }
+         
+    aPos.iX = HUI_ROUND_FLOAT_TO_INT( -iViewportPos.iX * mysize.iWidth / iViewportSize.iWidth );
+    aPos.iY = HUI_ROUND_FLOAT_TO_INT( -iViewportPos.iY * mysize.iHeight / iViewportSize.iHeight );
+    
+    return ETrue;
+    }
+
+EXPORT_C TInt CHuiViewportLayout::ChildRect(TInt /*aOrdinal*/, THuiRealRect& /*aPos*/)
+    {
+    return THuiLayoutChildRectNotImplemented;
+    }