2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "GUIWindowScreensaver.h"
11 #include "GUIPassword.h"
12 #include "GUIUserMessages.h"
13 #include "ServiceBroker.h"
14 #include "addons/AddonManager.h"
15 #include "addons/ScreenSaver.h"
16 #include "addons/addoninfo/AddonType.h"
17 #include "application/ApplicationComponents.h"
18 #include "application/ApplicationPowerHandling.h"
19 #include "guilib/GUIComponent.h"
20 #include "guilib/GUIWindowManager.h"
21 #include "settings/Settings.h"
22 #include "settings/SettingsComponent.h"
24 CGUIWindowScreensaver::CGUIWindowScreensaver() : CGUIWindow(WINDOW_SCREENSAVER
, "")
28 void CGUIWindowScreensaver::Process(unsigned int currentTime
, CDirtyRegionList
& regions
)
31 CGUIWindow::Process(currentTime
, regions
);
32 const auto& context
= CServiceBroker::GetWinSystem()->GetGfxContext();
33 m_renderRegion
.SetRect(0, 0, static_cast<float>(context
.GetWidth()),
34 static_cast<float>(context
.GetHeight()));
37 void CGUIWindowScreensaver::Render()
41 auto& context
= CServiceBroker::GetWinSystem()->GetGfxContext();
43 context
.CaptureStateBlock();
45 context
.ApplyStateBlock();
52 // called when the mouse is moved/clicked etc. etc.
53 EVENT_RESULT
CGUIWindowScreensaver::OnMouseEvent(const CPoint
& point
, const CMouseEvent
& event
)
55 CServiceBroker::GetGUI()->GetWindowManager().PreviousWindow();
56 return EVENT_RESULT_HANDLED
;
59 bool CGUIWindowScreensaver::OnMessage(CGUIMessage
& message
)
61 switch (message
.GetMessage())
63 case GUI_MSG_WINDOW_DEINIT
:
71 CServiceBroker::GetWinSystem()->GetGfxContext().ApplyStateBlock();
75 case GUI_MSG_WINDOW_INIT
:
77 CGUIWindow::OnMessage(message
);
79 CServiceBroker::GetWinSystem()->GetGfxContext().CaptureStateBlock();
81 const std::string addon
= CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(
82 CSettings::SETTING_SCREENSAVER_MODE
);
83 const ADDON::AddonInfoPtr addonBase
=
84 CServiceBroker::GetAddonMgr().GetAddonInfo(addon
, ADDON::AddonType::SCREENSAVER
);
87 m_addon
= std::make_unique
<KODI::ADDONS::CScreenSaver
>(addonBase
);
88 return m_addon
->Start();
91 case GUI_MSG_CHECK_LOCK
:
93 auto& components
= CServiceBroker::GetAppComponents();
94 const auto appPower
= components
.GetComponent
<CApplicationPowerHandling
>();
95 if (!g_passwordManager
.IsProfileLockUnlocked())
97 appPower
->SetScreenSaverLockFailed();
100 appPower
->SetScreenSaverUnlocked();
105 return CGUIWindow::OnMessage(message
);