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 static bool IsStroke(
const wxString& aFontName );
147 const wxString&
GetName()
const {
return m_fontName; };
148 inline const char*
NameAsToken()
const {
return GetName().utf8_str().data(); }
162 const METRICS& aFontMetrics )
const;
167 Draw( aGal, aText, aPosition,
VECTOR2I( 0, 0 ), aAttributes, aFontMetrics );
175 VECTOR2I StringBoundaryLimits(
const wxString& aText,
const VECTOR2I& aSize,
int aThickness,
176 bool aBold,
bool aItalic,
const METRICS& aFontMetrics )
const;
181 void LinebreakText( wxString& aText,
int aColumnWidth,
const VECTOR2I& aGlyphSize,
182 int aThickness,
bool aBold,
bool aItalic )
const;
205 const wxString& aText,
const VECTOR2I& aSize,
207 bool aMirror,
const VECTOR2I& aOrigin,
223 return std::count( aText.begin(), aText.end() - 1,
'\n' ) + 1;
240 void drawSingleLineText(
KIGFX::GAL* aGal,
BOX2I* aBoundingBox,
const wxString& aText,
243 bool aItalic,
bool aUnderline,
const METRICS& aFontMetrics )
const;
256 const VECTOR2I& aSize,
bool aItalic,
const METRICS& aFontMetrics )
const;
258 void getLinePositions(
const wxString& aText,
const VECTOR2I& aPosition,
259 wxArrayString& aTextLines, std::vector<VECTOR2I>& aPositions,
261 const METRICS& aFontMetrics )
const;
264 const wxString& aText,
const VECTOR2I& aPosition,
267 const METRICS& aFontMetrics )
const;
269 void wordbreakMarkup( std::vector<std::pair<wxString, int>>* aWords,
const wxString& aText,
273 static FONT* getDefaultFont();
290 os <<
"[Font \"" << aFont.
GetName() <<
"\"" << ( aFont.
IsStroke() ?
" stroke" :
"" )
291 << ( aFont.
IsOutline() ?
" outline" :
"" ) << ( aFont.
IsBold() ?
" bold" :
"" )
292 << ( 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 >, 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.
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)
std::ostream & operator<<(std::ostream &os, const KIFONT::FONT &aFont)
The Cairo implementation of the graphics abstraction layer.