--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfcommonvisualattributesetter.cpp Thu Dec 17 08:56:02 2009 +0200
@@ -0,0 +1,843 @@
+/*
+* 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: attributesetter for common visual attributes
+*
+*/
+
+
+#include "alf/alfattribute.h"
+#include "alf/alfcommonvisualattributesetter.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfvisual.h>
+#include <alf/alfattributeexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfvisualexception.h>
+#include "alf/alfattributecontainer.h"
+#include <libc/string.h>
+#include <osn/ustring.h>
+#include "alf/attrproperty.h"
+#include <alf/alfenv.h>
+
+using namespace osncore;
+
+using namespace duiuimodel::commonattributes;
+using namespace duiuimodel::commonattributevalues;
+using namespace duiuimodel::commonvisualattributes;
+using namespace duiuimodel::layoutattributes;
+using namespace duiuimodel::rect;
+using namespace duiuimodel::padding;
+using namespace duiuimodel::tactileattributes;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// gets the data from map pointed by attribute's field name.
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* getData(const AlfAttribute& aAttr, IAlfMap* aData)
+ {
+ IAlfVariantType* data = 0;
+ const char* dataField = aAttr.getDataField();
+ if (dataField)
+ {
+ data = aData->item(UString(dataField));
+ }
+ return data;
+ }
+
+// ---------------------------------------------------------------------------
+// gets the time from attribute safely.
+// ---------------------------------------------------------------------------
+//
+int getTime(const AlfAttribute& aAttr, bool aImmediate = false)
+ {
+ int time = 0;
+ if (!aImmediate)
+ {
+ time = aAttr.getTime();
+ }
+
+ return time;
+ }
+
+// ---------------------------------------------------------------------------
+// sets source values from aAttr to aPoint.
+// ---------------------------------------------------------------------------
+//
+void setSourceValue(TAlfTimedValue& aValue, const AlfAttribute& aAttr)
+ {
+ if (aAttr.getSourceValueCount() > 0)
+ {
+ aValue.SetValueNow(aAttr.getSourceValue()->realValue());
+ }
+ }
+// ---------------------------------------------------------------------------
+// sets source values to aPoint.
+// ---------------------------------------------------------------------------
+//
+void SetSourceValues(TAlfTimedPoint& aPoint, const AlfAttribute& aAttrX,
+ const AlfAttribute& aAttrY)
+ {
+ if (aAttrX.getSourceValueCount() > 0)
+ {
+ aPoint.iX.SetValueNow(aAttrX.getSourceValue()->realValue());
+ }
+ if (aAttrY.getSourceValueCount() > 0)
+ {
+ aPoint.iY.SetValueNow(aAttrY.getSourceValue()->realValue());
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// sets source values to aRect.
+// ---------------------------------------------------------------------------
+//
+void SetSourceRect(TAlfRealRect& aRect, const AlfAttribute& aAttrTopX,
+ const AlfAttribute& aAttrTopY,
+ const AlfAttribute& aAttrBottomRightX,
+ const AlfAttribute& aAttrBottomRightY)
+ {
+ if (aAttrTopX.getSourceValueCount() > 0)
+ {
+ aRect.iTl.iX = aAttrTopX.getSourceValue()->realValue();
+ }
+ if (aAttrTopY.getSourceValueCount() > 0)
+ {
+ aRect.iTl.iY = aAttrTopY.getSourceValue()->realValue();
+ }
+ if (aAttrBottomRightX.getSourceValueCount() > 0)
+ {
+ aRect.iBr.iX = aAttrBottomRightX.getSourceValue()->realValue();
+ }
+ if (aAttrBottomRightY.getSourceValueCount() > 0)
+ {
+ aRect.iBr.iY = aAttrBottomRightY.getSourceValue()->realValue();
+ }
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonVisualAttributeSetter::AlfCommonVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonVisualAttributeSetter::~AlfCommonVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// creates one command.
+// deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfCommonVisualAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ )
+ {
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// creates and sends one or more commands.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCommonVisualAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ unsigned int attrCount = aContainer->attributeCount();
+
+ for ( int i = 0; i < attrCount; ++i )
+ {
+ AlfAttribute& attr = aContainer->getAttribute(i);
+ sendCommandsForAttribute(aVisual, *aContainer, attr, aRefVisual);
+ }
+
+ // Call the base class implementation also.
+ // It goes through the same loop again and checks if there are attributes
+ // that it handles.
+ AlfCommonAttributeSetter::createAndSendCommands(
+ aVisual,
+ aContainer,
+ aRefVisual );
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an value of a static attribute to target visual immediately
+// without a transition.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleStaticAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ const char* attrName = aAttr.name();
+ if ( !strcmp(attrName, KParentVisual))
+ {
+ }
+ else if (!strcmp(attrName, KMaxHeight)||!strcmp(attrName, KMaxWidth))
+ {
+ setMaxSize(aVisual,aContainer,NULL);
+ }
+ else if (!strcmp(attrName, KMinHeight)||!strcmp(attrName, KMinWidth))
+ {
+ setMinSize(aVisual,aContainer,NULL);
+ }
+ else if (!strcmp(attrName, KPaddingTop)||!strcmp(attrName, KPaddingBottom)
+ ||!strcmp(attrName, KPaddingLeft)||!strcmp(attrName, KPaddingRight))
+ {
+ setPadding(aVisual,aContainer,NULL);
+
+ }
+ else if (!strcmp(attrName, KSetFlags))
+ {
+ int val = aAttr.intValue();
+ aVisual.SetFlags(val);
+ }
+ else if (!strcmp(attrName, KClearFlags))
+ {
+ int val = aAttr.intValue();
+ aVisual.ClearFlags(val);
+ }
+ else if (!strcmp(attrName, KEventInput) || !strcmp(attrName, KFeedbackType))
+ {
+ setTactileFeedback(aVisual,aContainer,NULL);
+ }
+ // turnangle and secondaryalpha are implemented by derived attributesetters
+ else
+ {
+ //check, if dynamic attribute, if so, set attributes immediately.
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer, true))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleStaticAttribute(aVisual,
+ aAttr, aContainer);
+ }
+ }
+ }
+
+void AlfCommonVisualAttributeSetter::setTactileFeedback(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ TRAPD( error, aVisual.SetTactileFeedbackL(
+ aContainer.getAttributeByName( KEventInput ).intValue(),
+ aContainer.getAttributeByName( KFeedbackType ).intValue() ) );
+
+ if(error != KErrNone)
+ {
+ ALF_THROW(AlfVisualException,EInvalidAttribute,"AlfCommonVisualAttributeSetter")
+ }
+ try
+ {
+ aContainer.getAttributeByName( duiuimodel::tactileattributes::KEventInput ).setDirty( false );
+ aContainer.getAttributeByName( duiuimodel::tactileattributes::KFeedbackType ).setDirty( false );
+ }
+
+ catch( AlfDataException& exception )
+ {
+ //exception needed here?
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an dynamic attribute value in the target visual
+// using transitions defined in attributes
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleDynamicAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleDynamicAttribute(aVisual, aAttr,
+ aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an value for static attribute in the target visual immediately
+// without a transition using data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+
+ if (aData)
+ {
+ const char* attrName = aAttr.name();
+
+ if (!strcmp(attrName, KMaxHeight))
+ {
+ // If maxheight exists, maxwidth must exists also.
+ const IAlfVariantType* maxHeight = getData(aAttr, aData);
+ const IAlfVariantType* maxWidth = getData(
+ aContainer.getAttributeByName(KMaxWidth), aData);
+
+ if (maxHeight && maxHeight->type() == IAlfVariantType::EReal &&
+ maxWidth && maxWidth->type() == IAlfVariantType::EReal)
+ {
+ TAlfRealSize size( maxWidth->real(), maxHeight->real() );
+ aVisual.SetMaxSize(size);
+ }
+ }
+ else if (!strcmp(attrName, KMinHeight))
+ {
+ //If minheight exists, minwidth must exists also.
+ const IAlfVariantType* minHeight = getData(aAttr, aData);
+ const IAlfVariantType* minWidth = getData(
+ aContainer.getAttributeByName(KMinWidth), aData);
+
+ if (minHeight && minHeight->type() == IAlfVariantType::EReal &&
+ minWidth && minWidth->type() == IAlfVariantType::EReal)
+ {
+ TAlfRealSize size( minWidth->real(), minHeight->real() );
+ aVisual.SetMinSize(size);
+ }
+ }
+ else if (!strcmp(attrName, KPaddingTop))
+ {
+ const IAlfVariantType* top = getData(aAttr, aData);
+ const IAlfVariantType* right = getData(
+ aContainer.getAttributeByName(KPaddingRight), aData);
+ const IAlfVariantType* bottom = getData(
+ aContainer.getAttributeByName(KPaddingBottom), aData);
+ const IAlfVariantType* left = getData(
+ aContainer.getAttributeByName(KPaddingLeft), aData);
+
+ if (top && top->type() == IAlfVariantType::EReal &&
+ right && right->type() == IAlfVariantType::EReal &&
+ bottom && bottom->type() == IAlfVariantType::EReal &&
+ left && left->type() == IAlfVariantType::EReal)
+ {
+ float l = left->real();
+ float r = right->real();
+ float t = top->real();
+ float b = bottom->real();
+ TAlfBoxMetric metric(l, r, t, b);
+ aVisual.SetPadding(metric);
+ }
+ }
+ else if (!strcmp(attrName, KSetFlags))
+ {
+ const IAlfVariantType* flag = getData(aAttr, aData);
+ if (flag && flag->type() == IAlfVariantType::EInt)
+ {
+ int flagValue = flag->integer();
+ aVisual.SetFlags(flagValue);
+ }
+ }
+ else if (!strcmp(attrName, KClearFlags))
+ {
+ const IAlfVariantType* flag = getData(aAttr, aData);
+ if (flag && flag->type() == IAlfVariantType::EInt)
+ {
+ int flagValue = flag->integer();
+ aVisual.ClearFlags(flagValue);
+ }
+ }
+ // turnangle and secondaryalpha are implemented by derived attributesetters
+ else if (strcmp(attrName, KMaxWidth) && //these are already
+ strcmp(attrName, KMinWidth) && //handled above
+ strcmp(attrName, KPaddingRight) &&
+ strcmp(attrName, KPaddingBottom) &&
+ strcmp(attrName, KPaddingLeft))
+ {
+ //check, if dynamic attribute, if so, set attributes immediately.
+ //If not, the function will call baseclass SetAttributeValue.
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData, true))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleStaticDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From AlfCommonAttributeSetter
+//
+// Sets a value for dynamic data attribute value in the target visual
+// using transitions and data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an dynamic attribute value in the target visual
+// using transitions defined in attributes
+// Handles only attributes, belonging to this attributesetter, not bases.
+// ---------------------------------------------------------------------------
+//
+bool AlfCommonVisualAttributeSetter::doHandleDynamicAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, bool aImmediate)
+ {
+ const char* attrName = aAttr.name();
+ bool handled = true;
+
+ if ( !strcmp( attrName, KOpacity ) )
+ {
+ TAlfTimedValue v;
+ setSourceValue(v, aAttr);
+
+ float targetValue(aAttr.realValue());
+ int time = getTime(aAttr, aImmediate);
+ v.SetTarget(targetValue, time);
+ v.SetStyle(aAttr.getInterpolationStyle());
+ aVisual.SetOpacity(v);
+ }
+
+ else if (!strcmp( attrName, KPositionX)||!strcmp( attrName, KPositionY)) ////also handles: KPositionY
+ {
+ setPos(aVisual,aContainer,NULL,aImmediate);
+ }
+
+ else if (!strcmp( attrName, KWidth)||!strcmp( attrName, KHeight)) //also handles: KHeight
+ {
+ setSize(aVisual,aContainer,NULL,aImmediate);
+ }
+ else if (!strcmp(attrName, KTopLeftX)||!strcmp(attrName, KTopLeftY)
+ ||!strcmp(attrName, KBottomRightX)||!strcmp(attrName, KBottomRightY))
+ {
+ setRect(aVisual,aContainer,NULL,aImmediate);
+ }
+ else
+ {
+ handled = false;
+ }
+
+ return handled;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an value for dynamic attribute value in the target visual
+// using transitions and data in map.
+// ---------------------------------------------------------------------------
+//
+bool AlfCommonVisualAttributeSetter::doHandleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData, bool aImmediate )
+ {
+ bool handled = true;
+ if (aData)
+ {
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp( attrName, KOpacity ) )
+ {
+ const IAlfVariantType* data = getData(aAttr, aData);
+ if (data && data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue v;
+ setSourceValue(v, aAttr);
+
+ float targetValue(data->real());
+ int time = getTime(aAttr, aImmediate);
+ v.SetTarget(targetValue, time);
+ v.SetStyle(aAttr.getInterpolationStyle());
+ aVisual.SetOpacity(v);
+ }
+ }
+ else if (!strcmp( attrName, KPositionX)) //also handles: KPositionY
+ {
+ //If positionx exists, positiony must exists also
+ const AlfAttribute& attrX = aAttr;
+ const AlfAttribute& attrY = aContainer.getAttributeByName(KPositionY);
+
+ const IAlfVariantType* posX = getData(attrX, aData);
+ const IAlfVariantType* posY = getData(attrY, aData);
+
+ if (posX && posX->type() == IAlfVariantType::EReal &&
+ posY && posY->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedPoint pos;
+ SetSourceValues(pos, attrX, attrY);
+
+ pos.iX.SetStyle(attrX.getInterpolationStyle());
+ pos.iX.SetTarget(posX->real(), getTime(attrX, aImmediate));
+ pos.iY.SetStyle(attrY.getInterpolationStyle());
+ pos.iY.SetTarget(posY->real(), getTime(attrY, aImmediate));
+ aVisual.SetPos(pos);
+ }
+ }
+ else if (!strcmp( attrName, KWidth)) //also handles: KHeight
+ {
+ const AlfAttribute& attrWidth = aAttr;
+ const AlfAttribute& attrHeight =
+ aContainer.getAttributeByName(KHeight);
+
+ const IAlfVariantType* width = getData(attrWidth, aData);
+ const IAlfVariantType* height = getData(attrHeight, aData);
+
+ if (width && width->type() == IAlfVariantType::EReal &&
+ height && height->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedPoint size;
+ SetSourceValues(size, attrWidth, attrHeight);
+
+ size.iX.SetStyle(attrWidth.getInterpolationStyle());
+ size.iX.SetTarget(width->real(),
+ getTime(attrWidth, aImmediate));
+ size.iY.SetStyle(attrHeight.getInterpolationStyle());
+ size.iY.SetTarget(height->real(),
+ getTime(attrHeight, aImmediate));
+
+ aVisual.SetSize(size);
+ }
+ }
+ else if (!strcmp(attrName, KTopLeftX))
+ {
+ //If topleftx exists, topy, bottomx and bottomy must exists also
+ const AlfAttribute& attrTopX = aAttr;
+ const AlfAttribute& attrTopY =
+ aContainer.getAttributeByName(KTopLeftY);
+ const AlfAttribute& attrBottomRightX =
+ aContainer.getAttributeByName(KBottomRightX);
+ const AlfAttribute& attrBottomRightY =
+ aContainer.getAttributeByName(KBottomRightY);
+
+ const IAlfVariantType* topX = getData(attrTopX, aData);
+ const IAlfVariantType* topY = getData(attrTopY, aData);
+ const IAlfVariantType* bottomX = getData(attrBottomRightX, aData);
+ const IAlfVariantType* bottomY = getData(attrBottomRightY, aData);
+
+ if (topX && topX->type() == IAlfVariantType::EReal &&
+ topY && topY->type() == IAlfVariantType::EReal &&
+ bottomX && bottomX->type() == IAlfVariantType::EReal &&
+ bottomY && bottomY->type() == IAlfVariantType::EReal)
+ {
+ const TAlfRealPoint sTopLeft(aVisual.Pos().ValueNow());
+ TAlfRealPoint size(aVisual.Size().ValueNow());
+ TAlfRealRect sRect(sTopLeft, TAlfRealPoint(
+ sTopLeft.iX + size.iX, sTopLeft.iY + size.iY));
+
+ SetSourceRect(sRect, attrTopX, attrTopY, attrBottomRightX,
+ attrBottomRightY);
+
+ aVisual.SetRect(sRect, 0);
+
+ TAlfRealPoint topLeft(topX->real(), topY->real());
+ TAlfRealPoint bottomRight(bottomX->real(), bottomY->real());
+ TAlfRealRect realRect(topLeft, bottomRight);
+ aVisual.SetRect(realRect, getTime(aAttr, aImmediate));
+ }
+ }
+ else if (strcmp(attrName, KPositionY) && //these are already
+ strcmp(attrName, KHeight) && //handled above
+ strcmp(attrName, KTopLeftY) &&
+ strcmp(attrName, KBottomRightX) &&
+ strcmp(attrName, KBottomRightY))
+ {
+ handled = false;
+ }
+ }
+
+ return handled;
+ }
+
+// ---------------------------------------------------------------------------
+// Creates and returns one command
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::sendCommandsForAttribute(
+ CAlfVisual& aVisual, AlfAttributeContainer& aContainer,
+ AlfAttribute& aAttr, CAlfVisual* aRefVisual)
+ {
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp( attrName, KOpacity ) )
+ {
+ float value(aAttr.realValue());
+
+ if (aRefVisual)
+ {
+ // Add the opacity of the reference visual to the value
+ // of the opacity provided in the attribute
+ value += aRefVisual->Opacity().ValueNow();
+ }
+
+ int time = getTime(aAttr);
+
+ //setting interpolation style
+ TAlfInterpolationStyle style = aAttr.getInterpolationStyle();
+ TAlfTimedValue v;
+ v.SetStyle(style);
+ aVisual.SetOpacity(v);
+
+ //create command
+ TAlfValueCommand cmd(&aVisual, EAlfValueCommandVisualSetOpacity,
+ EAlfOpSet, value, time);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(cmd, aAttr.getDelay());
+ }
+
+ else if (!strcmp( attrName, KPositionX)) ////also handles: KPositionY
+ {
+ // Must contain both KPositionX and KPositionY
+ const AlfAttribute& posXattrib = aAttr;
+ const AlfAttribute& posYattrib =
+ aContainer.getAttributeByName(KPositionY);
+
+ TAlfRealPoint value(posXattrib.realValue(),
+ posYattrib.realValue());
+
+ if ( aRefVisual )
+ {
+ value += aRefVisual->Pos().ValueNow(); // Add the reference point
+ }
+
+ int time = getTime(aAttr);
+
+ //create command
+ TAlfPointCommand cmd(&aVisual, EAlfPointCommandVisualSetPos,
+ value, time);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(cmd, aAttr.getDelay());
+ }
+
+ else if (!strcmp( attrName, KWidth)) //also handles: KHeight
+ {
+ // Must contain both KWidth and KHeight
+ const AlfAttribute& widthAttrib = aAttr;
+ const AlfAttribute& heightAttrib =
+ aContainer.getAttributeByName(KHeight);
+
+ TAlfRealPoint value(widthAttrib.realValue(),
+ heightAttrib.realValue());
+
+ if (aRefVisual)
+ {
+ value += aRefVisual->Size().ValueNow(); // Add the reference point
+ }
+ int time = getTime(aAttr);
+
+ //create command
+ TAlfPointCommand cmd(&aVisual,
+ EAlfPointCommandVisualSetSize, value, time);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(cmd, aAttr.getDelay());
+ }
+ else if (!strcmp(attrName, KTopLeftX))
+ {
+ //If topleftx exists, topy, bottomx and bottomy must exists also
+ float topX = aAttr.realValue();
+ const AlfAttribute& attrTopY =
+ aContainer.getAttributeByName(KTopLeftY);
+ const AlfAttribute& attrBottomX =
+ aContainer.getAttributeByName(KBottomRightX);
+ const AlfAttribute& attrBottomY =
+ aContainer.getAttributeByName(KBottomRightY);
+ TAlfRealPoint topLeft(topX, attrTopY.realValue());
+ TAlfRealPoint size(attrBottomX.realValue() - topLeft.iX,
+ attrBottomY.realValue() - topLeft.iY);
+ if (aRefVisual)
+ {
+ // Add the reference point
+ topLeft += aRefVisual->Pos().ValueNow();
+ size += aRefVisual->Size().ValueNow();
+ }
+
+ int posTime = getTime(aAttr);
+ int sizeTime = getTime(attrBottomX);
+
+ //create position command
+ TAlfPointCommand posCmd(&aVisual, EAlfPointCommandVisualSetPos,
+ topLeft, posTime);
+ TAlfPointCommand sizeCmd(&aVisual, EAlfPointCommandVisualSetPos,
+ size, sizeTime);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(posCmd, aAttr.getDelay());
+ CAlfEnv::Static()->Send(sizeCmd, attrBottomX.getDelay());
+ }
+ }
+
+
+void AlfCommonVisualAttributeSetter::setPadding(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ //If padding-top exists, right, bottom and left must exists also
+
+ AlfAttribute& attrTop =
+ aContainer.getAttributeByName(KPaddingTop);
+ AlfAttribute& attrRight =
+ aContainer.getAttributeByName(KPaddingRight);
+ AlfAttribute& attrBottom =
+ aContainer.getAttributeByName(KPaddingBottom);
+ AlfAttribute& attrLeft =
+ aContainer.getAttributeByName(KPaddingLeft);
+
+ TAlfBoxMetric metric(
+ TAlfMetric(attrLeft.realValue(), attrLeft.unit()),
+ TAlfMetric(attrRight.realValue(), attrRight.unit()),
+ TAlfMetric(attrTop.realValue(), attrTop.unit()),
+ TAlfMetric(attrBottom.realValue(), attrBottom.unit()));
+
+ aVisual.SetPadding(metric);
+
+ attrTop.setDirty(false);
+ attrRight.setDirty(false);
+ attrBottom.setDirty(false);
+ attrLeft.setDirty(false);
+
+ }
+
+void AlfCommonVisualAttributeSetter::setMinSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ //If minheight exists, minwidth must exists also.
+ AlfAttribute& attrHt =
+ aContainer.getAttributeByName(KMinHeight);
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName(KMinWidth);
+ float height = attrHt.realValue();
+ float width = attrWidth.realValue();
+ TAlfRealSize size( width, height );
+
+ aVisual.SetMinSize(size);
+
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+ }
+
+void AlfCommonVisualAttributeSetter::setMaxSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ AlfAttribute& attrHt =
+ aContainer.getAttributeByName(KMaxHeight);
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName(KMaxWidth);
+ float height = attrHt.realValue();
+ float width = attrWidth.realValue();
+ TAlfRealSize size( width, height );
+
+ aVisual.SetMaxSize(size);
+
+
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+
+
+ }
+
+void AlfCommonVisualAttributeSetter::setSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/,bool aImmediate)
+ {
+ // Must contain both KWidth and KHeight
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName(KWidth);;
+ AlfAttribute& attrHeight =
+ aContainer.getAttributeByName(KHeight);
+
+ TAlfTimedPoint size(aVisual.Size());
+ SetSourceValues(size, attrWidth, attrHeight);
+
+ size.iX.SetStyle(attrWidth.getInterpolationStyle());
+ size.iX.SetTarget(attrWidth.realValue(),
+ getTime(attrWidth, aImmediate));
+ size.iY.SetStyle(attrHeight.getInterpolationStyle());
+ size.iY.SetTarget(attrHeight.realValue(),
+ getTime(attrHeight, aImmediate));
+
+
+ aVisual.SetSize(size);
+
+
+ attrWidth.setDirty(false);
+ attrHeight.setDirty(false);
+ }
+
+void AlfCommonVisualAttributeSetter::setPos(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/,bool aImmediate)
+ {
+ // Must contain both KPositionX and KPositionY
+ AlfAttribute& attrX = aContainer.getAttributeByName(KPositionX);
+ AlfAttribute& attrY = aContainer.getAttributeByName(KPositionY);
+
+ TAlfTimedPoint pos(aVisual.Pos());
+ SetSourceValues(pos, attrX, attrY);
+
+ pos.iX.SetStyle(attrX.getInterpolationStyle());
+ pos.iX.SetTarget(attrX.realValue(), getTime(attrX, aImmediate));
+ pos.iY.SetStyle(attrY.getInterpolationStyle());
+ pos.iY.SetTarget(attrY.realValue(), getTime(attrY, aImmediate));
+
+ aVisual.SetPos(pos);
+
+
+ attrX.setDirty(false);
+ attrY.setDirty(false);
+ }
+
+void AlfCommonVisualAttributeSetter::setRect(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/,bool aImmediate)
+ {
+ //If topleftx exists, topy, bottomx and bottomy must exists also
+ AlfAttribute& attrTopX =
+ aContainer.getAttributeByName(KTopLeftX);
+ AlfAttribute& attrTopY =
+ aContainer.getAttributeByName(KTopLeftY);
+ AlfAttribute& attrBottomRightX =
+ aContainer.getAttributeByName(KBottomRightX);
+ AlfAttribute& attrBottomRightY =
+ aContainer.getAttributeByName(KBottomRightY);
+
+ const TAlfRealPoint sTopLeft(aVisual.Pos().ValueNow());
+ TAlfRealPoint size(aVisual.Size().ValueNow());
+ TAlfRealRect sRect(sTopLeft, TAlfRealPoint(sTopLeft.iX + size.iX,
+ sTopLeft.iY + size.iY));
+
+ SetSourceRect(sRect, attrTopX, attrTopY, attrBottomRightX,
+ attrBottomRightY);
+
+ aVisual.SetRect(sRect, 0);
+
+ TAlfRealPoint tTopLeft(attrTopX.realValue(), attrTopY.realValue());
+ TAlfRealPoint tBottomRight(attrBottomRightX.realValue(),
+ attrBottomRightY.realValue());
+ TAlfRealRect tRealRect(tTopLeft, tBottomRight);
+
+ int time = getTime(attrTopX, aImmediate);
+ aVisual.SetRect(tRealRect, time);
+
+
+ attrTopX.setDirty(false);
+ attrTopY.setDirty(false);
+ attrBottomRightX.setDirty(false);
+ attrBottomRightY.setDirty(false);
+
+ }
+} // Alf