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<BaseImage> createSDL(OutputSurface& output) override;
41 [[nodiscard]] std::unique_ptr<BaseImage> createGL (OutputSurface& output) override;
42 template<typename IMAGE> [[nodiscard]] std::unique_ptr<BaseImage> create(
43 OutputSurface& output);
44
45 template<typename FindSplitPointFunc, typename CantSplitFunc>
46 [[nodiscard]] size_t split(const std::string& line, unsigned maxWidth,
47 FindSplitPointFunc findSplitPoint, CantSplitFunc cantSplit,
48 bool removeTrailingSpaces) const;
49 [[nodiscard]] size_t splitAtChar(const std::string& line, unsigned maxWidth) const;
50 [[nodiscard]] size_t splitAtWord(const std::string& line, unsigned maxWidth) const;
51 [[nodiscard]] std::string getCharWrappedText(const std::string& txt, unsigned maxWidth) const;
52 [[nodiscard]] std::string getWordWrappedText(const std::string& txt, unsigned maxWidth) const;
53
54private:
55 enum WrapMode { NONE, WORD, CHAR };
56
57 std::string text;
58 std::string fontFile;
59 TTFFont font;
60 int size = 12;
61 WrapMode wrapMode = NONE;
62 float wrapw = 0.0f, wraprelw = 1.0f;
63
64 friend struct SplitAtChar;
65};
66
67} // namespace openmsx
68
69#endif
Represents the output window/screen of openMSX.
Definition: Display.hh:33
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:29
void getProperty(std::string_view name, TclObject &result) const override
Definition: OSDText.cc:98
void setProperty(Interpreter &interp, std::string_view name, const TclObject &value) override
Definition: OSDText.cc:35
std::string_view getType() const override
Definition: OSDText.cc:131
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:381