Commit bca10dc5a3559fe77e7432694ea0a55f111c198a

Authored by Adeel Kazmi
2 parents 41b1f378 36a546c9

Merge branch 'devel/master' into devel/graphics

Change-Id: Ib49f51f63ec81b44e39aa629f8a7d1e20f6b5bad
build/android/dali/build_toolkit.sh
... ... @@ -15,6 +15,10 @@ else
15 15 export ENABLE_TRACE=OFF
16 16 fi
17 17  
  18 + if [ -z "$CXX" ]; then
  19 + export CXX="g++"
  20 + fi
  21 +
18 22 export PREFIX=${DALI_ENV_DIR}
19 23 export PKG_CONFIG_LIBDIR=${ANDROID_NDK}/prebuilt/linux-x86_64/lib/pkgconfig
20 24 export PKG_CONFIG_PATH=${PREFIX}/lib/${ANDROID_ABI}/pkgconfig
... ... @@ -23,7 +27,7 @@ else
23 27 export DALI_DATA_RO_INSTALL_DIR=${PREFIX}/files
24 28 export DALI_DATA_RW_INSTALL_DIR=${PREFIX}/files
25 29  
26   - ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-toolkit/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=c++17' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DWITH_STYLE='720x1280'
  30 + ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-toolkit/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=c++17' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DWITH_STYLE='720x1280' -DANDROID_HOST_COMPILER="$CXX"
27 31 fi
28 32  
29 33 make -j8 || exit 1
... ...
build/tizen/CMakeLists.txt
... ... @@ -154,6 +154,7 @@ INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.ktx" ${IMAGES_D
154 154 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.astc" ${IMAGES_DIR})
155 155 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.svg" ${IMAGES_DIR})
156 156 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.json" ${IMAGES_DIR})
  157 +INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.riv" ${IMAGES_DIR})
157 158  
158 159 FILE(GLOB LOCAL_VIDEOS_LIST RELATIVE "${LOCAL_VIDEOS_DIR}" "${LOCAL_VIDEOS_DIR}/*")
159 160 FOREACH(flag ${LOCAL_VIDEOS_LIST})
... ...
build/tizen/examples/CMakeLists.txt
... ... @@ -20,16 +20,13 @@ IF (NOT "${ENABLE_SCENE_LOADER}" )
20 20 ENDIF()
21 21 ENDIF()
22 22  
  23 +FIND_PROGRAM( SHADER_GENERATOR "dali-shader-generator" )
  24 +IF( NOT SHADER_GENERATOR )
  25 + MESSAGE( FATAL_ERROR "dali-shader-generator not found!" )
  26 +ENDIF()
  27 +
23 28 FOREACH(EXAMPLE ${SUBDIRS})
24   - # Generate source files for shaders
25   - SET(SHADER_SOURCE_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/shaders/")
26   - SET(SHADER_GENERATED_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/generated/")
27 29 SET(PARENT_CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../")
28   - IF (EXISTS ${SHADER_SOURCE_DIR})
29   - EXECUTE_PROCESS( COMMAND bash -c "${PARENT_CMAKE_SOURCE_DIR}/shader-generator.sh ${SHADER_SOURCE_DIR} ${SHADER_GENERATED_DIR} --skip")
30   - SET_PROPERTY( DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
31   - "${SHADER_GENERATED_DIR}" )
32   - ENDIF()
33 30 FILE(GLOB SRCS "${EXAMPLES_SRC_DIR}/${EXAMPLE}/*.cpp")
34 31 SET(SRCS ${SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp")
35 32 IF(SHARED)
... ... @@ -37,6 +34,18 @@ FOREACH(EXAMPLE ${SUBDIRS})
37 34 ELSE()
38 35 ADD_EXECUTABLE(${EXAMPLE}.example ${SRCS})
39 36 ENDIF()
  37 +
  38 + # Generate source files for shaders
  39 + SET(SHADER_SOURCE_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/shaders/")
  40 + IF (EXISTS ${SHADER_SOURCE_DIR})
  41 + SET(SHADER_GENERATED_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/generated/")
  42 + ADD_CUSTOM_TARGET(${EXAMPLE}-generate-shaders
  43 + COMMAND ${SHADER_GENERATOR} --skip ${SHADER_SOURCE_DIR} ${SHADER_GENERATED_DIR})
  44 + SET_PROPERTY(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
  45 + "${SHADER_GENERATED_DIR}")
  46 + ADD_DEPENDENCIES(${EXAMPLE}.example ${EXAMPLE}-generate-shaders)
  47 + ENDIF()
  48 +
40 49 TARGET_LINK_LIBRARIES(${EXAMPLE}.example ${REQUIRED_LIBS})
41 50 INSTALL(TARGETS ${EXAMPLE}.example DESTINATION ${BINDIR})
42 51 ENDFOREACH(EXAMPLE)
... ...
build/tizen/shader-generator.sh deleted
1   -#!/bin/bash
2   -
3   -# Set Colors
4   -Red='\033[0;31m' # Red
5   -Yellow='\033[0;33m' # Yellow
6   -Blue='\033[0;34m' # Blue
7   -Clear='\033[0m' # Text Reset
8   -
9   -#########################################################################################
10   -
11   -Usage()
12   -{
13   - echo -e "${Yellow}Usage: $(basename ${BASH_SOURCE[0]}) [indir] [outdir] [OPTIONS]"
14   - echo
15   - echo -e " ${Blue}Mandatory parameters:${Clear}"
16   - echo -e " indir The input directory where the original shader files are located"
17   - echo -e " outdir The output directory where the header files for the shaders should be generated"
18   - echo -e " ${Red}NOTE: All the above parameters must be provided${Clear}"
19   - echo
20   - echo -e " ${Blue}Options:${Clear}"
21   - echo -e " -s|--skip Skip the generation of header and cpp files that include all the generated shader header files"
22   - echo -e " -h|--help Help"
23   -}
24   -
25   -if [ "$1" = "-h" ] || [ "$1" = "--help" ]
26   -then
27   - Usage
28   - exit 0
29   -elif [ "$#" -lt 2 ]
30   -then
31   - echo -e "${Red}ERROR:${Clear} Mandatory parameters are not provided"
32   - echo
33   - Usage
34   - exit 1
35   -fi
36   -
37   -#########################################################################################
38   -
39   -indir=$1
40   -outdir=$2
41   -skip=""
42   -
43   -for option in $*
44   -do
45   - if [ "$option" = "-s" ] || [ "$option" = "--skip" ]
46   - then
47   - skip="--skip"
48   - continue
49   - elif [[ $option == -* ]]
50   - then
51   - echo -e "${Red}Invalid Option: ${Blue}$option${Clear}"
52   - echo
53   - Usage
54   - exit 1
55   - fi
56   -done
57   -
58   -#########################################################################################
59   -
60   -mkdir -p $outdir
61   -
62   -if [ ! -e $indir ] ; then
63   - echo "Error: The folder \""$indir"\" does not exist!"
64   - exit 1
65   -fi
66   -
67   -cd $indir
68   -all_shaders=$(ls -1 *.{vert,frag,def} 2>/dev/null)
69   -cd $OLDPWD
70   -
71   -# Generate one header file per shader which is defined as a const std::string_view
72   -for name in $all_shaders ; do
73   - echo "Generating header files for $name..."
74   - varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
75   -
76   - newname=$(echo ${name} | sed -e 's/\./-/;')".h"
77   - echo Writing $newname
78   -
79   - shader_fullpath=$(echo ${indir})$name
80   -
81   - header_name="${varname}_GEN_H"
82   - echo "const std::string_view" "$varname""{" > $outdir/$newname
83   - cat $shader_fullpath | sed -e 's/^..*$/"&\\n"/' >> $outdir/$newname
84   - echo "};" >> $outdir/$newname
85   -done
86   -
87   -if [ "$skip" != "--skip" ]; then
88   - # Generate one cpp file that includes all the previously generated string_views for shaders
89   - echo "Generating cpp file..."
90   - echo -e "#include \"../builtin-shader-extern-gen.h\"\n" > $outdir/builtin-shader-gen.cpp
91   -
92   - varnames=
93   - for name in $all_shaders ; do
94   - varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
95   - newname=$(echo ${name} | sed -e 's/\./-/;')".h"
96   - varnames="${varnames} $varname"
97   - echo "#include \"$newname\"" >> $outdir/builtin-shader-gen.cpp
98   - done
99   -
100   - # Generate one header file that defines all the shader string_views as extern variables
101   - echo "Generating extern header file ( for external use )..."
102   - echo "#ifndef GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H" > $outdir/../builtin-shader-extern-gen.h
103   - echo -e "#define GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H\n" >> $outdir/../builtin-shader-extern-gen.h
104   -
105   - echo "#include <string_view>" >> $outdir/../builtin-shader-extern-gen.h
106   - echo "" >> $outdir/../builtin-shader-extern-gen.h
107   -
108   - for name in $all_shaders ; do
109   - varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
110   - newname=$(echo ${name} | sed -e 's/\./-/;')".h"
111   - echo "extern const std::string_view $varname;" >> $outdir/../builtin-shader-extern-gen.h
112   - done
113   - cat >> $outdir/../builtin-shader-extern-gen.h << EOF
114   -
115   -#endif // GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H
116   -EOF
117   -fi
118   -
com.samsung.dali-demo.xml
... ... @@ -55,6 +55,9 @@
55 55 <ui-application appid="buttons.example" exec="/usr/apps/com.samsung.dali-demo/bin/buttons.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
56 56 <label>Buttons</label>
57 57 </ui-application>
  58 + <ui-application appid="canvas-view.example" exec="/usr/apps/com.samsung.dali-demo/bin/canvas-view.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
  59 + <label>Canvas View</label>
  60 + </ui-application>
58 61 <ui-application appid="clipping-draw-order.example" exec="/usr/apps/com.samsung.dali-demo/bin/clipping-draw-order.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
59 62 <label>Clipping Draw Order</label>
60 63 </ui-application>
... ...
examples-reel/dali-examples-reel.cpp
... ... @@ -41,10 +41,12 @@ int DALI_EXPORT_API main(int argc, char** argv)
41 41 demo.AddExample(Example("animated-images.example", DALI_DEMO_STR_TITLE_ANIMATED_IMAGES));
42 42 demo.AddExample(Example("animated-shapes.example", DALI_DEMO_STR_TITLE_ANIMATED_SHAPES));
43 43 demo.AddExample(Example("animated-vector-images.example", DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES));
  44 + demo.AddExample(Example("animated-vector-images-rive.example", DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE));
44 45 demo.AddExample(Example("arc-visual.example", DALI_DEMO_STR_TITLE_ARC_VISUAL));
45 46 demo.AddExample(Example("bloom-view.example", DALI_DEMO_STR_TITLE_BLOOM_VIEW));
46 47 demo.AddExample(Example("builder.example", DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI));
47 48 demo.AddExample(Example("buttons.example", DALI_DEMO_STR_TITLE_BUTTONS));
  49 + demo.AddExample(Example("canvas-view.example", DALI_DEMO_STR_TITLE_CANVAS_VIEW));
48 50 demo.AddExample(Example("clipping.example", DALI_DEMO_STR_TITLE_CLIPPING));
49 51 demo.AddExample(Example("clipping-draw-order.example", DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER));
50 52 demo.AddExample(Example("color-transition.example", DALI_DEMO_STR_TITLE_COLOR_TRANSITION));
... ...
examples/animated-vector-images-rive/animated-vector-images-rive-example.cpp 0 → 100644
  1 +/*
  2 + * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + *
  16 + */
  17 +
  18 +#include <dali-toolkit/dali-toolkit.h>
  19 +#include <dali-toolkit/devel-api/controls/control-devel.h>
  20 +#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
  21 +#include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
  22 +#include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
  23 +#include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
  24 +#include <dali/dali.h>
  25 +#include <string>
  26 +#include "shared/view.h"
  27 +
  28 +using namespace Dali;
  29 +using namespace Dali::Toolkit;
  30 +
  31 +namespace
  32 +{
  33 +const char* BACKGROUND_IMAGE(DEMO_IMAGE_DIR "background-gradient.jpg");
  34 +const char* TOOLBAR_IMAGE(DEMO_IMAGE_DIR "top-bar.png");
  35 +const char* APPLICATION_TITLE("Animated Vector Images Rive");
  36 +
  37 +const char* IMAGE_PATH[] = {
  38 + DEMO_IMAGE_DIR "shape.riv",
  39 + };
  40 +
  41 +const unsigned int NUMBER_OF_IMAGES = 1;
  42 +
  43 +enum CellPlacement
  44 +{
  45 + TOP_BUTTON,
  46 + LOWER_BUTTON,
  47 + IMAGE,
  48 + NUMBER_OF_ROWS
  49 +};
  50 +
  51 +unsigned int GetControlIndex(Control control)
  52 +{
  53 + std::string controlName = control.GetProperty<std::string>(Dali::Actor::Property::NAME);
  54 + unsigned int index = 0;
  55 +
  56 + if(controlName != "")
  57 + {
  58 + index = std::stoul(controlName);
  59 + }
  60 +
  61 + return index;
  62 +}
  63 +
  64 +} // namespace
  65 +
  66 +// This example shows the usage of AnimatedVectorImageVisual(Rive).
  67 +// It doesn't work on Ubuntu because the visual uses the external library to render frames.
  68 +class AnimatedVectorImageViewController : public ConnectionTracker
  69 +{
  70 +public:
  71 + AnimatedVectorImageViewController(Application& application)
  72 + : mApplication(application)
  73 + {
  74 + // Connect to the Application's Init signal
  75 + mApplication.InitSignal().Connect(this, &AnimatedVectorImageViewController::Create);
  76 + }
  77 +
  78 + void Create(Application& application)
  79 + {
  80 + // The Init signal is received once (only) during the Application lifetime
  81 +
  82 + // Creates a default view with a default tool bar.
  83 + // The view is added to the window.
  84 + mContentLayer = DemoHelper::CreateView(application,
  85 + mView,
  86 + mToolBar,
  87 + BACKGROUND_IMAGE,
  88 + TOOLBAR_IMAGE,
  89 + APPLICATION_TITLE);
  90 +
  91 + // Create a table view to show a pair of buttons above each image.
  92 + mTable = TableView::New(CellPlacement::NUMBER_OF_ROWS, NUMBER_OF_IMAGES);
  93 + mTable.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
  94 + mTable.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
  95 + mTable.SetResizePolicy(ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS);
  96 + Vector3 offset(0.9f, 0.70f, 0.0f);
  97 + mTable.SetProperty(Actor::Property::SIZE_MODE_FACTOR, offset);
  98 + mTable.SetFitHeight(CellPlacement::TOP_BUTTON);
  99 + mTable.SetFitHeight(CellPlacement::LOWER_BUTTON);
  100 + mContentLayer.Add(mTable);
  101 +
  102 + for(unsigned int x = 0; x < NUMBER_OF_IMAGES; x++)
  103 + {
  104 + mPlayButtons[x] = PushButton::New();
  105 + mPlayButtons[x].SetProperty(Button::Property::LABEL, "Play");
  106 + mPlayButtons[x].SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER);
  107 + mPlayButtons[x].SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER);
  108 + mPlayButtons[x].ClickedSignal().Connect(this, &AnimatedVectorImageViewController::OnPlayButtonClicked);
  109 + mPlayButtons[x].SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH);
  110 + mPlayButtons[x].SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT);
  111 + std::string s = std::to_string(x);
  112 + mPlayButtons[x].SetProperty(Dali::Actor::Property::NAME, s);
  113 + mTable.AddChild(mPlayButtons[x], TableView::CellPosition(CellPlacement::TOP_BUTTON, x));
  114 +
  115 + mStopButtons[x] = PushButton::New();
  116 + mStopButtons[x].SetProperty(Button::Property::LABEL, "Stop");
  117 + mStopButtons[x].SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER);
  118 + mStopButtons[x].SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER);
  119 + mStopButtons[x].ClickedSignal().Connect(this, &AnimatedVectorImageViewController::OnStopButtonClicked);
  120 + mStopButtons[x].SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH);
  121 + mStopButtons[x].SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT);
  122 + mStopButtons[x].SetProperty(Dali::Actor::Property::NAME, s);
  123 + mTable.AddChild(mStopButtons[x], TableView::CellPosition(CellPlacement::LOWER_BUTTON, x));
  124 +
  125 + mImageViews[x] = ImageView::New();
  126 + Property::Map imagePropertyMap;
  127 + imagePropertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
  128 + imagePropertyMap.Insert(ImageVisual::Property::URL, IMAGE_PATH[x]);
  129 + imagePropertyMap.Insert(DevelImageVisual::Property::LOOP_COUNT, 3);
  130 + mImageViews[x].SetProperty(ImageView::Property::IMAGE, imagePropertyMap);
  131 +
  132 + mImageViews[x].SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
  133 + mImageViews[x].SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
  134 + mImageViews[x].SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
  135 + mImageViews[x].SetProperty(Dali::Actor::Property::NAME, s);
  136 +
  137 + DevelControl::VisualEventSignal(mImageViews[x]).Connect(this, &AnimatedVectorImageViewController::OnVisualEvent);
  138 +
  139 + mTable.AddChild(mImageViews[x], TableView::CellPosition(CellPlacement::IMAGE, x));
  140 + }
  141 +
  142 + application.GetWindow().KeyEventSignal().Connect(this, &AnimatedVectorImageViewController::OnKeyEvent);
  143 + }
  144 +
  145 +private:
  146 + bool OnPlayButtonClicked(Button button)
  147 + {
  148 + unsigned int controlIndex = GetControlIndex(button);
  149 +
  150 + ImageView imageView = mImageViews[controlIndex];
  151 +
  152 + Property::Map map = imageView.GetProperty<Property::Map>(ImageView::Property::IMAGE);
  153 + Property::Value* value = map.Find(DevelImageVisual::Property::PLAY_STATE);
  154 +
  155 + if(value)
  156 + {
  157 + if(value->Get<int>() != static_cast<int>(DevelImageVisual::PlayState::PLAYING))
  158 + {
  159 + mPlayButtons[controlIndex].SetProperty(Button::Property::LABEL, "Pause");
  160 +
  161 + DevelControl::DoAction(imageView, ImageView::Property::IMAGE, DevelAnimatedVectorImageVisual::Action::PLAY, Property::Value());
  162 + }
  163 + else
  164 + {
  165 + mPlayButtons[controlIndex].SetProperty(Button::Property::LABEL, "Play");
  166 +
  167 + DevelControl::DoAction(imageView, ImageView::Property::IMAGE, DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Value());
  168 + }
  169 + }
  170 +
  171 + return true;
  172 + }
  173 +
  174 + bool OnStopButtonClicked(Button button)
  175 + {
  176 + unsigned int controlIndex = GetControlIndex(button);
  177 + ImageView imageView = mImageViews[controlIndex];
  178 + DevelControl::DoAction(imageView, ImageView::Property::IMAGE, DevelAnimatedVectorImageVisual::Action::STOP, Property::Value());
  179 +
  180 + return true;
  181 + }
  182 +
  183 + void OnVisualEvent(Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId)
  184 + {
  185 + unsigned int controlIndex = GetControlIndex(control);
  186 +
  187 + if(visualIndex == ImageView::Property::IMAGE && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED)
  188 + {
  189 + mPlayButtons[controlIndex].SetProperty(Button::Property::LABEL, "Play");
  190 + }
  191 + }
  192 +
  193 + /**
  194 + * Main key event handler
  195 + */
  196 + void OnKeyEvent(const KeyEvent& event)
  197 + {
  198 + if(event.GetState() == KeyEvent::DOWN)
  199 + {
  200 + if(IsKey(event, DALI_KEY_ESCAPE) || IsKey(event, DALI_KEY_BACK))
  201 + {
  202 + mApplication.Quit();
  203 + }
  204 + }
  205 + }
  206 +
  207 +private:
  208 + Application& mApplication;
  209 +
  210 + Control mView; ///< The View instance.
  211 + ToolBar mToolBar; ///< The View's Toolbar.
  212 + Layer mContentLayer; ///< Content layer
  213 + TableView mTable;
  214 + ImageView mImageViews[NUMBER_OF_IMAGES];
  215 + PushButton mPlayButtons[NUMBER_OF_IMAGES];
  216 + PushButton mStopButtons[NUMBER_OF_IMAGES];
  217 +};
  218 +
  219 +int DALI_EXPORT_API main(int argc, char** argv)
  220 +{
  221 + Application application = Application::New(&argc, &argv, DEMO_THEME_PATH);
  222 + AnimatedVectorImageViewController test(application);
  223 + application.MainLoop();
  224 + return 0;
  225 +}
... ...
examples/canvas-view/canvas-view-example.cpp 0 → 100644
  1 +/*
  2 + * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + *
  16 + */
  17 +
  18 +#include <dali-toolkit/dali-toolkit.h>
  19 +#include <dali-toolkit/devel-api/controls/canvas-view/canvas-view.h>
  20 +#include <dali/devel-api/adaptor-framework/canvas-renderer-shape.h>
  21 +
  22 +using namespace Dali;
  23 +
  24 +/**
  25 + * @brief This demonstrates how to display and control vector primitives using CanvasView.
  26 + *
  27 + * - It displays various types of shapes. Rectangle, circle, path, etc.
  28 + * - Each shape can be set to fill color, stroke color, width, etc
  29 + * and can change the transfomation(rotate, scale, translate)
  30 + */
  31 +class CanvasViewController : public ConnectionTracker
  32 +{
  33 +public:
  34 + /**
  35 + * @brief Constructor.
  36 + * @param[in] application A reference to the Application class
  37 + */
  38 + CanvasViewController(Application& application)
  39 + : mApplication(application),
  40 + mRoundedRect(),
  41 + mArc(),
  42 + mStar(),
  43 + mTimer(),
  44 + mCount(0)
  45 + {
  46 + // Connect to the Application's Init signal
  47 + mApplication.InitSignal().Connect(this, &CanvasViewController::Create);
  48 + }
  49 +
  50 + ~CanvasViewController() = default;
  51 +
  52 + void Create(Application& application)
  53 + {
  54 + // The Init signal is received once (only) during the Application lifetime
  55 + Window window = application.GetWindow();
  56 + Vector2 windowSize = window.GetSize();
  57 + window.KeyEventSignal().Connect(this, &CanvasViewController::OnKeyEvent);
  58 +
  59 + Toolkit::CanvasView mCanvasView = Toolkit::CanvasView::New(windowSize);
  60 + mCanvasView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
  61 + mCanvasView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
  62 + mCanvasView.SetProperty(Actor::Property::SIZE, windowSize);
  63 +
  64 + Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New();
  65 + canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO);
  66 + canvasBackground.SetFillColor(Vector4(1.0f, 1.0f, 1.0f, 1.0f));
  67 + mCanvasView.AddDrawable(canvasBackground);
  68 +
  69 + Dali::CanvasRenderer::Shape shape1 = Dali::CanvasRenderer::Shape::New();
  70 + shape1.AddRect(Rect<float>(-50.0f, -50.0f, 100.0f, 100.0f), Vector2::ZERO);
  71 + shape1.SetFillColor(Vector4(0.0f, 0.5f, 0.0f, 0.5f));
  72 + shape1.SetStrokeColor(Vector4(0.5f, 0.0f, 0.0f, 0.5f));
  73 + shape1.SetStrokeWidth(10.0f);
  74 + shape1.Scale(1.2f);
  75 + shape1.Rotate(Degree(45.0f));
  76 + shape1.Translate(Vector2(100.0f, 100.0f));
  77 +
  78 + mCanvasView.AddDrawable(shape1);
  79 +
  80 + mRoundedRect = Dali::CanvasRenderer::Shape::New();
  81 + mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(40.0f, 40.0f));
  82 + mRoundedRect.SetFillColor(Vector4(0.0f, 0.0f, 1.0f, 1.0f));
  83 + mRoundedRect.SetOpacity(0.5f);
  84 + mRoundedRect.SetStrokeColor(Vector4(1.0f, 1.0f, 0.0f, 1.0f));
  85 + mRoundedRect.SetStrokeWidth(10.0f);
  86 + mRoundedRect.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER);
  87 + Dali::Vector<float> dashPattern;
  88 + dashPattern.PushBack(15.0f);
  89 + dashPattern.PushBack(30.0f);
  90 + mRoundedRect.SetStrokeDash(dashPattern);
  91 + mCanvasView.AddDrawable(mRoundedRect);
  92 +
  93 + Dali::CanvasRenderer::Shape shape2 = Dali::CanvasRenderer::Shape::New();
  94 + shape2.AddMoveTo(Vector2(535.0f, 135.0f));
  95 + shape2.AddLineTo(Vector2(660.0f, 455.0f));
  96 + shape2.AddLineTo(Vector2(355.0f, 250.0f));
  97 + shape2.AddLineTo(Vector2(715.0f, 250.0f));
  98 + shape2.AddLineTo(Vector2(410.0f, 455.0f));
  99 + shape2.Close();
  100 + shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD);
  101 + shape2.SetFillColor(Vector4(1.0f, 0.0f, 0.0f, 1.0f));
  102 + shape2.SetOpacity(0.5f);
  103 + shape2.SetStrokeColor(Vector4(1.0f, 0.0f, 1.0f, 1.0f));
  104 + shape2.SetStrokeWidth(20.0f);
  105 + shape2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::ROUND);
  106 + shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, -50.0f, 0.0f, 0.0f, 1.0f));
  107 + mCanvasView.AddDrawable(shape2);
  108 +
  109 + mArc = Dali::CanvasRenderer::Shape::New();
  110 + mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, 0.0f, true);
  111 + mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, 0.0f, true);
  112 + mArc.SetOpacity(0.5f);
  113 + mArc.SetStrokeColor(Vector4(0.0f, 1.0f, 0.0f, 1.0f));
  114 + mArc.SetStrokeWidth(10.0f);
  115 + mArc.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND);
  116 + mCanvasView.AddDrawable(mArc);
  117 +
  118 + mStar = Dali::CanvasRenderer::Shape::New();
  119 + mStar.AddMoveTo(Vector2(-1.0f, -165.0f));
  120 + mStar.AddLineTo(Vector2(53.0f, -56.0f));
  121 + mStar.AddLineTo(Vector2(174.0f, -39.0f));
  122 + mStar.AddLineTo(Vector2(87.0f, 45.0f));
  123 + mStar.AddLineTo(Vector2(107.0f, 166.0f));
  124 + mStar.AddLineTo(Vector2(-1.0f, 110.0f));
  125 + mStar.AddLineTo(Vector2(-103.0f, 166.0f));
  126 + mStar.AddLineTo(Vector2(-88.0f, 46.0f));
  127 + mStar.AddLineTo(Vector2(-174.0f, -38.0f));
  128 + mStar.AddLineTo(Vector2(-54.0f, -56.0f));
  129 +
  130 + mStar.Close();
  131 +
  132 + mStar.SetFillColor(Vector4(0.0f, 1.0f, 1.0f, 1.0f));
  133 + mStar.SetStrokeColor(Vector4(0.5f, 1.0f, 0.5f, 1.0f));
  134 + mStar.SetStrokeWidth(30.0f);
  135 + mStar.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND);
  136 + mStar.Scale(0.6f);
  137 + mStar.Translate(Vector2(350.0f, 450.0f));
  138 + mStar.SetOpacity(0.5f);
  139 +
  140 + mCanvasView.AddDrawable(mStar);
  141 +
  142 + mTimer = Timer::New(1000.0f / 32.0f);
  143 + mTimer.TickSignal().Connect(this, &CanvasViewController::tick);
  144 + mTimer.Start();
  145 +
  146 + window.Add(mCanvasView);
  147 + }
  148 +
  149 + /**
  150 + * @brief Called when set time.
  151 + *
  152 + * Change transformation every call to make it look like vector animation.
  153 + */
  154 + bool tick()
  155 + {
  156 + mRoundedRect.ResetPath();
  157 + mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(float(mCount % 80), float(mCount % 80)));
  158 +
  159 + mArc.ResetPath();
  160 + mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, float(mCount % 180), true);
  161 + mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true);
  162 +
  163 + mStar.Rotate(Degree(mCount * 2.0f));
  164 + mStar.Scale(float(mCount % 100) * 0.01f + 0.6f);
  165 + mCount++;
  166 + return true;
  167 + }
  168 +
  169 + /**
  170 + * @brief Called when any key event is received.
  171 + *
  172 + * Will use this to quit the application if Back or the Escape key is received
  173 + * @param[in] event The key event information
  174 + */
  175 + void OnKeyEvent(const KeyEvent& event)
  176 + {
  177 + if(event.GetState() == KeyEvent::DOWN)
  178 + {
  179 + if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK))
  180 + {
  181 + mApplication.Quit();
  182 + }
  183 + }
  184 + }
  185 +
  186 +private:
  187 + Application& mApplication;
  188 + Dali::CanvasRenderer::Shape mRoundedRect;
  189 + Dali::CanvasRenderer::Shape mArc;
  190 + Dali::CanvasRenderer::Shape mStar;
  191 + Timer mTimer;
  192 + int mCount;
  193 +};
  194 +
  195 +int DALI_EXPORT_API main(int argc, char** argv)
  196 +{
  197 + Application application = Application::New(&argc, &argv);
  198 + CanvasViewController test(application);
  199 + application.MainLoop();
  200 + return 0;
  201 +}
... ...
examples/color-visual/color-visual-example.cpp
... ... @@ -27,14 +27,15 @@ namespace
27 27 {
28 28 const char* IMAGE_FILE(DEMO_IMAGE_DIR "gallery-medium-1.jpg");
29 29  
30   -const float CORNER_RADIUS_VALUE(30.0f);
31   -
32 30 const float BLUR_RADIUS_VALUE(15.0f);
33 31 const Vector2 BLUR_OFFSET_VALUE(0.05f, 0.05f);
34 32 const Vector2 BLUR_SIZE_VALUE(1.1f, 1.1f);
35 33 const Vector2 NO_BLUR_SIZE_VALUE(1.05f, 1.05f);
36 34 const float ANIMATION_DURATION(2.0f);
37 35  
  36 +constexpr Vector4 CORNER_RADIUS_VALUE(30.0f, 30.0f, 30.0f, 30.0f);
  37 +constexpr Vector4 SHADOW_CORNER_RADIUS_VALUE(33.0f, 33.0f, 33.0f, 33.0f);
  38 +
38 39 const Property::Value SHADOW{
39 40 {Visual::Property::TYPE, Visual::COLOR},
40 41 {Visual::Property::MIX_COLOR, Vector4(0.0f, 0.0f, 0.0f, 0.5f)},
... ... @@ -96,7 +97,7 @@ public:
96 97 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, ImageView::Property::IMAGE, Visual::Property::OPACITY), 0.5f);
97 98 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, ImageView::Property::IMAGE, DevelVisual::Property::CORNER_RADIUS), CORNER_RADIUS_VALUE);
98 99 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, ColorVisual::Property::MIX_COLOR), Vector3(0.0f, 0.0f, 1.0f));
99   - animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, DevelVisual::Property::CORNER_RADIUS), CORNER_RADIUS_VALUE * BLUR_SIZE_VALUE.x / NO_BLUR_SIZE_VALUE.x);
  100 + animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, DevelVisual::Property::CORNER_RADIUS), SHADOW_CORNER_RADIUS_VALUE);
100 101 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, DevelColorVisual::Property::BLUR_RADIUS), BLUR_RADIUS_VALUE);
101 102 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, Visual::Transform::Property::OFFSET), BLUR_OFFSET_VALUE);
102 103 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, Visual::Transform::Property::SIZE), BLUR_SIZE_VALUE);
... ... @@ -105,9 +106,9 @@ public:
105 106 {
106 107 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, ImageView::Property::IMAGE, Visual::Property::MIX_COLOR), Vector3(1.0f, 1.0f, 1.0f));
107 108 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, ImageView::Property::IMAGE, Visual::Property::OPACITY), 1.0f);
108   - animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, ImageView::Property::IMAGE, DevelVisual::Property::CORNER_RADIUS), 0.0f);
  109 + animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, ImageView::Property::IMAGE, DevelVisual::Property::CORNER_RADIUS), Vector4::ZERO);
109 110 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, ColorVisual::Property::MIX_COLOR), Vector3(0.0f, 0.0f, 0.0f));
110   - animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, DevelVisual::Property::CORNER_RADIUS), 0.0f);
  111 + animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, DevelVisual::Property::CORNER_RADIUS), Vector4::ZERO);
111 112 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, DevelColorVisual::Property::BLUR_RADIUS), 0.0f);
112 113 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, Visual::Transform::Property::OFFSET), Vector2::ZERO);
113 114 animation.AnimateTo(DevelControl::GetVisualProperty(mImageView, DevelControl::Property::SHADOW, Visual::Transform::Property::SIZE), NO_BLUR_SIZE_VALUE);
... ...
examples/gradients/gradients-example.cpp
... ... @@ -33,7 +33,7 @@ const char* const CHANGE_ICON_SELECTED(DEMO_IMAGE_DIR &quot;icon-change-selected.png&quot;
33 33 const char* const ROUNDED_CORNER_ICON(DEMO_IMAGE_DIR "icon-replace.png");
34 34 const char* const ROUNDED_CORNER_ICON_SELECTED(DEMO_IMAGE_DIR "icon-replace-selected.png");
35 35  
36   -const float CORNER_RADIUS_VALUE(20.0f);
  36 +constexpr Vector4 CORNER_RADIUS_VALUE(20.0f, 20.0f, 20.0f, 20.0f);
37 37  
38 38 } // namespace
39 39  
... ... @@ -119,7 +119,7 @@ public:
119 119 stopColors.PushBack(Color::YELLOW);
120 120 mGradientMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
121 121  
122   - mGradientMap.Insert(DevelVisual::Property::CORNER_RADIUS, mRoundedCorner ? CORNER_RADIUS_VALUE : 0.0f);
  122 + mGradientMap.Insert(DevelVisual::Property::CORNER_RADIUS, mRoundedCorner ? CORNER_RADIUS_VALUE : Vector4::ZERO);
123 123  
124 124 UpdateGradientMap();
125 125 }
... ... @@ -142,7 +142,7 @@ public:
142 142 }
143 143 else
144 144 {
145   - animation.AnimateTo(DevelControl::GetVisualProperty(mGradientControl, Control::Property::BACKGROUND, DevelVisual::Property::CORNER_RADIUS), 0.0f);
  145 + animation.AnimateTo(DevelControl::GetVisualProperty(mGradientControl, Control::Property::BACKGROUND, DevelVisual::Property::CORNER_RADIUS), Vector4::ZERO);
146 146 }
147 147 animation.Play();
148 148  
... ...
examples/reflection-demo/gltf-scene.cpp
... ... @@ -163,6 +163,8 @@ void glTF::LoadFromFile(const std::string&amp; filename)
163 163 mBuffer = LoadFile(binFile);
164 164 jsonBuffer = LoadFile(jsonFile);
165 165  
  166 + jsonBuffer.push_back('\0'); // It should be null terminated.
  167 +
166 168 // Log errors
167 169 if(mBuffer.empty())
168 170 {
... ...
packaging/com.samsung.dali-demo.spec
... ... @@ -2,7 +2,7 @@
2 2  
3 3 Name: com.samsung.dali-demo
4 4 Summary: The OpenGLES Canvas Core Demo
5   -Version: 2.0.21
  5 +Version: 2.0.25
6 6 Release: 1
7 7 Group: System/Libraries
8 8 License: Apache-2.0
... ...
resources/images/shape.riv 0 → 100644
No preview for this file type
resources/po/en_GB.po
... ... @@ -28,6 +28,9 @@ msgstr &quot;Bubbles&quot;
28 28 msgid "DALI_DEMO_STR_TITLE_BUTTONS"
29 29 msgstr "Buttons"
30 30  
  31 +msgid "DALI_DEMO_STR_TITLE_CANVAS_VIEW"
  32 +msgstr "Canvas view"
  33 +
31 34 msgid "DALI_DEMO_STR_TITLE_CALL_ACTIVE"
32 35 msgstr "Call Active"
33 36  
... ... @@ -294,3 +297,6 @@ msgstr &quot;Web View&quot;
294 297  
295 298 msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
296 299 msgstr "Animated Vector Images"
  300 +
  301 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE"
  302 +msgstr "Animated Vector Images Rive"
... ...
resources/po/en_US.po
... ... @@ -28,6 +28,9 @@ msgstr &quot;Bubbles&quot;
28 28 msgid "DALI_DEMO_STR_TITLE_BUTTONS"
29 29 msgstr "Buttons"
30 30  
  31 +msgid "DALI_DEMO_STR_TITLE_CANVAS_VIEW"
  32 +msgstr "Canvas view"
  33 +
31 34 msgid "DALI_DEMO_STR_TITLE_CALL_ACTIVE"
32 35 msgstr "Call Active"
33 36  
... ... @@ -295,6 +298,9 @@ msgstr &quot;Web View&quot;
295 298 msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
296 299 msgstr "Animated Vector Images"
297 300  
  301 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE"
  302 +msgstr "Animated Vector Images Rive"
  303 +
298 304 msgid "DALI_DEMO_STR_TITLE_TEXT_RENDERER"
299 305 msgstr "Text Renderer"
300 306  
... ...
resources/po/ko.po
... ... @@ -192,3 +192,6 @@ msgstr &quot;PBR&quot;
192 192  
193 193 msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
194 194 msgstr "애니메이션 벡터 이미지"
  195 +
  196 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE"
  197 +msgstr "애니메이션 벡터 이미지 라이브"
... ...
shared/dali-demo-strings.h
... ... @@ -37,6 +37,7 @@ extern &quot;C&quot;
37 37 #define DALI_DEMO_STR_TITLE_ANIMATED_IMAGES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_IMAGES")
38 38 #define DALI_DEMO_STR_TITLE_ANIMATED_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES")
39 39 #define DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES")
  40 +#define DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE")
40 41 #define DALI_DEMO_STR_TITLE_ARC_VISUAL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ARC_VISUAL")
41 42 #define DALI_DEMO_STR_TITLE_BASIC_LIGHT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BASIC_LIGHT")
42 43 #define DALI_DEMO_STR_TITLE_BENCHMARK dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BENCHMARK")
... ... @@ -45,6 +46,7 @@ extern &quot;C&quot;
45 46 #define DALI_DEMO_STR_TITLE_BLOOM_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BLOOM_VIEW")
46 47 #define DALI_DEMO_STR_TITLE_BUBBLES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BUBBLES")
47 48 #define DALI_DEMO_STR_TITLE_BUTTONS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BUTTONS")
  49 +#define DALI_DEMO_STR_TITLE_CANVAS_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CANVAS_VIEW")
48 50 #define DALI_DEMO_STR_TITLE_CALL_ACTIVE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CALL_ACTIVE")
49 51 #define DALI_DEMO_STR_TITLE_CARD_ACTIVE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CARD_ACTIVE")
50 52 #define DALI_DEMO_STR_TITLE_CLIPPING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CLIPPING")
... ... @@ -142,6 +144,7 @@ extern &quot;C&quot;
142 144 #define DALI_DEMO_STR_TITLE_ANIMATED_IMAGES "Animated Images"
143 145 #define DALI_DEMO_STR_TITLE_ANIMATED_SHAPES "Animated Shapes"
144 146 #define DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES "Animated Vector Images"
  147 +#define DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES_RIVE "Animated Vector Images Rive"
145 148 #define DALI_DEMO_STR_TITLE_ARC_VISUAL "Arc Visual"
146 149 #define DALI_DEMO_STR_TITLE_BASIC_LIGHT "Basic Light"
147 150 #define DALI_DEMO_STR_TITLE_BENCHMARK "ImageView Benchmark"
... ... @@ -150,6 +153,7 @@ extern &quot;C&quot;
150 153 #define DALI_DEMO_STR_TITLE_BLOOM_VIEW "Bloom"
151 154 #define DALI_DEMO_STR_TITLE_BUBBLES "Bubbles"
152 155 #define DALI_DEMO_STR_TITLE_BUTTONS "Buttons"
  156 +#define DALI_DEMO_STR_TITLE_CANVAS_VIEW "Canvas View"
153 157 #define DALI_DEMO_STR_TITLE_CALL_ACTIVE "Call Active"
154 158 #define DALI_DEMO_STR_TITLE_CARD_ACTIVE "Card Active"
155 159 #define DALI_DEMO_STR_TITLE_CLIPPING "Clipping"
... ...