Updated demos to use DALi clang-format
[platform/core/uifw/dali-demo.git] / examples / gradients / gradients-example.cpp
index 96c485d..85eba7c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
@@ -16,6 +16,7 @@
  */
 
 #include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
 #include "shared/view.h"
 
 using namespace Dali;
@@ -23,25 +24,30 @@ using namespace Dali::Toolkit;
 
 namespace
 {
-const char * const APPLICATION_TITLE( "Color Gradients" );
+const char* const APPLICATION_TITLE("Color Gradients");
 
-const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" );
-const char * const CHANGE_ICON( DEMO_IMAGE_DIR "icon-change.png" );
-const char * const CHANGE_ICON_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" );
-}
+const char* const TOOLBAR_IMAGE(DEMO_IMAGE_DIR "top-bar.png");
+const char* const CHANGE_ICON(DEMO_IMAGE_DIR "icon-change.png");
+const char* const CHANGE_ICON_SELECTED(DEMO_IMAGE_DIR "icon-change-selected.png");
+const char* const ROUNDED_CORNER_ICON(DEMO_IMAGE_DIR "icon-replace.png");
+const char* const ROUNDED_CORNER_ICON_SELECTED(DEMO_IMAGE_DIR "icon-replace-selected.png");
+
+const float CORNER_RADIUS_VALUE(20.0f);
+
+} // namespace
 
 // This example shows how to render color gradients
 //
 class GradientController : public ConnectionTracker
 {
 public:
-
-  GradientController( Application& application )
-  : mApplication( application ),
-    mIndex( 0 )
+  GradientController(Application& application)
+  : mApplication(application),
+    mIndex(0),
+    mRoundedCorner(false)
   {
     // Connect to the Application's Init signal
-    mApplication.InitSignal().Connect( this, &GradientController::Create );
+    mApplication.InitSignal().Connect(this, &GradientController::Create);
   }
 
   ~GradientController()
@@ -50,102 +56,135 @@ public:
   }
 
   // The Init signal is received once (only) during the Application lifetime
-  void Create( Application& application )
+  void Create(Application& application)
   {
-    // Get a handle to the stage
-    Stage stage = Stage::GetCurrent();
-    stage.KeyEventSignal().Connect(this, &GradientController::OnKeyEvent);
+    // Get a handle to the window
+    auto window = application.GetWindow();
+    window.KeyEventSignal().Connect(this, &GradientController::OnKeyEvent);
 
     // Creates a default view with a default tool bar.
-    // The view is added to the stage.
+    // The view is added to the window.
     Toolkit::ToolBar toolBar;
-    Layer content = DemoHelper::CreateView( application,
-                                            mView,
-                                            toolBar,
-                                            "",
-                                            TOOLBAR_IMAGE,
-                                            APPLICATION_TITLE );
+    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("rendererType",  "GRADIENT");
+    changeButton.SetProperty(Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, CHANGE_ICON);
+    changeButton.SetProperty(Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL, CHANGE_ICON_SELECTED);
+    changeButton.ClickedSignal().Connect(this, &GradientController::OnChangeIconClicked);
+    toolBar.AddControl(changeButton,
+                       DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage,
+                       Toolkit::Alignment::HORIZONTAL_RIGHT,
+                       DemoHelper::DEFAULT_MODE_SWITCH_PADDING);
+
+    PushButton roundedCornerButton = Toolkit::PushButton::New();
+    roundedCornerButton.SetProperty(Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, ROUNDED_CORNER_ICON);
+    roundedCornerButton.SetProperty(Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL, ROUNDED_CORNER_ICON_SELECTED);
+    roundedCornerButton.ClickedSignal().Connect(this, &GradientController::OnRoundedCornerClicked);
+    toolBar.AddControl(roundedCornerButton,
+                       DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage,
+                       Toolkit::Alignment::HORIZONTAL_CENTER,
+                       DemoHelper::DEFAULT_MODE_SWITCH_PADDING);
+
+    mGradientControl = Control::New();
+    mGradientControl.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+    mGradientControl.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+    mGradientControl.SetResizePolicy(ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS);
+    Vector3 offset(0.9f, 0.7f, 0.0f);
+    mGradientControl.SetProperty(Actor::Property::SIZE_MODE_FACTOR, offset);
+    content.Add(mGradientControl);
+
+    // ---- Gradient for background
+
+    mGradientMap.Insert(Toolkit::Visual::Property::TYPE, Visual::GRADIENT);
 
     Property::Array stopOffsets;
-    stopOffsets.PushBack( 0.0f );
-    stopOffsets.PushBack( 0.3f );
-    stopOffsets.PushBack( 0.6f );
-    stopOffsets.PushBack( 0.8f );
-    stopOffsets.PushBack( 1.0f );
-    mGradientMap.Insert("stopOffset", stopOffsets );
+    stopOffsets.PushBack(0.0f);
+    stopOffsets.PushBack(0.3f);
+    stopOffsets.PushBack(0.6f);
+    stopOffsets.PushBack(0.8f);
+    stopOffsets.PushBack(1.0f);
+    mGradientMap.Insert(GradientVisual::Property::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("stopColor",   stopColors);
-
-    OnChangeIconClicked( changeButton );
+    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(GradientVisual::Property::STOP_COLOR, stopColors);
+
+    mGradientMap.Insert(DevelVisual::Property::CORNER_RADIUS, mRoundedCorner ? CORNER_RADIUS_VALUE : 0.0f);
+
+    UpdateGradientMap();
   }
 
-  bool OnChangeIconClicked( Toolkit::Button button )
+  bool OnChangeIconClicked(Toolkit::Button button)
+  {
+    mIndex++;
+    UpdateGradientMap();
+    return true;
+  }
+
+  bool OnRoundedCornerClicked(Toolkit::Button button)
+  {
+    mRoundedCorner                                     = !mRoundedCorner;
+    mGradientMap[DevelVisual::Property::CORNER_RADIUS] = mRoundedCorner ? CORNER_RADIUS_VALUE : 0.0f;
+
+    UpdateGradientMap();
+
+    return true;
+  }
+
+  void UpdateGradientMap()
   {
     Property::Map gradientMap;
 
-    switch( mIndex%4 )
+    switch(mIndex % 4)
     {
       case 0: // linear gradient with units as objectBoundingBox
       {
-        gradientMap.Insert("startPosition",   Vector2( 0.5f, 0.5f ));
-        gradientMap.Insert("endPosition",    Vector2( -0.5f, -0.5f ));
+        gradientMap.Insert(GradientVisual::Property::START_POSITION, Vector2(0.5f, 0.5f));
+        gradientMap.Insert(GradientVisual::Property::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("startPosition",   halfStageSize);
-        gradientMap.Insert("endPosition",    -halfStageSize );
-        gradientMap.Insert("units",  "USER_SPACE");
+        Vector2 halfWindowSize = Vector2(mApplication.GetWindow().GetSize()) * 0.5f;
+        gradientMap.Insert(GradientVisual::Property::START_POSITION, halfWindowSize);
+        gradientMap.Insert(GradientVisual::Property::END_POSITION, -halfWindowSize);
+        gradientMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
         break;
       }
       case 2: // radial gradient with units as objectBoundingBox
       {
-        gradientMap.Insert("center",  Vector2(0.5f, 0.5f));
-        gradientMap.Insert("radius",  1.414f);
+        gradientMap.Insert(GradientVisual::Property::CENTER, Vector2(0.5f, 0.5f));
+        gradientMap.Insert(GradientVisual::Property::RADIUS, 1.414f);
         break;
       }
       default: // radial gradient with units as userSpaceOnUse
       {
-        Vector2 stageSize = Stage::GetCurrent().GetSize();
-        gradientMap.Insert("center",  stageSize*0.5f);
-        gradientMap.Insert("radius",  stageSize.Length());
-        gradientMap.Insert("units",  "USER_SPACE");
+        Vector2 windowSize = mApplication.GetWindow().GetSize();
+        gradientMap.Insert(GradientVisual::Property::CENTER, windowSize * 0.5f);
+        gradientMap.Insert(GradientVisual::Property::RADIUS, windowSize.Length());
+        gradientMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
         break;
       }
     }
 
-    gradientMap.Merge( mGradientMap );
-    mView.SetProperty( Control::Property::BACKGROUND, gradientMap );
-
-    mIndex++;
-    return true;
+    gradientMap.Merge(mGradientMap);
+    mGradientControl.SetProperty(Control::Property::BACKGROUND, gradientMap);
   }
 
   void OnKeyEvent(const KeyEvent& event)
   {
-    if(event.state == KeyEvent::Down)
+    if(event.GetState() == KeyEvent::DOWN)
     {
-      if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
+      if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK))
       {
         mApplication.Quit();
       }
@@ -153,27 +192,19 @@ public:
   }
 
 private:
-  Application&  mApplication;
+  Application& mApplication;
 
   Property::Map mGradientMap;
-  Control mView;
-  unsigned mIndex;
+  Control       mView;
+  Control       mGradientControl;
+  unsigned      mIndex;
+  bool          mRoundedCorner;
 };
 
-void RunTest( Application& application )
+int DALI_EXPORT_API main(int argc, char** argv)
 {
-  GradientController test( application );
-
+  Application        application = Application::New(&argc, &argv);
+  GradientController test(application);
   application.MainLoop();
-}
-
-// Entry point for Linux & Tizen applications
-//
-int DALI_EXPORT_API main( int argc, char **argv )
-{
-  Application application = Application::New( &argc, &argv );
-
-  RunTest( application );
-
   return 0;
 }