openMSX
OSDText.hh
Go to the documentation of this file.
1#ifndef OSDTEXT_HH
2#define OSDTEXT_HH
3
5#include "TTFFont.hh"
6#include "stl.hh"
7#include <array>
8#include <memory>
9
10namespace openmsx {
11
12class OSDText final : public OSDImageBasedWidget
13{
14protected:
15 static constexpr auto textProperties = [] {
16 using namespace std::literals;
17 return concatArray(
19 std::array{
20 "-text"sv, "-font"sv, "-size"sv,
21 "-wrap"sv, "-wrapw"sv, "-wraprelw"sv,
22 });
23 }();
24
25public:
26 OSDText(Display& display, const TclObject& name);
27
28 [[nodiscard]] std::span<const std::string_view> getProperties() const override {
29 return textProperties;
30 }
31 void setProperty(Interpreter& interp,
32 std::string_view name, const TclObject& value) override;
33 void getProperty(std::string_view name, TclObject& result) const override;
34 [[nodiscard]] std::string_view getType() const override;
35
36private:
37 void invalidateLocal() override;
38 [[nodiscard]] gl::vec2 getSize(const OutputSurface& output) const override;
39 [[nodiscard]] uint8_t getFadedAlpha() const override;
40 [[nodiscard]] std::unique_ptr<GLImage> create(OutputSurface& output) override;
41
42 template<typename FindSplitPointFunc, typename CantSplitFunc>
43 [[nodiscard]] size_t split(const std::string& line, unsigned maxWidth,
44 FindSplitPointFunc findSplitPoint, CantSplitFunc cantSplit,
45 bool removeTrailingSpaces) const;
46 [[nodiscard]] size_t splitAtChar(const std::string& line, unsigned maxWidth) const;
47 [[nodiscard]] size_t splitAtWord(const std::string& line, unsigned maxWidth) const;
48 [[nodiscard]] std::string getCharWrappedText(const std::string& txt, unsigned maxWidth) const;
49 [[nodiscard]] std::string getWordWrappedText(const std::string& txt, unsigned maxWidth) const;
50
51private:
52 enum WrapMode { NONE, WORD, CHAR };
53
54 std::string text;
55 std::string fontFile;
56 TTFFont font;
57 int size = 12;
58 WrapMode wrapMode = NONE;
59 float wrapw = 0.0f, wraprelw = 1.0f;
60
61 friend struct SplitAtChar;
62};
63
64} // namespace openmsx
65
66#endif
Represents the output window/screen of openMSX.
Definition: Display.hh:32
static constexpr auto imageBasedProperties
std::span< const std::string_view > getProperties() const override
Definition: OSDText.hh:28
static constexpr auto textProperties
Definition: OSDText.hh:15
OSDText(Display &display, const TclObject &name)
Definition: OSDText.cc:25
void getProperty(std::string_view name, TclObject &result) const override
Definition: OSDText.cc:94
void setProperty(Interpreter &interp, std::string_view name, const TclObject &value) override
Definition: OSDText.cc:31
std::string_view getType() const override
Definition: OSDText.cc:127
A frame buffer where pixels can be written to.
This file implemented 3 utility functions:
Definition: Autofire.cc:9
constexpr auto concatArray(const std::array< T, X > &x, const std::array< T, Y > &y)
Definition: stl.hh:390