[ElmSharp] Adds PreloadedWindow (#1137)
authorKangho Hur <rookiejava+github@gmail.com>
Thu, 21 Nov 2019 04:13:55 +0000 (20:13 -0800)
committerWonYoung Choi <wy80.choi@samsung.com>
Thu, 21 Nov 2019 04:13:54 +0000 (13:13 +0900)
src/ElmSharp/ElmSharp/PreloadedWindow.cs [new file with mode: 0644]
src/ElmSharp/ElmSharp/Window.cs

diff --git a/src/ElmSharp/ElmSharp/PreloadedWindow.cs b/src/ElmSharp/ElmSharp/PreloadedWindow.cs
new file mode 100644 (file)
index 0000000..aafbb4a
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+namespace ElmSharp
+{
+    internal class PreloadedWindow : Window
+    {
+        static PreloadedWindow s_precreated;
+
+        public PreloadedWindow(bool useBaseLayout=true) : base("PreloadWindow")
+        {
+            s_precreated = this;
+            if (useBaseLayout)
+                InitializeBaseLayout();
+        }
+
+        public Layout BaseLayout
+        {
+            get;
+            protected set;
+        }
+
+        public void InitializeBaseLayout()
+        {
+            var conformant = new Conformant(this);
+            conformant.Show();
+
+            var layout = new Layout(conformant);
+            layout.SetTheme("layout", "application", "default");
+            layout.Show();
+
+            BaseLayout = layout;
+            conformant.SetContent(BaseLayout);
+        }
+
+        public static PreloadedWindow GetInstance()
+        {
+            var instance = s_precreated;
+            s_precreated = null;
+            return instance;
+        }
+    }
+}
index 059a03a..270078e 100644 (file)
@@ -1296,5 +1296,17 @@ namespace ElmSharp
             }
             return (DisplayRotation)orientation;
         }
+
+        static void Preload()
+        {
+            Elementary.Initialize();
+            Elementary.ThemeOverlay();
+            _ = new PreloadedWindow();
+        }
+
+        /// <summary>
+        /// For internal use only
+        /// </summary>
+        internal static Window CreateWindow(string name) => PreloadedWindow.GetInstance() ?? new Window(name);
     }
 }