[NUI] Apply CornerRadius to WidgetView
authorsunghyun kim <scholb.kim@samsung.com>
Wed, 20 Dec 2023 02:10:52 +0000 (11:10 +0900)
committertscholb <scholb.kim@samsung.com>
Wed, 20 Dec 2023 09:57:58 +0000 (18:57 +0900)
The CornerRadius function previously supported in View has been modified to also apply to WidgetView.
For this behavior, WidgetView has an internal visual and its structure is changed.
In this case,  WidgetView no longer generates shaders and rendering directly.

I've added a sample for testing the corner radius.
You can use it as follows:
widgetView.CornerRadius = 22;

src/Tizen.NUI/src/public/Widget/WidgetView.cs
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/SimpleWidgetApp.cs [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/Tizen.NUI.WidgetTest.csproj [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/Tizen.NUI.WidgetTest.sln [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/shared/res/Tizen.NUI.WidgetTest.png [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/tizen-manifest.xml [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/SimpleWidgetViewApp.cs [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/Tizen.NUI.WidgetViewTest.csproj [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/Tizen.NUI.WidgetViewTest.sln [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/shared/res/Tizen.NUI.WidgetViewTest.png [new file with mode: 0755]
test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/tizen-manifest.xml [new file with mode: 0755]

index c06de97..204264f 100755 (executable)
@@ -891,6 +891,23 @@ namespace Tizen.NUI
             return true; // Do not pass the touch event to the below.
         }
 
+        internal override void ApplyCornerRadius()
+        {
+            base.ApplyCornerRadius();
+
+            if (backgroundExtraData == null) 
+            {
+                return;
+            }
+
+            // Update corner radius properties to widgetView by ActionUpdateProperty
+            if (backgroundExtraData.CornerRadius != null)
+            {
+                Interop.View.InternalUpdateVisualPropertyVector4(this.SwigCPtr, WidgetView.Property.WidgetId, Visual.Property.CornerRadius, Vector4.getCPtr(backgroundExtraData.CornerRadius));
+            }
+            Interop.View.InternalUpdateVisualPropertyInt(this.SwigCPtr, WidgetView.Property.WidgetId, Visual.Property.CornerRadiusPolicy, (int)backgroundExtraData.CornerRadiusPolicy);
+        }
+
         // Callback for WidgetView WidgetAdded signal
         private void OnWidgetAdded(IntPtr data)
         {
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/SimpleWidgetApp.cs b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/SimpleWidgetApp.cs
new file mode 100755 (executable)
index 0000000..79caa8f
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2022 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.
+ *
+ */
+using System;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Collections.Generic; // for Dictionary
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.Applications;
+
+namespace WidgetTemplate
+{
+    class RedWidget : Widget
+    {
+        protected override void OnCreate(string contentInfo, Window window)
+        {
+            Tizen.Log.Info("NUI", "OnCreate(RedWidget) \n");
+            Bundle bundle = Bundle.Decode(contentInfo);
+            mRootView = new View();
+            mRootView.BackgroundColor = Color.Red;
+            mRootView.Size2D = window.Size;
+            window.GetDefaultLayer().Add(mRootView);
+
+            TextLabel sampleLabel = new TextLabel("Red Widget ");
+            sampleLabel.FontFamily = "SamsungOneUI 500";
+            sampleLabel.PointSize = 8;
+            sampleLabel.TextColor = Color.Black;
+            sampleLabel.SizeWidth = 300;
+            sampleLabel.PivotPoint = PivotPoint.Center;
+            mRootView.Add(sampleLabel);
+
+            mAnimation = new Animation(1000);
+            mAnimation.AnimateTo(sampleLabel, "PositionX", 300.0f);
+            mAnimation.Looping = true;
+            mAnimation.Play();
+        }
+
+        protected override void OnPause()
+        {
+            base.OnPause();
+        }
+
+        protected override void OnResume()
+        {
+            base.OnResume();
+        }
+
+        protected override void OnResize(Window window)
+        {
+            mRootView.Size2D = window.Size;
+            base.OnResize(window);
+        }
+
+        protected override void OnTerminate(string contentInfo, TerminationType type)
+        {
+            base.OnTerminate(contentInfo, type);
+        }
+
+        protected override void OnUpdate(string contentInfo, int force)
+        {
+            base.OnUpdate(contentInfo, force);
+        }
+
+        private View mRootView;
+        private Animation mAnimation;
+    }
+
+    class BlueWidget : Widget
+    {
+        protected override void OnCreate(string contentInfo, Window window)
+        {
+            Tizen.Log.Info("NUI", "OnCreate(BlueWidget) \n");
+            Bundle bundle = Bundle.Decode(contentInfo);
+            mRootView = new View();
+            mRootView.BackgroundColor = Color.Blue;
+            mRootView.Size2D = window.Size;
+            window.GetDefaultLayer().Add(mRootView);
+
+            TextLabel sampleLabel = new TextLabel("Blue Widget ");
+            sampleLabel.FontFamily = "SamsungOneUI 500";
+            sampleLabel.PointSize = 8;
+            sampleLabel.TextColor = Color.Black;
+            sampleLabel.SizeWidth = 300;
+            sampleLabel.PivotPoint = PivotPoint.Center;
+            mRootView.Add(sampleLabel);
+
+            mAnimation = new Animation(1000);
+            mAnimation.AnimateTo(sampleLabel, "PositionX", 400.0f);
+            mAnimation.Looping = true;
+            mAnimation.Play();
+        }
+
+        protected override void OnPause()
+        {
+            base.OnPause();
+        }
+
+        protected override void OnResume()
+        {
+            base.OnResume();
+        }
+
+        protected override void OnResize(Window window)
+        {
+            base.OnResize(window);
+        }
+
+        protected override void OnTerminate(string contentInfo, TerminationType type)
+        {
+            Tizen.Log.Info("NUI", "OnTerminate(BlueWidget) \n");
+            mAnimation.Stop();
+            mAnimation = null;
+            mRootView.Dispose();
+            mRootView = null;
+            base.OnTerminate(contentInfo, type);
+
+            // Call GC for deleting window directly
+            global::System.GC.Collect();
+            global::System.GC.WaitForPendingFinalizers();
+            global::System.GC.Collect();
+        }
+
+        protected override void OnUpdate(string contentInfo, int force)
+        {
+            base.OnUpdate(contentInfo, force);
+        }
+
+        private View mRootView;
+        private Animation mAnimation;
+    }
+
+    class Program : NUIWidgetApplication
+    {
+        public Program(Dictionary<System.Type, string> widgetSet) : base(widgetSet)
+        {
+
+        }
+
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            Initialize();
+        }
+
+        void Initialize()
+        {
+        }
+
+        public void OnKeyEvent(object sender, Window.KeyEventArgs e)
+        {
+            if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape"))
+            {
+                Exit();
+            }
+        }
+
+        static void Main(string[] args)
+        {
+            Dictionary<System.Type, string> widgetSet = new Dictionary<Type, string>();
+            widgetSet.Add(typeof(RedWidget), "class1@Tizen.NUI.WidgetTest");
+            widgetSet.Add(typeof(BlueWidget), "class2@Tizen.NUI.WidgetTest");
+            var app = new Program(widgetSet);
+            app.Run(args);
+        }
+    }
+}
+
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/Tizen.NUI.WidgetTest.csproj b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/Tizen.NUI.WidgetTest.csproj
new file mode 100755 (executable)
index 0000000..30360b5
--- /dev/null
@@ -0,0 +1,27 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+    <AssemblyName>Tizen.NUI.WidgetTest</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <PackageId>Tizen.NUI.WidgetTest</PackageId>
+    <Authors>Tizen.NUI.WidgetTest</Authors>
+    <Company>Tizen.NUI.WidgetTest</Company>
+    <Product>Tizen.NUI.WidgetTest</Product>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+        <ProjectReference Include="../../../../src/Tizen.NUI/Tizen.NUI.csproj" />
+        <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />
+  </ItemGroup>
+
+</Project>
+
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/Tizen.NUI.WidgetTest.sln b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/Tizen.NUI.WidgetTest.sln
new file mode 100755 (executable)
index 0000000..79d0b33
--- /dev/null
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30309.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.WidgetTest", "Tizen.NUI.WidgetTest.csproj", "{3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+               SolutionGuid = {355D568D-D02A-490A-A6AC-FD6C7D97457A}
+       EndGlobalSection
+EndGlobal
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/shared/res/Tizen.NUI.WidgetTest.png b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/shared/res/Tizen.NUI.WidgetTest.png
new file mode 100755 (executable)
index 0000000..9f3cb98
Binary files /dev/null and b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/shared/res/Tizen.NUI.WidgetTest.png differ
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/tizen-manifest.xml b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetTest/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..4de6c5d
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="5" package="Tizen.NUI.WidgetTest" version="1.0.0">
+  <profile name="common" />
+  <widget-application appid="Tizen.NUI.WidgetTest"
+                                       exec="Tizen.NUI.WidgetTest.dll"
+                                       type="dotnet-nui"
+                                       multiple="false"
+                                       taskmanage="true"
+                                       nodisplay="false"
+                                       launch_mode="single">
+    <label>Tizen.NUI.WidgetTest</label>
+    <icon>Tizen.NUI.WidgetTest.png</icon>
+    <widget-class classid="class1" update-period="0">
+      <support-size preview="Tizen.NUI.WidgetTest.png">4x4</support-size>
+    </widget-class>
+    <widget-class classid="class2" update-period="0">
+      <support-size preview="Tizen.NUI.WidgetTest.png">4x4</support-size>
+    </widget-class>
+    <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+  </widget-application>
+</manifest>
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/SimpleWidgetViewApp.cs b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/SimpleWidgetViewApp.cs
new file mode 100755 (executable)
index 0000000..78d7978
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2022 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.
+ *
+ */
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.Applications;
+namespace WidgetApplicationTemplate
+{
+    class Program : NUIApplication
+    {
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            Initialize();
+        }
+        void Initialize()
+        {
+            Window window = GetDefaultWindow();
+
+            window.KeyEvent += OnKeyEvent;
+            window.TouchEvent += OnTouchEvent;
+            
+            rootView = new View();
+            rootView.BackgroundColor = Color.White;
+            rootView.Size = Window.Instance.Size;
+            rootView.PivotPoint = PivotPoint.Center;
+            window.GetDefaultLayer().Add(rootView);
+
+            TextLabel sampleLabel = new TextLabel("Widget Viewer ");
+            sampleLabel.FontFamily = "SamsungOneUI 500";
+            sampleLabel.PointSize = 8;
+            sampleLabel.TextColor = Color.Black;
+            sampleLabel.SizeWidth = 300;
+            sampleLabel.PivotPoint = PivotPoint.Center;
+            rootView.Add(sampleLabel);
+
+            Bundle bundle = new Bundle();
+            bundle.AddItem("COUNT", "1");
+            String encodedBundle = bundle.Encode();
+
+            widgetWidth = 500;
+            widgetHeight = 500;
+            mWidgetView = WidgetViewManager.Instance.AddWidget("class1@Tizen.NUI.WidgetTest", encodedBundle, widgetWidth, widgetHeight, 0.0f);
+            mWidgetView.CornerRadius = 40;
+            mWidgetView.Position = new Position(100,100);
+            window.GetDefaultLayer().Add(mWidgetView);
+
+            mWidgetView2 = WidgetViewManager.Instance.AddWidget("class2@Tizen.NUI.WidgetTest", encodedBundle, widgetWidth, widgetHeight, 0.0f);
+            mWidgetView2.Position = new Position(100, widgetHeight + 110);
+            mWidgetView2.CornerRadius = 22;
+            window.GetDefaultLayer().Add(mWidgetView2);
+
+            mTimer = new Timer(4000);
+            mTimer.Tick += onTick;
+            mTimer.Start();
+
+            created = true;
+        }
+
+        private bool onTick(object o, Timer.TickEventArgs e)
+        {
+            Window window = GetDefaultWindow();
+            if(created)
+            {
+                WidgetViewManager.Instance.RemoveWidget(mWidgetView2);
+                mWidgetView2.Dispose();
+                mWidgetView2 = null;
+                created = false;
+            }
+            else
+            {
+                Bundle bundle = new Bundle();
+                bundle.AddItem("COUNT", "1");
+                String encodedBundle = bundle.Encode();
+
+                mWidgetView2 = WidgetViewManager.Instance.AddWidget("class2@Tizen.NUI.WidgetTest", encodedBundle, widgetWidth, widgetHeight, 0.0f);
+                mWidgetView2.Position = new Position(100, widgetHeight + 110);
+                mWidgetView2.CornerRadius = 22;
+                window.GetDefaultLayer().Add(mWidgetView2);
+
+                bundle.Dispose();
+                bundle = null;
+                created = true;
+            }
+            return true;
+        }
+
+        public void OnKeyEvent(object sender, Window.KeyEventArgs e)
+        {
+            if (e.Key.State == Key.StateType.Down )
+            {
+                Tizen.Log.Info("NUI", "OnKeyEvent(View-Window) : " + e.Key.KeyPressedName + "\n");
+                if (e.Key.KeyPressedName == "1")
+                {
+                    widgetWidth += 200;
+                    widgetHeight += 200;
+                    if(widgetWidth > 1000 || widgetHeight > 1000)
+                    {
+                        widgetWidth = 200;
+                        widgetHeight = 200;
+                    }
+                    mWidgetView.Size2D = new Size2D(widgetWidth, widgetHeight);
+                }
+
+            }
+        }
+        private void OnTouchEvent(object source, Window.TouchEventArgs e)
+        {
+        }
+        private void OnWidgetContentUpdatedCB(object sender, WidgetView.WidgetViewEventArgs e)
+        {
+            String encodedBundle = e.WidgetView.ContentInfo;
+            Bundle bundle = Bundle.Decode(encodedBundle);
+            string outString;
+            if (bundle.TryGetItem("WidgetKey", out outString))
+            {
+                Tizen.Log.Info("NUI", "OnWidgetContentUpdatedCB : " + outString + "\n");
+            }
+
+        }
+
+        static void Main(string[] args)
+        {
+            var app = new Program();
+            app.Run(args);
+        }
+
+        private View rootView;
+        WidgetView mWidgetView;
+        WidgetView mWidgetView2;
+        int widgetWidth;
+        int widgetHeight;
+
+        Timer mTimer;
+        bool created;
+
+        Window mWindow;
+    }
+}
+
+
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/Tizen.NUI.WidgetViewTest.csproj b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/Tizen.NUI.WidgetViewTest.csproj
new file mode 100755 (executable)
index 0000000..9a38cb4
--- /dev/null
@@ -0,0 +1,27 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+    <AssemblyName>Tizen.NUI.WidgetViewTest</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <PackageId>Tizen.NUI.WidgetViewTest</PackageId>
+    <Authors>Tizen.NUI.WidgetViewTest</Authors>
+    <Company>Tizen.NUI.WidgetViewTest</Company>
+    <Product>Tizen.NUI.WidgetViewTest</Product>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+         <ProjectReference Include="../../../../src/Tizen.NUI/Tizen.NUI.csproj" />
+         <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />
+  </ItemGroup>
+
+</Project>
+
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/Tizen.NUI.WidgetViewTest.sln b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/Tizen.NUI.WidgetViewTest.sln
new file mode 100755 (executable)
index 0000000..d5413b5
--- /dev/null
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30309.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.WidgetViewTest", "Tizen.NUI.WidgetViewTest.csproj", "{3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {3C6CE4CE-9D35-42C9-B23D-BBFFA96B3955}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+               SolutionGuid = {355D568D-D02A-490A-A6AC-FD6C7D97457A}
+       EndGlobalSection
+EndGlobal
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/shared/res/Tizen.NUI.WidgetViewTest.png b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/shared/res/Tizen.NUI.WidgetViewTest.png
new file mode 100755 (executable)
index 0000000..9f3cb98
Binary files /dev/null and b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/shared/res/Tizen.NUI.WidgetViewTest.png differ
diff --git a/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/tizen-manifest.xml b/test/Tizen.NUI.WidgetViewTest/3.CornerRadius/Tizen.NUI.WidgetViewTest/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..2330dfd
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="Tizen.NUI.WidgetViewTest" version="1.0.0" api-version="4" xmlns="http://tizen.org/ns/packages">
+  <profile name="tv" />
+  <ui-application appid="Tizen.NUI.WidgetViewTest" exec="Tizen.NUI.WidgetViewTest.dll" multiple="false" nodisplay="false" taskmanage="true"
+                  splash-screen-display="true"
+                  type="dotnet-nui"
+                  launch_mode="single">
+    <label>Tizen.NUI.WidgetViewTest</label>
+    <icon>Tizen.NUI.WidgetViewTest.png</icon>
+    <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+    <splash-screens />
+  </ui-application>
+  <privileges>
+    <privilege>http://tizen.org/privilege/widget.viewer</privilege>
+    <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+    <privilege>http://tizen.org/privilege/datasharing</privilege>
+  </privileges>
+</manifest>