TGUI  1.6.1
Loading...
Searching...
No Matches
Backend.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2024 Bruno Van de Velde (vdv_b@tgui.eu)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef TGUI_BACKEND_HPP
26#define TGUI_BACKEND_HPP
27
28#include <TGUI/Font.hpp>
29#include <TGUI/Event.hpp>
30#include <TGUI/Cursor.hpp>
31#include <TGUI/Backend/Font/BackendFont.hpp>
32#include <TGUI/Backend/Font/BackendFontFactory.hpp>
33#include <TGUI/Backend/Renderer/BackendText.hpp>
34#include <TGUI/Backend/Renderer/BackendTexture.hpp>
35#include <TGUI/Backend/Renderer/BackendRenderer.hpp>
36
37#if !TGUI_EXPERIMENTAL_USE_STD_MODULE
38 #include <cstdint>
39 #include <memory>
40 #include <set>
41#endif
42
44
45TGUI_MODULE_EXPORT namespace tgui
46{
47 class Sprite;
48 class Backend;
49 class BackendGui;
50 class BackendRenderer;
51 class BackendFontFactory;
52
57 TGUI_API bool isBackendSet();
58
70 TGUI_API void setBackend(std::shared_ptr<Backend> backend);
71
80 TGUI_API std::shared_ptr<Backend> getBackend();
81
82
86 class TGUI_API Backend
87 {
88 public:
89
93 Backend() = default;
94
96 // The object cannot be copied
98 Backend(const Backend&) = delete;
99
101 // The object cannot be copied
103 Backend& operator=(const Backend&) = delete;
104
108 virtual ~Backend() = default;
109
117 void setDestroyOnLastGuiDetatch(bool destroyOnDetatch);
118
123 virtual void attachGui(BackendGui* gui);
124
129 virtual void detatchGui(BackendGui* gui);
130
135 TGUI_NODISCARD virtual Font createDefaultFont();
136
141 TGUI_NODISCARD std::shared_ptr<BackendFont> createFont();
142
147 TGUI_NODISCARD std::shared_ptr<BackendText> createText();
148
153 TGUI_NODISCARD std::shared_ptr<BackendTexture> createTexture();
154
165 void setFontScale(float scale);
166
174 float getFontScale() const;
175
184 virtual void setMouseCursorStyle(Cursor::Type type, const std::uint8_t* pixels, Vector2u size, Vector2u hotspot) = 0;
185
191 virtual void resetMouseCursorStyle(Cursor::Type type) = 0;
192
199 virtual void setMouseCursor(BackendGui* gui, Cursor::Type type) = 0;
200
201#ifndef TGUI_REMOVE_DEPRECATED_CODE
210 TGUI_DEPRECATED("Use BackendGui::startTextInput instead") virtual void openVirtualKeyboard(const FloatRect& inputRect);
211
219 TGUI_DEPRECATED("Use BackendGui::stopTextInput instead") virtual void closeVirtualKeyboard();
220#endif
221
229 TGUI_DEPRECATED("Use gui.isKeyboardModifierPressed(modifierKey) instead") TGUI_NODISCARD virtual bool isKeyboardModifierPressed(Event::KeyModifier modifierKey) = 0;
230
236 virtual void setClipboard(const String& contents);
237
243 TGUI_NODISCARD virtual String getClipboard() const;
244
253 TGUI_NODISCARD virtual std::unique_ptr<std::uint8_t[]> readFileFromAndroidAssets(const String& filename, std::size_t& fileSize) const;
254
259 TGUI_NODISCARD bool hasRenderer() const;
260
269 TGUI_NODISCARD std::shared_ptr<BackendRenderer> getRenderer() const;
270
276 virtual void setRenderer(std::shared_ptr<BackendRenderer> renderer);
277
282 TGUI_NODISCARD bool hasFontBackend() const;
283
292 TGUI_NODISCARD std::shared_ptr<BackendFontFactory> getFontBackend() const;
293
299 virtual void setFontBackend(std::shared_ptr<BackendFontFactory> fontBackend);
300
308 void registerFont(BackendFont* font);
309
317 void unregisterFont(BackendFont* font);
318
326 void registerSvgSprite(Sprite* sprite);
327
335 void unregisterSvgSprite(Sprite* sprite);
336
338 protected:
339
340 bool m_destroyOnLastGuiDetatch = false;
341 String m_clipboardContents;
342 float m_fontScale = 1;
343
344 std::shared_ptr<BackendRenderer> m_renderer;
345 std::shared_ptr<BackendFontFactory> m_fontBackend;
346
347 std::set<BackendGui*> m_guis;
348 std::set<BackendFont*> m_registeredFonts;
349 std::set<Sprite*> m_registeredSvgSprites;
350 };
351
353}
354
356
357#endif // TGUI_BACKEND_HPP
Base class for the font factory that is responsible for creating a font object specific to the font b...
Definition BackendFontFactory.hpp:42
Base class for font implementations that depend on the backend.
Definition BackendFont.hpp:45
Base class for the Gui.
Definition BackendGui.hpp:47
Base class for the backend renderer, which is responsible for creating text and texture objects.
Definition BackendRenderer.hpp:44
Base class for the backend.
Definition Backend.hpp:87
std::shared_ptr< BackendFont > createFont()
Creates a new font object.
float getFontScale() const
Returns the scale factor to render text at a higher quality, e.g. to scale for DPI awareness.
virtual void setMouseCursorStyle(Cursor::Type type, const std::uint8_t *pixels, Vector2u size, Vector2u hotspot)=0
Changes the look of a certain mouse cursor by using a bitmap.
virtual void setMouseCursor(BackendGui *gui, Cursor::Type type)=0
Changes the mouse cursor when the mouse is on top of the window to which the gui is attached.
virtual void resetMouseCursorStyle(Cursor::Type type)=0
Changes the look of a certain mouse cursor back to the system theme.
virtual void attachGui(BackendGui *gui)
Informs the backend that a new gui object has been created.
virtual ~Backend()=default
Virtual destructor.
virtual void detatchGui(BackendGui *gui)
Informs the backend that a gui object is being destroyed.
std::shared_ptr< BackendTexture > createTexture()
Creates a new texture object.
std::shared_ptr< BackendText > createText()
Creates a new text object.
void setDestroyOnLastGuiDetatch(bool destroyOnDetatch)
Informs the backend whether it should destroy itself when the last Gui is detached from it.
void setFontScale(float scale)
Sets the scale factor to render text at a higher quality, e.g. to scale for DPI awareness.
virtual Font createDefaultFont()
Creates and returns the default font for all widgets.
Backend()=default
Default constructor.
Type
List of available cursors.
Definition Cursor.hpp:50
Wrapper around the backend-specific font. All copies of the font will share the same internal font re...
Definition Font.hpp:58
Definition Sprite.hpp:47
Wrapper class to store strings.
Definition String.hpp:96
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:38
TGUI_API void setBackend(std::shared_ptr< Backend > backend)
Changes the global backend.
TGUI_API std::shared_ptr< Backend > getBackend()
Returns the global backend.
TGUI_API bool isBackendSet()
Checks whether the backend differs from a nullptr.
Definition Event.hpp:38