27#ifndef OUTLINE_FONT_H_
28#define OUTLINE_FONT_H_
35#include <freetype2/ft2build.h>
71 return m_face && ( m_fakeBold || ( m_face->style_flags & FT_STYLE_FLAG_BOLD ) );
76 return m_face && ( m_fakeItal || ( m_face->style_flags & FT_STYLE_FLAG_ITALIC ) );
89 const wxString&
GetFileName()
const {
return m_fontFileName; }
91 EMBEDDING_PERMISSION GetEmbeddingPermission()
const;
97 static OUTLINE_FONT* LoadFont(
const wxString& aFontFileName,
bool aBold,
bool aItalic,
98 const std::vector<wxString>* aEmbeddedFiles );
104 double GetInterline(
double aGlyphHeight,
const METRICS& aFontMetrics )
const override;
106 VECTOR2I GetTextAsGlyphs(
BOX2I* aBoundingBox, std::vector<std::unique_ptr<GLYPH>>* aGlyphs,
107 const wxString& aText,
const VECTOR2I& aSize,
111 void GetLinesAsGlyphs( std::vector<std::unique_ptr<GLYPH>>* aGlyphs,
const wxString& aText,
113 const METRICS& aFontMetrics )
const;
115 const FT_Face&
GetFace()
const {
return m_face; }
118 void RenderToOpenGLCanvas( KIGFX::OPENGL_FREETYPE& aTarget,
const wxString& aString,
119 const VECTOR2D& aSize,
const wxPoint& aPosition,
120 const EDA_ANGLE& aAngle,
bool aMirror )
const;
124 FT_Error loadFace(
const wxString& aFontFileName,
int aFaceIndex );
126 BOX2I getBoundingBox(
const std::vector<std::unique_ptr<GLYPH>>& aGlyphs )
const;
128 VECTOR2I getTextAsGlyphs(
BOX2I* aBoundingBox, std::vector<std::unique_ptr<GLYPH>>* aGlyphs,
129 const wxString& aText,
const VECTOR2I& aSize,
135 std::vector<std::unique_ptr<GLYPH>>* aGlyphs,
136 const wxString& aText,
const VECTOR2I& aSize,
138 bool aMirror,
const VECTOR2I& aOrigin,
164 static constexpr double m_outlineFontSizeCompensation = 1.4;
167 static constexpr int m_charSizeScaler = 64;
174 static constexpr double m_subscriptSuperscriptSize = 0.64;
176 static constexpr double m_underlineOffsetScaler = -0.16;
180 return aSize * m_charSizeScaler * m_outlineFontSizeCompensation;
187 return KiROUND( faceSize( aSize ) * m_subscriptSuperscriptSize );
191 static constexpr double m_subscriptVerticalOffset = -0.25;
192 static constexpr double m_superscriptVerticalOffset = 0.45;
FONT is an abstract base class for both outline and stroke fonts.
Class OUTLINE_FONT implements outline font drawing.
static std::mutex m_freeTypeMutex
Mutex for freetype access, FT_Library and FT_Face are not thread safe.
static FT_Library m_freeType
const FT_Face & GetFace() const
int subscriptSize(int aSize) const
bool IsItalic() const override
int faceSize(int aSize) const
bool IsOutline() const override
std::map< unsigned int, std::vector< std::vector< VECTOR2D > > > m_contourCache
const wxString & GetFileName() const
int subscriptSize() const
bool IsBold() const override
unsigned int TEXT_STYLE_FLAGS
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".