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.
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"
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
)));
39 CGUIGameControl::CGUIGameControl(const CGUIGameControl
& 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
)));
57 CGUIGameControl::~CGUIGameControl()
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
)
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())
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
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 */)
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
);
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();