From f44ecaa4f27e7538ddcad66d40e543bffa2d2d86 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 4 Jun 2017 16:57:49 +0200 Subject: sync with upstream --- .../include/kodi/addon-instance/Screensaver.h | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Screensaver.h (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Screensaver.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Screensaver.h new file mode 100644 index 0000000..39baae7 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Screensaver.h @@ -0,0 +1,141 @@ +#pragma once +/* + * Copyright (C) 2005-2017 Team Kodi + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Kodi; see the file COPYING. If not, see + * . + * + */ + +#include "../AddonBase.h" + +namespace kodi { namespace addon { class CInstanceScreensaver; }} + +extern "C" +{ + +struct AddonInstance_Screensaver; + +typedef struct AddonProps_Screensaver +{ + void *device; + int x; + int y; + int width; + int height; + float pixelRatio; + const char *name; + const char *presets; + const char *profile; +} AddonProps_Screensaver; + +typedef struct AddonToKodiFuncTable_Screensaver +{ + KODI_HANDLE kodiInstance; +} AddonToKodiFuncTable_Screensaver; + +typedef struct KodiToAddonFuncTable_Screensaver +{ + kodi::addon::CInstanceScreensaver* addonInstance; + bool (__cdecl* Start) (AddonInstance_Screensaver* instance); + void (__cdecl* Stop) (AddonInstance_Screensaver* instance); + void (__cdecl* Render) (AddonInstance_Screensaver* instance); +} KodiToAddonFuncTable_Screensaver; + +typedef struct AddonInstance_Screensaver +{ + AddonProps_Screensaver props; + AddonToKodiFuncTable_Screensaver toKodi; + KodiToAddonFuncTable_Screensaver toAddon; +} AddonInstance_Screensaver; + +} /* extern "C" */ + +namespace kodi +{ +namespace addon +{ + + class CInstanceScreensaver : public IAddonInstance + { + public: + CInstanceScreensaver() + : IAddonInstance(ADDON_INSTANCE_SCREENSAVER) + { + if (CAddonBase::m_interface->globalSingleInstance != nullptr) + throw std::logic_error("kodi::addon::CInstanceScreensaver: Creation of more as one in single instance way is not allowed!"); + + SetAddonStruct(CAddonBase::m_interface->firstKodiInstance); + CAddonBase::m_interface->globalSingleInstance = this; + } + + CInstanceScreensaver(KODI_HANDLE instance) + : IAddonInstance(ADDON_INSTANCE_SCREENSAVER) + { + if (CAddonBase::m_interface->globalSingleInstance != nullptr) + throw std::logic_error("kodi::addon::CInstanceScreensaver: Creation of multiple together with single instance way is not allowed!"); + + SetAddonStruct(instance); + } + + virtual ~CInstanceScreensaver() { } + + virtual bool Start() { return true; } + virtual void Stop() {} + virtual void Render() {} + + inline void* Device() { return m_instanceData->props.device; } + inline int X() { return m_instanceData->props.x; } + inline int Y() { return m_instanceData->props.y; } + inline int Width() { return m_instanceData->props.width; } + inline int Height() { return m_instanceData->props.height; } + inline float PixelRatio() { return m_instanceData->props.pixelRatio; } + inline std::string Name() { return m_instanceData->props.name; } + inline std::string Presets() { return m_instanceData->props.presets; } + inline std::string Profile() { return m_instanceData->props.profile; } + + private: + void SetAddonStruct(KODI_HANDLE instance) + { + if (instance == nullptr) + throw std::logic_error("kodi::addon::CInstanceScreensaver: Creation with empty addon structure not allowed, table must be given from Kodi!"); + + m_instanceData = static_cast(instance); + m_instanceData->toAddon.addonInstance = this; + m_instanceData->toAddon.Start = ADDON_Start; + m_instanceData->toAddon.Stop = ADDON_Stop; + m_instanceData->toAddon.Render = ADDON_Render; + } + + inline static bool ADDON_Start(AddonInstance_Screensaver* instance) + { + return instance->toAddon.addonInstance->Start(); + } + + inline static void ADDON_Stop(AddonInstance_Screensaver* instance) + { + instance->toAddon.addonInstance->Stop(); + } + + inline static void ADDON_Render(AddonInstance_Screensaver* instance) + { + instance->toAddon.addonInstance->Render(); + } + + AddonInstance_Screensaver* m_instanceData; + }; + +} /* namespace addon */ +} /* namespace kodi */ -- cgit v1.2.3