Added demo of color gradients 70/48970/3
authorXiangyin Ma <x1.ma@samsung.com>
Fri, 2 Oct 2015 09:32:20 +0000 (10:32 +0100)
committerXiangyin Ma <x1.ma@samsung.com>
Fri, 2 Oct 2015 14:22:34 +0000 (15:22 +0100)
Change-Id: I9d1467c53e20d278084499c201b138047d590448

com.samsung.dali-demo.xml
demo/dali-demo.cpp
examples/gradients/gradients-example.cpp [new file with mode: 0644]
shared/dali-demo-strings.h

index 74c8d70..238b338 100644 (file)
        <ui-application appid="benchmark.example" exec="/usr/apps/com.samsung.dali-demo/bin/benchmark.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Benchmark</label>
        </ui-application>
        <ui-application appid="benchmark.example" exec="/usr/apps/com.samsung.dali-demo/bin/benchmark.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Benchmark</label>
        </ui-application>
+       <ui-application appid="gradients.example" exec="/usr/apps/com.samsung.dali-demo/bin/gradients.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
+               <label>Color Gradient</label>
+       </ui-application>
 </manifest>
 </manifest>
index 91ea1b2..35eb917 100644 (file)
@@ -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("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 );
 
 
   demo.SortAlphabetically( true );
 
diff --git a/examples/gradients/gradients-example.cpp b/examples/gradients/gradients-example.cpp
new file mode 100644 (file)
index 0000000..6ea9b15
--- /dev/null
@@ -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 <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
+#include <dali-toolkit/devel-api/controls/renderer-factory/control-renderer.h>
+#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;
+}
index d9be8c0..9c62408 100644 (file)
@@ -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_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
 
 
 #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_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
 
 
 #endif