102 return aGlyphHeight * m_OverbarHeight;
111 return aGlyphHeight * m_UnderlineOffset;
116 return aFontHeight * m_InterlinePitch;
119 static const METRICS& Default();
122 double m_InterlinePitch = 1.68;
123 double m_OverbarHeight = 1.23;
124 double m_UnderlineOffset = -0.16;
140 virtual bool IsBold()
const {
return false; }
143 static FONT* GetFont(
const wxString& aFontName = wxEmptyString,
bool aBold =
false,
144 bool aItalic =
false,
145 const std::vector<wxString>* aEmbeddedFiles =
nullptr,
146 bool aForDrawingSheet =
false );
147 static bool IsStroke(
const wxString& aFontName );
149 const wxString&
GetName()
const {
return m_fontName; };
150 inline const char*
NameAsToken()
const {
return GetName().utf8_str().data(); }
164 const METRICS& aFontMetrics )
const;
169 Draw( aGal, aText, aPosition,
VECTOR2I( 0, 0 ), aAttributes, aFontMetrics );
177 VECTOR2I StringBoundaryLimits(
const wxString& aText,
const VECTOR2I& aSize,
int aThickness,
178 bool aBold,
bool aItalic,
const METRICS& aFontMetrics )
const;
183 void LinebreakText( wxString& aText,
int aColumnWidth,
const VECTOR2I& aGlyphSize,
184 int aThickness,
bool aBold,
bool aItalic )
const;
207 const wxString& aText,
const VECTOR2I& aSize,
209 bool aMirror,
const VECTOR2I& aOrigin,
225 return std::count( aText.begin(), aText.end() - 1,
'\n' ) + 1;
242 void drawSingleLineText(
KIGFX::GAL* aGal,
BOX2I* aBoundingBox,
const wxString& aText,
245 bool aItalic,
bool aUnderline,
const METRICS& aFontMetrics )
const;
258 const VECTOR2I& aSize,
bool aItalic,
const METRICS& aFontMetrics )
const;
260 void getLinePositions(
const wxString& aText,
const VECTOR2I& aPosition,
261 wxArrayString& aTextLines, std::vector<VECTOR2I>& aPositions,
263 const METRICS& aFontMetrics )
const;
266 const wxString& aText,
const VECTOR2I& aPosition,
269 const METRICS& aFontMetrics )
const;
271 void wordbreakMarkup( std::vector<std::pair<wxString, int>>* aWords,
const wxString& aText,
275 static FONT* getDefaultFont();
292 os <<
"[Font \"" << aFont.
GetName() <<
"\"" << ( aFont.
IsStroke() ?
" stroke" :
"" )
293 << ( aFont.
IsOutline() ?
" outline" :
"" ) << ( aFont.
IsBold() ?
" bold" :
"" )
294 << ( aFont.
IsItalic() ?
" italic" :
"" ) <<
"]";
FONT is an abstract base class for both outline and stroke fonts.
wxString m_fontName
Font name.
wxString m_fontFileName
Font file name.
virtual bool IsStroke() const
static FONT * s_defaultFont
const char * NameAsToken() const
void Draw(KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const TEXT_ATTRIBUTES &aAttributes, const METRICS &aFontMetrics) const
virtual bool IsItalic() const
virtual bool IsBold() const
const wxString & GetName() const
virtual bool IsOutline() const
static std::map< std::tuple< wxString, bool, bool, bool >, FONT * > s_fontMap
virtual double GetInterline(double aGlyphHeight, const METRICS &aFontMetrics) const =0
Compute the distance (interline) between 2 lines of text (for multiline texts).
unsigned linesCount(const wxString &aText) const
Returns number of lines for a given text.
virtual VECTOR2I GetTextAsGlyphs(BOX2I *aBBox, std::vector< std::unique_ptr< GLYPH > > *aGlyphs, const wxString &aText, const VECTOR2I &aSize, const VECTOR2I &aPosition, const EDA_ANGLE &aAngle, bool aMirror, const VECTOR2I &aOrigin, TEXT_STYLE_FLAGS aTextStyle) const =0
Convert text string to an array of GLYPHs.
double GetUnderlineVerticalPosition(double aGlyphHeight) const
Compute the vertical position of an underline.
double GetOverbarVerticalPosition(double aGlyphHeight) const
Compute the vertical position of an overbar.
double GetInterline(double aFontHeight) const
Abstract interface for drawing on a 2D-surface.
std::ostream & operator<<(std::ostream &aStream, const EDA_TEXT &aText)
void wordbreakMarkup(std::vector< std::pair< wxString, int > > *aWords, const std::unique_ptr< MARKUP::NODE > &aNode, const KIFONT::FONT *aFont, const VECTOR2I &aSize, TEXT_STYLE_FLAGS aTextStyle)
VECTOR2I drawMarkup(BOX2I *aBoundingBox, std::vector< std::unique_ptr< GLYPH > > *aGlyphs, const MARKUP::NODE *aNode, const VECTOR2I &aPosition, const KIFONT::FONT *aFont, const VECTOR2I &aSize, const EDA_ANGLE &aAngle, bool aMirror, const VECTOR2I &aOrigin, TEXT_STYLE_FLAGS aTextStyle, const METRICS &aFontMetrics)
unsigned int TEXT_STYLE_FLAGS
bool IsBold(TEXT_STYLE_FLAGS aFlags)
bool IsSuperscript(TEXT_STYLE_FLAGS aFlags)
bool IsItalic(TEXT_STYLE_FLAGS aFlags)
static constexpr double ITALIC_TILT
Tilt factor for italic style (this is the scaling factor on dY relative coordinates to give a tilted ...
bool IsSubscript(TEXT_STYLE_FLAGS aFlags)
The Cairo implementation of the graphics abstraction layer.
VECTOR2< int32_t > VECTOR2I