#pragma once #include "ehs/EHS.h" #include "ehs/Array.h" #include "Glyph.h" #include "ehs/Anchor.h" #include "ehs/io/img/Img.h" #include "ehs/io/model/Mesh.h" namespace ehs { class FontAtlas : public BaseObj { private: UInt_64 hashId; Str_8 id; UInt_64 glyphScale; Array glyphs; Vec2_u64 resolution; UInt_64 size; Byte* atlas; public: ~FontAtlas() override; FontAtlas(); FontAtlas(const Str_8& filePath); FontAtlas(FontAtlas&& fa) noexcept; FontAtlas(const FontAtlas& fa); FontAtlas& operator=(FontAtlas&& fa) noexcept; FontAtlas& operator=(const FontAtlas& fa); operator Byte*() const; void Release(); UInt_64 GetHashId() const; Str_8 GetId() const; UInt_64 GetGlyphScale() const; const Array& GetGlyphs() const; Glyph GetGlyph(Char_32 code) const; Vec2_u64 GetResolution() const; UInt_64 GetSize() const; bool IsValid() const; Vec2_f CalculateSize(const Str_8& text) const; float CalculateWidth(const Str_8& text) const; float CalculateHeight(const Str_8& text) const; UInt_64 CalculateIndexAtPoint(const Str_8& text, const Vec2_f& point) const; Mesh Generate(Anchor anchor, const Str_8& text) const; }; }