1 /* Copyright (C) 2022 Wildfire Games.
2 * This file is part of 0 A.D.
4 * 0 A.D. is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
9 * 0 A.D. is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
21 #include "graphics/Texture.h"
24 * Storage for a bitmap font. Loaded by CFontManager.
38 * Relatively efficient lookup of GlyphData from 16-bit Unicode codepoint.
39 * This is stored as a sparse 2D array, exploiting the knowledge that a font
40 * typically only supports a small number of 256-codepoint blocks, so most
41 * elements of m_Data will be NULL.
45 NONCOPYABLE(GlyphMap
);
49 void set(u16 i
, const GlyphData
& val
);
51 const GlyphData
* get(u16 i
) const
55 if (!m_Data
[i
>> 8][i
& 0xff].defined
)
57 return &m_Data
[i
>> 8][i
& 0xff];
61 GlyphData
* m_Data
[256];
64 bool HasRGB() const { return m_HasRGB
; }
65 int GetLineSpacing() const { return m_LineSpacing
; }
66 int GetHeight() const { return m_Height
; }
67 int GetCharacterWidth(wchar_t c
) const;
68 void CalculateStringSize(const wchar_t* string
, int& w
, int& h
) const;
69 void GetGlyphBounds(float& x0
, float& y0
, float& x1
, float& y1
) const
76 const GlyphMap
& GetGlyphs() const { return m_Glyphs
; }
77 CTexturePtr
GetTexture() const { return m_Texture
; }
80 friend class CFontManager
;
84 CTexturePtr m_Texture
;
86 bool m_HasRGB
; // true if RGBA, false if ALPHA
91 int m_Height
; // height of a capital letter, roughly
93 // Bounding box of all glyphs
100 #endif // INCLUDED_FONT