[NUI] Support Layout for Multi-Window
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Mon, 10 Jan 2022 11:33:36 +0000 (20:33 +0900)
committerSeoyeon2Kim <34738918+Seoyeon2Kim@users.noreply.github.com>
Wed, 12 Jan 2022 08:40:18 +0000 (17:40 +0900)
Previously, Layouts in the default Window were supported.

Now, to support Layout in Multi-Window, Layouts in all Windows are supported.

src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/MultiWindowLayoutSample.cs [new file with mode: 0644]

index d154a4b..9df1143 100755 (executable)
@@ -189,7 +189,7 @@ namespace Tizen.NUI.BaseComponents
 
         internal void SetLayout(LayoutItem layout)
         {
-            Window.Instance.LayoutController.CreateProcessCallback();
+            Window.Get(this)?.LayoutController.CreateProcessCallback();
             this.layout = layout;
             this.layout?.AttachToOwner(this);
             this.layout?.RequestLayout();
diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/MultiWindowLayoutSample.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/MultiWindowLayoutSample.cs
new file mode 100644 (file)
index 0000000..aee747a
--- /dev/null
@@ -0,0 +1,98 @@
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Tizen.NUI.Samples
+{
+    public class MultiWindowLayoutSample : IExample
+    {
+        private Window mainWindow = null;
+        private Window subWindow = null;
+        private View mainView = null;
+        private View subView = null;
+
+        public void Activate()
+        {
+            mainWindow = NUIApplication.GetDefaultWindow();
+
+            mainView = new View()
+            {
+                Layout = new LinearLayout(),
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                BackgroundColor = Color.White
+            };
+            mainWindow.Add(mainView);
+
+            var mainChild = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                BackgroundColor = Color.Red
+            };
+            mainView.Add(mainChild);
+
+            var mainChild2 = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                BackgroundColor = Color.Yellow
+            };
+            mainView.Add(mainChild2);
+
+            subWindow = new Window();
+
+            subView = new View()
+            {
+                Layout = new LinearLayout(),
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                BackgroundColor = Color.White
+            };
+            subWindow.Add(subView);
+
+            var subChild = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                BackgroundColor = Color.Green
+            };
+            subView.Add(subChild);
+
+            var subChild2 = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                BackgroundColor = Color.Blue
+            };
+            subView.Add(subChild2);
+        }
+
+        public void Deactivate()
+        {
+            if (subWindow != null)
+            {
+                if (subView != null)
+                {
+                    subWindow.Remove(subView);
+                    subView.Dispose();
+                    subView = null;
+                }
+
+                subWindow.Dispose();
+                subWindow = null;
+            }
+
+            if (mainWindow != null)
+            {
+                if (mainView != null)
+                {
+                    mainWindow.Remove(mainView);
+                    mainView.Dispose();
+                    mainView = null;
+                }
+
+                mainWindow = null;
+            }
+        }
+    }
+}