[WASAPI] set stream audio category
[xbmc.git] / xbmc / cores / RetroPlayer / guicontrols / GUIGameControl.cpp
blobbf2ceb9acf8447652fcba9aded76994c71e3e714
1 /*
2 * Copyright (C) 2017-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.
7 */
9 #include "GUIGameControl.h"
11 #include "GUIRenderSettings.h"
12 #include "ServiceBroker.h"
13 #include "cores/RetroPlayer/RetroPlayerUtils.h"
14 #include "cores/RetroPlayer/guibridge/GUIGameRenderManager.h"
15 #include "cores/RetroPlayer/guibridge/GUIRenderHandle.h"
16 #include "settings/GameSettings.h"
17 #include "settings/MediaSettings.h"
18 #include "utils/Geometry.h"
19 #include "utils/StringUtils.h"
21 #include <sstream>
23 using namespace KODI;
24 using namespace RETRO;
26 CGUIGameControl::CGUIGameControl(
27 int parentID, int controlID, float posX, float posY, float width, float height)
28 : CGUIControl(parentID, controlID, posX, posY, width, height),
29 m_renderSettings(new CGUIRenderSettings(*this))
31 // Initialize CGUIControl
32 ControlType = GUICONTROL_GAME;
34 m_renderSettings->SetDimensions(CRect(CPoint(posX, posY), CSize(width, height)));
36 RegisterControl();
39 CGUIGameControl::CGUIGameControl(const CGUIGameControl& other)
40 : CGUIControl(other),
41 m_videoFilterInfo(other.m_videoFilterInfo),
42 m_stretchModeInfo(other.m_stretchModeInfo),
43 m_rotationInfo(other.m_rotationInfo),
44 m_pixelInfo(other.m_pixelInfo),
45 m_bHasVideoFilter(other.m_bHasVideoFilter),
46 m_bHasStretchMode(other.m_bHasStretchMode),
47 m_bHasRotation(other.m_bHasRotation),
48 m_bHasPixels(other.m_bHasPixels),
49 m_renderSettings(new CGUIRenderSettings(*this))
51 m_renderSettings->SetSettings(other.m_renderSettings->GetSettings());
52 m_renderSettings->SetDimensions(CRect(CPoint(m_posX, m_posY), CSize(m_width, m_height)));
54 RegisterControl();
57 CGUIGameControl::~CGUIGameControl()
59 UnregisterControl();
62 void CGUIGameControl::SetVideoFilter(const GUILIB::GUIINFO::CGUIInfoLabel& videoFilter)
64 m_videoFilterInfo = videoFilter;
67 void CGUIGameControl::SetStretchMode(const GUILIB::GUIINFO::CGUIInfoLabel& stretchMode)
69 m_stretchModeInfo = stretchMode;
72 void CGUIGameControl::SetRotation(const KODI::GUILIB::GUIINFO::CGUIInfoLabel& rotation)
74 m_rotationInfo = rotation;
77 void CGUIGameControl::SetPixels(const KODI::GUILIB::GUIINFO::CGUIInfoLabel& pixels)
79 m_pixelInfo = pixels;
82 IGUIRenderSettings* CGUIGameControl::GetRenderSettings() const
84 return m_renderSettings.get();
87 void CGUIGameControl::Process(unsigned int currentTime, CDirtyRegionList& dirtyregions)
89 //! @todo Proper processing which marks when its actually changed
90 if (m_renderHandle->IsDirty())
91 MarkDirtyRegion();
93 CGUIControl::Process(currentTime, dirtyregions);
96 void CGUIGameControl::Render()
98 m_renderHandle->Render();
100 CGUIControl::Render();
103 void CGUIGameControl::RenderEx()
105 m_renderHandle->RenderEx();
107 CGUIControl::RenderEx();
110 bool CGUIGameControl::CanFocus() const
112 // Unfocusable
113 return false;
116 void CGUIGameControl::SetPosition(float posX, float posY)
118 CGUIControl::SetPosition(posX, posY);
119 m_renderSettings->SetDimensions(CRect(CPoint(posX, posY), CSize(m_width, m_height)));
122 void CGUIGameControl::SetWidth(float width)
124 CGUIControl::SetWidth(width);
125 m_renderSettings->SetDimensions(CRect(CPoint(m_posX, m_posY), CSize(width, m_height)));
128 void CGUIGameControl::SetHeight(float height)
130 CGUIControl::SetHeight(height);
131 m_renderSettings->SetDimensions(CRect(CPoint(m_posX, m_posY), CSize(m_width, height)));
134 void CGUIGameControl::UpdateInfo(const CGUIListItem* item /* = nullptr */)
136 if (item)
138 Reset();
140 std::string strVideoFilter = m_videoFilterInfo.GetItemLabel(item);
141 if (!strVideoFilter.empty())
143 m_renderSettings->SetVideoFilter(strVideoFilter);
144 m_bHasVideoFilter = true;
147 std::string strStretchMode = m_stretchModeInfo.GetItemLabel(item);
148 if (!strStretchMode.empty())
150 STRETCHMODE stretchMode = CRetroPlayerUtils::IdentifierToStretchMode(strStretchMode);
151 m_renderSettings->SetStretchMode(stretchMode);
152 m_bHasStretchMode = true;
155 std::string strRotation = m_rotationInfo.GetItemLabel(item);
156 if (StringUtils::IsNaturalNumber(strRotation))
158 unsigned int rotation;
159 std::istringstream(strRotation) >> rotation;
160 m_renderSettings->SetRotationDegCCW(rotation);
161 m_bHasRotation = true;
164 std::string strPixels = m_pixelInfo.GetItemLabel(item);
165 if (!strPixels.empty())
167 m_renderSettings->SetPixels(strPixels);
168 m_bHasPixels = true;
173 void CGUIGameControl::Reset()
175 m_bHasVideoFilter = false;
176 m_bHasStretchMode = false;
177 m_bHasRotation = false;
178 m_bHasPixels = false;
179 m_renderSettings->Reset();
182 void CGUIGameControl::RegisterControl()
184 m_renderHandle = CServiceBroker::GetGameRenderManager().RegisterControl(*this);
187 void CGUIGameControl::UnregisterControl()
189 m_renderHandle.reset();