Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/graphite/src/inc/Font.h
9906 views
1
// SPDX-License-Identifier: MIT OR MPL-2.0 OR LGPL-2.1-or-later OR GPL-2.0-or-later
2
// Copyright 2010, SIL International, All rights reserved.
3
4
#pragma once
5
#include <cassert>
6
#include "graphite2/Font.h"
7
#include "inc/Main.h"
8
#include "inc/Face.h"
9
10
namespace graphite2 {
11
12
#define INVALID_ADVANCE -1e38f // can't be a static const because non-integral
13
14
class Font
15
{
16
public:
17
Font(float ppm, const Face & face, const void * appFontHandle=0, const gr_font_ops * ops=0);
18
virtual ~Font();
19
20
float advance(unsigned short glyphid) const;
21
float scale() const;
22
bool isHinted() const;
23
const Face & face() const;
24
operator bool () const throw() { return m_advances; }
25
26
CLASS_NEW_DELETE;
27
private:
28
gr_font_ops m_ops;
29
const void * const m_appFontHandle;
30
float * m_advances; // One advance per glyph in pixels. Nan if not defined
31
const Face & m_face;
32
float m_scale; // scales from design units to ppm
33
bool m_hinted;
34
35
Font(const Font&);
36
Font& operator=(const Font&);
37
};
38
39
inline
40
float Font::advance(unsigned short glyphid) const
41
{
42
if (m_advances[glyphid] == INVALID_ADVANCE)
43
m_advances[glyphid] = (*m_ops.glyph_advance_x)(m_appFontHandle, glyphid);
44
return m_advances[glyphid];
45
}
46
47
inline
48
float Font::scale() const
49
{
50
return m_scale;
51
}
52
53
inline
54
bool Font::isHinted() const
55
{
56
return m_hinted;
57
}
58
59
inline
60
const Face & Font::face() const
61
{
62
return m_face;
63
}
64
65
} // namespace graphite2
66
67
struct gr_font : public graphite2::Font {};
68
69