From f1102b629cb64e9d96ebeaed0f1bc070e539e311 Mon Sep 17 00:00:00 2001 From: Xiangyin Ma Date: Fri, 2 Oct 2015 10:32:20 +0100 Subject: [PATCH] Added demo of color gradients Change-Id: I9d1467c53e20d278084499c201b138047d590448 --- com.samsung.dali-demo.xml | 3 + demo/dali-demo.cpp | 1 + examples/gradients/gradients-example.cpp | 186 +++++++++++++++++++++++++++++++ shared/dali-demo-strings.h | 2 + 4 files changed, 192 insertions(+) create mode 100644 examples/gradients/gradients-example.cpp diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index 74c8d70..238b338 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -112,4 +112,7 @@ + + + diff --git a/demo/dali-demo.cpp b/demo/dali-demo.cpp index 91ea1b2..35eb917 100644 --- a/demo/dali-demo.cpp +++ b/demo/dali-demo.cpp @@ -65,6 +65,7 @@ int main(int argc, char **argv) demo.AddExample(Example("mesh-sorting.example", DALI_DEMO_STR_TITLE_MESH_SORTING)); demo.AddExample(Example("textured-mesh.example", DALI_DEMO_STR_TITLE_TEXTURED_MESH)); demo.AddExample(Example("line-mesh.example", DALI_DEMO_STR_TITLE_LINE_MESH)); + demo.AddExample(Example("gradients.example", DALI_DEMO_STR_TITLE_COLOR_GRADIENT)); demo.SortAlphabetically( true ); diff --git a/examples/gradients/gradients-example.cpp b/examples/gradients/gradients-example.cpp new file mode 100644 index 0000000..6ea9b15 --- /dev/null +++ b/examples/gradients/gradients-example.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2015 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 +#include "shared/view.h" + +using namespace Dali; +using namespace Dali::Toolkit; + +namespace +{ +const char * const APPLICATION_TITLE( "Color Gradients" ); + +const char * const TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" ); +const char * const CHANGE_ICON( DALI_IMAGE_DIR "icon-change.png" ); +const char * const CHANGE_ICON_SELECTED( DALI_IMAGE_DIR "icon-change-selected.png" ); +} + +// This example shows how to render color gradients +// +class GradientController : public ConnectionTracker +{ +public: + + GradientController( Application& application ) + : mApplication( application ), + mIndex( 0 ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &GradientController::Create ); + } + + ~GradientController() + { + // Nothing to do here; + } + + // The Init signal is received once (only) during the Application lifetime + void Create( Application& application ) + { + // Get a handle to the stage + Stage stage = Stage::GetCurrent(); + stage.KeyEventSignal().Connect(this, &GradientController::OnKeyEvent); + + // Creates a default view with a default tool bar. + // The view is added to the stage. + Toolkit::ToolBar toolBar; + Layer content = DemoHelper::CreateView( application, + mView, + toolBar, + "", + TOOLBAR_IMAGE, + APPLICATION_TITLE ); + + PushButton changeButton = Toolkit::PushButton::New(); + changeButton.SetUnselectedImage( CHANGE_ICON ); + changeButton.SetSelectedImage( CHANGE_ICON_SELECTED ); + changeButton.ClickedSignal().Connect( this, &GradientController::OnChangeIconClicked ); + toolBar.AddControl( changeButton, + DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, + Toolkit::Alignment::HorizontalRight, + DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); + +// ---- Gradient for background + + mGradientMap.Insert("renderer-type", "gradient-renderer"); + Property::Array stopOffsets; + stopOffsets.PushBack( 0.0f ); + stopOffsets.PushBack( 0.3f ); + stopOffsets.PushBack( 0.6f ); + stopOffsets.PushBack( 0.8f ); + stopOffsets.PushBack( 1.f ); + mGradientMap.Insert("gradient-stop-offset", stopOffsets); + Property::Array stopColors; + stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f ); + stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f ); + stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f ); + stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f ); + stopColors.PushBack( Color::YELLOW ); + mGradientMap.Insert("gradient-stop-color", stopColors); + + OnChangeIconClicked( changeButton ); + } + + bool OnChangeIconClicked( Toolkit::Button button ) + { + Property::Map gradientMap; + + switch( mIndex%4 ) + { + case 0: // linear gradient with units as objectBoundingBox + { + gradientMap.Insert("gradient-start-position", Vector2( 0.5f, 0.5f )); + gradientMap.Insert("gradient-end-position", Vector2( -0.5f, -0.5f )); + break; + } + case 1: // linear gradient with units as userSpaceOnUse + { + Vector2 halfStageSize = Stage::GetCurrent().GetSize()*0.5f; + gradientMap.Insert("gradient-start-position", halfStageSize); + gradientMap.Insert("gradient-end-position", -halfStageSize ); + gradientMap.Insert("gradient-units", "user-space"); + break; + } + case 2: // radial gradient with units as objectBoundingBox + { + gradientMap.Insert("gradient-center", Vector2(0.5f, 0.5f)); + gradientMap.Insert("gradient-radius", 1.414f); + break; + } + default: // radial gradient with units as userSpaceOnUse + { + Vector2 stageSize = Stage::GetCurrent().GetSize(); + gradientMap.Insert("gradient-center", stageSize*0.5f); + gradientMap.Insert("gradient-radius", stageSize.Length()); + gradientMap.Insert("gradient-units", "user-space"); + break; + } + } + + gradientMap.Merge( mGradientMap ); + mView.SetProperty( Control::Property::BACKGROUND, gradientMap ); + + mIndex++; + return true; + } + + bool OnTouch( Actor actor, const TouchEvent& touch ) + { + // quit the application + mApplication.Quit(); + return true; + } + + 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(); + } + } + } + +private: + Application& mApplication; + + Property::Map mGradientMap; + Control mView; + unsigned mIndex; +}; + +void RunTest( Application& application ) +{ + GradientController test( application ); + + application.MainLoop(); +} + +// Entry point for Linux & Tizen applications +// +int main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + RunTest( application ); + + return 0; +} diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index d9be8c0..9c62408 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -60,6 +60,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_MESH_SORTING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_MESH_SORTING") #define DALI_DEMO_STR_TITLE_TEXTURED_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TEXTURED_MESH") #define DALI_DEMO_STR_TITLE_LINE_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_LINE_MESH") +#define DALI_DEMO_STR_TITLE_COLOR_GRADIENT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_COLOR_GRADIENT") #else // !INTERNATIONALIZATION_ENABLED @@ -92,6 +93,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_MESH_SORTING "Mesh Sorting" #define DALI_DEMO_STR_TITLE_TEXTURED_MESH "Mesh Texture" #define DALI_DEMO_STR_TITLE_LINE_MESH "Mesh Line" +#define DALI_DEMO_STR_TITLE_COLOR_GRADIENT "Color Gradient" #endif -- 2.7.4