Files
netpong/includes/raylib-cpp/Text.hpp

200 lines
5.0 KiB
C++

#ifndef RAYLIB_CPP_INCLUDE_TEXT_HPP_
#define RAYLIB_CPP_INCLUDE_TEXT_HPP_
#include <string>
#include "./RaylibException.hpp"
#include "./raylib-cpp-utils.hpp"
#include "./raylib.hpp"
namespace raylib {
/**
* Text Functions.
*/
class Text {
public:
/**
* The internal text.
*/
std::string text;
/**
* The size of the text.
*/
float fontSize;
/**
* The color of the text.
*/
::Color color;
/**
* The internal raylib font to use for the text.
*/
::Font font;
/**
* The character spacing for the text.
*/
float spacing;
/**
* Initializes a new Text object.
*
* @param text Text to initialize.
* @param fontSize The size of the text.
* @param color The color of the font.
* @param font Font to initialize.
* @param spacing The spacing of the text.
*/
Text(
const std::string& text = "",
float fontSize = 10,
const ::Color& color = WHITE,
const ::Font& font = ::GetFontDefault(),
float spacing = 0)
: text(text)
, fontSize(fontSize)
, color(color)
, font(font)
, spacing(spacing) {
// Nothing.
}
/**
* Initializes a new Text object with a custom font.
*
* @param font Font to initialize.
* @param text Text to initialize.
* @param fontSize The size of the text.
* @param spacing The spacing of the text.
* @param color The color of the font.
*/
Text(
const ::Font& font,
const std::string& text = "",
float fontSize = 10,
float spacing = 0,
const ::Color& color = WHITE)
: text(text)
, fontSize(fontSize)
, color(color)
, font(font)
, spacing(spacing) {
// Nothing.
}
GETTERSETTER(const std::string&, Text, text)
GETTERSETTER(float, FontSize, fontSize)
GETTERSETTER(::Font, Font, font)
GETTERSETTER(::Color, Color, color)
GETTERSETTER(float, Spacing, spacing)
/**
* Draw text with values in class.
*/
void Draw(const ::Vector2& position) const { ::DrawTextEx(font, text.c_str(), position, fontSize, spacing, color); }
/**
* Draw text with values in class.
*/
void Draw(int posX, int posY) const {
::DrawTextEx(
font,
text.c_str(),
{static_cast<float>(posX), static_cast<float>(posY)},
fontSize,
spacing,
color);
}
/**
* Draw text using Font and pro parameters (rotation).
*
* @see DrawTextPro()
*/
void Draw(const ::Vector2& position, float rotation, const ::Vector2& origin = {0, 0}) const {
::DrawTextPro(font, text.c_str(), position, origin, rotation, fontSize, spacing, color);
}
/**
* Measure string width for default font
*/
[[nodiscard]] int Measure() const { return ::MeasureText(text.c_str(), static_cast<int>(fontSize)); }
/**
* Measure string size for Font
*/
[[nodiscard]] Vector2 MeasureEx() const { return ::MeasureTextEx(font, text.c_str(), fontSize, spacing); }
Text& operator=(const Text& other) {
if (this == &other) {
return *this;
}
text = other.text;
fontSize = other.fontSize;
color = other.color;
font = other.font;
spacing = other.spacing;
return *this;
}
/**
* Draw text using font and color
*
* @see ::DrawText
*/
static void
Draw(const std::string& text, const int posX, const int posY, const int fontSize, const ::Color& color) {
::DrawText(text.c_str(), posX, posY, fontSize, color);
}
/**
* Draw text using font and color, with position defined as Vector2
*
* @see ::DrawText
*/
static void Draw(const std::string& text, const ::Vector2& pos, const int fontSize, const ::Color& color) {
::DrawText(text.c_str(), static_cast<int>(pos.x), static_cast<int>(pos.y), fontSize, color);
}
/**
* Draw text using font, color, position, font size and spacing
*
* @see ::DrawTextEx
*/
static void Draw(
const ::Font& font,
const std::string& text,
const ::Vector2& position,
const float fontSize,
const float spacing,
const ::Color& color) {
::DrawTextEx(font, text.c_str(), position, fontSize, spacing, color);
}
/**
* Draw text using font, color, position, origin, font size and spacing
*
* @see ::DrawTextPro
*/
static void Draw(
const ::Font& font,
const std::string& text,
const ::Vector2& position,
const ::Vector2& origin,
const float rotation,
const float fontSize,
const float spacing,
const ::Color& color) {
::DrawTextPro(font, text.c_str(), position, origin, rotation, fontSize, spacing, color);
}
};
} // namespace raylib
using RText = raylib::Text;
#endif // RAYLIB_CPP_INCLUDE_TEXT_HPP_