1 /*
2  *  Copyright (C) 2017-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "guilib/GUIControl.h"
12 #include "guilib/guiinfo/GUIInfoLabel.h"
13 
14 #include <memory>
15 
16 namespace KODI
17 {
18 namespace RETRO
19 {
20 class CGUIRenderSettings;
21 class CGUIRenderHandle;
22 class IGUIRenderSettings;
23 
24 class CGUIGameControl : public CGUIControl
25 {
26 public:
27   CGUIGameControl(int parentID, int controlID, float posX, float posY, float width, float height);
28   CGUIGameControl(const CGUIGameControl& other);
29   ~CGUIGameControl() override;
30 
31   // GUI functions
32   void SetVideoFilter(const KODI::GUILIB::GUIINFO::CGUIInfoLabel& videoFilter);
33   void SetStretchMode(const KODI::GUILIB::GUIINFO::CGUIInfoLabel& stretchMode);
34   void SetRotation(const KODI::GUILIB::GUIINFO::CGUIInfoLabel& rotation);
35 
36   // Rendering functions
HasVideoFilter()37   bool HasVideoFilter() const { return m_bHasVideoFilter; }
HasStretchMode()38   bool HasStretchMode() const { return m_bHasStretchMode; }
HasRotation()39   bool HasRotation() const { return m_bHasRotation; }
40   IGUIRenderSettings* GetRenderSettings() const;
41 
42   // implementation of CGUIControl
Clone()43   CGUIGameControl* Clone() const override { return new CGUIGameControl(*this); };
44   void Process(unsigned int currentTime, CDirtyRegionList& dirtyregions) override;
45   void Render() override;
46   void RenderEx() override;
47   bool CanFocus() const override;
48   void SetPosition(float posX, float posY) override;
49   void SetWidth(float width) override;
50   void SetHeight(float height) override;
51   void UpdateInfo(const CGUIListItem* item = nullptr) override;
52 
53 private:
54   void Reset();
55 
56   void RegisterControl();
57   void UnregisterControl();
58 
59   // GUI properties
60   KODI::GUILIB::GUIINFO::CGUIInfoLabel m_videoFilterInfo;
61   KODI::GUILIB::GUIINFO::CGUIInfoLabel m_stretchModeInfo;
62   KODI::GUILIB::GUIINFO::CGUIInfoLabel m_rotationInfo;
63 
64   // Rendering properties
65   bool m_bHasVideoFilter = false;
66   bool m_bHasStretchMode = false;
67   bool m_bHasRotation = false;
68   std::unique_ptr<CGUIRenderSettings> m_renderSettings;
69   std::shared_ptr<CGUIRenderHandle> m_renderHandle;
70 };
71 
72 } // namespace RETRO
73 } // namespace KODI
74