Calamity Engine 1.0.0
A cross-platform 2D game engine written in C++ and SDL3.
Loading...
Searching...
No Matches
definitions.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <SDL3/SDL.h>
4#include <SDL3_image/SDL_image.h>
5#include <SDL3_ttf/SDL_ttf.h>
6#include <string>
7#include "../definitions.hpp"
8#include "../../services/graphics/definitions.hpp"
9
14enum class FontHinting
15{
16 INVALID = -1,
17 NORMAL,
18 LIGHT,
19 MONO,
20 NONE,
22};
23
28enum class FontStyle
29{
30 NORMAL = 0x00,
31 BOLD = 0x01,
32 ITALIC = 0x02,
33 UNDERLINE = 0x04,
34 STRIKETHROUGH = 0x08
35};
36
41enum class FontDirection
42{
43 INVALID,
44 LTR = 4,
45 RTL,
46 TTB,
47 BTT
48};
49
54enum class FontAlignment
55{
56 INVALID = -1,
57 LEFT,
58 CENTER,
59 RIGHT
60};
61
87class Font
88{
89public:
90 Font();
91 Font(const std::string &path);
92 ~Font();
93 std::string path; // File path of the font.
94 int size = 30;
95
96 Font *setKerning(bool enabled);
97 Font *setHinting(FontHinting setting);
98 Font *setLanguage(const std::string &language); // bcp47 code please
99 Font *setLineSpacing(int spacing);
100 Font *setOutline(int outline);
101 Font *setSDF(bool enabled);
102 Font *setSize(int ptSize);
103 Font *setStyle(FontStyle style);
104 Font *setAlignment(FontAlignment positioning);
105
106 TTF_Font *getHandle() const;
107
108 // Load font from file path at runtime (non-serialization overload)
109 Font *loadFromPath(const std::string &path);
110
111 template <class Archive>
112 void save(Archive &ar) const
113 {
114 ar(CEREAL_NVP(path), CEREAL_NVP(size), CEREAL_NVP(kerning), CEREAL_NVP(hinting), CEREAL_NVP(language), CEREAL_NVP(lineSpacing), CEREAL_NVP(outline), CEREAL_NVP(SDF), CEREAL_NVP(alignment), CEREAL_NVP(style));
115 }
116
117 template <class Archive>
118 void load(Archive &ar)
119 {
120 ar(CEREAL_NVP(path), CEREAL_NVP(size), CEREAL_NVP(kerning), CEREAL_NVP(hinting), CEREAL_NVP(language), CEREAL_NVP(lineSpacing), CEREAL_NVP(outline), CEREAL_NVP(SDF), CEREAL_NVP(alignment), CEREAL_NVP(style));
121 handle = TTF_OpenFont(path.c_str(), static_cast<float>(size));
122 // TTF_SetFontSize((TTF_Font*)handle, size);
123 TTF_SetFontKerning((TTF_Font *)handle, kerning);
124 TTF_SetFontHinting((TTF_Font *)handle, (TTF_HintingFlags)hinting);
125 TTF_SetFontLanguage((TTF_Font *)handle, language.c_str());
126 TTF_SetFontLineSkip((TTF_Font *)handle, lineSpacing);
127 TTF_SetFontOutline((TTF_Font *)handle, outline);
128 TTF_SetFontSDF((TTF_Font *)handle, SDF);
129 TTF_SetFontStyle((TTF_Font *)handle, (TTF_FontStyleFlags)style);
130 TTF_SetFontWrapAlignment((TTF_Font *)handle, (TTF_HorizontalAlignment)alignment);
131 }
132
133private:
134 bool kerning = true;
136 std::string language = "en-US";
137 int lineSpacing;
138 int outline = 0;
139 bool SDF = false;
142
143 TTF_Font *handle;
144};
Definition definitions.hpp:88
~Font()
Definition definitions.cpp:81
Font * loadFromPath(const std::string &path)
Definition definitions.cpp:149
Font * setOutline(int outline)
Definition definitions.cpp:114
Font * setSDF(bool enabled)
Definition definitions.cpp:121
Font * setLineSpacing(int spacing)
Definition definitions.cpp:107
std::string path
Definition definitions.hpp:93
Font()
Definition definitions.cpp:57
Font * setLanguage(const std::string &language)
Definition definitions.cpp:100
Font * setKerning(bool enabled)
Definition definitions.cpp:86
Font * setStyle(FontStyle style)
Definition definitions.cpp:135
Font * setHinting(FontHinting setting)
Definition definitions.cpp:93
int size
Definition definitions.hpp:94
Font * setSize(int ptSize)
Definition definitions.cpp:128
Font * setAlignment(FontAlignment positioning)
Definition definitions.cpp:142
void save(Archive &ar) const
Definition definitions.hpp:112
void load(Archive &ar)
Definition definitions.hpp:118
TTF_Font * getHandle() const
Definition definitions.cpp:76
FontHinting
Definition definitions.hpp:15
FontAlignment
Definition definitions.hpp:55
FontStyle
Definition definitions.hpp:29
FontDirection
Definition definitions.hpp:42