From 0dd0a126f9fbf78fb20239425b78ffd609ddfec0 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Fri, 7 Aug 2015 16:06:42 +0100 Subject: [PATCH] Internal UTC tests for popup with backing color fix Change-Id: Ib12bc662e4fa8390a11b337b96fb337437cc690f --- .../dali-toolkit/utc-Dali-ConfirmationPopup.cpp | 32 + .../src/dali-toolkit/utc-Dali-Popup.cpp | 725 ++++++++++++++++++++- .../internal/controls/popup/popup-impl.cpp | 37 +- dali-toolkit/internal/controls/popup/popup-impl.h | 6 +- 4 files changed, 773 insertions(+), 27 deletions(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ConfirmationPopup.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ConfirmationPopup.cpp index 0d3dec9..887b6b9 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ConfirmationPopup.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ConfirmationPopup.cpp @@ -174,6 +174,9 @@ int UtcDaliConfirmationPopupDynamicSignalGenerationP(void) // Tell the confirmation popup to connect to the signal in our button called "on-stage". popup.SetProperty( Toolkit::ConfirmationPopup::Property::CONNECT_SIGNAL_OK_SELECTED, "on-stage" ); + std::string resultProperty; + DALI_TEST_CHECK( popup.GetProperty( Toolkit::ConfirmationPopup::Property::CONNECT_SIGNAL_OK_SELECTED ).Get( resultProperty ) ); + DALI_TEST_EQUALS( resultProperty, "on-stage", TEST_LOCATION ); // Connect to the confirmation popup's OK signal. This signal is dynamically created upon connection. gSignalReceivedOK = false; @@ -195,6 +198,9 @@ int UtcDaliConfirmationPopupDynamicSignalGenerationP(void) // Remove the popup from the stage, and connect the cancel signal. popup.Unparent(); popup.SetProperty( Toolkit::ConfirmationPopup::Property::CONNECT_SIGNAL_CANCEL_SELECTED, "on-stage" ); + DALI_TEST_CHECK( popup.GetProperty( Toolkit::ConfirmationPopup::Property::CONNECT_SIGNAL_CANCEL_SELECTED ).Get( resultProperty ) ); + DALI_TEST_EQUALS( resultProperty, "on-stage", TEST_LOCATION ); + popup.ConnectSignal( testTracker, "control-signal-cancel", ConfirmationPopupCancelTestFunctor() ); // Check the cancel signal has not occurred yet. @@ -252,5 +258,31 @@ int UtcDaliConfirmationPopupDynamicSignalGenerationN(void) END_TEST; } +int UtcDaliConfirmationPopupTypeRegistryCreation(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliConfirmationPopupTypeRegistryCreation" ); + + TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ConfirmationPopup" ); + DALI_TEST_CHECK( typeInfo ) + + BaseHandle baseHandle = typeInfo.CreateInstance(); + DALI_TEST_CHECK( baseHandle ) + + Toolkit::Popup popup = Toolkit::Popup::DownCast( baseHandle ); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + + Stage::GetCurrent().Add( popup ); + popup.SetDisplayState( Toolkit::Popup::SHOWN ); + + application.SendNotification(); + application.Render(); + + // Check the popup is shown. + DALI_TEST_EQUALS( popup.GetDisplayState(), Popup::SHOWN, TEST_LOCATION ); + + END_TEST; +} + diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Popup.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Popup.cpp index 990c20a..3a8b722 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Popup.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Popup.cpp @@ -23,6 +23,7 @@ #include "dali-toolkit-test-utils/toolkit-timer.h" #include +#include #include #include #include @@ -64,28 +65,28 @@ const Dali::TouchPoint pointUpOutside( 0, TouchPoint::Up, 10.0f, 10.0f ); * @param[in] root The root actor to count from. * @return The number of descendants including root actor itself. */ -int DescendentCount(const Actor& root) +int DescendentCount( const Actor& root ) { unsigned int numChildren = root.GetChildCount(); int count = 1; - for(unsigned int i=0; iGet( resultText ) ); + + DALI_TEST_EQUALS( resultText, testLabelText, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupPropertyContent(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyContent" ); + + // Create the Popup actor + Popup popup = Popup::New(); + + std::string testLabelText = "ContentTest"; + TextLabel contentLabel = TextLabel::New(); + contentLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, testLabelText ); + Actor content = contentLabel; + Property::Map map; + Scripting::CreatePropertyMap( content, map ); + popup.SetProperty( Toolkit::Popup::Property::CONTENT, map ); + + Property::Map resultMap; + DALI_TEST_CHECK( popup.GetProperty( Toolkit::Popup::Property::CONTENT ).Get( resultMap ) ); + + Property::Value* resultProperty = resultMap.Find( "text" ); + DALI_TEST_CHECK( resultProperty ); + + std::string resultText; + DALI_TEST_CHECK( resultProperty->Get( resultText ) ); + + DALI_TEST_EQUALS( resultText, testLabelText, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupPropertyFooter(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyFooter" ); + + // Create the Popup actor + Popup popup = Popup::New(); + + std::string testLabelText = "FooterTest"; + TextLabel footerLabel = TextLabel::New(); + footerLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, testLabelText ); + Actor footer = footerLabel; + Property::Map map; + Scripting::CreatePropertyMap( footer, map ); + popup.SetProperty( Toolkit::Popup::Property::FOOTER, map ); + + Property::Map resultMap; + DALI_TEST_CHECK( popup.GetProperty( Toolkit::Popup::Property::FOOTER ).Get( resultMap ) ); + + Property::Value* resultProperty = resultMap.Find( "text" ); + DALI_TEST_CHECK( resultProperty ); + + std::string resultText; + DALI_TEST_CHECK( resultProperty->Get( resultText ) ); + + DALI_TEST_EQUALS( resultText, testLabelText, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupPropertyContextualMode(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyContextualMode" ); + + // Create the Popup actor + Popup popup = Popup::New(); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + std::string testLabelText = "ContentTest"; + + TextLabel contentLabel = TextLabel::New(); + + popup.SetContent( contentLabel ); + + // Placement actor to parent the popup from so the popup's contextual position can be relative to it. + Actor placement = Actor::New(); + placement.SetParentOrigin( ParentOrigin::CENTER ); + placement.SetAnchorPoint( AnchorPoint::CENTER ); + placement.SetSize( 1.0f, 1.0f ); + placement.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + Stage::GetCurrent().Add( placement ); + + placement.Add( popup ); + + // Test all contextual modes. + const char* mode[5] = { "NON_CONTEXTUAL", "ABOVE", "RIGHT", "BELOW", "LEFT" }; + Vector2 offsetValues[5]; + offsetValues[0] = Vector2( 0.0f, 0.0f ); + offsetValues[1] = Vector2( 0.0f, -10.0f ); + offsetValues[2] = Vector2( 10.0f, 0.0f ); + offsetValues[3] = Vector2( 0.0f, 10.0f ); + offsetValues[4] = Vector2( -10.0f, 0.0f ); + + for( int i = 0; i < 5; ++i ) + { + popup.SetProperty( Toolkit::Popup::Property::CONTEXTUAL_MODE, mode[i] ); + + std::string propertyResult; + DALI_TEST_CHECK( popup.GetProperty( Toolkit::Popup::Property::CONTEXTUAL_MODE ).Get( propertyResult ) ); + DALI_TEST_EQUALS( propertyResult, std::string( mode[i] ), TEST_LOCATION ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + + // Check the position of the label within the popup. + DALI_TEST_EQUALS( contentLabel.GetCurrentWorldPosition().GetVectorXY(), offsetValues[i], TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + } + + END_TEST; +} + +int UtcDaliPopupPropertyBacking(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyBacking" ); + + // Create the Popup actor + Popup popup = Popup::New(); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + Stage::GetCurrent().Add( popup ); + + Actor backing = popup.FindChildByName( "popup-backing" ); + DALI_TEST_CHECK( backing ); + + DALI_TEST_EQUALS( backing.GetCurrentOpacity(), 1.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION ); + + // Check enabled property. + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( backing.GetCurrentOpacity(), 0.5f, Math::MACHINE_EPSILON_0, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( backing.GetCurrentOpacity(), 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION ); + + popup.SetProperty( Popup::Property::BACKING_ENABLED, false ); + bool propertyResult; + DALI_TEST_CHECK( popup.GetProperty( Popup::Property::BACKING_ENABLED ).Get( propertyResult ) ); + DALI_TEST_EQUALS( propertyResult, false, TEST_LOCATION ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( backing.GetCurrentOpacity(), 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( backing.GetCurrentOpacity(), 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION ); + + // Check color property. + popup.SetProperty( Popup::Property::BACKING_ENABLED, true ); + popup.SetProperty( Popup::Property::BACKING_COLOR, Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + + Vector4 resultColor; + popup.GetProperty( Popup::Property::BACKING_COLOR ).Get( resultColor ); + DALI_TEST_EQUALS( resultColor, Vector4( 1.0f, 0.0f, 0.0f, 1.0f ), Math::MACHINE_EPSILON_0, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupPropertyBackgroundImage(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyBackgroundImage" ); + + // Create the Popup actor + Popup popup = Popup::New(); + Stage::GetCurrent().Add( popup ); + + // Check setting an invalid image. + popup.SetProperty( Toolkit::Popup::Property::POPUP_BACKGROUND_IMAGE, "invalid-image.png" ); + std::string resultString; + popup.GetProperty( Toolkit::Popup::Property::POPUP_BACKGROUND_IMAGE ).Get( resultString ); + DALI_TEST_EQUALS( resultString, std::string(""), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupPropertyCustomAnimation(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyCustomAnimation" ); + + // Create the Popup actor + Popup popup = Popup::New(); + TextLabel content = TextLabel::New( "text" ); + popup.SetContent( content ); + + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 1.0f ); + popup.SetProperty( Popup::Property::ANIMATION_MODE, "CUSTOM" ); + + Actor popupContainer = popup.FindChildByName( "popup-container" ); + DALI_TEST_CHECK( popupContainer ); + + Vector3 entryAnimationDestination( 300.0f, 200.0f, 0.0f ); + Vector3 exitAnimationDestination( -300.0f, -200.0f, 0.0f ); + + Property::Map animationMapEntry; + animationMapEntry.Insert( "actor", "custom-animation-popup" ); + animationMapEntry.Insert( "property", "position" ); + animationMapEntry.Insert( "value", entryAnimationDestination ); + animationMapEntry.Insert( "alpha-function", "EASE_OUT" ); + + Property::Array timePeriodMapEntry; + timePeriodMapEntry.PushBack( 0.0f ); + timePeriodMapEntry.PushBack( 1.0f ); + + animationMapEntry.Insert( "time-period", timePeriodMapEntry ); + + Property::Map animationMapExit; + animationMapExit.Insert( "actor", "custom-animation-popup" ); + animationMapExit.Insert( "property", "position" ); + animationMapExit.Insert( "value", exitAnimationDestination ); + animationMapExit.Insert( "alpha-function", "EASE_IN" ); + + Property::Array timePeriodMapExit; + timePeriodMapExit.PushBack( 0.0f ); + timePeriodMapExit.PushBack( 1.0f ); + + animationMapExit.Insert( "time-period", timePeriodMapExit ); + + popup.SetProperty( Toolkit::Popup::Property::ENTRY_ANIMATION, animationMapEntry ); + popup.SetProperty( Toolkit::Popup::Property::EXIT_ANIMATION, animationMapExit ); + + Property::Map resultMap; + DALI_TEST_CHECK( popup.GetProperty( Toolkit::Popup::Property::ENTRY_ANIMATION ).Get( resultMap ) ); + DALI_TEST_EQUALS( resultMap.Count(), 0, TEST_LOCATION ); + DALI_TEST_CHECK( popup.GetProperty( Toolkit::Popup::Property::EXIT_ANIMATION ).Get( resultMap ) ); + DALI_TEST_EQUALS( resultMap.Count(), 0, TEST_LOCATION ); + + Stage::GetCurrent().Add( popup ); + popup.SetDisplayState( Popup::SHOWN ); + + for( int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++ ) + { + application.SendNotification(); + application.Render( RENDER_FRAME_INTERVAL ); + } + + // Test the popup has animated to it's entry-transition destination. + DALI_TEST_EQUALS( popupContainer.GetCurrentWorldPosition(), entryAnimationDestination, 0.1f, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + + for( int j = 0; j < RENDER_ANIMATION_TEST_DURATION_FRAMES; j++ ) + { + application.SendNotification(); + application.Render( RENDER_FRAME_INTERVAL ); + } + + DALI_TEST_EQUALS( popupContainer.GetCurrentWorldPosition(), exitAnimationDestination, 0.1f, TEST_LOCATION ); + + END_TEST; +} + +static bool gPushButtonClicked; +static bool PushButtonClicked( Button button ) +{ + gPushButtonClicked = true; + return true; +} + +int UtcDaliPopupPropertyTouchTransparent(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyTouchTransparent" ); + + // Create the Popup actor + Popup popup = Popup::New(); + TextLabel content = TextLabel::New( "text" ); + popup.SetContent( content ); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + popup.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + popup.SetParentOrigin( ParentOrigin::TOP_LEFT ); + popup.SetSize( 100, 100 ); + popup.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + + // Create a button (to go underneath the popup). + PushButton button = Toolkit::PushButton::New(); + button.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + button.SetParentOrigin( ParentOrigin::TOP_LEFT ); + button.SetSize( 100, 100 ); + button.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + + button.ClickedSignal().Connect( &PushButtonClicked ); + + Stage::GetCurrent().Add( button ); + + button.Add( popup ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + + gPushButtonClicked = false; + Dali::Integration::TouchEvent event; + const Dali::TouchPoint pointDown( 0, TouchPoint::Down, 10.0f, 10.0f ); + const Dali::TouchPoint pointUp( 0, TouchPoint::Up, 10.0f, 10.0f ); + + // Perform a click, the popup should block the click from hitting the button. + event = Dali::Integration::TouchEvent(); + event.AddPoint( pointDown ); + application.ProcessEvent( event ); + application.SendNotification(); + application.Render(); + + event = Dali::Integration::TouchEvent(); + event.AddPoint( pointUp ); + application.ProcessEvent( event ); + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( !gPushButtonClicked ); + + // Enable touch transparency. + popup.SetProperty( Popup::Property::TOUCH_TRANSPARENT, true ); + bool propertyResult; + DALI_TEST_CHECK( popup.GetProperty( Popup::Property::TOUCH_TRANSPARENT ).Get( propertyResult ) ); + DALI_TEST_EQUALS( propertyResult, true, TEST_LOCATION ); + + // Perform a click, the popup should allow the click to travel through to the button. + event = Dali::Integration::TouchEvent(); + event.AddPoint( pointDown ); + application.ProcessEvent( event ); + application.SendNotification(); + application.Render(); + + event = Dali::Integration::TouchEvent(); + event.AddPoint( pointUp ); + application.ProcessEvent( event ); + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( gPushButtonClicked ); + + END_TEST; +} + +int UtcDaliPopupPropertyTail(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyTail" ); + + // Create the Popup actor + Popup popup = Popup::New(); + popup.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + popup.SetParentOrigin( ParentOrigin::TOP_LEFT ); + popup.SetSize( 100, 100 ); + popup.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + TextLabel content = TextLabel::New( "text" ); + popup.SetContent( content ); + + std::string imageFilename = "invalid-image.jpg"; + popup.SetProperty( Popup::Property::TAIL_DOWN_IMAGE, imageFilename ); + popup.SetProperty( Popup::Property::TAIL_UP_IMAGE, imageFilename ); + popup.SetProperty( Popup::Property::TAIL_RIGHT_IMAGE, imageFilename ); + popup.SetProperty( Popup::Property::TAIL_LEFT_IMAGE, imageFilename ); + + std::string resultString; + popup.GetProperty( Toolkit::Popup::Property::TAIL_DOWN_IMAGE ).Get( resultString ); + DALI_TEST_EQUALS( resultString, imageFilename, TEST_LOCATION ); + popup.GetProperty( Toolkit::Popup::Property::TAIL_UP_IMAGE ).Get( resultString ); + DALI_TEST_EQUALS( resultString, imageFilename, TEST_LOCATION ); + popup.GetProperty( Toolkit::Popup::Property::TAIL_RIGHT_IMAGE ).Get( resultString ); + DALI_TEST_EQUALS( resultString, imageFilename, TEST_LOCATION ); + popup.GetProperty( Toolkit::Popup::Property::TAIL_LEFT_IMAGE ).Get( resultString ); + DALI_TEST_EQUALS( resultString, imageFilename, TEST_LOCATION ); + + popup.SetProperty( Popup::Property::TAIL_VISIBILITY, true ); + bool boolResult; + DALI_TEST_CHECK( popup.GetProperty( Popup::Property::TAIL_VISIBILITY ).Get( boolResult ) ); + DALI_TEST_EQUALS( boolResult, true, TEST_LOCATION ); + + Actor tailActor; + Vector3 tailPosition( ParentOrigin::TOP_CENTER ); + + popup.SetProperty( Popup::Property::TAIL_POSITION, tailPosition ); + Vector3 vectorResult; + DALI_TEST_CHECK( popup.GetProperty( Popup::Property::TAIL_POSITION ).Get( vectorResult ) ); + DALI_TEST_EQUALS( vectorResult, tailPosition, TEST_LOCATION ); + + Stage::GetCurrent().Add( popup ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + tailActor = popup.FindChildByName( "tail-image" ); + DALI_TEST_CHECK( tailActor ); + + float baseValX = tailActor.GetCurrentWorldPosition().x; + + DALI_TEST_GREATER( baseValX, tailActor.GetCurrentWorldPosition().y, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + + tailPosition = ParentOrigin::CENTER_LEFT; + popup.SetProperty( Popup::Property::TAIL_POSITION, tailPosition ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + tailActor = popup.FindChildByName( "tail-image" ); + DALI_TEST_CHECK( tailActor ); + + float baseValY = tailActor.GetCurrentWorldPosition().y; + DALI_TEST_GREATER( baseValX, tailActor.GetCurrentWorldPosition().x, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + + tailPosition = ParentOrigin::BOTTOM_CENTER; + popup.SetProperty( Popup::Property::TAIL_POSITION, tailPosition ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + tailActor = popup.FindChildByName( "tail-image" ); + DALI_TEST_CHECK( tailActor ); + DALI_TEST_EQUALS( tailActor.GetCurrentWorldPosition().x, baseValX, TEST_LOCATION ); + DALI_TEST_GREATER( tailActor.GetCurrentWorldPosition().y, baseValY, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + + tailPosition = ParentOrigin::CENTER_RIGHT; + popup.SetProperty( Popup::Property::TAIL_POSITION, tailPosition ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + tailActor = popup.FindChildByName( "tail-image" ); + DALI_TEST_CHECK( tailActor ); + DALI_TEST_GREATER( tailActor.GetCurrentWorldPosition().x, baseValX, TEST_LOCATION ); + DALI_TEST_EQUALS( tailActor.GetCurrentWorldPosition().y, baseValY, TEST_LOCATION ); + + popup.SetDisplayState( Popup::HIDDEN ); + application.SendNotification(); + application.Render(); + + END_TEST; +} + +int UtcDaliPopupTypeToast(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupTypeToast" ); + + TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "popup-toast" ); + DALI_TEST_CHECK( typeInfo ) + + BaseHandle baseHandle = typeInfo.CreateInstance(); + DALI_TEST_CHECK( baseHandle ) + + Toolkit::Popup popup = Toolkit::Popup::DownCast( baseHandle ); + gPopupState = Toolkit::Popup::HIDDEN; + ConnectStateSignals( popup ); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 1.0f ); + + popup.SetTitle( Toolkit::TextLabel::New( "This is a Toast Popup.\nIt will auto-hide itself" ) ); + Stage::GetCurrent().Add( popup ); + popup.SetDisplayState( Toolkit::Popup::SHOWN ); + + for( int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++ ) + { + application.SendNotification(); + application.Render( RENDER_FRAME_INTERVAL ); + } + + // Check the toast popup is shown. + DALI_TEST_EQUALS( gPopupState, Popup::SHOWN, TEST_LOCATION ); + + for( int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++ ) + { + application.SendNotification(); + application.Render( RENDER_FRAME_INTERVAL ); + } + + // Check the toast popup hides. + Dali::Timer timer = Timer::New( 0 ); + timer.MockEmitSignal(); + + for( int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++ ) + { + application.SendNotification(); + application.Render( RENDER_FRAME_INTERVAL ); + } + + DALI_TEST_EQUALS( gPopupState, Popup::HIDDEN, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupTypeRegistryCreation(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupTypeRegistryCreation" ); + + TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "Popup" ); + DALI_TEST_CHECK( typeInfo ) + + BaseHandle baseHandle = typeInfo.CreateInstance(); + DALI_TEST_CHECK( baseHandle ) + + Toolkit::Popup popup = Toolkit::Popup::DownCast( baseHandle ); + gPopupState = Toolkit::Popup::HIDDEN; + ConnectStateSignals( popup ); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + + Stage::GetCurrent().Add( popup ); + popup.SetDisplayState( Toolkit::Popup::SHOWN ); + + application.SendNotification(); + application.Render(); + + // Check the popup is shown. + DALI_TEST_EQUALS( gPopupState, Popup::SHOWN, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliPopupPropertyTypeRegistryConnectSignal(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupPropertyTypeRegistryConnectSignal" ); + + // Create the Popup actor + Popup popup = Popup::New(); + + TestConnectionTrackerObject* testTracker = new TestConnectionTrackerObject(); + // Note: The emmision of this signals has already been tested in other tests. + DALI_TEST_CHECK( popup.ConnectSignal( testTracker, "touched-outside", PopupTestFunctor() ) ); + DALI_TEST_CHECK( popup.ConnectSignal( testTracker, "showing", PopupTestFunctor() ) ); + DALI_TEST_CHECK( popup.ConnectSignal( testTracker, "shown", PopupTestFunctor() ) ); + DALI_TEST_CHECK( popup.ConnectSignal( testTracker, "hiding", PopupTestFunctor() ) ); + DALI_TEST_CHECK( popup.ConnectSignal( testTracker, "hidden", PopupTestFunctor() ) ); + + // Test connecting to an invalid signal does not work. + DALI_TEST_CHECK( !popup.ConnectSignal( testTracker, "invalid", PopupTestFunctor() ) ); + + END_TEST; +} + +int UtcDaliPopupOnControlChildAdd(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupOnControlChildAdd" ); + + // Create the Popup actor + Popup popup = Popup::New(); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + std::string testLabelText = "ContentTest"; + TextLabel contentLabel = TextLabel::New( testLabelText ); + + popup.Add( contentLabel ); + + DALI_TEST_CHECK( HasAncestor( contentLabel, popup ) ); + + END_TEST; +} + +int UtcDaliPopupOnKeyEvent(void) +{ + ToolkitTestApplication application; + tet_infoline( " UtcDaliPopupOnKeyEvent" ); + + // Create the Popup actor + Popup popup = Popup::New(); + popup.SetProperty( Popup::Property::ANIMATION_DURATION, 0.0f ); + Stage::GetCurrent().Add( popup ); + + popup.SetDisplayState( Popup::SHOWN ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( popup.GetDisplayState(), Popup::SHOWN, TEST_LOCATION ); + + popup.SetKeyInputFocus(); + + application.ProcessEvent( GenerateKey( "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::Down ) ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( popup.GetDisplayState(), Popup::HIDDEN, TEST_LOCATION ); + + END_TEST; +} diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index cc7ae5d..9153cbe 100755 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -273,7 +273,8 @@ void Popup::OnInitialize() self.Add( mLayer ); // Add Backing (Dimmed effect). - mLayer.Add( CreateBacking() ); + mBacking = CreateBacking(); + mLayer.Add( mBacking ); mPopupContainer = Actor::New(); mPopupContainer.SetName( "popup-container" ); @@ -458,11 +459,13 @@ void Popup::StartTransitionAnimation( bool transitionIn, bool instantaneous /* f // This is set up last so that different animation modes can have an effect on the backing animation speed. if( mBackingEnabled ) { + // Use the alpha from the user-specified color. + float targetAlpha = mBackingColor.a; if( duration > Math::MACHINE_EPSILON_0 ) { if( transitionIn ) { - mAnimation.AnimateTo( Property( mBacking, Actor::Property::COLOR_ALPHA ), 1.0f, AlphaFunction::EASE_IN_OUT, TimePeriod( 0.0f, duration * 0.70f ) ); + mAnimation.AnimateTo( Property( mBacking, Actor::Property::COLOR_ALPHA ), targetAlpha, AlphaFunction::EASE_IN_OUT, TimePeriod( 0.0f, duration * 0.70f ) ); } else { @@ -471,7 +474,7 @@ void Popup::StartTransitionAnimation( bool transitionIn, bool instantaneous /* f } else { - mBacking.SetOpacity( transitionIn ? 1.0f : 0.0f ); + mBacking.SetProperty( Actor::Property::COLOR_ALPHA, transitionIn ? targetAlpha : 0.0f ); } } @@ -834,7 +837,7 @@ void Popup::LayoutTail() mTailImage.SetParentOrigin( position ); mTailImage.SetAnchorPoint( anchorPoint ); - mLayer.Add( mTailImage ); + mPopupContainer.Add( mTailImage ); } } @@ -849,27 +852,28 @@ Toolkit::Popup::ContextualMode Popup::GetContextualMode() const return mContextualMode; } -ImageActor Popup::CreateBacking() +Toolkit::Control Popup::CreateBacking() { - mBacking = Dali::Toolkit::CreateSolidColorActor( mBackingColor ); - mBacking.SetName( "popup-backing" ); + Toolkit::Control backing = Control::New(); + backing.SetBackgroundColor( Vector4( mBackingColor.r, mBackingColor.g, mBackingColor.b, 1.0f ) ); + backing.SetName( "popup-backing" ); // Must always be positioned top-left of stage, regardless of parent. - mBacking.SetPositionInheritanceMode( DONT_INHERIT_POSITION ); - mBacking.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + backing.SetPositionInheritanceMode( DONT_INHERIT_POSITION ); + backing.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // Always the full size of the stage. - mBacking.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); - mBacking.SetSize( Stage::GetCurrent().GetSize() ); + backing.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + backing.SetSize( Stage::GetCurrent().GetSize() ); // Catch events. - mBacking.SetSensitive( true ); + backing.SetSensitive( true ); // Default to being transparent. - mBacking.SetOpacity( 0.0f ); - mBacking.TouchedSignal().Connect( this, &Popup::OnBackingTouched ); - mBacking.WheelEventSignal().Connect( this, &Popup::OnBackingWheelEvent ); - return mBacking; + backing.SetProperty( Actor::Property::COLOR_ALPHA, 0.0f ); + backing.TouchedSignal().Connect( this, &Popup::OnBackingTouched ); + backing.WheelEventSignal().Connect( this, &Popup::OnBackingWheelEvent ); + return backing; } Toolkit::Popup::TouchedOutsideSignalType& Popup::OutsideTouchedSignal() @@ -977,6 +981,7 @@ const bool Popup::IsBackingEnabled() const void Popup::SetBackingColor( Vector4 color ) { mBackingColor = color; + mBacking.SetBackgroundColor( Vector4( color.r, color.g, color.b, 1.0f ) ); mLayoutDirty = true; } diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h index c40811c..884cab3 100755 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -309,9 +309,9 @@ private: /** * @brief Create Dimmed Backing (covers all content behind the dialog). * - * @return The backing actor. + * @return The backing control. */ - ImageActor CreateBacking(); + Toolkit::Control CreateBacking(); /** * @brief Creates the lower area within the popup. @@ -494,7 +494,7 @@ private: Layer mLayer; ///< Popup Layer (i.e. Dim backing and PopupBg reside in this). Toolkit::TableView mPopupLayout; ///< Popup Background (i.e. dialog reside in this). - ImageActor mBacking; ///< Backing actor (dim effect). + Toolkit::Control mBacking; ///< Backing actor (dim effect). Actor mPreviousFocusedActor; ///< Store the previous focused actor to restore the focus when popup hide. Actor mTailImage; ///< Stores the tail image. Actor mPopupContainer; ///< This actor is used to house the background image and the main popup layout. -- 2.7.4