From 72ca10bf96862808b57568cf8a71d6a95a237d04 Mon Sep 17 00:00:00 2001 From: Adeel Kazmi Date: Wed, 23 Aug 2017 16:56:11 +0100 Subject: [PATCH] Added a property notification example Change-Id: I0971701ac37ccc5e86bf88976bec17d59919025b --- com.samsung.dali-demo.xml | 3 + examples-reel/dali-examples-reel.cpp | 1 + .../property-notification-example.cpp | 125 +++++++++++++++++++++ resources/po/en_GB.po | 3 + resources/po/en_US.po | 3 + shared/dali-demo-strings.h | 2 + 6 files changed, 137 insertions(+) create mode 100644 examples/property-notification/property-notification-example.cpp diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index 9e3e8d8..fa6cd12 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -235,6 +235,9 @@ + + + http://tizen.org/privilege/mediastorage http://tizen.org/privilege/externalstorage diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp index 8a7e66b..170d695 100644 --- a/examples-reel/dali-examples-reel.cpp +++ b/examples-reel/dali-examples-reel.cpp @@ -65,6 +65,7 @@ int DALI_EXPORT_API main(int argc, char **argv) demo.AddExample(Example("pivot.example", DALI_DEMO_STR_TITLE_PIVOT)); demo.AddExample(Example("primitive-shapes.example", DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES)); demo.AddExample(Example("progress-bar.example", DALI_DEMO_STR_TITLE_PROGRESS_BAR)); + demo.AddExample(Example("property-notification.example", DALI_DEMO_STR_TITLE_PROPERTY_NOTIFICATION)); demo.AddExample(Example("rendering-basic-light.example", DALI_DEMO_STR_TITLE_BASIC_LIGHT)); demo.AddExample(Example("rendering-line.example", DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE)); demo.AddExample(Example("rendering-triangle.example", DALI_DEMO_STR_TITLE_RENDERING_DRAW_TRIANGLE)); diff --git a/examples/property-notification/property-notification-example.cpp b/examples/property-notification/property-notification-example.cpp new file mode 100644 index 0000000..3d3b6d6 --- /dev/null +++ b/examples/property-notification/property-notification-example.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +using namespace Dali; +using namespace Dali::Toolkit; + +namespace +{ +const float COLOR_ANIMATION_DURATION( 5.0f ); +const float OPACITY_ANIMATION_DURATION( 1.0f ); +} // unnamed namespace + +/** + * @brief An example that shows how to use property notifications. + * + * - Creates a text label and sets its text color to black. + * - Animates the text color of a text label to red. + * - Sets up a property notification so that we are informed when the color is 50% red. + * - When we are notified, we start a new animation which animates the text label to transparent. + */ +class PropertyNotificationController : public ConnectionTracker +{ +public: + + /** + * @brief Constructor. + * @param[in] application A reference to the Application class. + */ + PropertyNotificationController( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &PropertyNotificationController::Create ); + } + + /** + * @brief Called to initialise the application content + * @param[in] application A reference to the Application class. + */ + void Create( Application& application ) + { + // Set the stage background color and connect to the stage's key signal to allow Back and Escape to exit. + Stage stage = Stage::GetCurrent(); + stage.SetBackgroundColor( Color::WHITE ); + stage.KeyEventSignal().Connect( this, &PropertyNotificationController::OnKeyEvent ); + + // Create a text label and set the text color to black + mTextLabel = TextLabel::New( "Black to Red Animation\nNew opacity animation at 50% Red" ); + mTextLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER ); + mTextLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mTextLabel.SetProperty( TextLabel::Property::MULTI_LINE, true ); + mTextLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); + mTextLabel.SetProperty( DevelTextLabel::Property::TEXT_COLOR_ANIMATABLE, Color::BLACK ); + stage.Add( mTextLabel ); + + // Create an animation and animate the text color to red + Animation animation = Animation::New( COLOR_ANIMATION_DURATION ); + animation.AnimateTo( Property( mTextLabel, DevelTextLabel::Property::TEXT_COLOR_ANIMATABLE ), Color::RED ); + animation.Play(); + + // Set up a property notification so we are notified when the red component of the text-color reaches 50% + PropertyNotification notification = mTextLabel.AddPropertyNotification( DevelTextLabel::Property::TEXT_COLOR_RED, GreaterThanCondition( 0.5f ) ); + notification.NotifySignal().Connect( this, &PropertyNotificationController::RedComponentNotification ); + } + + /** + * @brief Called when any key event is received + * + * Will use this to quit the application if Back or the Escape key is received + * @param[in] event The key event information + */ + void OnKeyEvent( const KeyEvent& event ) + { + if( event.state == KeyEvent::Down ) + { + if ( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) ) + { + mApplication.Quit(); + } + } + } + + /** + * @brief Called when the property notification condition is met. + * + * In our case, it's when the red component is greater than 50%. + * Will use this notification to animate the opacity of the text-label to transparent. + */ + void RedComponentNotification( PropertyNotification& /* source */ ) + { + Animation animation = Animation::New( OPACITY_ANIMATION_DURATION ); + animation.AnimateTo( Property( mTextLabel, DevelActor::Property::OPACITY ), 0.0f ); + animation.Play(); + } + +private: + Application& mApplication; + TextLabel mTextLabel; +}; + +int DALI_EXPORT_API main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + PropertyNotificationController test( application ); + application.MainLoop(); + return 0; +} diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po index 3ceb190..e2447d3 100755 --- a/resources/po/en_GB.po +++ b/resources/po/en_GB.po @@ -109,6 +109,9 @@ msgstr "Pivot" msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" msgstr "Progress Bar" +msgid "DALI_DEMO_STR_TITLE_PROPERTY_NOTIFICATION" +msgstr "Property Notification" + msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" msgstr "Primitive Shapes" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index c52ac67..fd64d2a 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -109,6 +109,9 @@ msgstr "Pivot" msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" msgstr "Progress Bar" +msgid "DALI_DEMO_STR_TITLE_PROPERTY_NOTIFICATION" +msgstr "Property Notification" + msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" msgstr "Primitive Shapes" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index 83ad346..e95d469 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -73,6 +73,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_PIVOT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PIVOT") #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES") #define DALI_DEMO_STR_TITLE_PROGRESS_BAR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PROGRESS_BAR") +#define DALI_DEMO_STR_TITLE_PROPERTY_NOTIFICATION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PROPERTY_NOTIFICATION") #define DALI_DEMO_STR_TITLE_REFRACTION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_REFRACTION") #define DALI_DEMO_STR_TITLE_REMOTE_IMAGE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_REMOTE_IMAGE") #define DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE") @@ -142,6 +143,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_PIVOT "Pivot" #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES "Primitive Shapes" #define DALI_DEMO_STR_TITLE_PROGRESS_BAR "Progress Bar" +#define DALI_DEMO_STR_TITLE_PROPERTY_NOTIFICATION "Property Notification" #define DALI_DEMO_STR_TITLE_REFRACTION "Refract Effect" #define DALI_DEMO_STR_TITLE_REMOTE_IMAGE "Remote Image" #define DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE "Draw Line" -- 2.7.4