uiacceltk/hitchcock/ServerCore/Src/alfvisualhandlers.cpp
changeset 0 15bf7259bb7c
child 17 3ac8bf5c5014
equal deleted inserted replaced
-1:000000000000 0:15bf7259bb7c
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   definitions of alf built-in visual support
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include "alf/alfvisualhandlers.h"
       
    21 #include "alftextstylehandlers.h"
       
    22 #include "alf/alfconstants.h"
       
    23 #include <uiacceltk/HuiTextVisual.h>
       
    24 #include <uiacceltk/HuiGridLayout.h>
       
    25 #include <uiacceltk/HuiImageVisual.h>
       
    26 #include "alf/alfbrushhandlers.h"
       
    27 #include <alf/alfvisual.h>
       
    28 #include <alf/alftextvisual.h>
       
    29 #include <uiacceltk/HuiLineVisual.h>
       
    30 #include <uiacceltk/HuiMeshVisual.h>
       
    31 #include <uiacceltk/huiproceduralmesh.h>
       
    32 #include <uiacceltk/huim3gmesh.h>
       
    33 #include <uiacceltk/HuiUtil.h>
       
    34 #include <alf/alfmaterial.h>
       
    35 #include "alf/alfserverutils.h"
       
    36 #include "alfsrvvisualowner.h"
       
    37 #include <AknsConstants.h>
       
    38 #include "alf/alfappui.h"
       
    39 #include "alfsrvdropshadowhandler.h"
       
    40 #include <AknFontSpecification.h> // @todo mka
       
    41 #include <gdi.h> // @todo mka
       
    42 #include <uiacceltk/HuiCanvasVisual.h>
       
    43 
       
    44 // Remove when EAlfVisualEnableTransformation handing is fixed
       
    45 #include "alfappsrvsession.h"
       
    46 #include "alfsrvsubsessionbase.h"
       
    47 #include "alfsrvtransformationsubsession.h"
       
    48 
       
    49 #ifdef RD_ALF_IN_PLATFORM
       
    50 #include <aknlayout2hierarchy.h>
       
    51 #endif
       
    52 
       
    53 #include <avkon.hrh> //     ELayoutAlignNone, etc
       
    54 
       
    55 #include "HuiFxEngine.h"
       
    56 #include "HuiFxEffect.h"
       
    57 struct CAlfVisualHandler::TPrivateData
       
    58     {
       
    59     CAlfSrvVisualOwner* iVisualOwner;
       
    60     };
       
    61 
       
    62 //----------------------------
       
    63 // Visual base
       
    64 //----------------------------
       
    65 EXPORT_C MAlfExtension* CAlfVisualHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout)
       
    66     {
       
    67     CAlfVisualHandler* me = new (ELeave) CAlfVisualHandler(aResolver);
       
    68     CleanupStack::PushL(me);
       
    69     me->ConstructL(NULL, *aOwner, aParentLayout);
       
    70     CleanupStack::Pop();
       
    71     return me;
       
    72     }
       
    73 
       
    74 EXPORT_C CAlfVisualHandler::CAlfVisualHandler(MAlfInterfaceProvider& aResolver):iResolver(aResolver)
       
    75     {
       
    76     }
       
    77 
       
    78 
       
    79 EXPORT_C void CAlfVisualHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout)
       
    80     {
       
    81     if (!aVisual)
       
    82         {
       
    83         iVisual = CHuiVisual::AddNewL(aOwner, aParentLayout);          
       
    84         }
       
    85     else 
       
    86         {
       
    87         iVisual = aVisual;    
       
    88         }
       
    89         
       
    90     iPrivateData = new (ELeave) TPrivateData;
       
    91     iPrivateData->iVisualOwner = NULL;
       
    92     
       
    93     }
       
    94 
       
    95 
       
    96 EXPORT_C CAlfVisualHandler::~CAlfVisualHandler()
       
    97     {
       
    98     if ( iPrivateData )
       
    99         {
       
   100         if ( iPrivateData->iVisualOwner )
       
   101             {
       
   102             if ( iVisual ) // If the visual has not been deleted already
       
   103                 {
       
   104                 iVisual->SetOwner( *iPrivateData->iVisualOwner->RealOwner() );
       
   105                 }
       
   106             delete iPrivateData->iVisualOwner;
       
   107             iPrivateData->iVisualOwner = NULL;
       
   108             }
       
   109         }
       
   110     delete iPrivateData;
       
   111     iPrivateData = NULL;
       
   112     
       
   113     iVisual = NULL;
       
   114     }
       
   115 
       
   116 EXPORT_C void CAlfVisualHandler::Release()
       
   117     {
       
   118     delete this;
       
   119     }
       
   120 
       
   121 
       
   122 EXPORT_C TAny* CAlfVisualHandler::GetInterface(const THuiInterfaceSupport& aInterface)
       
   123     {
       
   124     switch (aInterface)
       
   125         {
       
   126         case EHuiObjectTypeVisual:
       
   127             return iVisual;
       
   128         case EAlfVisualHandler:
       
   129             return this;
       
   130         default:
       
   131             return 0;
       
   132                     
       
   133         }
       
   134 
       
   135     }
       
   136 
       
   137 void NullChildVisualHandlerPointers(
       
   138     CHuiVisual& iVisual, 
       
   139     const RPointerArray<CAlfSrvSubSessionBase>& aArray)
       
   140     {
       
   141     for(TInt i = iVisual.Count() - 1; i >= 0; --i)
       
   142         {
       
   143         NullChildVisualHandlerPointers( iVisual.Visual(i), aArray );
       
   144         }
       
   145         
       
   146     for ( TInt h = 0 ; h < aArray.Count(); h++ )
       
   147         {
       
   148         if ( aArray[h]->AsHuiVisual() == &iVisual )
       
   149             {
       
   150             CAlfVisualHandler* visualHandler = static_cast<CAlfVisualHandler*>( aArray[h]->AsCommandHandler() );
       
   151             visualHandler->HuiVisualAboutToTerminate();
       
   152             }
       
   153         }
       
   154    
       
   155     }
       
   156 
       
   157 void CAlfVisualHandler::HuiVisualAboutToTerminate()
       
   158     {
       
   159     iVisual = NULL;
       
   160     }
       
   161 
       
   162 
       
   163 EXPORT_C void CAlfVisualHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse)
       
   164     {
       
   165     switch (aCommandId)
       
   166         {
       
   167         case EAlfVisualRemoveAndDestroyAll:
       
   168             {
       
   169             // we need to NULL all the child visual handlers
       
   170             CHuiVisual* tmp = iVisual;
       
   171             
       
   172             CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   173             RPointerArray<CAlfSrvSubSessionBase> array;
       
   174             TRAP_IGNORE( session.GetSubsessionsByTypeL( array, EAlfVisualHandler ) );
       
   175             NullChildVisualHandlerPointers(*iVisual, array);
       
   176             array.Close();
       
   177             
       
   178             tmp->RemoveAndDestroyAllD();
       
   179             tmp = NULL;
       
   180             break;                
       
   181             }
       
   182         
       
   183         case EAlfVisualUpdateChildrenLayout:
       
   184             {
       
   185             TInt* transitionTime = (TInt*) aInputBuffer.Ptr();
       
   186             iVisual->UpdateChildrenLayout( *transitionTime >= 0 ? *transitionTime : CHuiStatic::LayoutTransitionTime() );
       
   187             break;
       
   188             }
       
   189                 
       
   190         case  EAlfVisualSetOpacity:
       
   191             {
       
   192             TAlfTimedValue* opacity = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
   193             AlfTimedValueUtility::CopyTimedValue(*opacity, iVisual->iOpacity, iResolver);
       
   194             break;    
       
   195             }
       
   196         
       
   197         case EAlfVisualGetOpacity:
       
   198             {
       
   199             TAlfTimedValue opacity;
       
   200             AlfTimedValueUtility::CopyTimedValue(iVisual->iOpacity, opacity);
       
   201             TPckg<TAlfTimedValue> resultPckg(opacity);
       
   202             
       
   203             aResponse = resultPckg; // awkward     
       
   204             break;
       
   205             }
       
   206         
       
   207         case  EAlfVisualLocalToDisplay:
       
   208             {
       
   209             TAlfRealPoint* alfPoint = (TAlfRealPoint*) aInputBuffer.Ptr();
       
   210             const THuiRealPoint realPoint( alfPoint->iX, alfPoint->iY );
       
   211             
       
   212             THuiRealPoint result = iVisual->LocalToDisplay( realPoint );
       
   213 
       
   214             // if the visual is showing, the container layout rect is included
       
   215             // in the LocalToDisplay calculations
       
   216             if ( iVisual->Display() )
       
   217                 {
       
   218                 // if not showing, we need to add the display rect offset.
       
   219                 CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   220                 result -= session.ClientDrawingArea().iTl;
       
   221                 }
       
   222             
       
   223             TAlfRealPoint alf_point(result.iX, result.iY);
       
   224             TPckg<TAlfRealPoint> resultPckg(alf_point);            
       
   225             
       
   226             aResponse = resultPckg; // awkward 
       
   227             break;     
       
   228             }
       
   229         
       
   230         case  EAlfVisualDisplayToLocal:
       
   231             {
       
   232             TAlfRealPoint* alfPoint = (TAlfRealPoint*) aInputBuffer.Ptr();
       
   233             THuiRealPoint realPoint( alfPoint->iX, alfPoint->iY );
       
   234             
       
   235             // if the visual is showing, the container layout rect is included
       
   236             // in the DisplayToLocal calculations
       
   237             if ( iVisual->Display() )
       
   238                 {
       
   239                 // if not showing, we need to reduce the display rect offset
       
   240                 // from the comparision value.
       
   241                 CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   242                 realPoint += session.ClientDrawingArea().iTl;
       
   243                 }
       
   244             
       
   245             THuiRealPoint result = iVisual->DisplayToLocal( realPoint );
       
   246                         
       
   247             TAlfRealPoint alf_point(result.iX, result.iY);
       
   248             TPckg<TAlfRealPoint> resultPckg(alf_point);            
       
   249 
       
   250             aResponse = resultPckg; // awkward 
       
   251             break;     
       
   252             }
       
   253         
       
   254         case  EAlfVisualDisplayRectTarget:
       
   255             {
       
   256             THuiRealRect huiResult = iVisual->DisplayRectTarget();
       
   257             
       
   258             if ( iVisual->Display() )
       
   259                 {
       
   260                 CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   261                 huiResult.Move( -session.ClientDrawingArea().iTl.iX, -session.ClientDrawingArea().iTl.iY ); 
       
   262                 }
       
   263             
       
   264             TAlfRealRect alfResult;
       
   265             alfResult.iTl.iX = huiResult.iTl.iX;
       
   266             alfResult.iTl.iY = huiResult.iTl.iY;
       
   267             alfResult.iBr.iX = huiResult.iBr.iX;
       
   268             alfResult.iBr.iY = huiResult.iBr.iY;
       
   269             TPckg<TAlfRealRect> resultPckg(alfResult);
       
   270             
       
   271             aResponse = resultPckg; // awkward 
       
   272             break;            
       
   273             }
       
   274         
       
   275         case  EAlfVisualPos:
       
   276             {
       
   277             TAlfTimedPoint result;
       
   278             AlfTimedPointUtility::CopyTimedPoint(iVisual->Pos(), result);             
       
   279             
       
   280             TPckg<TAlfTimedPoint> resultPckg(result);
       
   281 
       
   282             aResponse = resultPckg; // awkward 
       
   283             break;            
       
   284             }
       
   285         
       
   286         case  EAlfVisualSetPos:
       
   287             {
       
   288             TAlfVisualPos* pos = (TAlfVisualPos*) aInputBuffer.Ptr();
       
   289             
       
   290             THuiRealPoint huiPoint( pos->iPoint.iX, pos->iPoint.iY );
       
   291             
       
   292             iVisual->SetPos(huiPoint, pos->iTime);
       
   293             break;            
       
   294             }
       
   295             
       
   296         
       
   297         case EAlfVisualMoveToFront:
       
   298             { 
       
   299             iVisual->MoveToFront();
       
   300             break;            
       
   301             }
       
   302         
       
   303         case EAlfVisualSize:
       
   304             {
       
   305             TAlfTimedPoint a_size;
       
   306             AlfTimedPointUtility::CopyTimedPoint(iVisual->Size(), a_size);             
       
   307 
       
   308             TPckg<TAlfTimedPoint> sizePckg(a_size);
       
   309             
       
   310             aResponse = sizePckg; // awkward 
       
   311             break;            
       
   312             }
       
   313         
       
   314         case EAlfVisualSetSize:
       
   315             {
       
   316             TAlfVisualSize* size = (TAlfVisualSize*) aInputBuffer.Ptr();
       
   317             iVisual->SetSize(THuiRealSize( size->iSize.iWidth,size->iSize.iHeight ) , size->iTime);
       
   318 
       
   319             break;            
       
   320             }
       
   321             
       
   322         case EAlfVisualBrushArrayReset:
       
   323             {
       
   324             if ( iVisual ) // during destruction the iVisual is already deleted
       
   325                 {
       
   326                 iVisual->EnableBrushesL( EFalse );
       
   327                 }
       
   328             break;
       
   329             }
       
   330             
       
   331 
       
   332         case EAlfVisualBrushArrayAppend:
       
   333             {
       
   334             TInt2* params = (TInt2*) aInputBuffer.Ptr();
       
   335             
       
   336             const THuiOwnership ownership = (THuiOwnership)params->iInt2;
       
   337             
       
   338             CHuiBrush* brush = (CHuiBrush*)iResolver.GetInterfaceL(EHuiObjectTypeBrush, params->iInt1);
       
   339             iVisual->EnableBrushesL();
       
   340             iVisual->Brushes()->AppendL(brush,ownership);
       
   341             CAlfBrushHandler* holder = (CAlfBrushHandler*) iResolver.GetInterfaceL(EAlfBrushHandler, params->iInt1);
       
   342             
       
   343             // If the brush array is taking the ownership...
       
   344             if ( ownership == EHuiHasOwnership )
       
   345                 {
       
   346                 // ... the brush holder cannot have it anymore
       
   347                 holder->SetOwnership(EFalse);
       
   348                 }
       
   349             break;
       
   350             }
       
   351         case EAlfVisualBrushArrayInsert:
       
   352             {
       
   353             TInt3* params = (TInt3*) aInputBuffer.Ptr();
       
   354             
       
   355             CHuiBrush* brush = (CHuiBrush*)iResolver.GetInterfaceL(EHuiObjectTypeBrush, params->iInt1);
       
   356             iVisual->EnableBrushesL();
       
   357             iVisual->Brushes()->InsertL(params->iInt3, brush,(THuiOwnership)params->iInt2);
       
   358             CAlfBrushHandler* holder = (CAlfBrushHandler*) iResolver.GetInterfaceL(EAlfBrushHandler, params->iInt1);
       
   359             holder->SetOwnership(!params->iInt2); // THuiOwnership matches boolean 
       
   360             break;
       
   361             }
       
   362         case EAlfVisualBrushArrayRemove:
       
   363             {
       
   364             if ( iVisual ) // iVisual is NULL:led i.e. deleted
       
   365                 {
       
   366                 TInt* params = (TInt*) aInputBuffer.Ptr();
       
   367                 iVisual->EnableBrushesL();
       
   368                 iVisual->Brushes()->Remove(*params);
       
   369                 }
       
   370             break;
       
   371             }
       
   372             
       
   373         case EAlfVisualSetFlag:
       
   374             {
       
   375             THuiVisualFlags* params = (THuiVisualFlags*) aInputBuffer.Ptr();
       
   376             iVisual->SetFlag( *params );
       
   377             break;
       
   378             }
       
   379             
       
   380         case EAlfVisualSetFlags:
       
   381             {
       
   382             TUint* params = (TUint*) aInputBuffer.Ptr();
       
   383             iVisual->SetFlags( *params );
       
   384             break;
       
   385             }
       
   386             
       
   387         case EAlfVisualClearFlag:
       
   388             {
       
   389             THuiVisualFlags* params = (THuiVisualFlags*) aInputBuffer.Ptr();
       
   390             iVisual->ClearFlag( *params );
       
   391             break;
       
   392             }
       
   393             
       
   394         case EAlfVisualClearFlags:
       
   395             {
       
   396             TUint* params = (TUint*) aInputBuffer.Ptr();
       
   397             iVisual->ClearFlags( *params );
       
   398             break;
       
   399             }
       
   400             
       
   401         case EAlfVisualFlags:
       
   402             {
       
   403             const TUint flags = iVisual->Flags();
       
   404             TPckg<TUint> flagsPckg(flags);
       
   405             aResponse = flagsPckg; // awkward 
       
   406             break;
       
   407             }
       
   408             
       
   409         case EAlfVisualSetPaddingInt:
       
   410             {
       
   411             TInt* params = (TInt*) aInputBuffer.Ptr();
       
   412             iVisual->SetPadding( *params );
       
   413             break;
       
   414             }
       
   415             
       
   416         case EAlfVisualSetPaddingPoint:
       
   417             {
       
   418             TPoint* params = (TPoint*) aInputBuffer.Ptr();
       
   419             iVisual->SetPadding( *params );
       
   420             break;
       
   421             }
       
   422             
       
   423         case EAlfVisualSetPaddingBox:
       
   424             {
       
   425             TAlfBoxMetric* metric = (TAlfBoxMetric*) aInputBuffer.Ptr();
       
   426                     
       
   427             THuiMetric newMetricLeft(metric->iLeft.iMagnitude, metric->iLeft.iUnit, metric->iLeft.iReferenceTextStyleId);
       
   428             THuiMetric newMetricRight(metric->iRight.iMagnitude, metric->iRight.iUnit, metric->iRight.iReferenceTextStyleId);
       
   429             THuiMetric newMetricTop(metric->iTop.iMagnitude, metric->iTop.iUnit, metric->iTop.iReferenceTextStyleId);
       
   430             THuiMetric newMetricBottom(metric->iBottom.iMagnitude, metric->iBottom.iUnit, metric->iBottom.iReferenceTextStyleId);
       
   431             
       
   432             THuiBoxMetric newBoxMetric(newMetricLeft, newMetricRight, newMetricTop, newMetricBottom);
       
   433             iVisual->SetPadding(newBoxMetric);
       
   434             break;
       
   435             }
       
   436             
       
   437         case EAlfVisualPaddingInPixels:
       
   438             {
       
   439             const THuiRealRect huiResult = iVisual->PaddingInPixels();  
       
   440             
       
   441             TAlfRealRect alfResult;
       
   442             alfResult.iTl.iX = huiResult.iTl.iX;
       
   443             alfResult.iTl.iY = huiResult.iTl.iY;
       
   444             alfResult.iBr.iX = huiResult.iBr.iX;
       
   445             alfResult.iBr.iY = huiResult.iBr.iY;
       
   446             
       
   447             TPckg<TAlfRealRect> resultPckg(alfResult);           
       
   448             aResponse = resultPckg; // awkward 
       
   449             break;    
       
   450         }
       
   451         
       
   452         case EAlfVisualEnableTransformation:
       
   453             {
       
   454             TInt2* params = (TInt2*) aInputBuffer.Ptr();
       
   455             
       
   456             const TBool isTransformed = params->iInt2;
       
   457             const TInt transHandle = params->iInt1;
       
   458             
       
   459             
       
   460             // @todo: nasty hack
       
   461             CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   462             CAlfSrvSubSessionBase& transSubSession = session.SubSession( transHandle );
       
   463             CAlfSrvTransformationSubSession& transformationSubSession = 
       
   464                 static_cast<CAlfSrvTransformationSubSession&>(transSubSession);
       
   465             
       
   466             // Enable transformation
       
   467             iVisual->EnableTransformationL( isTransformed );
       
   468             CHuiTransformation* transformation = NULL;
       
   469             if ( isTransformed )
       
   470                 {
       
   471                 transformation = &iVisual->Transformation();
       
   472                 }
       
   473                 
       
   474             transformationSubSession.SetTransformation( transformation );
       
   475             break;
       
   476             }
       
   477 
       
   478         case EAlfVisualDepthOffset:
       
   479             {
       
   480             TAlfTimedValue value;
       
   481             AlfTimedValueUtility::CopyTimedValue(iVisual->iDepthOffset, value);             
       
   482 
       
   483             TPckg<TAlfTimedValue> resultPckg(value);            
       
   484             aResponse = resultPckg; // awkward                 
       
   485             break;    
       
   486             }
       
   487 
       
   488         case EAlfVisualSetDepthOffset:
       
   489             {
       
   490             TAlfTimedValue* params = (TAlfTimedValue*) aInputBuffer.Ptr();            
       
   491             AlfTimedValueUtility::CopyTimedValue(*params, iVisual->iDepthOffset, iResolver);
       
   492             break;    
       
   493             }
       
   494 
       
   495         case EAlfVisualSetMinSize:
       
   496             {
       
   497             TSize* params = (TSize*) aInputBuffer.Ptr();
       
   498             iVisual->SetMinSize( *params );            
       
   499             break;    
       
   500             }
       
   501 
       
   502         case EAlfVisualGetMinSize:
       
   503             {
       
   504             TSize result = iVisual->MinSize();            
       
   505             TPckg<TSize> resultPckg(result);
       
   506             aResponse = resultPckg; // awkward 
       
   507             break;    
       
   508             }
       
   509 
       
   510         case EAlfVisualSetMinSizeInBaseUnits:
       
   511             {
       
   512             TAlfRealSize* params = (TAlfRealSize*) aInputBuffer.Ptr();
       
   513             const THuiRealSize minSize(params->iWidth, params->iHeight);
       
   514             iVisual->SetMinSize( minSize );            
       
   515             break;    
       
   516             }
       
   517 
       
   518         case EAlfVisualGetMinSizeInBaseUnits:
       
   519             {
       
   520             THuiRealSize result = iVisual->MinSizeInBaseUnits(); 
       
   521             TAlfRealSize alfResult(result.iWidth, result.iHeight);  
       
   522             TPckg<TAlfRealSize> resultPckg(alfResult);
       
   523             aResponse = resultPckg; // awkward 
       
   524             break;    
       
   525             }
       
   526 
       
   527         case EAlfVisualSetMaxSize:
       
   528             {            
       
   529             TSize* params = (TSize*) aInputBuffer.Ptr();
       
   530             iVisual->SetMaxSize( *params );            
       
   531             break;    
       
   532             }
       
   533 
       
   534         case EAlfVisualGetMaxSize:
       
   535             {
       
   536             TSize result = iVisual->MaxSize();            
       
   537             TPckg<TSize> resultPckg(result);
       
   538             aResponse = resultPckg; // awkward 
       
   539             break;    
       
   540             }
       
   541 
       
   542         case EAlfVisualSetMaxSizeInBaseUnits:
       
   543             {            
       
   544             TAlfRealSize* params = (TAlfRealSize*) aInputBuffer.Ptr();
       
   545             const THuiRealSize maxSize(params->iWidth, params->iHeight);
       
   546             iVisual->SetMaxSize( maxSize );            
       
   547             break;    
       
   548             }
       
   549 
       
   550         case EAlfVisualGetMaxSizeInBaseUnits:
       
   551             {
       
   552             THuiRealSize result = iVisual->MaxSizeInBaseUnits(); 
       
   553             TAlfRealSize alfResult(result.iWidth, result.iHeight);  
       
   554             TPckg<TAlfRealSize> resultPckg(alfResult);
       
   555             aResponse = resultPckg; // awkward 
       
   556             break;    
       
   557             }
       
   558 
       
   559         case EAlfVisualMove:
       
   560             {            
       
   561             TAlfVisualPos* pos = (TAlfVisualPos*) aInputBuffer.Ptr();           
       
   562             const THuiRealPoint huiPoint(pos->iPoint.iX, pos->iPoint.iY);
       
   563             iVisual->Move(huiPoint, pos->iTime);
       
   564             break;            
       
   565             }
       
   566 
       
   567        case EAlfVisualSetCenteredPosAndSize:
       
   568             {            
       
   569             TAlfVisualPosSize* posAndSize = (TAlfVisualPosSize*) aInputBuffer.Ptr();            
       
   570             const THuiRealPoint huiPoint(posAndSize->iPoint.iX, posAndSize->iPoint.iY);
       
   571             const THuiRealSize huiSize(posAndSize->iSize.iWidth, posAndSize->iSize.iHeight);
       
   572             iVisual->SetCenteredPosAndSize(huiPoint, huiSize, posAndSize->iTime);
       
   573             break;            
       
   574             }
       
   575 
       
   576         case EAlfVisualDisplayRect:
       
   577             {          
       
   578             THuiRealRect huiResult = iVisual->DisplayRect();
       
   579             
       
   580             if ( iVisual->Display() )
       
   581                 {
       
   582                 CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   583                 huiResult.Move( -session.ClientDrawingArea().iTl.iX, -session.ClientDrawingArea().iTl.iY );
       
   584                 }
       
   585             
       
   586             TAlfRealRect alfResult;
       
   587             alfResult.iTl.iX = huiResult.iTl.iX;
       
   588             alfResult.iTl.iY = huiResult.iTl.iY;
       
   589             alfResult.iBr.iX = huiResult.iBr.iX;
       
   590             alfResult.iBr.iY = huiResult.iBr.iY;
       
   591             
       
   592             TPckg<TAlfRealRect> resultPckg(alfResult);           
       
   593             aResponse = resultPckg; // awkward 
       
   594             break;    
       
   595             }
       
   596 
       
   597         case EAlfVisualEffectiveOpacity:
       
   598             {
       
   599             TReal32 value = iVisual->EffectiveOpacity();
       
   600             TPckg<TReal32> resultPckg(value);            
       
   601             aResponse = resultPckg; // awkward                 
       
   602             break;    
       
   603             }
       
   604         case EAlfVisualSetPosTimed:
       
   605             {
       
   606             TAlfTimedPoint* params = (TAlfTimedPoint*) aInputBuffer.Ptr();                        
       
   607             AlfTimedValueUtility::CopyTimedValue(params->iX, iVisual->Pos().iX, iResolver);
       
   608             AlfTimedValueUtility::CopyTimedValue(params->iY, iVisual->Pos().iY, iResolver);
       
   609             break;        
       
   610             }            
       
   611         case EAlfVisualSetSizeTimed:            
       
   612             {
       
   613             TAlfTimedPoint* params = (TAlfTimedPoint*) aInputBuffer.Ptr();                        
       
   614             AlfTimedValueUtility::CopyTimedValue(params->iX, iVisual->Size().iX, iResolver);
       
   615             AlfTimedValueUtility::CopyTimedValue(params->iY, iVisual->Size().iY, iResolver);
       
   616             break;        
       
   617             }
       
   618             
       
   619         case EAlfVisualLayoutUpdatedNotification:
       
   620             {
       
   621             if ( !iPrivateData->iVisualOwner )
       
   622                 {
       
   623                 // @todo: nasty hack
       
   624                 CAlfAppSrvSessionBase& session = static_cast<CAlfAppSrvSessionBase&>( iResolver );
       
   625                 iPrivateData->iVisualOwner = CAlfSrvVisualOwner::NewL( session, &iVisual->Owner() );
       
   626                 iVisual->SetOwner( *iPrivateData->iVisualOwner );
       
   627                 }
       
   628             
       
   629             TInt commandId = iResolver.HandleCurrentCommanndAsynch();
       
   630             iPrivateData->iVisualOwner->SetVisualLayoutUpdatedNotificationId( commandId );
       
   631             break;
       
   632             }
       
   633         case EAlfSubSCancelAsynchRequest:
       
   634             {
       
   635             TInt2* inptr =  (TInt2*) aInputBuffer.Ptr();
       
   636             if (inptr->iInt2 != EAlfVisualLayoutUpdatedNotification )
       
   637                 { 
       
   638                 // strange one, someone tries to cancel something we don't support
       
   639                 // we shouldn't leave on cancel though
       
   640                 break;
       
   641                 }
       
   642             // else let fall through    
       
   643             }
       
   644         case EAlfVisualLayoutUpdatedNotificationCancel:
       
   645             {
       
   646             if ( iPrivateData->iVisualOwner )
       
   647                 {
       
   648                 if ( iVisual ) // If the visual has not been deleted already
       
   649                     {
       
   650                     iVisual->SetOwner( *iPrivateData->iVisualOwner->RealOwner() );
       
   651                     }
       
   652                 delete iPrivateData->iVisualOwner;
       
   653                 iPrivateData->iVisualOwner = NULL;
       
   654                 }    
       
   655             break;
       
   656             }
       
   657 
       
   658         case EAlfVisualCopyValuesFromOtherVisual:
       
   659             {
       
   660             TInt3* inptr =  (TInt3*) aInputBuffer.Ptr();
       
   661             CHuiVisual* sourceVisual = (CHuiVisual*) iResolver.GetInterfaceL( EHuiObjectTypeVisual, inptr->iInt1 );
       
   662             if (inptr->iInt2&AlfVisualProperties::ESize)
       
   663                 {
       
   664                 THuiRealPoint gotThePoint = sourceVisual->Size().RealTarget(); 
       
   665                 THuiRealSize rs(gotThePoint.iX, gotThePoint.iY);
       
   666                 iVisual->SetSize(rs, inptr->iInt3 );
       
   667                 }
       
   668             if (inptr->iInt2&AlfVisualProperties::EPosition)
       
   669                 { 
       
   670                 THuiRealPoint gotThePoint = sourceVisual->Pos().RealTarget(); 
       
   671                 THuiRealPoint rPoint(gotThePoint.iX, gotThePoint.iY);
       
   672                 iVisual->SetPos(rPoint, inptr->iInt3);
       
   673                 }
       
   674             if (inptr->iInt2&AlfVisualProperties::EOpacity)
       
   675                 {
       
   676                 iVisual->iOpacity.Set(sourceVisual->iOpacity.Target(), inptr->iInt3); 
       
   677                 }
       
   678             if (inptr->iInt2&AlfVisualProperties::EDepthOffset)
       
   679                 {
       
   680                 iVisual->iDepthOffset.Set( sourceVisual->iDepthOffset.Target(), inptr->iInt3);
       
   681                 }
       
   682             break;
       
   683             }
       
   684 
       
   685         case EAlfVisualPauseProperties:
       
   686             {
       
   687             TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
   688             if (*inptr&AlfVisualProperties::ESize)
       
   689                 {
       
   690                 iVisual->Size().iX.Suspend(); 
       
   691                 iVisual->Size().iY.Suspend(); 
       
   692                 }
       
   693             if (*inptr&AlfVisualProperties::EPosition)
       
   694                 { 
       
   695                 iVisual->Pos().iX.Suspend(); 
       
   696                 iVisual->Pos().iY.Suspend(); 
       
   697                 }
       
   698             if (*inptr&AlfVisualProperties::EOpacity)
       
   699                 {
       
   700                 iVisual->iOpacity.Suspend(); 
       
   701                 }
       
   702             if (*inptr&AlfVisualProperties::EDepthOffset)
       
   703                 {
       
   704                 iVisual->iDepthOffset.Suspend();
       
   705                 }
       
   706             break;
       
   707             }
       
   708 
       
   709         case EAlfVisualResumeProperties:
       
   710             {
       
   711             TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
   712             if (*inptr&AlfVisualProperties::ESize)
       
   713                 {
       
   714                 iVisual->Size().iX.Suspend(EFalse); 
       
   715                 iVisual->Size().iY.Suspend(EFalse); 
       
   716                 }
       
   717             if (*inptr&AlfVisualProperties::EPosition)
       
   718                 { 
       
   719                 iVisual->Pos().iX.Suspend(EFalse); 
       
   720                 iVisual->Pos().iY.Suspend(EFalse); 
       
   721                 }
       
   722             if (*inptr&AlfVisualProperties::EOpacity)
       
   723                 {
       
   724                 iVisual->iOpacity.Suspend(EFalse); 
       
   725                 }
       
   726             if (*inptr&AlfVisualProperties::EDepthOffset)
       
   727                 {
       
   728                 iVisual->iDepthOffset.Suspend(EFalse);
       
   729                 }
       
   730             break;
       
   731             }
       
   732             
       
   733         case EAlfVisualSetTactileFeedback:
       
   734             {
       
   735             TInt2* value = (TInt2*) aInputBuffer.Ptr();
       
   736             iVisual->SetTactileFeedbackL( value->iInt1, value->iInt2 );
       
   737             }
       
   738             break;
       
   739             
       
   740         case EAlfVisualHasTactileFeedback:
       
   741             {
       
   742             TInt* value = (TInt*) aInputBuffer.Ptr();
       
   743             TBool answer = iVisual->HasTactileFeedback( *value );
       
   744             TPckg<TBool> resultPckg(answer);           
       
   745             aResponse = resultPckg;
       
   746             }
       
   747             break;
       
   748             
       
   749         case EAlfVisualRemoveTactileFeedback:
       
   750             {
       
   751             TInt* value = (TInt*) aInputBuffer.Ptr();
       
   752             iVisual->RemoveTactileFeedback( *value );
       
   753             }
       
   754             break;
       
   755             
       
   756         case EAlfVisualEnableDropShadow:
       
   757             {
       
   758             const TBool* const enable = (TBool*) aInputBuffer.Ptr();
       
   759             iVisual->EnableDropShadowL( *enable );
       
   760             }
       
   761             break;
       
   762             
       
   763         case EAlfVisualSetEffect:
       
   764             {
       
   765             // TODO: handle errors more gracefully
       
   766             // TODO: effect merging
       
   767             TAlfVisualEffectParams* params = (TAlfVisualEffectParams*)aInputBuffer.Ptr();
       
   768             CHuiFxEngine* engine = iVisual->Env().EffectsEngine();
       
   769             if (engine)
       
   770                 {
       
   771                 CHuiFxEffect* effect = NULL;
       
   772                 engine->LoadEffectL( params->iFileName, effect, iVisual->Effectable() );
       
   773                 // The effect will be automatically set to the visual if parsing succeeds
       
   774                 }
       
   775             break;
       
   776             }
       
   777         case EAlfVisualSetGroupEffect:
       
   778             {
       
   779             TAlfVisualEffectParams* params = (TAlfVisualEffectParams*)aInputBuffer.Ptr();
       
   780             TInt groupHandle = params->iGroupHandle;
       
   781             CHuiFxEngine* engine = iVisual->Env().EffectsEngine();
       
   782             if (engine)
       
   783                 {
       
   784                 CHuiFxEffect* effect = NULL;
       
   785                 // this will add the group, if it does not exist already
       
   786                 // Begin and End group events are supposed to come through GfxTransEffect API.
       
   787                 engine->BeginGroupEffect(groupHandle); 
       
   788                 engine->LoadGroupEffectL( params->iFileName, effect, iVisual->Effectable(),groupHandle );
       
   789                 // The effect will be automatically set to the visual if parsing succeeds
       
   790                 }
       
   791             break;
       
   792             }            
       
   793         case EAlfVisualRemoveEffect:
       
   794             {
       
   795             iVisual->SetEffect(NULL);
       
   796             break;
       
   797             }
       
   798 
       
   799         default:
       
   800             
       
   801             if ( AlfSrvDropShadowHandler::CanHandleCommand( aCommandId ) )
       
   802                 {
       
   803                 CHuiDropShadow* shadow = iVisual->DropShadowHandler();
       
   804                 
       
   805                 // Drop shadow should be enabled first
       
   806                 __ASSERT_DEBUG( shadow , User::Leave( KErrGeneral ) );
       
   807                 
       
   808                 if ( !shadow )
       
   809                     {
       
   810                     iVisual->EnableDropShadowL( ETrue );
       
   811                     shadow = iVisual->DropShadowHandler();
       
   812                     }
       
   813                 
       
   814                 AlfSrvDropShadowHandler::HandleCommandL( *shadow, aCommandId, aInputBuffer, aResponse );
       
   815                 break;
       
   816                 }
       
   817         
       
   818             User::Leave(KErrNotSupported);
       
   819         }
       
   820     }
       
   821 
       
   822 EXPORT_C void CAlfVisualHandler::VisualHandlerExtension(const TUid& /*aExtensionUid*/, TAny** /*aExtensionParameters*/)
       
   823     {
       
   824     }
       
   825 
       
   826 //----------------------------
       
   827 // TextVisual
       
   828 //----------------------------
       
   829 EXPORT_C MAlfExtension* CAlfTextVisualHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout)
       
   830     {
       
   831     CAlfTextVisualHandler* me = new (ELeave) CAlfTextVisualHandler(aResolver);
       
   832     CleanupStack::PushL(me);
       
   833     me->ConstructL(NULL, *aOwner, aParentLayout);
       
   834     CleanupStack::Pop();
       
   835     return me;
       
   836     }
       
   837 
       
   838 
       
   839 EXPORT_C CAlfTextVisualHandler::CAlfTextVisualHandler(MAlfInterfaceProvider& aResolver):CAlfVisualHandler(aResolver)
       
   840     {
       
   841     }
       
   842 
       
   843 
       
   844 EXPORT_C void CAlfTextVisualHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout)
       
   845     {
       
   846     if (!aVisual)
       
   847         {
       
   848         CHuiTextVisual* textVisual = CHuiTextVisual::AddNewL(aOwner, aParentLayout); 
       
   849         CAlfVisualHandler::ConstructL(textVisual, aOwner, aParentLayout);
       
   850         }
       
   851     else 
       
   852         {
       
   853         CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout);
       
   854         }
       
   855     }
       
   856 
       
   857 
       
   858 EXPORT_C CAlfTextVisualHandler::~CAlfTextVisualHandler()
       
   859     {
       
   860     }
       
   861 
       
   862 EXPORT_C void CAlfTextVisualHandler::Release()
       
   863     {
       
   864     delete this;
       
   865     }
       
   866 
       
   867 
       
   868 EXPORT_C TAny* CAlfTextVisualHandler::GetInterface(const THuiInterfaceSupport& aInterface)
       
   869     {
       
   870     return CAlfVisualHandler::GetInterface(aInterface);
       
   871     }
       
   872 
       
   873 
       
   874 EXPORT_C void CAlfTextVisualHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse)
       
   875     {
       
   876     CHuiTextVisual* visual = static_cast<CHuiTextVisual*>(iVisual);
       
   877     
       
   878     switch (aCommandId)
       
   879         {
       
   880         case  EAlfTextVisualSetText:           
       
   881             {
       
   882             TPtrC text((const TUint16*)aInputBuffer.Ptr(), aInputBuffer.Length()/2);                        
       
   883             visual->SetTextL(text);
       
   884             break;                
       
   885             }
       
   886         
       
   887         case  EAlfTextVisualSetStyle:
       
   888             {      
       
   889             TInt2* params = (TInt2*) aInputBuffer.Ptr();
       
   890             visual->SetStyle( (THuiPreconfiguredTextStyle)params->iInt1,(THuiBackgroundType)params->iInt2 );
       
   891             break;    
       
   892             }
       
   893         
       
   894         case  EAlfTextVisualSetTextStyle:
       
   895             {
       
   896     		// Convert text style id to server domain
       
   897             TInt* value = (TInt*) aInputBuffer.Ptr();            	
       
   898     		TAlfTextStyleHandler* textStyleHandler = static_cast<TAlfTextStyleHandler*>(iResolver.GetInterfaceL(EAlfTextStyleHandler, *value));    		
       
   899             visual->SetTextStyle(textStyleHandler->TextStyleId());
       
   900             break;    
       
   901             }
       
   902         
       
   903         case  EAlfTextVisualSetEffects:
       
   904             {
       
   905             // This is for future expansion, unimplemented.
       
   906             break;    
       
   907             }
       
   908         
       
   909         case EAlfTextVisualSetAlign:
       
   910             {
       
   911             TInt2* params = (TInt2*) aInputBuffer.Ptr();
       
   912             visual->SetAlign( (THuiAlignHorizontal)params->iInt1,(THuiAlignVertical)params->iInt2 );
       
   913             break;
       
   914             }
       
   915             
       
   916         case EAlfTextVisualSetLineSpacing:
       
   917             {
       
   918             TInt2* params = (TInt2*) aInputBuffer.Ptr();
       
   919             visual->SetLineSpacing( params->iInt1, (CHuiTextVisual::TLineSpacingUnits)params->iInt2 );
       
   920             break;
       
   921             }
       
   922             
       
   923         case EAlfTextVisualTextExtents:
       
   924             {
       
   925             const TSize size = visual->TextExtents();
       
   926             TPckg<TSize> resultPckg(size);            
       
   927             aResponse = resultPckg; // awkward 
       
   928             break;
       
   929             }
       
   930             
       
   931         case EAlfTextVisualSubstringExtents:
       
   932             {
       
   933             TInt2* params = (TInt2*) aInputBuffer.Ptr();            
       
   934             const TRect size = visual->SubstringExtents(params->iInt1, params->iInt2);
       
   935             TPckg<TRect> resultPckg(size);            
       
   936             aResponse = resultPckg; // awkward 
       
   937             break;
       
   938             }
       
   939                         
       
   940         case EAlfTextVisualStyle:
       
   941             {
       
   942             const TInt2 result( 
       
   943                 visual->Style(),
       
   944                 visual->BackgroundType() );
       
   945             
       
   946             
       
   947             TPckg<TInt2> resultPckg(result);            
       
   948             aResponse = resultPckg; // awkward 
       
   949             break;
       
   950             }
       
   951                                             
       
   952         case EAlfTextVisualSetMaxLineCount:
       
   953             {
       
   954             TInt* value = (TInt*) aInputBuffer.Ptr();
       
   955             visual->SetMaxLineCount(*value);
       
   956             break;
       
   957             }
       
   958 
       
   959         case EAlfTextVisualMaxLineCount:
       
   960             {
       
   961             const TInt value = visual->MaxLineCount();
       
   962             TPckg<TInt> resultPckg(value);            
       
   963             aResponse = resultPckg; // awkward 
       
   964             break;
       
   965             }
       
   966 
       
   967         case EAlfTextVisualWrapping:
       
   968             {
       
   969             // Client side uses CAlfTextVisual::TLineWrap, should be compatible.
       
   970             CHuiTextVisual::TLineWrap value = visual->Wrapping();
       
   971             TPckg<CHuiTextVisual::TLineWrap> resultPckg(value);            
       
   972             aResponse = resultPckg; // awkward 
       
   973             break;
       
   974             }
       
   975 
       
   976         case EAlfTextVisualSetWrapping:
       
   977             {
       
   978             CHuiTextVisual::TLineWrap* value = (CHuiTextVisual::TLineWrap*) aInputBuffer.Ptr();
       
   979             visual->SetWrapping(*value);
       
   980             break;
       
   981             }
       
   982 
       
   983         /* deprecated
       
   984         case EAlfTextVisualShadowOpacity:
       
   985         case EAlfTextVisualSetShadowOpacity:        
       
   986         */
       
   987             
       
   988         case EAlfTextVisualSetColor:        
       
   989             {
       
   990             TAlfTextVisualFontColorParams* value = (TAlfTextVisualFontColorParams*) aInputBuffer.Ptr();
       
   991             if (value->iId == KAknsIIDNone)
       
   992                 {
       
   993                 visual->SetColor(value->iColor);                        
       
   994                 }
       
   995             else
       
   996                 {
       
   997                 visual->SetColor(value->iId, value->iIndex);                                            
       
   998                 }    
       
   999             break;
       
  1000             }
       
  1001             
       
  1002         case EAlfTextVisualOffset:        
       
  1003             {
       
  1004             TAlfTimedPoint value;
       
  1005             AlfTimedPointUtility::CopyTimedPoint(visual->Offset(), value);
       
  1006             TPckg<TAlfTimedPoint> resultPckg(value);            
       
  1007             aResponse = resultPckg; // awkward 
       
  1008             break;
       
  1009             }            
       
  1010         case EAlfTextVisualSetOffset:
       
  1011             {
       
  1012             TAlfTimedPoint* value = (TAlfTimedPoint*) aInputBuffer.Ptr();
       
  1013             AlfTimedPointUtility::CopyTimedPoint(*value, visual->Offset(), iResolver);
       
  1014             break;
       
  1015             }
       
  1016         case EAlfTextVisualSetHighlightRange:
       
  1017         	{
       
  1018 			TAlfTextVisualSetHighlightRangeParams* value = (TAlfTextVisualSetHighlightRangeParams*) aInputBuffer.Ptr();        	
       
  1019 			visual->SetHighlightRange(value->iStart, value->iEnd, value->iHighlightColor, value->iHighlightTextColor);
       
  1020 			break;
       
  1021         	}    
       
  1022 
       
  1023         /* deprecated
       
  1024         case EAlfTextVisualEnableShadow:        
       
  1025         */       
       
  1026         case EAlfTextVisualSetRasterizedMesh:
       
  1027             {
       
  1028         	visual->UpdateMeshL(aInputBuffer);
       
  1029         	break;
       
  1030             }
       
  1031         	
       
  1032         case EAlfVisualCopyValuesFromOtherVisual:
       
  1033         case EAlfVisualPauseProperties:
       
  1034         case EAlfVisualResumeProperties:        
       
  1035             {
       
  1036             if (aCommandId == EAlfVisualCopyValuesFromOtherVisual)
       
  1037                 {
       
  1038                 TInt3* inptr =  (TInt3*) aInputBuffer.Ptr();
       
  1039                 CHuiTextVisual* sourceVisual = (CHuiTextVisual*) iResolver.GetInterfaceL( EHuiObjectTypeVisual, inptr->iInt1 );
       
  1040                 if (inptr->iInt2&AlfVisualProperties::ETextVisShadowOpacity)
       
  1041                     {
       
  1042                     visual->iShadow.Set(sourceVisual->iShadow.Target(), inptr->iInt3 );
       
  1043                     }
       
  1044                 }
       
  1045             else if (aCommandId == EAlfVisualPauseProperties)
       
  1046                 {
       
  1047                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  1048                 if (*inptr&AlfVisualProperties::ETextVisShadowOpacity)
       
  1049                     {
       
  1050                     visual->iShadow.Suspend();
       
  1051                     }
       
  1052                 }
       
  1053             else  // AlfVisualResumeProperties
       
  1054                 {
       
  1055                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  1056                 if (*inptr&AlfVisualProperties::ETextVisShadowOpacity)
       
  1057                     {
       
  1058                     visual->iShadow.Suspend(EFalse);
       
  1059                     }
       
  1060                 }
       
  1061             } // FALL THROUGH !!
       
  1062         default:
       
  1063             CAlfVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse);
       
  1064         }
       
  1065     }
       
  1066 
       
  1067 EXPORT_C void CAlfTextVisualHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters)
       
  1068     {
       
  1069     CAlfVisualHandler::VisualHandlerExtension(aExtensionUid,aExtensionParameters);
       
  1070     }
       
  1071 
       
  1072  
       
  1073 //----------------------------
       
  1074 // LCTTextVisual
       
  1075 //----------------------------
       
  1076 EXPORT_C MAlfExtension* CAlfLCTTextVisualHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout)
       
  1077     {
       
  1078     CAlfLCTTextVisualHandler* me = new (ELeave) CAlfLCTTextVisualHandler(aResolver);
       
  1079     CleanupStack::PushL(me);
       
  1080     me->ConstructL(NULL, *aOwner, aParentLayout);
       
  1081     CleanupStack::Pop();
       
  1082     return me;
       
  1083     }
       
  1084 
       
  1085 
       
  1086 EXPORT_C CAlfLCTTextVisualHandler::CAlfLCTTextVisualHandler(MAlfInterfaceProvider& aResolver):CAlfTextVisualHandler(aResolver)
       
  1087     {
       
  1088     }
       
  1089 
       
  1090 
       
  1091 EXPORT_C void CAlfLCTTextVisualHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout)
       
  1092     {
       
  1093     if (!aVisual)
       
  1094         {
       
  1095         CHuiTextVisual* textVisual = CHuiTextVisual::AddNewL(aOwner, aParentLayout); 
       
  1096         CAlfVisualHandler::ConstructL(textVisual, aOwner, aParentLayout);
       
  1097         }
       
  1098     else 
       
  1099         {
       
  1100         CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout);
       
  1101         }
       
  1102     }
       
  1103 
       
  1104 
       
  1105 EXPORT_C CAlfLCTTextVisualHandler::~CAlfLCTTextVisualHandler()
       
  1106     {
       
  1107     }
       
  1108 
       
  1109 
       
  1110 EXPORT_C void CAlfLCTTextVisualHandler::Release()
       
  1111     {
       
  1112     delete this;
       
  1113     }
       
  1114 
       
  1115 
       
  1116 EXPORT_C TAny* CAlfLCTTextVisualHandler::GetInterface(const THuiInterfaceSupport& aInterface)
       
  1117     {
       
  1118     return CAlfTextVisualHandler::GetInterface(aInterface);
       
  1119     }
       
  1120 
       
  1121 
       
  1122 EXPORT_C void CAlfLCTTextVisualHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse)
       
  1123     {
       
  1124     switch (aCommandId)
       
  1125         {
       
  1126         case  EAlfLCTTextVisualSetTextPane:
       
  1127             {
       
  1128 #ifdef RD_ALF_IN_PLATFORM
       
  1129             CHuiTextVisual* visual = static_cast<CHuiTextVisual*>(iVisual);
       
  1130             TAlfLCTTextVisualSetTextPaneParams* params = (TAlfLCTTextVisualSetTextPaneParams*)aInputBuffer.Ptr();
       
  1131 
       
  1132             TAknLayoutHierarchyComponentHandle handle;
       
  1133             handle.SetApiId(params->iApiId);
       
  1134             handle.SetComponentId(params->iComponentId);
       
  1135             handle.SetVarietyIndex(params->iVarietyIndex);
       
  1136             handle.SetColumn(params->iColumn);
       
  1137             handle.SetRow(params->iRow);
       
  1138     
       
  1139             // we can access the layout data as a text line, as we are expecting it to be a text pane
       
  1140             TAknTextLineLayout componentLayout = AknLayout2Hierarchy::GetTextComponentLayout(handle).LayoutLineNoEmptys();
       
  1141             SetTextPaneL(visual, componentLayout);
       
  1142 #endif // RD_ALF_IN_PLATFORM
       
  1143 
       
  1144             break;                
       
  1145             }
       
  1146             
       
  1147         default:
       
  1148             CAlfTextVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse);
       
  1149         }
       
  1150     }
       
  1151 
       
  1152 #ifdef RD_ALF_IN_PLATFORM
       
  1153 void CAlfLCTTextVisualHandler::SetTextPaneL(CHuiTextVisual* aTextVisual, const TAknTextLineLayout& aLine)
       
  1154     {
       
  1155     THuiAlignHorizontal alignHorizontal(EHuiAlignHLocale);
       
  1156     switch(aLine.iJ)
       
  1157         {
       
  1158         case ELayoutAlignNone:
       
  1159             alignHorizontal = EHuiAlignHLocale;
       
  1160             break;
       
  1161         case ELayoutAlignCenter:
       
  1162             alignHorizontal = EHuiAlignHCenter;
       
  1163             break;
       
  1164         case ELayoutAlignLeft:
       
  1165             alignHorizontal = EHuiAlignHLeft;
       
  1166             break;
       
  1167         case ELayoutAlignRight:
       
  1168             alignHorizontal = EHuiAlignHRight;
       
  1169             break;
       
  1170         case ELayoutAlignBidi:
       
  1171             alignHorizontal = EHuiAlignHBidirectionalText;
       
  1172             break;
       
  1173         default:
       
  1174             alignHorizontal = EHuiAlignHLocale;
       
  1175             break;
       
  1176         }
       
  1177   
       
  1178     aTextVisual->SetAlign(alignHorizontal, EHuiAlignVCenter);// always vertical center, as anchor will have been already set to text pane height
       
  1179 
       
  1180     // Create a platform text style
       
  1181     CHuiTextStyleManager& manager = iResolver.SharedHuiEnv()->TextStyleManager();
       
  1182     TInt textStyleId = manager.CreatePlatformTextStyleL(aLine.iFont);
       
  1183     aTextVisual->SetTextStyle(textStyleId);
       
  1184     }
       
  1185 #else // RD_ALF_IN_PLATFORM
       
  1186 void CAlfLCTTextVisualHandler::SetTextPaneL(CHuiTextVisual* /*aTextVisual*/, const TAknTextLineLayout& /*aLine*/)
       
  1187     {
       
  1188     
       
  1189     }
       
  1190 #endif // RD_ALF_IN_PLATFORM
       
  1191     
       
  1192 
       
  1193 EXPORT_C void CAlfLCTTextVisualHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters)
       
  1194     {
       
  1195     CAlfVisualHandler::VisualHandlerExtension(aExtensionUid,aExtensionParameters);
       
  1196     }
       
  1197 
       
  1198 
       
  1199 //----------------------------
       
  1200 // ImageVisual
       
  1201 //----------------------------
       
  1202 
       
  1203 EXPORT_C MAlfExtension* CAlfImageVisualHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout)
       
  1204     {
       
  1205     CAlfImageVisualHandler* me = new (ELeave) CAlfImageVisualHandler(aResolver);
       
  1206     CleanupStack::PushL(me);
       
  1207     me->ConstructL(NULL, *aOwner, aParentLayout);
       
  1208     CleanupStack::Pop();
       
  1209     return me;
       
  1210     }
       
  1211 
       
  1212 
       
  1213 EXPORT_C CAlfImageVisualHandler::CAlfImageVisualHandler(MAlfInterfaceProvider& aResolver):CAlfVisualHandler(aResolver)
       
  1214     {
       
  1215     }
       
  1216 
       
  1217 
       
  1218 EXPORT_C void CAlfImageVisualHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout)
       
  1219     {
       
  1220     if (!aVisual)
       
  1221         {
       
  1222         CHuiImageVisual* imageVisual = CHuiImageVisual::AddNewL(aOwner, aParentLayout); 
       
  1223         CAlfVisualHandler::ConstructL(imageVisual, aOwner, aParentLayout);
       
  1224         }
       
  1225     else 
       
  1226         {
       
  1227         CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout);
       
  1228         }
       
  1229     }
       
  1230 
       
  1231 
       
  1232 EXPORT_C CAlfImageVisualHandler::~CAlfImageVisualHandler()
       
  1233     {
       
  1234     }
       
  1235 
       
  1236 EXPORT_C void CAlfImageVisualHandler::Release()
       
  1237     {
       
  1238     delete this;    
       
  1239     }
       
  1240 
       
  1241 
       
  1242 EXPORT_C TAny* CAlfImageVisualHandler::GetInterface(const THuiInterfaceSupport& aInterface)
       
  1243     {
       
  1244     return CAlfVisualHandler::GetInterface(aInterface);    
       
  1245     }
       
  1246 
       
  1247 
       
  1248 EXPORT_C void CAlfImageVisualHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse)
       
  1249     {
       
  1250     CHuiImageVisual* visual = static_cast<CHuiImageVisual*>(iVisual);
       
  1251     
       
  1252     switch (aCommandId)
       
  1253         {        
       
  1254         case  EAlfImageVisualSetImage:           
       
  1255             {
       
  1256         	TAlfImageParams* params = (TAlfImageParams*) aInputBuffer.Ptr();
       
  1257         	
       
  1258             // Todo: is is safe enough to handle textures as direct casts..
       
  1259         	TInt handle = params->iTextureHandle;
       
  1260         	MHuiTexture* texture = (MHuiTexture*)handle;
       
  1261    	        
       
  1262    	        THuiImage huiImage;
       
  1263    	        if (texture)
       
  1264    	            {
       
  1265    	            huiImage = THuiImage(*texture,//*(dynamic_cast<MHuiTexture*>(animgif)), 
       
  1266 	                params->iTl.iX.ValueNow(),
       
  1267 	                params->iTl.iY.ValueNow(),
       
  1268 	                params->iBr.iX.ValueNow(),
       
  1269 	                params->iBr.iY.ValueNow());    
       
  1270    	            
       
  1271     	        // We take transition time from one, assuming it is same for everyone.
       
  1272     	        TInt transitionTime = params->iBr.iY.TimeToTargetinMilliSeconds();
       
  1273     	        
       
  1274     	        huiImage.SetTexCoords(params->iTl.iX.Target(),
       
  1275     	            params->iTl.iY.Target(),
       
  1276     	            params->iBr.iX.Target(),
       
  1277     	            params->iBr.iY.Target(),
       
  1278     	            transitionTime );
       
  1279    	            }
       
  1280    	        
       
  1281 	        visual->SetImage( huiImage );
       
  1282             break;                
       
  1283             }
       
  1284         
       
  1285         case  EAlfImageVisualSetScaleMode:           
       
  1286             {
       
  1287             TInt* mode = (TInt*) aInputBuffer.Ptr();
       
  1288         	visual->SetScaleMode(CHuiImageVisual::TScaleMode(*mode));
       
  1289             break;                
       
  1290             }
       
  1291         
       
  1292         case  EAlfImageVisualSetSecondaryImage:           
       
  1293             {
       
  1294         	TAlfImageParams* params = (TAlfImageParams*) aInputBuffer.Ptr();
       
  1295         	
       
  1296             // Todo: is is safe enough to handle textures as direct casts..
       
  1297         	TInt handle = params->iTextureHandle;
       
  1298         	MHuiTexture* texture = (MHuiTexture*)(handle);
       
  1299    	        
       
  1300    	        THuiImage huiImage;
       
  1301    	        if (texture)
       
  1302    	            {
       
  1303    	            huiImage = THuiImage(*texture, 
       
  1304 	                params->iTl.iX.ValueNow(),
       
  1305 	                params->iTl.iY.ValueNow(),
       
  1306 	                params->iBr.iX.ValueNow(),
       
  1307 	                params->iBr.iY.ValueNow());    
       
  1308    	            
       
  1309     	        // We take transition time from one, assuming it is same for everyone.
       
  1310     	        TInt transitionTime = params->iBr.iY.TimeToTargetinMilliSeconds();
       
  1311     	        
       
  1312     	        huiImage.SetTexCoords(params->iTl.iX.Target(),
       
  1313     	            params->iTl.iY.Target(),
       
  1314     	            params->iBr.iX.Target(),
       
  1315     	            params->iBr.iY.Target(),
       
  1316     	            transitionTime );
       
  1317    	            }
       
  1318 
       
  1319 	        visual->SetSecondaryImage( huiImage );
       
  1320             break;                
       
  1321             }
       
  1322         
       
  1323         case  EAlfImageVisualSetSecondaryAlpha:           
       
  1324             {
       
  1325             TAlfTimedValue* alpha = (TAlfTimedValue*) aInputBuffer.Ptr();
       
  1326             AlfTimedValueUtility::CopyTimedValue(*alpha, visual->iSecondaryAlpha, iResolver);
       
  1327             break;                
       
  1328             }
       
  1329 
       
  1330         case  EAlfImageVisualSecondaryAlpha:           
       
  1331             {
       
  1332             TAlfTimedValue value;
       
  1333             AlfTimedValueUtility::CopyTimedValue(visual->iSecondaryAlpha, value);             
       
  1334 
       
  1335             TPckg<TAlfTimedValue> resultPckg(value);            
       
  1336             aResponse = resultPckg; 
       
  1337             break;
       
  1338             }
       
  1339         
       
  1340         case  EAlfImageVisualSetColor:           
       
  1341             {
       
  1342             TRgb* color = (TRgb*) aInputBuffer.Ptr();
       
  1343         	visual->SetColor(*color);
       
  1344             break;                
       
  1345             }
       
  1346         
       
  1347         case  EAlfImageVisualSetColorMode:           
       
  1348             {
       
  1349             TIntTReal* mode = (TIntTReal*) aInputBuffer.Ptr();
       
  1350         	visual->SetColorMode(CHuiImageVisual::TColorMode(mode->iInt),mode->iReal);
       
  1351             break;                
       
  1352             }
       
  1353         
       
  1354         case  EAlfImageVisualSetStretch:           
       
  1355             {
       
  1356             TInt2* mode = (TInt2*) aInputBuffer.Ptr();
       
  1357         	visual->SetStretch(mode->iInt1,mode->iInt2);
       
  1358             break;                
       
  1359             }
       
  1360         
       
  1361         case  EAlfImageVisualSetStretchMode:           
       
  1362             {
       
  1363             CHuiGc::TStretchMode* mode = (CHuiGc::TStretchMode*) aInputBuffer.Ptr();
       
  1364         	visual->SetStretchMode(*mode);
       
  1365             break;                
       
  1366             }
       
  1367         
       
  1368         /* deprecated
       
  1369         case  EAlfImageVisualSetDropShadow:           
       
  1370         case  EAlfImageVisualSetDropShadowMetric:
       
  1371         */
       
  1372             
       
  1373         case EAlfImageVisualSetTurnAngle:
       
  1374             {
       
  1375             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr();
       
  1376             AlfTimedValueUtility::CopyTimedValue(*value, visual->iTurnAngle, iResolver);
       
  1377             break;    
       
  1378             }
       
  1379         case  EAlfImageVisualTurnAngle:           
       
  1380             {
       
  1381             TAlfTimedValue value;
       
  1382             AlfTimedValueUtility::CopyTimedValue(visual->iTurnAngle, value);             
       
  1383             TPckg<TAlfTimedValue> resultPckg(value);            
       
  1384             aResponse = resultPckg; 
       
  1385             break;
       
  1386             }
       
  1387         case EAlfImageVisualSetScale:
       
  1388             {
       
  1389             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr();
       
  1390             AlfTimedValueUtility::CopyTimedValue(*value, visual->iScale, iResolver);
       
  1391             break;    
       
  1392             }
       
  1393         case  EAlfImageVisualScale:           
       
  1394             {
       
  1395             TAlfTimedValue value;
       
  1396             AlfTimedValueUtility::CopyTimedValue(visual->iScale, value);             
       
  1397             TPckg<TAlfTimedValue> resultPckg(value);            
       
  1398             aResponse = resultPckg; 
       
  1399             break;
       
  1400             }
       
  1401         case EAlfImageVisualSetOffset:
       
  1402             {
       
  1403             TAlfTimedPoint* value = (TAlfTimedPoint*) aInputBuffer.Ptr();
       
  1404             AlfTimedValueUtility::CopyTimedValue(value->iX, visual->iOffset.iX, iResolver);
       
  1405             AlfTimedValueUtility::CopyTimedValue(value->iY, visual->iOffset.iY, iResolver);
       
  1406             break;    
       
  1407             }
       
  1408         case  EAlfImageVisualOffset:           
       
  1409             {
       
  1410             TAlfTimedPoint value;
       
  1411             AlfTimedPointUtility::CopyTimedPoint(visual->iOffset, value);             
       
  1412             TPckg<TAlfTimedPoint> resultPckg(value);            
       
  1413             aResponse = resultPckg; 
       
  1414             break;
       
  1415             }
       
  1416         case EAlfVisualCopyValuesFromOtherVisual:
       
  1417         case EAlfVisualPauseProperties:
       
  1418         case EAlfVisualResumeProperties:        
       
  1419             {
       
  1420             if (aCommandId == EAlfVisualCopyValuesFromOtherVisual)
       
  1421                 {
       
  1422                 TInt3* inptr =  (TInt3*) aInputBuffer.Ptr();
       
  1423                 CHuiImageVisual* sourceVisual = (CHuiImageVisual*) iResolver.GetInterfaceL( EHuiObjectTypeVisual, inptr->iInt1 );
       
  1424                 if (inptr->iInt2&AlfVisualProperties::ESecondaryImageAlpha)
       
  1425                     {
       
  1426                     visual->iSecondaryAlpha.Set(sourceVisual->iSecondaryAlpha.Target(), inptr->iInt3 );
       
  1427                     }
       
  1428                 if (inptr->iInt2&AlfVisualProperties::EPosOffset)
       
  1429                     {
       
  1430                     visual->iOffset.iY.Set(sourceVisual->iOffset.iY.Target(), inptr->iInt3); 
       
  1431                     visual->iOffset.iX.Set(sourceVisual->iOffset.iX.Target(), inptr->iInt3); 
       
  1432                     }
       
  1433                 if (inptr->iInt2&AlfVisualProperties::EImageVisTurnAngle)
       
  1434                     {
       
  1435                     visual->iTurnAngle.Set(sourceVisual->iTurnAngle.Target(), inptr->iInt3 );
       
  1436                     }
       
  1437                 if (inptr->iInt2&AlfVisualProperties::EScale)
       
  1438                     {
       
  1439                     visual->iScale.Set(sourceVisual->iScale.Target(), inptr->iInt3 );
       
  1440                     }
       
  1441                 }
       
  1442             else if (aCommandId == EAlfVisualPauseProperties)
       
  1443                 {
       
  1444                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  1445                 if (*inptr&AlfVisualProperties::ESecondaryImageAlpha)
       
  1446                     {
       
  1447                     visual->iSecondaryAlpha.Suspend();
       
  1448                     }
       
  1449                 if (*inptr&AlfVisualProperties::EPosOffset)
       
  1450                     {
       
  1451                     visual->iOffset.iY.Suspend(); 
       
  1452                     visual->iOffset.iX.Suspend(); 
       
  1453                     }
       
  1454                 if (*inptr&AlfVisualProperties::EImageVisTurnAngle)
       
  1455                     {
       
  1456                     visual->iTurnAngle.Suspend();
       
  1457                     }
       
  1458                 if (*inptr&AlfVisualProperties::EScale)
       
  1459                     {
       
  1460                     visual->iScale.Suspend();
       
  1461                     }
       
  1462                 }
       
  1463             else //  EAlfVisualResumeProperties
       
  1464                 {
       
  1465                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  1466                 if (*inptr&AlfVisualProperties::ESecondaryImageAlpha)
       
  1467                     {
       
  1468                     visual->iSecondaryAlpha.Suspend(EFalse);
       
  1469                     }
       
  1470                 if (*inptr&AlfVisualProperties::EPosOffset)
       
  1471                     {
       
  1472                     visual->iOffset.iY.Suspend(EFalse); 
       
  1473                     visual->iOffset.iX.Suspend(EFalse); 
       
  1474                     }
       
  1475                 if (*inptr&AlfVisualProperties::EImageVisTurnAngle)
       
  1476                     {
       
  1477                     visual->iTurnAngle.Suspend(EFalse);
       
  1478                     }
       
  1479                 if (*inptr&AlfVisualProperties::EScale)
       
  1480                     {
       
  1481                     visual->iScale.Suspend(EFalse);
       
  1482                     }
       
  1483                 }
       
  1484             } // FALL THROUGH !!
       
  1485         
       
  1486         default:
       
  1487             CAlfVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse);
       
  1488         }
       
  1489     }
       
  1490 
       
  1491 EXPORT_C void CAlfImageVisualHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters)
       
  1492     {
       
  1493     CAlfVisualHandler::VisualHandlerExtension(aExtensionUid,aExtensionParameters);
       
  1494     }
       
  1495 
       
  1496     
       
  1497 //----------------------------
       
  1498 // Line Visual
       
  1499 //----------------------------
       
  1500 EXPORT_C MAlfExtension* CAlfLineVisualHandler::NewL(
       
  1501     MAlfInterfaceProvider& aResolver, 
       
  1502     CHuiControl* aOwner, 
       
  1503     CHuiLayout* aParentLayout)
       
  1504     {
       
  1505     CAlfLineVisualHandler* me = new (ELeave) CAlfLineVisualHandler(aResolver);
       
  1506     CleanupStack::PushL(me);
       
  1507     me->ConstructL(NULL, *aOwner, aParentLayout);
       
  1508     CleanupStack::Pop();
       
  1509     return me;
       
  1510     }
       
  1511 
       
  1512 
       
  1513 EXPORT_C CAlfLineVisualHandler::CAlfLineVisualHandler(
       
  1514     MAlfInterfaceProvider& aResolver)
       
  1515     : CAlfVisualHandler(aResolver)
       
  1516     {
       
  1517     }
       
  1518 
       
  1519 
       
  1520 EXPORT_C void CAlfLineVisualHandler::ConstructL(
       
  1521     CHuiVisual* aVisual, 
       
  1522     CHuiControl& aOwner, 
       
  1523     CHuiLayout* aParentLayout)
       
  1524     {
       
  1525     if (!aVisual)
       
  1526         {
       
  1527         CHuiLineVisual* lineVisual = 
       
  1528             CHuiLineVisual::AddNewL(aOwner, aParentLayout); 
       
  1529         CAlfVisualHandler::ConstructL(lineVisual, aOwner, aParentLayout);
       
  1530         }
       
  1531     else 
       
  1532         {
       
  1533         CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout);
       
  1534         }
       
  1535     }
       
  1536 
       
  1537 
       
  1538 EXPORT_C CAlfLineVisualHandler::~CAlfLineVisualHandler()
       
  1539     {
       
  1540     }
       
  1541 
       
  1542 EXPORT_C void CAlfLineVisualHandler::Release()
       
  1543     {
       
  1544     delete this;
       
  1545     }
       
  1546 
       
  1547 
       
  1548 EXPORT_C TAny* CAlfLineVisualHandler::GetInterface(
       
  1549     const THuiInterfaceSupport& aInterface)
       
  1550     {
       
  1551     CHuiLineVisual* lineVisual = static_cast<CHuiLineVisual*>(iVisual);
       
  1552     switch (aInterface)
       
  1553         {
       
  1554         case EHuiObjectTypeCurvePathProvider:
       
  1555             return &lineVisual->Path();
       
  1556         default:
       
  1557             return CAlfVisualHandler::GetInterface(aInterface);
       
  1558         }
       
  1559     }
       
  1560 
       
  1561 
       
  1562 EXPORT_C void CAlfLineVisualHandler::HandleCmdL(
       
  1563     TInt aCommandId, 
       
  1564     const TDesC8& aInputBuffer, 
       
  1565     TDes8& aResponse)
       
  1566     {
       
  1567     CHuiLineVisual* lineVisual = static_cast<CHuiLineVisual*>(iVisual);
       
  1568     
       
  1569     switch (aCommandId)
       
  1570         {
       
  1571         case EAlfLineVisualSetPath:
       
  1572             {
       
  1573             TInt2* params = (TInt2*) aInputBuffer.Ptr();
       
  1574             CHuiCurvePath* curvePath = NULL;
       
  1575             if ( params->iInt1 )
       
  1576                 {
       
  1577                 MHuiMappingFunction* mappingFunction = NULL;
       
  1578                 mappingFunction = static_cast<MHuiMappingFunction*>
       
  1579                     (iResolver.GetInterfaceL( 
       
  1580                         EHuiInterfaceMappingFunction, 
       
  1581                         params->iInt1 ) );
       
  1582                 curvePath = static_cast<CHuiCurvePath*>( mappingFunction );
       
  1583                 }
       
  1584             
       
  1585             // The CAlfCurvePathHandler owns the CHuiCurveParh instance always
       
  1586             lineVisual->SetPath( curvePath , EHuiDoesNotHaveOwnership );
       
  1587             
       
  1588             break;
       
  1589             }
       
  1590             
       
  1591         case EAlfLineVisualSetImage:
       
  1592             {
       
  1593             TAlfImageParams* params = (TAlfImageParams*) aInputBuffer.Ptr();
       
  1594         	
       
  1595             // Todo: is is safe enough to handle textures as direct casts..
       
  1596         	TInt handle = params->iTextureHandle;
       
  1597         	MHuiTexture* texture = reinterpret_cast<MHuiTexture*>(handle);
       
  1598    	        THuiImage huiImage;
       
  1599    	        if (texture)
       
  1600    	            {
       
  1601    	            huiImage = THuiImage(*texture, 
       
  1602 	                params->iTl.iX.ValueNow(),
       
  1603 	                params->iTl.iY.ValueNow(),
       
  1604 	                params->iBr.iX.ValueNow(),
       
  1605 	                params->iBr.iY.ValueNow());    
       
  1606    	            
       
  1607     	        // We take transition time from one, assuming it is same for everyone.
       
  1608     	        TInt transitionTime = params->iBr.iY.TimeToTargetinMilliSeconds();
       
  1609     	        
       
  1610     	        huiImage.SetTexCoords(params->iTl.iX.Target(),
       
  1611     	            params->iTl.iY.Target(),
       
  1612     	            params->iBr.iX.Target(),
       
  1613     	            params->iBr.iY.Target(),
       
  1614     	            transitionTime );
       
  1615    	            }
       
  1616 	            
       
  1617 	        lineVisual->SetImage( huiImage );
       
  1618             break;
       
  1619             }
       
  1620             
       
  1621         case EAlfLineVisualSetAlphaFunction:
       
  1622             {
       
  1623             TInt* params = (TInt*) aInputBuffer.Ptr();
       
  1624             MHuiMappingFunction* mappingFunction = NULL;
       
  1625             if ( *params )
       
  1626                 {
       
  1627                 mappingFunction = static_cast<MHuiMappingFunction*>
       
  1628                     (iResolver.GetInterfaceL( 
       
  1629                         EHuiInterfaceMappingFunction, 
       
  1630                         *params ) );
       
  1631                 }
       
  1632                 
       
  1633             lineVisual->SetAlphaFunction( mappingFunction );
       
  1634             break;
       
  1635             }
       
  1636             
       
  1637         case EAlfLineVisualSetWidthFunction:
       
  1638             {
       
  1639             TInt* params = (TInt*) aInputBuffer.Ptr();
       
  1640             MHuiMappingFunction* mappingFunction = NULL;
       
  1641             if ( *params )
       
  1642                 {
       
  1643                 mappingFunction = static_cast<MHuiMappingFunction*>
       
  1644                     (iResolver.GetInterfaceL( 
       
  1645                         EHuiInterfaceMappingFunction, 
       
  1646                         *params ) );
       
  1647                 }
       
  1648                 
       
  1649             lineVisual->SetWidthFunction( mappingFunction );
       
  1650             break;
       
  1651             }
       
  1652             
       
  1653         case EAlfLineVisualGetThickness:
       
  1654             {
       
  1655             TAlfTimedValue value;
       
  1656             AlfTimedValueUtility::CopyTimedValue(lineVisual->iThickness, value);
       
  1657 
       
  1658             TPckg<TAlfTimedValue> resultPckg(value);
       
  1659             aResponse = resultPckg; // awkward   
       
  1660             break;
       
  1661             }
       
  1662             
       
  1663         case EAlfLineVisualSetThickness:
       
  1664             {
       
  1665             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1666             AlfTimedValueUtility::CopyTimedValue(*value, lineVisual->iThickness, iResolver);
       
  1667             break;
       
  1668             }
       
  1669             
       
  1670         case EAlfLineVisualGetShadowThickness:
       
  1671             {
       
  1672             TAlfTimedValue value;
       
  1673             AlfTimedValueUtility::CopyTimedValue(lineVisual->iShadowThickness, value);
       
  1674 
       
  1675             TPckg<TAlfTimedValue> resultPckg(value);
       
  1676             aResponse = resultPckg; // awkward 
       
  1677             break;
       
  1678             }
       
  1679             
       
  1680         case EAlfLineVisualSetShadowThickness:
       
  1681             {
       
  1682             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1683             AlfTimedValueUtility::CopyTimedValue(*value, lineVisual->iShadowThickness, iResolver);
       
  1684             break;
       
  1685             }
       
  1686             
       
  1687         case EAlfLineVisualGetStartPos:
       
  1688             {
       
  1689             TAlfTimedValue value;
       
  1690             AlfTimedValueUtility::CopyTimedValue(lineVisual->iStartPos, value);
       
  1691             TPckg<TAlfTimedValue> resultPckg(value);
       
  1692             aResponse = resultPckg; // awkward 
       
  1693             break;
       
  1694             }
       
  1695             
       
  1696         case EAlfLineVisualSetStartPos:
       
  1697             {
       
  1698             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1699             AlfTimedValueUtility::CopyTimedValue(*value, lineVisual->iStartPos, iResolver);
       
  1700             break;
       
  1701             }
       
  1702             
       
  1703         case EAlfLineVisualGetEndPos:
       
  1704             {
       
  1705             TAlfTimedValue value;
       
  1706             AlfTimedValueUtility::CopyTimedValue(lineVisual->iEndPos, value);
       
  1707             TPckg<TAlfTimedValue> resultPckg(value);
       
  1708             aResponse = resultPckg; // awkward 
       
  1709             break;
       
  1710             }
       
  1711             
       
  1712         case EAlfLineVisualSetEndPos:
       
  1713             {
       
  1714             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1715             AlfTimedValueUtility::CopyTimedValue(*value, lineVisual->iEndPos, iResolver);
       
  1716             break;
       
  1717             }
       
  1718 
       
  1719         case EAlfLineVisualSetColor:           
       
  1720             {
       
  1721             TRgb* color = (TRgb*) aInputBuffer.Ptr();
       
  1722         	lineVisual->SetColor(*color);
       
  1723             break;                
       
  1724             }
       
  1725         
       
  1726         case EAlfVisualCopyValuesFromOtherVisual:
       
  1727         case EAlfVisualPauseProperties:
       
  1728         case EAlfVisualResumeProperties:        
       
  1729             {
       
  1730             if (aCommandId == EAlfVisualCopyValuesFromOtherVisual)
       
  1731                {
       
  1732                 TInt3* inptr =  (TInt3*) aInputBuffer.Ptr();
       
  1733                 CHuiLineVisual* sourceVisual = (CHuiLineVisual*) iResolver.GetInterfaceL( EHuiObjectTypeVisual, inptr->iInt1 );
       
  1734                 if (inptr->iInt2&AlfVisualProperties::ELineVisThickness)
       
  1735                     {
       
  1736                     lineVisual->iThickness.Set(sourceVisual->iThickness.Target(), inptr->iInt3 );
       
  1737                     }
       
  1738                 if (inptr->iInt2&AlfVisualProperties::ELineVisShadowThickness)
       
  1739                     {
       
  1740                     lineVisual->iShadowThickness.Set(sourceVisual->iShadowThickness.Target(), inptr->iInt3); 
       
  1741                     }
       
  1742                 if (inptr->iInt2&AlfVisualProperties::ELineVisStartPos)
       
  1743                     {
       
  1744                     lineVisual->iStartPos.Set(sourceVisual->iStartPos.Target(), inptr->iInt3 );
       
  1745                     }
       
  1746                 if (inptr->iInt2&AlfVisualProperties::ELineVisEndPos)
       
  1747                     {
       
  1748                     lineVisual->iEndPos.Set(sourceVisual->iEndPos.Target(), inptr->iInt3 );
       
  1749                     }
       
  1750                }
       
  1751             else if (aCommandId == EAlfVisualPauseProperties)
       
  1752                {
       
  1753                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  1754                 if (*inptr&AlfVisualProperties::ELineVisThickness)
       
  1755                     {
       
  1756                     lineVisual->iThickness.Suspend();
       
  1757                     }
       
  1758                 if (*inptr&AlfVisualProperties::ELineVisShadowThickness)
       
  1759                     {
       
  1760                     lineVisual->iShadowThickness.Suspend(); 
       
  1761                     }
       
  1762                 if (*inptr&AlfVisualProperties::ELineVisStartPos)
       
  1763                     {
       
  1764                     lineVisual->iStartPos.Suspend();
       
  1765                     }
       
  1766                 if (*inptr&AlfVisualProperties::ELineVisEndPos)
       
  1767                     {
       
  1768                     lineVisual->iEndPos.Suspend();
       
  1769                     }
       
  1770                }
       
  1771             else // EAlfVisualPauseProperties
       
  1772                {
       
  1773                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  1774                 if (*inptr&AlfVisualProperties::ELineVisThickness)
       
  1775                     {
       
  1776                     lineVisual->iThickness.Suspend(EFalse);
       
  1777                     }
       
  1778                 if (*inptr&AlfVisualProperties::ELineVisShadowThickness)
       
  1779                     {
       
  1780                     lineVisual->iShadowThickness.Suspend(EFalse); 
       
  1781                     }
       
  1782                 if (*inptr&AlfVisualProperties::ELineVisStartPos)
       
  1783                     {
       
  1784                     lineVisual->iStartPos.Suspend(EFalse);
       
  1785                     }
       
  1786                 if (*inptr&AlfVisualProperties::ELineVisEndPos)
       
  1787                     {
       
  1788                     lineVisual->iEndPos.Suspend(EFalse);
       
  1789                     }
       
  1790                }
       
  1791             
       
  1792             
       
  1793             } // FALL THROUGH !!
       
  1794             
       
  1795         default:
       
  1796             CAlfVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse);
       
  1797         }
       
  1798     }
       
  1799 
       
  1800 EXPORT_C void CAlfLineVisualHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters)
       
  1801     {
       
  1802     CAlfVisualHandler::VisualHandlerExtension(aExtensionUid,aExtensionParameters);
       
  1803     }
       
  1804 
       
  1805 //----------------------------
       
  1806 // Mesh Visual
       
  1807 //----------------------------
       
  1808 EXPORT_C MAlfExtension* CAlfMeshVisualHandler::NewL(
       
  1809     MAlfInterfaceProvider& aResolver, 
       
  1810     CHuiControl* aOwner, 
       
  1811     THuiMeshType aMeshType,
       
  1812     CHuiLayout* aParentLayout)
       
  1813     {
       
  1814     CAlfMeshVisualHandler* me = new (ELeave) CAlfMeshVisualHandler(aResolver);
       
  1815     CleanupStack::PushL(me);
       
  1816     me->ConstructL(NULL, *aOwner, aMeshType, aParentLayout);
       
  1817     CleanupStack::Pop();
       
  1818     return me;
       
  1819     }
       
  1820 
       
  1821 
       
  1822 EXPORT_C CAlfMeshVisualHandler::CAlfMeshVisualHandler(
       
  1823     MAlfInterfaceProvider& aResolver)
       
  1824     : CAlfVisualHandler(aResolver)
       
  1825     {
       
  1826     }
       
  1827 
       
  1828 
       
  1829 EXPORT_C void CAlfMeshVisualHandler::ConstructL(
       
  1830     CHuiVisual* aVisual, 
       
  1831     CHuiControl& aOwner,
       
  1832     THuiMeshType aMeshType, 
       
  1833     CHuiLayout* aParentLayout)
       
  1834     {
       
  1835     if (!aVisual)
       
  1836         {
       
  1837         CHuiMeshVisual* meshVisual = 
       
  1838             CHuiMeshVisual::AddNewL(aOwner, aMeshType, aParentLayout); 
       
  1839         CAlfVisualHandler::ConstructL(meshVisual, aOwner, aParentLayout);
       
  1840         }
       
  1841     else 
       
  1842         {
       
  1843         CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout);
       
  1844         }
       
  1845     }
       
  1846 
       
  1847 
       
  1848 EXPORT_C CAlfMeshVisualHandler::~CAlfMeshVisualHandler()
       
  1849     {
       
  1850     }
       
  1851 
       
  1852 EXPORT_C void CAlfMeshVisualHandler::Release()
       
  1853     {
       
  1854     delete this;
       
  1855     }
       
  1856 
       
  1857 
       
  1858 EXPORT_C TAny* CAlfMeshVisualHandler::GetInterface(
       
  1859     const THuiInterfaceSupport& aInterface)
       
  1860     {
       
  1861     return CAlfVisualHandler::GetInterface(aInterface);
       
  1862     }
       
  1863 
       
  1864 
       
  1865 EXPORT_C void CAlfMeshVisualHandler::HandleCmdL(
       
  1866     TInt aCommandId, 
       
  1867     const TDesC8& aInputBuffer, 
       
  1868     TDes8& aResponse)
       
  1869     {
       
  1870     CHuiMeshVisual* meshVisual = static_cast<CHuiMeshVisual*>(iVisual);
       
  1871     
       
  1872     switch (aCommandId)
       
  1873         {
       
  1874         case EAlfMeshVisualSetImage:            // flow through
       
  1875         case EAlfMeshVisualSetSecondaryImage:   // flow through
       
  1876         case EAlfMeshVisualSetSpecularImage:
       
  1877             {
       
  1878           	TAlfImageParams* params = (TAlfImageParams*) aInputBuffer.Ptr();
       
  1879         	
       
  1880             // Todo: is is safe enough to handle textures as direct casts..
       
  1881         	TInt handle = params->iTextureHandle;
       
  1882         	MHuiTexture* texture = reinterpret_cast<MHuiTexture*>(handle);
       
  1883    	        THuiImage huiImage;
       
  1884    	        if (texture)
       
  1885    	            {
       
  1886    	            huiImage = THuiImage(*texture, 
       
  1887 	                params->iTl.iX.ValueNow(),
       
  1888 	                params->iTl.iY.ValueNow(),
       
  1889 	                params->iBr.iX.ValueNow(),
       
  1890 	                params->iBr.iY.ValueNow());    
       
  1891    	            
       
  1892     	        // We take transition time from one, assuming it is same for everyone.
       
  1893     	        TInt transitionTime = params->iBr.iY.TimeToTargetinMilliSeconds();
       
  1894     	        
       
  1895     	        huiImage.SetTexCoords(params->iTl.iX.Target(),
       
  1896     	            params->iTl.iY.Target(),
       
  1897     	            params->iBr.iX.Target(),
       
  1898     	            params->iBr.iY.Target(),
       
  1899     	            transitionTime );
       
  1900    	            }
       
  1901    	        
       
  1902    	        if ( aCommandId == EAlfMeshVisualSetImage )
       
  1903    	            {
       
  1904    	            meshVisual->SetImage( huiImage );
       
  1905    	            }
       
  1906    	        else if ( aCommandId == EAlfMeshVisualSetSecondaryImage )
       
  1907    	            {
       
  1908    	            meshVisual->SetSecondaryImage( huiImage );
       
  1909    	            }
       
  1910    	        else if ( aCommandId == EAlfMeshVisualSetSpecularImage )
       
  1911    	            {
       
  1912    	            meshVisual->SetSpecularImage( huiImage );
       
  1913    	            }
       
  1914    	        else
       
  1915    	            {
       
  1916    	            // for PC lint
       
  1917    	            }
       
  1918             break;
       
  1919             }
       
  1920             
       
  1921         case EAlfMeshVisualCreateMesh:
       
  1922             {
       
  1923             THuiMeshType* meshType = (THuiMeshType*)aInputBuffer.Ptr();
       
  1924             
       
  1925             // Create mesh for the mesh visual.
       
  1926             meshVisual->CreateMeshL(*meshType);
       
  1927             break;
       
  1928             }
       
  1929             
       
  1930         case EAlfMeshVisualSecondaryAlpha:
       
  1931             {
       
  1932             TAlfTimedValue value;
       
  1933             AlfTimedValueUtility::CopyTimedValue(meshVisual->iSecondaryAlpha, value);
       
  1934 
       
  1935             TPckg<TAlfTimedValue> resultPckg(value);
       
  1936             aResponse = resultPckg; // awkward   
       
  1937             break;
       
  1938             }
       
  1939             
       
  1940         case EAlfMeshVisualSetSecondaryAlpha:
       
  1941             {
       
  1942             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1943             AlfTimedValueUtility::CopyTimedValue(*value, meshVisual->iSecondaryAlpha, iResolver);
       
  1944             break;
       
  1945             }
       
  1946             
       
  1947         case EAlfMeshVisualYawAngle:
       
  1948             {
       
  1949             TAlfTimedValue value;
       
  1950             AlfTimedValueUtility::CopyTimedValue(meshVisual->iYawAngle, value);
       
  1951 
       
  1952             TPckg<TAlfTimedValue> resultPckg(value);
       
  1953             aResponse = resultPckg; // awkward   
       
  1954             break;
       
  1955             }
       
  1956             
       
  1957         case EAlfMeshVisualSetYawAngle:
       
  1958             {
       
  1959             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1960             AlfTimedValueUtility::CopyTimedValue(*value, meshVisual->iYawAngle, iResolver);
       
  1961             break;
       
  1962             }
       
  1963             
       
  1964         case EAlfMeshVisualPitchAngle:
       
  1965             {
       
  1966             TAlfTimedValue value;
       
  1967             AlfTimedValueUtility::CopyTimedValue(meshVisual->iPitchAngle, value);
       
  1968 
       
  1969             TPckg<TAlfTimedValue> resultPckg(value);
       
  1970             aResponse = resultPckg; // awkward   
       
  1971             break;
       
  1972             }
       
  1973             
       
  1974         case EAlfMeshVisualSetPitchAngle:
       
  1975             {
       
  1976             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1977             AlfTimedValueUtility::CopyTimedValue(*value, meshVisual->iPitchAngle, iResolver);
       
  1978             break;
       
  1979             }
       
  1980             
       
  1981         case EAlfMeshVisualScale:
       
  1982             {
       
  1983             TAlfTimedValue value;
       
  1984             AlfTimedValueUtility::CopyTimedValue(meshVisual->iScale, value);
       
  1985 
       
  1986             TPckg<TAlfTimedValue> resultPckg(value);
       
  1987             aResponse = resultPckg; // awkward 
       
  1988             break;
       
  1989             }
       
  1990             
       
  1991         case EAlfMeshVisualSetScale:
       
  1992             {
       
  1993             TAlfTimedValue* value = (TAlfTimedValue*) aInputBuffer.Ptr() ;
       
  1994             AlfTimedValueUtility::CopyTimedValue(*value, meshVisual->iScale, iResolver);
       
  1995             break;
       
  1996             }
       
  1997             
       
  1998         case EAlfMeshReset:
       
  1999             {
       
  2000             meshVisual->Mesh().Reset();
       
  2001             break;
       
  2002             }
       
  2003             
       
  2004         case EAlfMeshMakeCube:
       
  2005             {
       
  2006             RArray<TReal32> params;
       
  2007             CleanupClosePushL( params );
       
  2008             InternalizeL(aInputBuffer, params);
       
  2009               
       
  2010             CHuiProceduralMesh& mesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());
       
  2011             mesh.MakeCubeL(
       
  2012                 params[0],
       
  2013                 params[1],
       
  2014                 params[2],
       
  2015                 params[3] );
       
  2016                 
       
  2017             CleanupStack::PopAndDestroy( &params );  
       
  2018             break;
       
  2019             }
       
  2020             
       
  2021         case EAlfMeshMakeSphere:
       
  2022             {
       
  2023             RArray<TReal32> params;
       
  2024             CleanupClosePushL( params );
       
  2025             InternalizeL(aInputBuffer, params);
       
  2026               
       
  2027             CHuiProceduralMesh& mesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());
       
  2028             mesh.MakeSphereL(
       
  2029                 params[0],
       
  2030                 HUI_ROUND_FLOAT_TO_INT(params[1]),
       
  2031                 HUI_ROUND_FLOAT_TO_INT(params[2]) );
       
  2032                 
       
  2033             CleanupStack::PopAndDestroy( &params );
       
  2034             break;
       
  2035             }
       
  2036             
       
  2037         case EAlfMeshMakeTorus:
       
  2038             {
       
  2039             RArray<TReal32> params;
       
  2040             CleanupClosePushL( params );
       
  2041             InternalizeL(aInputBuffer, params);
       
  2042             
       
  2043             CHuiProceduralMesh& mesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());
       
  2044             mesh.MakeTorusL(
       
  2045                 params[0],
       
  2046                 params[1],
       
  2047                 HUI_ROUND_FLOAT_TO_INT(params[2]),
       
  2048                 HUI_ROUND_FLOAT_TO_INT(params[3]),
       
  2049                 params[4] );
       
  2050              
       
  2051             CleanupStack::PopAndDestroy( &params );   
       
  2052             break;
       
  2053             }
       
  2054             
       
  2055         case EAlfMeshStretchUniformly:
       
  2056             {
       
  2057             RArray<TReal32> params;
       
  2058             CleanupClosePushL( params );
       
  2059             InternalizeL(aInputBuffer, params);
       
  2060             
       
  2061             meshVisual->Mesh().StretchUniformly(
       
  2062                 params[0],
       
  2063                 params[1],
       
  2064                 params[2],
       
  2065                 params[3],
       
  2066                 params[4],
       
  2067                 params[5] );
       
  2068             
       
  2069             CleanupStack::PopAndDestroy( &params );  
       
  2070             break;
       
  2071             }
       
  2072             
       
  2073         case EAlfMeshScaleUniformly:
       
  2074             {
       
  2075             RArray<TReal32> params;
       
  2076             CleanupClosePushL( params );
       
  2077             InternalizeL(aInputBuffer, params);
       
  2078             
       
  2079             meshVisual->Mesh().ScaleUniformly(
       
  2080                 params[0],
       
  2081                 params[1],
       
  2082                 params[2] );
       
  2083                 
       
  2084             CleanupStack::PopAndDestroy( &params );  
       
  2085             break;
       
  2086             }
       
  2087             
       
  2088         case EAlfMeshMaterial:
       
  2089             {
       
  2090             TAlfMaterialParams alfMaterial;
       
  2091             TPckg<TAlfMaterialParams> outputPckg(alfMaterial); 
       
  2092             
       
  2093             CHuiProceduralMesh& mesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());            
       
  2094             THuiMaterial huiMaterial = mesh.iMaterial;
       
  2095             
       
  2096             // Update only timed values
       
  2097             AlfTimedValueUtility::CopyTimedValue(huiMaterial.iSpecular, alfMaterial.iSpecular);  
       
  2098             
       
  2099             // The client should know the other values. Or does other components 
       
  2100             // modify the material?
       
  2101             
       
  2102             aResponse = outputPckg;
       
  2103             break;
       
  2104             }
       
  2105             
       
  2106         case EAlfMeshSetMaterial:
       
  2107             {
       
  2108             TAlfMaterialParams* params = (TAlfMaterialParams*) aInputBuffer.Ptr();
       
  2109             
       
  2110             CHuiProceduralMesh& mesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());
       
  2111             THuiMaterial& huiMaterial = mesh.iMaterial;
       
  2112             // Preset
       
  2113             huiMaterial.iPreset = (THuiMaterialPreset)params->iPreset;
       
  2114             // Color
       
  2115             huiMaterial.iColor = params->iColor;
       
  2116             // Texture image
       
  2117             TInt handleImage = params->iTextureImage.iTextureHandle;
       
  2118         	MHuiTexture* textureImage = reinterpret_cast<MHuiTexture*>(handleImage);
       
  2119    	        if (textureImage)
       
  2120    	            {
       
  2121    	            huiMaterial.iTextureImage = THuiImage(*textureImage, 
       
  2122 	                params->iTextureImage.iTl.iX.ValueNow(),
       
  2123 	                params->iTextureImage.iTl.iY.ValueNow(),
       
  2124 	                params->iTextureImage.iBr.iX.ValueNow(),
       
  2125 	                params->iTextureImage.iBr.iY.ValueNow());    
       
  2126     	        // We take transition time from one, assuming it is same for everyone.
       
  2127     	        TInt transitionTime = params->iTextureImage.iBr.iY.TimeToTargetinMilliSeconds();
       
  2128     	        huiMaterial.iTextureImage.SetTexCoords(
       
  2129     	            params->iTextureImage.iTl.iX.Target(),
       
  2130     	            params->iTextureImage.iTl.iY.Target(),
       
  2131     	            params->iTextureImage.iBr.iX.Target(),
       
  2132     	            params->iTextureImage.iBr.iY.Target(),
       
  2133     	            transitionTime );
       
  2134    	            }
       
  2135    	            
       
  2136    	        // Specular image
       
  2137             TInt handleSpecular = params->iSpecularImage.iTextureHandle;
       
  2138         	MHuiTexture* textureSpecular = reinterpret_cast<MHuiTexture*>(handleSpecular);
       
  2139    	        if (textureSpecular)
       
  2140    	            {
       
  2141    	            huiMaterial.iSpecularImage = THuiImage(*textureSpecular, 
       
  2142 	                params->iSpecularImage.iTl.iX.ValueNow(),
       
  2143 	                params->iSpecularImage.iTl.iY.ValueNow(),
       
  2144 	                params->iSpecularImage.iBr.iX.ValueNow(),
       
  2145 	                params->iSpecularImage.iBr.iY.ValueNow());    
       
  2146     	        // We take transition time from one, assuming it is same for everyone.
       
  2147     	        TInt transitionTime = params->iSpecularImage.iBr.iY.TimeToTargetinMilliSeconds();
       
  2148     	        huiMaterial.iSpecularImage.SetTexCoords(
       
  2149     	            params->iSpecularImage.iTl.iX.Target(),
       
  2150     	            params->iSpecularImage.iTl.iY.Target(),
       
  2151     	            params->iSpecularImage.iBr.iX.Target(),
       
  2152     	            params->iSpecularImage.iBr.iY.Target(),
       
  2153     	            transitionTime );
       
  2154    	            }
       
  2155    	            
       
  2156    	        // Specular
       
  2157    	        AlfTimedValueUtility::CopyTimedValue(params->iSpecular, huiMaterial.iSpecular, iResolver );    
       
  2158 
       
  2159             break;
       
  2160             }
       
  2161             
       
  2162         case EAlfMeshLoadM3GScene:
       
  2163             {
       
  2164             TAlfMeshLoadM3GSceneParams* params = (TAlfMeshLoadM3GSceneParams*) aInputBuffer.Ptr();            
       
  2165 
       
  2166             // Load the M3G scene.                        
       
  2167             CHuiM3GMesh& mesh = static_cast<CHuiM3GMesh&>(meshVisual->Mesh());
       
  2168             mesh.LoadSceneL(params->iFilename);                
       
  2169             break;
       
  2170             }            
       
  2171 
       
  2172         case EAlfMeshAnimationControllerCount:
       
  2173             {
       
  2174             TInt controllerCount = meshVisual->Mesh().AnimationControllerCount();
       
  2175             TPckg<TInt> resultPckg(controllerCount);
       
  2176             aResponse = resultPckg; // awkward             
       
  2177             break;
       
  2178             }            
       
  2179 
       
  2180         case EAlfMeshSetAnimationPosition:
       
  2181             {
       
  2182             TAlfMeshAnimationPositionParams* params = (TAlfMeshAnimationPositionParams*) aInputBuffer.Ptr();            
       
  2183             meshVisual->Mesh().SetAnimationPosition(params->iControllerId, params->iTarget, params->iTime);
       
  2184             break;
       
  2185             }            
       
  2186 
       
  2187         case EAlfMeshStartAnimationController:
       
  2188             {
       
  2189             TInt* params = (TInt*) aInputBuffer.Ptr();            
       
  2190             meshVisual->Mesh().StartAnimationController(*params);
       
  2191             break;
       
  2192             }            
       
  2193 
       
  2194         case EAlfMeshStopAnimationController:
       
  2195             {
       
  2196             TInt* params = (TInt*) aInputBuffer.Ptr();            
       
  2197             meshVisual->Mesh().StopAnimationController(*params);
       
  2198             break;
       
  2199             }            
       
  2200 
       
  2201         case EAlfVisualCopyValuesFromOtherVisual:
       
  2202         case EAlfVisualPauseProperties:
       
  2203         case EAlfVisualResumeProperties:        
       
  2204             {
       
  2205             if (aCommandId == EAlfVisualCopyValuesFromOtherVisual)
       
  2206                 {
       
  2207                 TInt3* inptr =  (TInt3*) aInputBuffer.Ptr();
       
  2208                 CHuiMeshVisual* sourceVisual = (CHuiMeshVisual*) iResolver.GetInterfaceL( EHuiObjectTypeVisual, inptr->iInt1 );
       
  2209                 if (inptr->iInt2&AlfVisualProperties::ESecondaryImageAlpha)
       
  2210                     {
       
  2211                     meshVisual->iSecondaryAlpha.Set(sourceVisual->iSecondaryAlpha.Target(), inptr->iInt3 );
       
  2212                     }
       
  2213                 if (inptr->iInt2&AlfVisualProperties::EMeshVisYawAngle)
       
  2214                     {
       
  2215                     meshVisual->iYawAngle.Set(sourceVisual->iYawAngle.Target(), inptr->iInt3); 
       
  2216                     }
       
  2217                 if (inptr->iInt2&AlfVisualProperties::EMeshVisPitchAngle)
       
  2218                     {
       
  2219                     meshVisual->iPitchAngle.Set(sourceVisual->iPitchAngle.Target(), inptr->iInt3 );
       
  2220                     }
       
  2221                 if (inptr->iInt2&AlfVisualProperties::EMeshVisMaterial)
       
  2222                     {
       
  2223                     CHuiProceduralMesh& mesh = static_cast<CHuiProceduralMesh&>(sourceVisual->Mesh());            
       
  2224                     CHuiProceduralMesh& myMesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());            
       
  2225                 
       
  2226                     myMesh.iMaterial.iSpecular.Set(mesh.iMaterial.iSpecular.Target(), inptr->iInt3 );
       
  2227                     }
       
  2228                 if (inptr->iInt2&AlfVisualProperties::EScale)
       
  2229                     {
       
  2230                     meshVisual->iScale.Set(sourceVisual->iScale.Target(), inptr->iInt3 );
       
  2231                     }
       
  2232                 }
       
  2233             else if (aCommandId == EAlfVisualPauseProperties)
       
  2234                 {
       
  2235                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  2236                 if (*inptr&AlfVisualProperties::ESecondaryImageAlpha)
       
  2237                     {
       
  2238                     meshVisual->iSecondaryAlpha.Suspend();
       
  2239                     }
       
  2240                 if (*inptr&AlfVisualProperties::EMeshVisYawAngle)
       
  2241                     {
       
  2242                     meshVisual->iYawAngle.Suspend(); 
       
  2243                     }
       
  2244                 if (*inptr&AlfVisualProperties::EMeshVisPitchAngle)
       
  2245                     {
       
  2246                     meshVisual->iPitchAngle.Suspend();
       
  2247                     }
       
  2248                 if (*inptr&AlfVisualProperties::EMeshVisMaterial)
       
  2249                     {
       
  2250                     CHuiProceduralMesh& myMesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());            
       
  2251                 
       
  2252                     myMesh.iMaterial.iSpecular.Suspend();
       
  2253                     }
       
  2254                 if (*inptr&AlfVisualProperties::EScale)
       
  2255                     {
       
  2256                     meshVisual->iScale.Suspend();
       
  2257                     }
       
  2258                 }
       
  2259             else  // EAlfVisualResumeProperties)
       
  2260                 {
       
  2261                 TInt* inptr =  (TInt*) aInputBuffer.Ptr();
       
  2262                 if (*inptr&AlfVisualProperties::ESecondaryImageAlpha)
       
  2263                     {
       
  2264                     meshVisual->iSecondaryAlpha.Suspend(EFalse);
       
  2265                     }
       
  2266                 if (*inptr&AlfVisualProperties::EMeshVisYawAngle)
       
  2267                     {
       
  2268                     meshVisual->iYawAngle.Suspend(EFalse); 
       
  2269                     }
       
  2270                 if (*inptr&AlfVisualProperties::EMeshVisPitchAngle)
       
  2271                     {
       
  2272                     meshVisual->iPitchAngle.Suspend(EFalse);
       
  2273                     }
       
  2274                 if (*inptr&AlfVisualProperties::EMeshVisMaterial)
       
  2275                     {
       
  2276                     CHuiProceduralMesh& myMesh = static_cast<CHuiProceduralMesh&>(meshVisual->Mesh());            
       
  2277                 
       
  2278                     myMesh.iMaterial.iSpecular.Suspend(EFalse);
       
  2279                     }
       
  2280                 if (*inptr&AlfVisualProperties::EScale)
       
  2281                     {
       
  2282                     meshVisual->iScale.Suspend(EFalse);
       
  2283                     }
       
  2284                 }
       
  2285             } // FALL THROUGH !!
       
  2286 
       
  2287         default:
       
  2288             CAlfVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse);
       
  2289         }
       
  2290     }
       
  2291 
       
  2292 EXPORT_C void CAlfMeshVisualHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters)
       
  2293     {
       
  2294     CAlfVisualHandler::VisualHandlerExtension(aExtensionUid,aExtensionParameters);
       
  2295     }
       
  2296 
       
  2297 
       
  2298 
       
  2299 
       
  2300 //----------------------------
       
  2301 // Canvas Visual
       
  2302 //----------------------------
       
  2303 EXPORT_C MAlfExtension* CAlfCanvasVisualHandler::NewL(
       
  2304     MAlfInterfaceProvider& aResolver, 
       
  2305     CHuiControl* aOwner, 
       
  2306     CHuiLayout* aParentLayout)
       
  2307     {
       
  2308     CAlfCanvasVisualHandler* me = new (ELeave) CAlfCanvasVisualHandler(aResolver);
       
  2309     CleanupStack::PushL(me);
       
  2310     me->ConstructL(NULL, *aOwner, aParentLayout);
       
  2311     CleanupStack::Pop();
       
  2312     return me;
       
  2313     }
       
  2314 
       
  2315 
       
  2316 EXPORT_C CAlfCanvasVisualHandler::CAlfCanvasVisualHandler(
       
  2317     MAlfInterfaceProvider& aResolver)
       
  2318     : CAlfVisualHandler(aResolver)
       
  2319     {
       
  2320     }
       
  2321 
       
  2322 
       
  2323 EXPORT_C void CAlfCanvasVisualHandler::ConstructL(
       
  2324     CHuiVisual* aVisual, 
       
  2325     CHuiControl& aOwner, 
       
  2326     CHuiLayout* aParentLayout)
       
  2327     {
       
  2328     if (!aVisual)
       
  2329         {
       
  2330         CHuiCanvasVisual* canvasVisual = 
       
  2331             CHuiCanvasVisual::AddNewL(aOwner, aParentLayout); 
       
  2332         CAlfVisualHandler::ConstructL(canvasVisual, aOwner, aParentLayout);
       
  2333         }
       
  2334     else 
       
  2335         {
       
  2336         CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout);
       
  2337         }
       
  2338     }
       
  2339 
       
  2340 
       
  2341 EXPORT_C CAlfCanvasVisualHandler::~CAlfCanvasVisualHandler()
       
  2342     {
       
  2343     }
       
  2344 
       
  2345 EXPORT_C void CAlfCanvasVisualHandler::Release()
       
  2346     {
       
  2347     delete this;
       
  2348     }
       
  2349 
       
  2350 
       
  2351 EXPORT_C TAny* CAlfCanvasVisualHandler::GetInterface(
       
  2352     const THuiInterfaceSupport& aInterface)
       
  2353     {
       
  2354     switch (aInterface)
       
  2355         {
       
  2356         default:
       
  2357             return CAlfVisualHandler::GetInterface(aInterface);
       
  2358         }
       
  2359     }
       
  2360 
       
  2361 
       
  2362 EXPORT_C void CAlfCanvasVisualHandler::HandleCmdL(
       
  2363     TInt aCommandId, 
       
  2364     const TDesC8& aInputBuffer, 
       
  2365     TDes8& aResponse)
       
  2366     {
       
  2367     CHuiCanvasVisual* canvasVisual = static_cast<CHuiCanvasVisual*>(iVisual);
       
  2368     
       
  2369     switch (aCommandId)
       
  2370         {
       
  2371         case EAlfCanvasVisualSendbuffer:
       
  2372             {
       
  2373             canvasVisual->SetCommandType(CHuiCanvasVisual::ECommandBufferAlf);
       
  2374             canvasVisual->SetCommandSetL(aInputBuffer);         
       
  2375             break;
       
  2376             }
       
  2377         default:
       
  2378             CAlfVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse);
       
  2379         }
       
  2380     }
       
  2381 
       
  2382 EXPORT_C void CAlfCanvasVisualHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters)
       
  2383     {
       
  2384     CAlfVisualHandler::VisualHandlerExtension(aExtensionUid,aExtensionParameters);
       
  2385     }
       
  2386 
       
  2387 // end of file