openMSX
OSDWidget.hh
Go to the documentation of this file.
1 #ifndef OSDWIDGET_HH
2 #define OSDWIDGET_HH
3 
4 #include "TclObject.hh"
5 #include "gl_vec.hh"
6 #include <string_view>
7 #include <vector>
8 #include <memory>
9 
10 namespace openmsx {
11 
12 class Display;
13 class OutputSurface;
14 class Interpreter;
15 
16 class OSDWidget
17 {
18  using SubWidgets = std::vector<std::unique_ptr<OSDWidget>>;
19 public:
20  virtual ~OSDWidget() = default;
21 
22  [[nodiscard]] std::string_view getName() const { return name.getString(); }
23  [[nodiscard]] gl::vec2 getPos() const { return pos; }
24  [[nodiscard]] gl::vec2 getRelPos() const { return relPos; }
25  [[nodiscard]] float getZ() const { return z; }
26 
27  [[nodiscard]] OSDWidget* getParent() { return parent; }
28  [[nodiscard]] const OSDWidget* getParent() const { return parent; }
29  [[nodiscard]] const SubWidgets& getChildren() const { return subWidgets; }
30  void addWidget(std::unique_ptr<OSDWidget> widget);
31  void deleteWidget(OSDWidget& widget);
32 
33  [[nodiscard]] virtual std::vector<std::string_view> getProperties() const;
34  virtual void setProperty(Interpreter& interp,
35  std::string_view name, const TclObject& value);
36  virtual void getProperty(std::string_view name, TclObject& result) const;
37  [[nodiscard]] virtual float getRecursiveFadeValue() const;
38  [[nodiscard]] virtual bool isRecursiveFading() const = 0;
39  [[nodiscard]] virtual std::string_view getType() const = 0;
40 
41  void invalidateRecursive();
42  void paintSDLRecursive(OutputSurface& output);
43  void paintGLRecursive (OutputSurface& output);
44 
45  [[nodiscard]] int getScaleFactor(const OutputSurface& output) const;
46  [[nodiscard]] gl::vec2 transformPos(const OutputSurface& output,
47  gl::vec2 pos, gl::vec2 relPos) const;
48  void getBoundingBox(const OutputSurface& output,
49  gl::vec2& pos, gl::vec2& size) const;
50  [[nodiscard]] virtual gl::vec2 getSize(const OutputSurface& output) const = 0;
51 
52  // Is visible? Or may become visible (fading-in).
53  [[nodiscard]] virtual bool isVisible() const = 0;
54 
55  [[nodiscard]] Display& getDisplay() const { return display; }
56 
57 protected:
58  OSDWidget(Display& display, TclObject name);
59  void invalidateChildren();
60  [[nodiscard]] bool needSuppressErrors() const;
61 
62  virtual void invalidateLocal() = 0;
63  virtual void paintSDL(OutputSurface& output) = 0;
64  virtual void paintGL (OutputSurface& output) = 0;
65 
66 private:
67  [[nodiscard]] gl::vec2 getMouseCoord() const;
68  [[nodiscard]] gl::vec2 transformReverse(const OutputSurface& output,
69  gl::vec2 pos) const;
70  void setParent(OSDWidget* parent_) { parent = parent_; }
71  void resortUp (OSDWidget* elem);
72  void resortDown(OSDWidget* elem);
73 
74 private:
77  SubWidgets subWidgets;
78 
79  Display& display;
80  OSDWidget* parent;
81 
82  TclObject name;
83  gl::vec2 pos;
84  gl::vec2 relPos;
85  float z;
86  bool scaled;
87  bool clip;
88  bool suppressErrors;
89 };
90 
91 } // namespace openmsx
92 
93 #endif
Represents the output window/screen of openMSX.
Definition: Display.hh:33
virtual void getProperty(std::string_view name, TclObject &result) const
Definition: OSDWidget.cc:280
void addWidget(std::unique_ptr< OSDWidget > widget)
Definition: OSDWidget.cc:153
Display & getDisplay() const
Definition: OSDWidget.hh:55
void deleteWidget(OSDWidget &widget)
Definition: OSDWidget.cc:176
int getScaleFactor(const OutputSurface &output) const
Definition: OSDWidget.cc:370
void getBoundingBox(const OutputSurface &output, gl::vec2 &pos, gl::vec2 &size) const
Definition: OSDWidget.cc:443
gl::vec2 transformPos(const OutputSurface &output, gl::vec2 pos, gl::vec2 relPos) const
Definition: OSDWidget.cc:381
const SubWidgets & getChildren() const
Definition: OSDWidget.hh:29
virtual bool isVisible() const =0
virtual void paintGL(OutputSurface &output)=0
void paintGLRecursive(OutputSurface &output)
Definition: OSDWidget.cc:351
virtual float getRecursiveFadeValue() const
Definition: OSDWidget.cc:308
virtual std::string_view getType() const =0
gl::vec2 getRelPos() const
Definition: OSDWidget.hh:24
gl::vec2 getPos() const
Definition: OSDWidget.hh:23
virtual ~OSDWidget()=default
std::string_view getName() const
Definition: OSDWidget.hh:22
virtual gl::vec2 getSize(const OutputSurface &output) const =0
virtual void paintSDL(OutputSurface &output)=0
bool needSuppressErrors() const
Definition: OSDWidget.cc:326
OSDWidget(Display &display, TclObject name)
Definition: OSDWidget.cc:142
const OSDWidget * getParent() const
Definition: OSDWidget.hh:28
virtual std::vector< std::string_view > getProperties() const
Definition: OSDWidget.cc:227
virtual void setProperty(Interpreter &interp, std::string_view name, const TclObject &value)
Definition: OSDWidget.cc:236
void paintSDLRecursive(OutputSurface &output)
Definition: OSDWidget.cc:335
virtual void invalidateLocal()=0
OSDWidget * getParent()
Definition: OSDWidget.hh:27
void invalidateRecursive()
Definition: OSDWidget.cc:313
void invalidateChildren()
Definition: OSDWidget.cc:319
virtual bool isRecursiveFading() const =0
float getZ() const
Definition: OSDWidget.hh:25
A frame buffer where pixels can be written to.
zstring_view getString() const
Definition: TclObject.cc:111
This file implemented 3 utility functions:
Definition: Autofire.cc:9
size_t size(std::string_view utf8)