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;
193 void LinebreakText( wxString& aText,
int aColumnWidth,
const VECTOR2I& aGlyphSize,
194 int aThickness,
bool aBold,
bool aItalic )
const;
217 const wxString& aText,
const VECTOR2I& aSize,
219 bool aMirror,
const VECTOR2I& aOrigin,
235 return std::count( aText.begin(), aText.end() - 1,
'\n' ) + 1;
252 void drawSingleLineText(
KIGFX::GAL* aGal,
BOX2I* aBoundingBox,
const wxString& aText,
255 bool aItalic,
bool aUnderline,
const METRICS& aFontMetrics )
const;
269 const VECTOR2I& aSize,
bool aItalic,
270 const METRICS& aFontMetrics )
const;
272 void getLinePositions(
const wxString& aText,
const VECTOR2I& aPosition,
273 wxArrayString& aTextLines, std::vector<VECTOR2I>& aPositions,
275 const METRICS& aFontMetrics )
const;
278 const wxString& aText,
const VECTOR2I& aPosition,
281 const METRICS& aFontMetrics )
const;
283 void wordbreakMarkup( std::vector<std::pair<wxString, int>>* aWords,
const wxString& aText,
287 static FONT* getDefaultFont();
304 os <<
"[Font \"" << aFont.
GetName() <<
"\"" << ( aFont.
IsStroke() ?
" stroke" :
"" )
305 << ( aFont.
IsOutline() ?
" outline" :
"" ) << ( aFont.
IsBold() ?
" bold" :
"" )
306 << ( 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
Return 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)
Break marked-up text into "words".
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