diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue May 25 13:39:57 2010 +0300 @@ -543,8 +543,6 @@ return; } - // this was moved here because otherwise background clear did never end up to effect canvas buffers - display->DoBackgroundClear(); TInt visualCount = 0; TInt entryCount = iEntries.Count(); @@ -553,7 +551,14 @@ { CHuiRosterEntry& entry = *iEntries[j]; CHuiControlGroup& group = entry.ControlGroup(); - + CHuiControl& control = group.Control(0); + + // skip all alf client session drawing + if(control.Role() == EHuiSessionContainer ) + { + continue; + } + // Init model matrix always for every group //aGc.LoadIdentity(EHuiGcMatrixModel); aGc.Push(EHuiGcMatrixModel); @@ -711,6 +716,121 @@ } } +void CHuiRosterImpl::SetAlfEventWindow(CHuiVisual* aVisual) + { + iAlfEventWindowVisual = aVisual; + } + +const CHuiVisual* CHuiRosterImpl::AlfEventWindow() + { + return iAlfEventWindowVisual; + } + +TBool CHuiRosterImpl::NativeAppsContentChanged() + { + // if we have multiple frames where alf content was changed, skip every other frame + // this should be only used if whole alf content has effect (is faded) + TBool alfContentChanged = iDisplay->AlfContentChanged(); + if(!iPreviousAlfContentDrawn && alfContentChanged) + { + iPreviousAlfContentDrawn = ETrue; + } + else + { + iPreviousAlfContentDrawn = EFalse; + } + return iPreviousAlfContentDrawn; + } + + +void CHuiRosterImpl::DrawNativeAppsContent(CHuiGc &aGc, CHuiDisplay* aDisplay) const + { + TInt i = 0; + TInt j = 0; + + CHuiDisplay* display = aDisplay ? aDisplay : iDisplay; + + ASSERT(display!=NULL); + + TBool clearDone = EFalse; + + TInt visualCount = 0; + TInt entryCount = iEntries.Count(); + // Draw the visuals tree in the display. + for(j = 0; j < entryCount; ++j) + { + CHuiRosterEntry& entry = *iEntries[j]; + CHuiControlGroup& group = entry.ControlGroup(); + CHuiControl& control = group.Control(0); + // skip all but alf client session drawing + if(control.Role() != EHuiSessionContainer ) + { + continue; + } + + // skip inactive + CHuiLayout* hostContainer = control.ContainerLayout( NULL ); + if(hostContainer->Flags() & EHuiVisualFlagInactive ) + { + continue; + } + + // Init model matrix always for every group + //aGc.LoadIdentity(EHuiGcMatrixModel); + aGc.Push(EHuiGcMatrixModel); + + // Set up display-specifc transformations i.e. camera transformations + display->Transformation().Execute(EHuiGcMatrixModel, aGc); + + // Set up a group-specific transformation. + if(group.IsTransformed()) + { + group.Transformation().Execute(EHuiGcMatrixModel, aGc); + } + + // Draw visuals + visualCount = entry.iRootVisuals.Count(); + for(i = 0; i < visualCount; ++i) + { + CHuiVisual* visual = entry.iRootVisuals[i]; + //Ignore inactive visuals + if ( visual->Flags()& EHuiVisualFlagInactive || visual->LoadingEffect() ) + { + continue; + } + + if(!clearDone) + { + // only do clear if we really draw some alf native content + display->DoBackgroundClear(); + clearDone = ETrue; + } + + visual->Draw(aGc); + + } + + if( display->DrawVisualOutline() != CHuiDisplay::EDrawVisualOutlineNone ) + { + for(i = 0; i < visualCount; ++i) + { + // Draw Visual Outline depending on central repository setting + // and visual flag value + const TBool drawOutline = + ( entry.iRootVisuals[i]->Flags() & EHuiVisualFlagEnableDebugMode ) || + ( display->DrawVisualOutline() == CHuiDisplay::EDrawVisualOutlineAllVisuals ); + + DrawBoundaries( aGc, entry.iRootVisuals[i], drawOutline ); + } + } + + aGc.Pop(EHuiGcMatrixModel); + } + } + + + + void CHuiRosterImpl::DrawBoundaries( CHuiGc& aGc, CHuiVisual* aVisual, TBool aDrawOutline ) const { if( aDrawOutline ) @@ -995,8 +1115,8 @@ if(iDisplay) { iDisplay->AddDirtyRegion(iRect); + iDisplay->SetAlfContentChanged(ETrue); } - SetChanged(EFalse); return; } @@ -1019,7 +1139,28 @@ { continue; } + + CHuiControlGroup& group = entry.ControlGroup(); + CHuiControl& control = group.Control(0); + + if(control.Role() == EHuiSessionContainer ) + { + if (iDisplay) + { + iDisplay->ScanningAlfContent(ETrue); + } + + } + entry.iRootVisuals[i]->ReportChanged(); + + if(control.Role() == EHuiSessionContainer ) + { + if(iDisplay) + { + iDisplay->ScanningAlfContent(EFalse); + } + } } } }