mirror of
https://github.com/zetaPRIME/libstarlight.git
synced 2025-06-26 05:32:46 +00:00
75 lines
2.3 KiB
C++
75 lines
2.3 KiB
C++
#pragma once
|
|
#include "starlight/_global.h"
|
|
|
|
#include <memory>
|
|
#include <functional>
|
|
#include <unordered_map>
|
|
#include <string>
|
|
|
|
#include "starlight/datatypes/Vector2.h"
|
|
#include "starlight/datatypes/VRect.h"
|
|
#include "starlight/datatypes/Color.h"
|
|
|
|
#include "starlight/datatypes/OptRef.h"
|
|
|
|
#include "starlight/gfx/RenderCore.h"
|
|
|
|
#include "starlight/gfx/DisplayList.h"
|
|
|
|
// we don't need the whole thing here
|
|
#include "starlight/_incLib/json_fwd.hpp"
|
|
|
|
namespace starlight {
|
|
namespace gfx {
|
|
class BitmapFont {
|
|
public:
|
|
struct CharInfo {
|
|
float imgX, imgY;
|
|
float width, height;
|
|
float offX, offY;
|
|
float advX;
|
|
};
|
|
|
|
struct CharLoopState {
|
|
unsigned int lineStart, lineEnd;
|
|
float lineWidth;
|
|
unsigned int numLines;
|
|
unsigned int lineNum;
|
|
char c;
|
|
CharInfo* cc;
|
|
float lineAcc;
|
|
unsigned int i, iline;
|
|
};
|
|
|
|
float fontSize;
|
|
float lineHeight;
|
|
float baseY;
|
|
float padX, padY;
|
|
|
|
|
|
std::unordered_map<char, CharInfo> chars;
|
|
std::unordered_map<unsigned int, float> kernings;
|
|
|
|
std::unique_ptr<CTexture> txMain;
|
|
std::unique_ptr<CTexture> txBorder;
|
|
|
|
BitmapFont() { }
|
|
BitmapFont(nlohmann::json& j);
|
|
~BitmapFont() { }
|
|
|
|
float GetKerning(char cl, char cr);
|
|
CharInfo& Char(char c);
|
|
float DrawText(const Vector2& penStart, std::string& msg, float scale = 1, DisplayList* dl = nullptr);
|
|
// what to put in the bitmapfont class itself?
|
|
Vector2 MeasureTo(std::string& msg, bool total = true, unsigned int end = 4294967295, float maxWidth = 65536*64);
|
|
unsigned int PointToIndex(std::string& msg, Vector2 pt, float maxWidth = 65536*64);
|
|
|
|
void ForChar(const std::string& msg, std::function<bool(CharLoopState&)> func, float maxWidth = 65536*64);
|
|
|
|
static inline constexpr unsigned int KerningKey(char cl, char cr) {
|
|
return (static_cast<unsigned int>(cl) | (static_cast<unsigned int>(cr) << 8));
|
|
}
|
|
};
|
|
}
|
|
}
|