summaryrefslogtreecommitdiffstats
path: root/xbmc/windowing/windows/Win32DPMSSupport.cpp
blob: 99adc10a3dde42081614687476deac4fb75225eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
 *  Copyright (C) 2009-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 "Win32DPMSSupport.h"

#include "ServiceBroker.h"
#include "rendering/dx/RenderContext.h"
#include "utils/log.h"
#include "windowing/GraphicContext.h"
#include "windowing/windows/WinSystemWin32.h"

CWin32DPMSSupport::CWin32DPMSSupport()
{
  m_supportedModes.push_back(OFF);
  m_supportedModes.push_back(STANDBY);
}

bool CWin32DPMSSupport::EnablePowerSaving(PowerSavingMode mode)
{
  auto winSystem = dynamic_cast<CWinSystemWin32*>(CServiceBroker::GetWinSystem());
  if (!winSystem)
    return false;

  if (!winSystem->GetGfxContext().IsFullScreenRoot())
  {
    CLog::Log(LOGDEBUG, "DPMS: not in fullscreen, power saving disabled");
    return false;
  }

  switch (mode)
  {
  case OFF:
    // Turn off display
    return SendMessage(DX::Windowing()->GetHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, static_cast<LPARAM>(2)) == 0;
  case STANDBY:
    // Set display to low power
    return SendMessage(DX::Windowing()->GetHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, static_cast<LPARAM>(1)) == 0;
  default:
    return true;
  }
}

bool CWin32DPMSSupport::DisablePowerSaving()
{
  // Turn display on
  return SendMessage(DX::Windowing()->GetHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, static_cast<LPARAM>(-1)) == 0;
}