summaryrefslogtreecommitdiffstats
path: root/xbmc/windowing/WindowSystemFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/windowing/WindowSystemFactory.cpp')
-rw-r--r--xbmc/windowing/WindowSystemFactory.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/xbmc/windowing/WindowSystemFactory.cpp b/xbmc/windowing/WindowSystemFactory.cpp
new file mode 100644
index 0000000..edb6098
--- /dev/null
+++ b/xbmc/windowing/WindowSystemFactory.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2005-2020 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "WindowSystemFactory.h"
+
+#include <algorithm>
+
+using namespace KODI::WINDOWING;
+
+std::list<std::pair<std::string, std::function<std::unique_ptr<CWinSystemBase>()>>>
+ CWindowSystemFactory::m_windowSystems;
+
+std::list<std::string> CWindowSystemFactory::GetWindowSystems()
+{
+ std::list<std::string> available;
+ for (const auto& windowSystem : m_windowSystems)
+ available.emplace_back(windowSystem.first);
+
+ return available;
+}
+
+std::unique_ptr<CWinSystemBase> CWindowSystemFactory::CreateWindowSystem(const std::string& name)
+{
+ auto windowSystem =
+ std::find_if(m_windowSystems.begin(), m_windowSystems.end(),
+ [&name](auto& windowSystem) { return windowSystem.first == name; });
+ if (windowSystem != m_windowSystems.end())
+ return windowSystem->second();
+
+ return nullptr;
+}
+
+void CWindowSystemFactory::RegisterWindowSystem(
+ const std::function<std::unique_ptr<CWinSystemBase>()>& createFunction, const std::string& name)
+{
+ m_windowSystems.emplace_back(std::make_pair(name, createFunction));
+}