diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/addons/interfaces/gui/General.cpp | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/addons/interfaces/gui/General.cpp')
-rw-r--r-- | xbmc/addons/interfaces/gui/General.cpp | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/xbmc/addons/interfaces/gui/General.cpp b/xbmc/addons/interfaces/gui/General.cpp new file mode 100644 index 0000000..a0a5583 --- /dev/null +++ b/xbmc/addons/interfaces/gui/General.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2005-2018 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 "General.h" + +#include "ListItem.h" +#include "ServiceBroker.h" +#include "Window.h" +#include "addons/binary-addons/AddonDll.h" +#include "addons/kodi-dev-kit/include/kodi/gui/General.h" +#include "controls/Button.h" +#include "controls/Edit.h" +#include "controls/FadeLabel.h" +#include "controls/Image.h" +#include "controls/Label.h" +#include "controls/Progress.h" +#include "controls/RadioButton.h" +#include "controls/Rendering.h" +#include "controls/SettingsSlider.h" +#include "controls/Slider.h" +#include "controls/Spin.h" +#include "controls/TextBox.h" +#include "dialogs/ContextMenu.h" +#include "dialogs/ExtendedProgressBar.h" +#include "dialogs/FileBrowser.h" +#include "dialogs/Keyboard.h" +#include "dialogs/Numeric.h" +#include "dialogs/OK.h" +#include "dialogs/Progress.h" +#include "dialogs/Select.h" +#include "dialogs/TextViewer.h" +#include "dialogs/YesNo.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "settings/Settings.h" +#include "settings/SettingsComponent.h" +#include "utils/log.h" + +#include <mutex> + +namespace ADDON +{ +int Interface_GUIGeneral::m_iAddonGUILockRef = 0; + +void Interface_GUIGeneral::Init(AddonGlobalInterface* addonInterface) +{ + addonInterface->toKodi->kodi_gui = new AddonToKodiFuncTable_kodi_gui(); + + Interface_GUIControlButton::Init(addonInterface); + Interface_GUIControlEdit::Init(addonInterface); + Interface_GUIControlFadeLabel::Init(addonInterface); + Interface_GUIControlImage::Init(addonInterface); + Interface_GUIControlLabel::Init(addonInterface); + Interface_GUIControlProgress::Init(addonInterface); + Interface_GUIControlRadioButton::Init(addonInterface); + Interface_GUIControlAddonRendering::Init(addonInterface); + Interface_GUIControlSettingsSlider::Init(addonInterface); + Interface_GUIControlSlider::Init(addonInterface); + Interface_GUIControlSpin::Init(addonInterface); + Interface_GUIControlTextBox::Init(addonInterface); + Interface_GUIDialogContextMenu::Init(addonInterface); + Interface_GUIDialogExtendedProgress::Init(addonInterface); + Interface_GUIDialogFileBrowser::Init(addonInterface); + Interface_GUIDialogKeyboard::Init(addonInterface); + Interface_GUIDialogNumeric::Init(addonInterface); + Interface_GUIDialogOK::Init(addonInterface); + Interface_GUIDialogProgress::Init(addonInterface); + Interface_GUIDialogSelect::Init(addonInterface); + Interface_GUIDialogTextViewer::Init(addonInterface); + Interface_GUIDialogYesNo::Init(addonInterface); + Interface_GUIListItem::Init(addonInterface); + Interface_GUIWindow::Init(addonInterface); + + addonInterface->toKodi->kodi_gui->general = new AddonToKodiFuncTable_kodi_gui_general(); + + addonInterface->toKodi->kodi_gui->general->lock = lock; + addonInterface->toKodi->kodi_gui->general->unlock = unlock; + addonInterface->toKodi->kodi_gui->general->get_screen_height = get_screen_height; + addonInterface->toKodi->kodi_gui->general->get_screen_width = get_screen_width; + addonInterface->toKodi->kodi_gui->general->get_video_resolution = get_video_resolution; + addonInterface->toKodi->kodi_gui->general->get_current_window_dialog_id = + get_current_window_dialog_id; + addonInterface->toKodi->kodi_gui->general->get_current_window_id = get_current_window_id; + addonInterface->toKodi->kodi_gui->general->get_hw_context = get_hw_context; + addonInterface->toKodi->kodi_gui->general->get_adjust_refresh_rate_status = + get_adjust_refresh_rate_status; +} + +void Interface_GUIGeneral::DeInit(AddonGlobalInterface* addonInterface) +{ + if (addonInterface->toKodi && /* <-- needed as long as the old addon way is used */ + addonInterface->toKodi->kodi_gui) + { + Interface_GUIControlButton::DeInit(addonInterface); + Interface_GUIControlEdit::DeInit(addonInterface); + Interface_GUIControlFadeLabel::DeInit(addonInterface); + Interface_GUIControlImage::DeInit(addonInterface); + Interface_GUIControlLabel::DeInit(addonInterface); + Interface_GUIControlProgress::DeInit(addonInterface); + Interface_GUIControlRadioButton::DeInit(addonInterface); + Interface_GUIControlAddonRendering::DeInit(addonInterface); + Interface_GUIControlSettingsSlider::DeInit(addonInterface); + Interface_GUIControlSlider::DeInit(addonInterface); + Interface_GUIControlSpin::DeInit(addonInterface); + Interface_GUIControlTextBox::DeInit(addonInterface); + Interface_GUIDialogContextMenu::DeInit(addonInterface); + Interface_GUIDialogExtendedProgress::DeInit(addonInterface); + Interface_GUIDialogFileBrowser::DeInit(addonInterface); + Interface_GUIDialogKeyboard::DeInit(addonInterface); + Interface_GUIDialogNumeric::DeInit(addonInterface); + Interface_GUIDialogOK::DeInit(addonInterface); + Interface_GUIDialogProgress::DeInit(addonInterface); + Interface_GUIDialogSelect::DeInit(addonInterface); + Interface_GUIDialogTextViewer::DeInit(addonInterface); + Interface_GUIDialogYesNo::DeInit(addonInterface); + Interface_GUIListItem::DeInit(addonInterface); + Interface_GUIWindow::DeInit(addonInterface); + + delete addonInterface->toKodi->kodi_gui->general; + delete addonInterface->toKodi->kodi_gui; + addonInterface->toKodi->kodi_gui = nullptr; + } +} + +//@{ +void Interface_GUIGeneral::lock() +{ + if (m_iAddonGUILockRef == 0) + CServiceBroker::GetWinSystem()->GetGfxContext().lock(); + ++m_iAddonGUILockRef; +} + +void Interface_GUIGeneral::unlock() +{ + if (m_iAddonGUILockRef > 0) + { + --m_iAddonGUILockRef; + if (m_iAddonGUILockRef == 0) + CServiceBroker::GetWinSystem()->GetGfxContext().unlock(); + } +} +//@} + +//@{ +int Interface_GUIGeneral::get_screen_height(KODI_HANDLE kodiBase) +{ + CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); + if (!addon) + { + CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); + return -1; + } + + return CServiceBroker::GetWinSystem()->GetGfxContext().GetHeight(); +} + +int Interface_GUIGeneral::get_screen_width(KODI_HANDLE kodiBase) +{ + CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); + if (!addon) + { + CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); + return -1; + } + + return CServiceBroker::GetWinSystem()->GetGfxContext().GetWidth(); +} + +int Interface_GUIGeneral::get_video_resolution(KODI_HANDLE kodiBase) +{ + CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); + if (!addon) + { + CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); + return -1; + } + + return (int)CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution(); +} +//@} + +//@{ +int Interface_GUIGeneral::get_current_window_dialog_id(KODI_HANDLE kodiBase) +{ + CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); + if (!addon) + { + CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); + return -1; + } + + std::unique_lock<CCriticalSection> gl(CServiceBroker::GetWinSystem()->GetGfxContext()); + return CServiceBroker::GetGUI()->GetWindowManager().GetTopmostModalDialog(); +} + +int Interface_GUIGeneral::get_current_window_id(KODI_HANDLE kodiBase) +{ + CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); + if (!addon) + { + CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); + return -1; + } + + std::unique_lock<CCriticalSection> gl(CServiceBroker::GetWinSystem()->GetGfxContext()); + return CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow(); +} + +ADDON_HARDWARE_CONTEXT Interface_GUIGeneral::get_hw_context(KODI_HANDLE kodiBase) +{ + return CServiceBroker::GetWinSystem()->GetHWContext(); +} + +AdjustRefreshRateStatus Interface_GUIGeneral::get_adjust_refresh_rate_status(KODI_HANDLE kodiBase) +{ + CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); + if (!addon) + { + CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); + return ADJUST_REFRESHRATE_STATUS_OFF; + } + + switch (CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt( + CSettings::SETTING_VIDEOPLAYER_ADJUSTREFRESHRATE)) + { + case AdjustRefreshRate::ADJUST_REFRESHRATE_OFF: + return ADJUST_REFRESHRATE_STATUS_OFF; + break; + case AdjustRefreshRate::ADJUST_REFRESHRATE_ON_START: + return ADJUST_REFRESHRATE_STATUS_ON_START; + break; + case AdjustRefreshRate::ADJUST_REFRESHRATE_ON_STARTSTOP: + return ADJUST_REFRESHRATE_STATUS_ON_STARTSTOP; + break; + case AdjustRefreshRate::ADJUST_REFRESHRATE_ALWAYS: + return ADJUST_REFRESHRATE_STATUS_ALWAYS; + break; + default: + CLog::Log(LOGERROR, "kodi::gui::{} - Unhandled Adjust refresh rate setting", __func__); + return ADJUST_REFRESHRATE_STATUS_OFF; + break; + } +} + +//@} + +} /* namespace ADDON */ |