Merge branch 'devel/master' into tizen
authortscholb <scholb.kim@samsung.com>
Mon, 1 Nov 2021 08:08:49 +0000 (17:08 +0900)
committertscholb <scholb.kim@samsung.com>
Mon, 1 Nov 2021 08:08:49 +0000 (17:08 +0900)
18 files changed:
README.md
com.samsung.dali-demo.xml
examples-reel/dali-examples-reel.cpp
examples/advanced-blend-mode/advanced-blend-mode-example.cpp [new file with mode: 0644]
examples/arc-visual/arc-visual-example.cpp
examples/canvas-view/canvas-view-example.cpp
packaging/com.samsung.dali-demo.spec
resources/po/as.po
resources/po/de.po
resources/po/en_GB.po
resources/po/en_US.po
resources/po/es.po
resources/po/fi.po
resources/po/ko.po
resources/po/ml.po
resources/po/ur.po
resources/po/zn_CH.po
shared/dali-demo-strings.h

index 29c195f..3201631 100644 (file)
--- a/README.md
+++ b/README.md
@@ -187,3 +187,23 @@ To build, run:
 ```zsh
 % make install -j8
 ```
+
+# Creating an example
+In the dali-demo/examples folder, add another folder. This will become the name of your example executable, so for example the "hello-world" folder generates a "hello-world.example" binary.
+In this folder, you can add as many source code files as you need.
+
+Usually, create a single class file containing a main function that instantiates an Application. Usually, the class is named after your example, followed by "Controller", e.g. hello-world.cpp contains a class called HelloWorldController.
+
+There is a DemoHelper::CreateView method, which enables you to easiliy set up a title bar and buttons.
+
+Add at least a key handler such that Escape or Back keys can be used to quit the application. Some apps that only present a single thing also add a touch handler that quits the application.
+
+Add a launcher line to one of demo/dali-demo.cpp, examples-reel/dali-examples-reel.cpp or tests-reel/dali-tests-reel.cpp, depending on the nature of what you are demonstrating. Generally, dali-demo is for graphical showcase demos, dali-examples-reel is for reasonable examples that look ok, and dali-tests is for examples that are only for testing. This needs a language string defining for the title.
+
+Add 2 lines to shared/dali-demo-strings.h for the title of your application, please keep in alphabetic ordering. Add english strings and translations to each of the language files in resources/po.
+
+To ensure your application can run on a Tizen device through the launcher, add an entry to com.samsung.dali-demo.xml, ensuring that only tabs are used for XML indent.
+
+
+
+
index 622c301..2c46609 100644 (file)
@@ -19,6 +19,9 @@
 
        <!-- PLEASE KEEP THE FOLLOWING IN ALPHABETICAL ORDER USING THE 'appid'. -->
 
+       <ui-application appid="advanced-blend-mode.example" exec="/usr/apps/com.samsung.dali-demo/bin/advanced-blend-mode.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
+               <label>Advanced Blending App</label>
+       </ui-application>
        <ui-application appid="animated-gradient-call-active.example" exec="/usr/apps/com.samsung.dali-demo/bin/animated-gradient-call-active.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Call Active App</label>
        </ui-application>
index e1ba60d..63ead6e 100644 (file)
@@ -38,6 +38,7 @@ int DALI_EXPORT_API main(int argc, char** argv)
   // Create the demo launcher
   DaliTableView demo(app);
 
+  demo.AddExample(Example("advanced-blend-mode.example", DALI_DEMO_STR_TITLE_ADVANCED_BLENDING));
   demo.AddExample(Example("animated-images.example", DALI_DEMO_STR_TITLE_ANIMATED_IMAGES));
   demo.AddExample(Example("animated-shapes.example", DALI_DEMO_STR_TITLE_ANIMATED_SHAPES));
   demo.AddExample(Example("animated-vector-images.example", DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES));
diff --git a/examples/advanced-blend-mode/advanced-blend-mode-example.cpp b/examples/advanced-blend-mode/advanced-blend-mode-example.cpp
new file mode 100644 (file)
index 0000000..be5cab2
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2021 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/devel-api/actors/actor-devel.h>
+
+#include <dali/devel-api/common/capabilities.h>
+#include <dali/integration-api/debug.h>
+
+using namespace Dali;
+using Dali::Toolkit::TextLabel;
+
+// This example shows how to create and display Hello World! using a simple TextActor
+//
+class AdvancedBlendModeController : public ConnectionTracker
+{
+public:
+  AdvancedBlendModeController(Application& application)
+  : mApplication(application)
+  {
+    // Connect to the Application's Init signal
+    mApplication.InitSignal().Connect(this, &AdvancedBlendModeController::Create);
+  }
+
+  ~AdvancedBlendModeController() = default; // Nothing to do in destructor
+
+  // The Init signal is received once (only) during the Application lifetime
+  void Create(Application& application)
+  {
+    // Get a handle to the stage
+    Window window = application.GetWindow();
+    window.SetBackgroundColor(Color::BLACK);
+
+    Toolkit::ImageView imageView = Toolkit::ImageView::New();
+    Property::Map      imagePropertyMap;
+    imagePropertyMap.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE);
+    imagePropertyMap.Insert(Toolkit::ImageVisual::Property::URL, DEMO_IMAGE_DIR "gallery-large-19.jpg");
+    imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, imagePropertyMap);
+    imageView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER);
+    imageView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER);
+    imageView.SetProperty(Actor::Property::SIZE, Vector2(600, 600));
+    window.Add(imageView);
+
+    Toolkit::Control control_1 = Toolkit::Control::New();
+    Property::Map    colorVisualMap_1;
+    colorVisualMap_1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
+    colorVisualMap_1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Dali::Color::RED);
+    colorVisualMap_1.Insert(Toolkit::Visual::Property::PREMULTIPLIED_ALPHA, true);
+    control_1.SetProperty(Toolkit::Control::Property::BACKGROUND, colorVisualMap_1);
+    control_1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER);
+    control_1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER);
+    control_1.SetProperty(Actor::Property::POSITION, Vector2(0, 0));
+    control_1.SetProperty(Actor::Property::SIZE, Vector2(600, 200));
+    if(Dali::Capabilities::IsBlendEquationSupported(Dali::DevelBlendEquation::SCREEN))
+    {
+      control_1.SetProperty(Dali::DevelActor::Property::BLEND_EQUATION, Dali::DevelBlendEquation::LUMINOSITY);
+    }
+    window.Add(control_1);
+
+    Toolkit::Control control_2 = Toolkit::Control::New();
+    Property::Map    colorVisualMap_2;
+    colorVisualMap_2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
+    colorVisualMap_2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Dali::Color::GREEN);
+    colorVisualMap_2.Insert(Toolkit::Visual::Property::PREMULTIPLIED_ALPHA, true);
+    control_2.SetProperty(Toolkit::Control::Property::BACKGROUND, colorVisualMap_2);
+    control_2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER);
+    control_2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER);
+    control_2.SetProperty(Actor::Property::POSITION, Vector2(0, 200));
+    control_2.SetProperty(Actor::Property::SIZE, Vector2(600, 200));
+    if(Dali::Capabilities::IsBlendEquationSupported(Dali::DevelBlendEquation::SCREEN))
+    {
+      control_2.SetProperty(Dali::DevelActor::Property::BLEND_EQUATION, Dali::DevelBlendEquation::LUMINOSITY);
+    }
+    window.Add(control_2);
+
+    Toolkit::Control control_3 = Toolkit::Control::New();
+    Property::Map    colorVisualMap_3;
+    colorVisualMap_3.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
+    colorVisualMap_3.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Dali::Color::BLUE);
+    colorVisualMap_3.Insert(Toolkit::Visual::Property::PREMULTIPLIED_ALPHA, true);
+    control_3.SetProperty(Toolkit::Control::Property::BACKGROUND, colorVisualMap_3);
+    control_3.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER);
+    control_3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER);
+    control_3.SetProperty(Actor::Property::POSITION, Vector2(0, 400));
+    control_3.SetProperty(Actor::Property::SIZE, Vector2(600, 200));
+    if(Dali::Capabilities::IsBlendEquationSupported(Dali::DevelBlendEquation::SCREEN))
+    {
+      control_3.SetProperty(Dali::DevelActor::Property::BLEND_EQUATION, Dali::DevelBlendEquation::LUMINOSITY);
+    }
+    window.Add(control_3);
+
+    // Add text to explain what's being seen.
+    auto label = Toolkit::TextLabel::New("If your device supports advanced blending, this shows an image at different levels of luminosity. If not, it instead shows red/green/blue sections.");
+
+    label[Toolkit::TextLabel::Property::MULTI_LINE] = true;
+    label[Toolkit::TextLabel::Property::TEXT_COLOR] = Color::WHITE;
+    label[Toolkit::TextLabel::Property::POINT_SIZE] = 12.0f;
+    label[Actor::Property::PARENT_ORIGIN]           = ParentOrigin::BOTTOM_CENTER;
+    label[Actor::Property::ANCHOR_POINT]            = AnchorPoint::BOTTOM_CENTER;
+    label.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH);
+    window.Add(label);
+
+    // Respond to a touch anywhere on the window
+    window.GetRootLayer().TouchedSignal().Connect(this, &AdvancedBlendModeController::OnTouch);
+
+    // Respond to key events
+    window.KeyEventSignal().Connect(this, &AdvancedBlendModeController::OnKeyEvent);
+  }
+
+  bool OnTouch(Actor actor, const TouchEvent& touch)
+  {
+    // quit the application
+    mApplication.Quit();
+    return true;
+  }
+
+  void OnKeyEvent(const KeyEvent& event)
+  {
+    if(event.GetState() == KeyEvent::DOWN)
+    {
+      if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK))
+      {
+        mApplication.Quit();
+      }
+    }
+  }
+
+private:
+  Application& mApplication;
+};
+
+int DALI_EXPORT_API main(int argc, char** argv)
+{
+  Application                 application = Application::New(&argc, &argv);
+  AdvancedBlendModeController test(application);
+  application.MainLoop();
+  return 0;
+}
index 69d1a06..9e15e5e 100644 (file)
@@ -18,7 +18,7 @@
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
-#include <dali-toolkit/devel-api/visuals/arc-visual-actions-devel.h>
+#include <dali-toolkit/devel-api/visuals/visual-actions-devel.h>
 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
 
@@ -163,7 +163,7 @@ private:
         Property::Value* value = map.Find(mSelectedPoperty);
         if(value)
         {
-          DevelControl::DoAction(mControl, Control::Property::BACKGROUND, DevelArcVisual::Action::UPDATE_PROPERTY, Property::Map().Add(mSelectedPoperty, value->Get<float>() + 5.0f));
+          DevelControl::DoAction(mControl, Control::Property::BACKGROUND, DevelVisual::Action::UPDATE_PROPERTY, Property::Map().Add(mSelectedPoperty, value->Get<float>() + 5.0f));
         }
       }
       else
@@ -172,7 +172,7 @@ private:
         Property::Value* value = map.Find(mSelectedPoperty);
         if(value)
         {
-          DevelControl::DoAction(mControl, Control::Property::BACKGROUND, DevelArcVisual::Action::UPDATE_PROPERTY, Property::Map().Add(mSelectedPoperty, value->Get<float>() - 5.0f));
+          DevelControl::DoAction(mControl, Control::Property::BACKGROUND, DevelVisual::Action::UPDATE_PROPERTY, Property::Map().Add(mSelectedPoperty, value->Get<float>() - 5.0f));
         }
       }
     }
@@ -185,7 +185,7 @@ private:
     {
       DevelControl::DoAction(mControl,
                              Control::Property::BACKGROUND,
-                             DevelArcVisual::Action::UPDATE_PROPERTY,
+                             DevelVisual::Action::UPDATE_PROPERTY,
                              Property::Map()
                                .Add(DevelArcVisual::Property::START_ANGLE, START_ANGLE_INITIAL_VALUE)
                                .Add(DevelArcVisual::Property::SWEEP_ANGLE, SWEEP_ANGLE_INITIAL_VALUE));
index 1cc24f8..bad6d81 100644 (file)
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali-toolkit/devel-api/controls/canvas-view/canvas-view.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+#include <dali/devel-api/adaptor-framework/canvas-renderer-gradient.h>
+#include <dali/devel-api/adaptor-framework/canvas-renderer-linear-gradient.h>
+#include <dali/devel-api/adaptor-framework/canvas-renderer-picture.h>
+#include <dali/devel-api/adaptor-framework/canvas-renderer-radial-gradient.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer-shape.h>
 
 using namespace Dali;
 
+namespace
+{
+const char* VIEW_LABEL[] = {
+  "BasicShapes",
+  "ClipPath/Mask",
+  "Gradient",
+  "Picture"};
+
+enum
+{
+  BASIC_SHAPE_VIEW = 0,
+  CLIP_PATH_VIEW,
+  GRADIENT_VIEW,
+  PICTURE_VIEW,
+  NUMBER_OF_VIEWS
+};
+
+const char* PREV_BUTTON_TEXT("Prev");
+const char* LEFT_BUTTON_TEXT("Next");
+
+const char* IMAGES[] =
+  {
+    DEMO_IMAGE_DIR "Kid1.svg",
+};
+
+const float COMMON_STROKE_DASH_PATTERN[] = {15.0f, 30.0f};
+
+/**
+ * @brief Create shape that have star path.
+ */
+Dali::CanvasRenderer::Shape MakeStarShape()
+{
+  Dali::CanvasRenderer::Shape star = Dali::CanvasRenderer::Shape::New();
+  star.AddMoveTo(Vector2(-1.0f, -165.0f));
+  star.AddLineTo(Vector2(53.0f, -56.0f));
+  star.AddLineTo(Vector2(174.0f, -39.0f));
+  star.AddLineTo(Vector2(87.0f, 45.0f));
+  star.AddLineTo(Vector2(107.0f, 166.0f));
+  star.AddLineTo(Vector2(-1.0f, 110.0f));
+  star.AddLineTo(Vector2(-103.0f, 166.0f));
+  star.AddLineTo(Vector2(-88.0f, 46.0f));
+  star.AddLineTo(Vector2(-174.0f, -38.0f));
+  star.AddLineTo(Vector2(-54.0f, -56.0f));
+  star.Close();
+  return star;
+}
+
+/**
+ * @brief Create shape that have star path.
+ */
+Dali::CanvasRenderer::Shape MakeStar2Shape()
+{
+  Dali::CanvasRenderer::Shape star = Dali::CanvasRenderer::Shape::New();
+  star.AddMoveTo(Vector2(535.0f, 135.0f));
+  star.AddLineTo(Vector2(660.0f, 455.0f));
+  star.AddLineTo(Vector2(355.0f, 250.0f));
+  star.AddLineTo(Vector2(715.0f, 250.0f));
+  star.AddLineTo(Vector2(410.0f, 455.0f));
+  star.Close();
+  return star;
+}
+
+} // namespace
 /**
  * @brief This demonstrates how to display and control vector primitives using CanvasView.
  *
@@ -38,11 +105,14 @@ public:
    */
   CanvasViewController(Application& application)
   : mApplication(application),
+    mCanvasView(),
     mRoundedRect(),
     mArc(),
     mStar(),
     mTimer(),
-    mCount(0)
+    mCount(0),
+    mViewCount(BASIC_SHAPE_VIEW),
+    mLinearGradient()
   {
     // Connect to the Application's Init signal
     mApplication.InitSignal().Connect(this, &CanvasViewController::Create);
@@ -50,21 +120,19 @@ public:
 
   ~CanvasViewController() = default;
 
-  void Create(Application& application)
+  /**
+   * @brief Create a view for basic shape example.
+   */
+  void CreateBasicShape()
   {
-    // The Init signal is received once (only) during the Application lifetime
-    Window  window     = application.GetWindow();
+    Window  window     = mApplication.GetWindow();
     Vector2 windowSize = window.GetSize();
-    window.KeyEventSignal().Connect(this, &CanvasViewController::OnKeyEvent);
 
-    Toolkit::CanvasView mCanvasView = Toolkit::CanvasView::New(windowSize);
-    mCanvasView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
-    mCanvasView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
-    mCanvasView.SetProperty(Actor::Property::SIZE, windowSize);
+    mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[BASIC_SHAPE_VIEW]);
 
     Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New();
     canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO);
-    canvasBackground.SetFillColor(Vector4(1.0f, 1.0f, 1.0f, 1.0f));
+    canvasBackground.SetFillColor(Color::WHITE);
     mCanvasView.AddDrawable(canvasBackground);
 
     Dali::CanvasRenderer::Shape shape1 = Dali::CanvasRenderer::Shape::New();
@@ -74,65 +142,46 @@ public:
     shape1.SetStrokeWidth(10.0f);
     shape1.Scale(1.2f);
     shape1.Rotate(Degree(45.0f));
-    shape1.Translate(Vector2(100.0f, 100.0f));
+    shape1.Translate(Vector2(100.0f, 200.0f));
 
     mRoundedRect = Dali::CanvasRenderer::Shape::New();
     mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(40.0f, 40.0f));
-    mRoundedRect.SetFillColor(Vector4(0.0f, 0.0f, 1.0f, 1.0f));
-    mRoundedRect.SetOpacity(0.5f);
-    mRoundedRect.SetStrokeColor(Vector4(1.0f, 1.0f, 0.0f, 1.0f));
+    mRoundedRect.SetFillColor(Color::BLUE);
+    mRoundedRect.SetStrokeColor(Color::YELLOW);
     mRoundedRect.SetStrokeWidth(10.0f);
     mRoundedRect.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER);
+    mRoundedRect.SetOpacity(0.5f);
     Dali::Vector<float> dashPattern;
-    dashPattern.PushBack(15.0f);
-    dashPattern.PushBack(30.0f);
+    for(auto& pattern : COMMON_STROKE_DASH_PATTERN)
+    {
+      dashPattern.PushBack(pattern);
+    }
     mRoundedRect.SetStrokeDash(dashPattern);
 
-    Dali::CanvasRenderer::Shape shape2 = Dali::CanvasRenderer::Shape::New();
-    shape2.AddMoveTo(Vector2(535.0f, 135.0f));
-    shape2.AddLineTo(Vector2(660.0f, 455.0f));
-    shape2.AddLineTo(Vector2(355.0f, 250.0f));
-    shape2.AddLineTo(Vector2(715.0f, 250.0f));
-    shape2.AddLineTo(Vector2(410.0f, 455.0f));
-    shape2.Close();
-    shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD);
-    shape2.SetFillColor(Vector4(1.0f, 0.0f, 0.0f, 1.0f));
+    Dali::CanvasRenderer::Shape shape2 = MakeStar2Shape();
+    shape2.SetFillColor(Color::RED);
     shape2.SetOpacity(0.5f);
-    shape2.SetStrokeColor(Vector4(1.0f, 0.0f, 1.0f, 1.0f));
-    shape2.SetStrokeWidth(20.0f);
+    shape2.SetStrokeColor(Color::MAGENTA);
+    shape2.SetStrokeWidth(10.0f);
+    shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD);
     shape2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::ROUND);
-    shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, -50.0f, 0.0f, 0.0f, 1.0f));
+    shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, 50.0f, 0.0f, 0.0f, 1.0f));
 
     mArc = Dali::CanvasRenderer::Shape::New();
     mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, 0.0f, true);
     mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, 0.0f, true);
     mArc.SetOpacity(0.5f);
-    mArc.SetStrokeColor(Vector4(0.0f, 1.0f, 0.0f, 1.0f));
+    mArc.SetStrokeColor(Color::LIME);
     mArc.SetStrokeWidth(10.0f);
     mArc.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND);
     mCanvasView.AddDrawable(mArc);
 
-    mStar = Dali::CanvasRenderer::Shape::New();
-    mStar.AddMoveTo(Vector2(-1.0f, -165.0f));
-    mStar.AddLineTo(Vector2(53.0f, -56.0f));
-    mStar.AddLineTo(Vector2(174.0f, -39.0f));
-    mStar.AddLineTo(Vector2(87.0f, 45.0f));
-    mStar.AddLineTo(Vector2(107.0f, 166.0f));
-    mStar.AddLineTo(Vector2(-1.0f, 110.0f));
-    mStar.AddLineTo(Vector2(-103.0f, 166.0f));
-    mStar.AddLineTo(Vector2(-88.0f, 46.0f));
-    mStar.AddLineTo(Vector2(-174.0f, -38.0f));
-    mStar.AddLineTo(Vector2(-54.0f, -56.0f));
-
-    mStar.Close();
-
-    mStar.SetFillColor(Vector4(0.0f, 1.0f, 1.0f, 1.0f));
-    mStar.SetStrokeColor(Vector4(0.5f, 1.0f, 0.5f, 1.0f));
+    mStar = MakeStarShape();
+    mStar.SetFillColor(Color::CYAN);
+    mStar.SetStrokeColor(Color::DARK_GRAY);
     mStar.SetStrokeWidth(30.0f);
-    mStar.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND);
     mStar.Scale(0.6f);
-    mStar.Translate(Vector2(350.0f, 450.0f));
-    mStar.SetOpacity(0.5f);
+    mStar.Translate(Vector2(350.0f, 500.0f));
 
     mCanvasView.AddDrawable(mStar);
 
@@ -148,34 +197,357 @@ public:
 
     mCanvasView.AddDrawable(mGroup2);
 
-    mTimer = Timer::New(1000.0f / 32.0f);
-    mTimer.TickSignal().Connect(this, &CanvasViewController::tick);
     mTimer.Start();
 
     window.Add(mCanvasView);
   }
 
   /**
+   * @brief Create a view for clip-path and mask example.
+   */
+  void CreateClipPathAndMask()
+  {
+    Window  window     = mApplication.GetWindow();
+    Vector2 windowSize = window.GetSize();
+
+    mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[CLIP_PATH_VIEW]);
+
+    Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New();
+    canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO);
+    canvasBackground.SetFillColor(Color::WHITE);
+    mCanvasView.AddDrawable(canvasBackground);
+
+    Dali::CanvasRenderer::Shape shape1 = Dali::CanvasRenderer::Shape::New();
+    shape1.AddRect(Rect<float>(-50.0f, -50.0f, 100.0f, 100.0f), Vector2::ZERO);
+    shape1.SetFillColor(Vector4(0.0f, 0.5f, 0.0f, 0.5f));
+    shape1.SetStrokeColor(Vector4(0.5f, 0.0f, 0.0f, 0.5f));
+    shape1.SetStrokeWidth(10.0f);
+    shape1.Scale(1.2f);
+    shape1.Rotate(Degree(45.0f));
+    shape1.Translate(Vector2(100.0f, 200.0f));
+
+    Dali::CanvasRenderer::Shape shape2 = MakeStar2Shape();
+    shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD);
+    shape2.SetFillColor(Color::RED);
+    shape2.SetOpacity(0.5f);
+    shape2.SetStrokeColor(Color::MAGENTA);
+    shape2.SetStrokeWidth(10.0f);
+    shape2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::ROUND);
+    shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, 50.0f, 0.0f, 0.0f, 1.0f));
+
+    mStar = MakeStarShape();
+    mStar.Scale(0.6f);
+    mStar.SetFillColor(Color::CYAN);
+    mStar.Translate(Vector2(240.0f, 240.0f));
+
+    Dali::CanvasRenderer::DrawableGroup group1;
+    group1 = Dali::CanvasRenderer::DrawableGroup::New();
+    group1.AddDrawable(shape1);
+    group1.AddDrawable(shape2);
+    group1.SetClipPath(mStar);
+    mCanvasView.AddDrawable(group1);
+
+    Dali::CanvasRenderer::Shape shape3 = Dali::CanvasRenderer::Shape::New();
+    shape3.AddRect(Rect<float>(140.0f, 500.0f, 200.0f, 140.0f), Vector2(40.0f, 40.0f));
+    shape3.SetFillColor(Color::BLUE);
+    shape3.SetOpacity(0.5f);
+    shape3.SetStrokeColor(Color::YELLOW);
+    shape3.SetStrokeWidth(10.0f);
+    shape3.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER);
+    Dali::Vector<float> dashPattern;
+    for(auto& pattern : COMMON_STROKE_DASH_PATTERN)
+    {
+      dashPattern.PushBack(pattern);
+    }
+    shape3.SetStrokeDash(dashPattern);
+
+    mArc = Dali::CanvasRenderer::Shape::New();
+    mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f, 0.0f, true);
+    mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f, 0.0f, true);
+    mArc.SetOpacity(0.5f);
+    mArc.SetFillColor(Color::GREEN);
+
+    shape3.SetMask(mArc, Dali::CanvasRenderer::Drawable::MaskType::ALPHA);
+    mCanvasView.AddDrawable(shape3);
+
+    mTimer.Start();
+
+    window.Add(mCanvasView);
+  }
+
+  /**
+   * @brief Create a view for gradient example.
+   */
+  void CreateGradient()
+  {
+    Window  window     = mApplication.GetWindow();
+    Vector2 windowSize = window.GetSize();
+    mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[GRADIENT_VIEW]);
+
+    Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New();
+    canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO);
+    canvasBackground.SetFillColor(Color::WHITE);
+    mCanvasView.AddDrawable(canvasBackground);
+
+    Dali::Vector<float> dashPattern;
+    for(auto& pattern : COMMON_STROKE_DASH_PATTERN)
+    {
+      dashPattern.PushBack(pattern);
+    }
+
+    Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> radialGradientStops;
+    radialGradientStops.PushBack({0.0f, Color::LIGHT_SEA_GREEN});
+    radialGradientStops.PushBack({1.0f, Color::BLUE_VIOLET});
+
+    Dali::CanvasRenderer::RadialGradient radialGradient = Dali::CanvasRenderer::RadialGradient::New();
+    radialGradient.SetBounds(Vector2(240, 170), 70);
+    radialGradient.SetColorStops(radialGradientStops);
+    radialGradient.SetSpread(Dali::CanvasRenderer::Gradient::Spread::REFLECT);
+
+    Dali::CanvasRenderer::Shape roundedRect = Dali::CanvasRenderer::Shape::New();
+    roundedRect.AddRect(Rect<float>(50.0f, 100.0f, 380.0f, 140.0f), Vector2(40.0f, 40.0f));
+    roundedRect.SetStrokeColor(Color::YELLOW);
+    roundedRect.SetStrokeWidth(10.0f);
+    roundedRect.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER);
+    roundedRect.SetStrokeDash(dashPattern);
+    roundedRect.SetFillGradient(radialGradient);
+    mCanvasView.AddDrawable(roundedRect);
+
+    Dali::CanvasRenderer::RadialGradient radialGradient2 = Dali::CanvasRenderer::RadialGradient::New();
+    radialGradient2.SetBounds(Vector2(240, 320), 70);
+    radialGradient2.SetColorStops(radialGradientStops);
+    radialGradient2.SetSpread(Dali::CanvasRenderer::Gradient::Spread::REPEAT);
+
+    Dali::CanvasRenderer::Shape roundedRect2 = Dali::CanvasRenderer::Shape::New();
+    roundedRect2.AddRect(Rect<float>(50.0f, 250.0f, 380.0f, 140.0f), Vector2(40.0f, 40.0f));
+    roundedRect2.SetStrokeColor(Color::YELLOW);
+    roundedRect2.SetStrokeWidth(10.0f);
+    roundedRect2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER);
+    roundedRect2.SetStrokeDash(dashPattern);
+    roundedRect2.SetFillGradient(radialGradient2);
+    mCanvasView.AddDrawable(roundedRect2);
+
+    Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> stops;
+    stops.PushBack({0.0f, Color::RED});
+    stops.PushBack({0.5f, Color::BLUE});
+    stops.PushBack({1.0f, Color::GREEN});
+
+    mLinearGradient = Dali::CanvasRenderer::LinearGradient::New();
+    mLinearGradient.SetBounds(Vector2(-100, -100), Vector2(100, 100));
+    mLinearGradient.SetColorStops(stops);
+
+    Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> strokeLinearGradientStops;
+    strokeLinearGradientStops.PushBack({0.0f, Color::SLATE_BLUE});
+    strokeLinearGradientStops.PushBack({1.0f, Color::MAROON});
+
+    Dali::CanvasRenderer::LinearGradient strokeLinearGradient = Dali::CanvasRenderer::LinearGradient::New();
+    strokeLinearGradient.SetBounds(Vector2(-100, -100), Vector2(100, 100));
+    strokeLinearGradient.SetColorStops(strokeLinearGradientStops);
+
+    Dali::CanvasRenderer::Shape star = MakeStarShape();
+    star.SetStrokeWidth(30.0f);
+    star.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND);
+    star.Translate(Vector2(240.0f, 600.0f));
+    star.SetFillGradient(mLinearGradient);
+    star.SetStrokeGradient(strokeLinearGradient);
+    mCanvasView.AddDrawable(star);
+
+    window.Add(mCanvasView);
+
+    mTimer.Start();
+  }
+
+  /**
+   * @brief Create a view for picture example.
+   */
+  void CreatePicture()
+  {
+    Window  window     = mApplication.GetWindow();
+    Vector2 windowSize = window.GetSize();
+    mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[PICTURE_VIEW]);
+
+    Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New();
+    canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO);
+    canvasBackground.SetFillColor(Color::WHITE);
+    mCanvasView.AddDrawable(canvasBackground);
+
+    Dali::CanvasRenderer::Picture picture = Dali::CanvasRenderer::Picture::New();
+    picture.Load(IMAGES[0]);
+    picture.Translate(Vector2(100, 100));
+    picture.SetSize(Vector2(200, 200));
+    mCanvasView.AddDrawable(picture);
+
+    window.Add(mCanvasView);
+  }
+
+  /**
+   * @brief Clean up the specified number of view.
+   * @param[in] viewCnt The number of view.
+   */
+  void ResetView(int viewCnt)
+  {
+    Window window = mApplication.GetWindow();
+    mCanvasView.RemoveAllDrawables();
+    window.Remove(mCanvasView);
+    mTimer.Stop();
+  }
+
+  /**
+   * @brief Change to the specified number of view.
+   * @param[in] viewCnt The number of view.
+   */
+  void ChangeView(int viewCnt)
+  {
+    switch(viewCnt)
+    {
+      case BASIC_SHAPE_VIEW:
+      {
+        CreateBasicShape();
+        break;
+      }
+      case CLIP_PATH_VIEW:
+      {
+        CreateClipPathAndMask();
+        break;
+      }
+      case GRADIENT_VIEW:
+      {
+        CreateGradient();
+        break;
+      }
+      case PICTURE_VIEW:
+      {
+        CreatePicture();
+        break;
+      }
+    }
+    mPrevButton.RaiseToTop();
+    mNextButton.RaiseToTop();
+    mTitle.RaiseToTop();
+  }
+
+  /**
+   * @brief Create a view and set up the button and timer, and title.
+   */
+  void Create(Application& application)
+  {
+    // The Init signal is received once (only) during the Application lifetime
+    Window  window     = application.GetWindow();
+    Vector2 windowSize = window.GetSize();
+    window.KeyEventSignal().Connect(this, &CanvasViewController::OnKeyEvent);
+
+    mPrevButton = Toolkit::PushButton::New();
+    mPrevButton.SetProperty(Toolkit::Button::Property::LABEL, PREV_BUTTON_TEXT);
+    mPrevButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+    mPrevButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+    window.Add(mPrevButton);
+    mPrevButton.ClickedSignal().Connect(this, &CanvasViewController::OnPrevButtonClicked);
+
+    mNextButton = Toolkit::PushButton::New();
+    mNextButton.SetProperty(Toolkit::Button::Property::LABEL, LEFT_BUTTON_TEXT);
+    mNextButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_RIGHT);
+    mNextButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT);
+    window.Add(mNextButton);
+    mNextButton.ClickedSignal().Connect(this, &CanvasViewController::OnNextButtonClicked);
+
+    mCanvasView = Toolkit::CanvasView::New();
+    mCanvasView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+    mCanvasView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+    mCanvasView.SetProperty(Actor::Property::SIZE, windowSize);
+
+    mTitle                                                     = Toolkit::TextLabel::New(VIEW_LABEL[BASIC_SHAPE_VIEW]);
+    mTitle[Actor::Property::ANCHOR_POINT]                      = AnchorPoint::TOP_CENTER;
+    mTitle[Actor::Property::PARENT_ORIGIN]                     = Vector3(0.5f, 0.0f, 0.5f);
+    mTitle[Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT] = "CENTER";
+    mTitle[Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT]   = "CENTER";
+    mTitle[Toolkit::TextLabel::Property::TEXT_COLOR]           = Color::BLACK;
+    window.Add(mTitle);
+
+    mTimer = Timer::New(1000.0f / 32.0f);
+    mTimer.TickSignal().Connect(this, &CanvasViewController::tick);
+
+    ChangeView(mViewCount);
+
+    mPrevButton.RaiseToTop();
+    mNextButton.RaiseToTop();
+    mTitle.RaiseToTop();
+  }
+
+  /**
+   * @brief Called when prev button clicked.
+   *
+   * Change to previous view.
+   */
+  bool OnPrevButtonClicked(Toolkit::Button button)
+  {
+    ResetView(mViewCount);
+    mViewCount--;
+    if(mViewCount < BASIC_SHAPE_VIEW)
+    {
+      mViewCount = NUMBER_OF_VIEWS - 1;
+    }
+    ChangeView(mViewCount);
+    return true;
+  }
+
+  /**
+   * @brief Called when prev button clicked.
+   *
+   * Change to next view.
+   */
+  bool OnNextButtonClicked(Toolkit::Button button)
+  {
+    ResetView(mViewCount);
+    mViewCount++;
+    if(mViewCount >= NUMBER_OF_VIEWS)
+    {
+      mViewCount = 0;
+    }
+    ChangeView(mViewCount);
+    return true;
+  }
+
+  /**
    * @brief Called when set time.
    *
    * Change transformation every call to make it look like vector animation.
    */
   bool tick()
   {
-    mRoundedRect.ResetPath();
-    mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(float(mCount % 80), float(mCount % 80)));
+    if(mViewCount == BASIC_SHAPE_VIEW)
+    {
+      mRoundedRect.ResetPath();
+      mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(float(mCount % 80), float(mCount % 80)));
+
+      mArc.ResetPath();
+      mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, float(mCount % 180), true);
+      mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true);
 
-    mArc.ResetPath();
-    mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, float(mCount % 180), true);
-    mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true);
+      mStar.Rotate(Degree(mCount * 2.0f));
+      mStar.Scale(0.6f + (!((mCount / 100) & 0x1) ? float(mCount % 100) * 0.01f : 1 - (float(mCount % 100) * 0.01f)));
 
-    mStar.Rotate(Degree(mCount * 2.0f));
-    mStar.Scale(float(mCount % 100) * 0.01f + 0.6f);
+      mGroup1.Scale(float(mCount % 50) * 0.005f + 0.8f);
 
-    mGroup1.Scale(float(mCount % 50) * 0.005f + 0.8f);
+      mGroup2.SetOpacity(1.0f - float(mCount % 50) * 0.015f);
+    }
+    else if(mViewCount == CLIP_PATH_VIEW)
+    {
+      mArc.ResetPath();
+      mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f, float(mCount % 180), true);
+      mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true);
 
-    mGroup2.SetOpacity(1.0f - float(mCount % 50) * 0.015f);
+      mStar.Rotate(Degree(mCount * 2.0f));
+      mStar.Scale(0.6f + (!((mCount / 100) & 0x1) ? float(mCount % 100) * 0.01f : 1 - (float(mCount % 100) * 0.01f)));
+    }
+    else if(mViewCount == GRADIENT_VIEW)
+    {
+      Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> stops;
+      stops.PushBack({0.0f, Vector4(1.0f, 0.0f, 0.0f, 1.0f)});
+      stops.PushBack({!((mCount / 100) & 0x1) ? float(mCount % 100) / 100.0f : 1 - (float(mCount % 100) / 100.0f), Vector4(0.0f, 0.0f, 1.0f, 1.0f)});
+      stops.PushBack({1.0f, Vector4(0.0f, 1.0f, 1.0f, 1.0f)});
 
+      mLinearGradient.SetColorStops(stops);
+    }
     mCount++;
     return true;
   }
@@ -183,7 +555,6 @@ public:
   /**
    * @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)
@@ -194,18 +565,44 @@ public:
       {
         mApplication.Quit();
       }
+      else if(IsKey(event, Dali::DALI_KEY_CURSOR_LEFT))
+      {
+        ResetView(mViewCount);
+        mViewCount--;
+        if(mViewCount < BASIC_SHAPE_VIEW)
+        {
+          mViewCount = NUMBER_OF_VIEWS - 1;
+        }
+        ChangeView(mViewCount);
+      }
+      else if(IsKey(event, Dali::DALI_KEY_CURSOR_RIGHT))
+      {
+        ResetView(mViewCount);
+        mViewCount++;
+        if(mViewCount >= NUMBER_OF_VIEWS)
+        {
+          mViewCount = BASIC_SHAPE_VIEW;
+        }
+        ChangeView(mViewCount);
+      }
     }
   }
 
 private:
-  Application&                        mApplication;
-  Dali::CanvasRenderer::Shape         mRoundedRect;
-  Dali::CanvasRenderer::Shape         mArc;
-  Dali::CanvasRenderer::Shape         mStar;
-  Dali::CanvasRenderer::DrawableGroup mGroup1;
-  Dali::CanvasRenderer::DrawableGroup mGroup2;
-  Timer                               mTimer;
-  int                                 mCount;
+  Application&                         mApplication;
+  Toolkit::CanvasView                  mCanvasView;
+  Dali::CanvasRenderer::Shape          mRoundedRect;
+  Dali::CanvasRenderer::Shape          mArc;
+  Dali::CanvasRenderer::Shape          mStar;
+  Dali::CanvasRenderer::DrawableGroup  mGroup1;
+  Dali::CanvasRenderer::DrawableGroup  mGroup2;
+  Timer                                mTimer;
+  int                                  mCount;
+  int                                  mViewCount;
+  Dali::CanvasRenderer::LinearGradient mLinearGradient;
+  Toolkit::PushButton                  mPrevButton;
+  Toolkit::PushButton                  mNextButton;
+  Toolkit::TextLabel                   mTitle;
 };
 
 int DALI_EXPORT_API main(int argc, char** argv)
index 9837584..6235223 100755 (executable)
@@ -2,7 +2,7 @@
 
 Name:       com.samsung.dali-demo
 Summary:    The OpenGLES Canvas Core Demo
-Version:    2.0.45
+Version:    2.0.50
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0
index bab37b3..d5931ff 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "ফটোশ্বপ ব্লেণ্ড মোড"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "অ্যানিমেটেড ইমেজ"
 
index 6190e2a..1ca9969 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "Photoshop-Mischmodus"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "Animierte Bilder"
 
index 8f89fc0..6207632 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "Advanced Blending"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "Animated Images"
 
index 8afbc95..1c5dcc2 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "Advanced Blending"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "Animated Images"
 
index 6b4458b..ca08afa 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "Modo de fusión"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "Imágenes animadas"
 
index 5e7552e..132017c 100755 (executable)
@@ -1,5 +1,8 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "Photoshop sekoitus tila"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
-msgstr "animoituja kuvia"
+msgstr "Animoituja kuvia"
 
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
 msgstr "Animoidut Muodot"
index e4b522a..dfbaee3 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "포토샵 블렌드 모드"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "애니메이션 이미지"
 
index 8873d62..9a24c30 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "ഫോട്ടോഷോപ്പ് ബ്ലെൻഡ് മോഡ്"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "അനിമേറ്റഡ് ചിത്രങ്ങൾ"
 
index 324368c..204af54 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "فوٹو شاپ بلینڈ موڈ"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "متحرک تصاویر"
 
index 68dfa53..d280944 100755 (executable)
@@ -1,3 +1,6 @@
+msgid "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING"
+msgstr "高级混合"
+
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES"
 msgstr "动态图"
 
index b5884dc..f4b7a6b 100644 (file)
@@ -34,6 +34,7 @@ extern "C"
 
 #ifdef INTERNATIONALIZATION_ENABLED
 
+#define DALI_DEMO_STR_TITLE_ADVANCED_BLENDING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ADVANCED_BLENDING")
 #define DALI_DEMO_STR_TITLE_ANIMATED_IMAGES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES")
 #define DALI_DEMO_STR_TITLE_ANIMATED_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES")
 #define DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES")
@@ -141,6 +142,7 @@ extern "C"
 
 #else // !INTERNATIONALIZATION_ENABLED
 
+#define DALI_DEMO_STR_TITLE_ADVANCED_BLENDING "Advanced Blending"
 #define DALI_DEMO_STR_TITLE_ANIMATED_IMAGES "Animated Images"
 #define DALI_DEMO_STR_TITLE_ANIMATED_SHAPES "Animated Shapes"
 #define DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES "Animated Vector Images"