KiCad PCB EDA Suite
|
FONT is an abstract base class for both outline and stroke fonts. More...
#include <font.h>
Public Member Functions | |
FONT () | |
virtual | ~FONT () |
virtual bool | IsStroke () const |
virtual bool | IsOutline () const |
virtual bool | IsBold () const |
virtual bool | IsItalic () const |
const wxString & | GetName () const |
const char * | NameAsToken () const |
void | Draw (KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aCursor, const TEXT_ATTRIBUTES &aAttributes, const METRICS &aFontMetrics) const |
Draw a string. | |
void | Draw (KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const TEXT_ATTRIBUTES &aAttributes, const METRICS &aFontMetrics) const |
VECTOR2I | StringBoundaryLimits (const wxString &aText, const VECTOR2I &aSize, int aThickness, bool aBold, bool aItalic, const METRICS &aFontMetrics) const |
Compute the boundary limits of aText (the bounding box of all shapes). | |
void | LinebreakText (wxString &aText, int aColumnWidth, const VECTOR2I &aGlyphSize, int aThickness, bool aBold, bool aItalic) const |
Insert characters into text to ensure that no lines are wider than aColumnWidth. | |
virtual double | GetInterline (double aGlyphHeight, const METRICS &aFontMetrics) const =0 |
Compute the distance (interline) between 2 lines of text (for multiline texts). | |
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. | |
Static Public Member Functions | |
static FONT * | GetFont (const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false) |
static bool | IsStroke (const wxString &aFontName) |
Protected Member Functions | |
unsigned | linesCount (const wxString &aText) const |
Returns number of lines for a given text. | |
void | drawSingleLineText (KIGFX::GAL *aGal, BOX2I *aBoundingBox, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aSize, const EDA_ANGLE &aAngle, bool aMirror, const VECTOR2I &aOrigin, bool aItalic, bool aUnderline, const METRICS &aFontMetrics) const |
Draws a single line of text. | |
VECTOR2I | boundingBoxSingleLine (BOX2I *aBBox, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aSize, bool aItalic, const METRICS &aFontMetrics) const |
Computes the bounding box for a single line of text. | |
void | getLinePositions (const wxString &aText, const VECTOR2I &aPosition, wxArrayString &aTextLines, std::vector< VECTOR2I > &aPositions, std::vector< VECTOR2I > &aExtents, const TEXT_ATTRIBUTES &aAttrs, const METRICS &aFontMetrics) const |
VECTOR2I | drawMarkup (BOX2I *aBoundingBox, std::vector< std::unique_ptr< GLYPH > > *aGlyphs, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aSize, const EDA_ANGLE &aAngle, bool aMirror, const VECTOR2I &aOrigin, TEXT_STYLE_FLAGS aTextStyle, const METRICS &aFontMetrics) const |
void | wordbreakMarkup (std::vector< std::pair< wxString, int > > *aWords, const wxString &aText, const VECTOR2I &aSize, TEXT_STYLE_FLAGS aTextStyle) const |
Protected Attributes | |
wxString | m_fontName |
Font name. | |
wxString | m_fontFileName |
Font file name. | |
Static Private Member Functions | |
static FONT * | getDefaultFont () |
Static Private Attributes | |
static FONT * | s_defaultFont = nullptr |
static std::map< std::tuple< wxString, bool, bool, bool >, FONT * > | s_fontMap |
FONT is an abstract base class for both outline and stroke fonts.
|
protected |
Computes the bounding box for a single line of text.
Multiline texts should be split before using the function.
aBBox | is an optional pointer to be filled with the bounding box. |
aText | is the text to be drawn. |
aPosition | is text position. |
aSize | is the cap-height and em-width of the text. |
Definition at line 465 of file font.cpp.
References ANGLE_0, and drawMarkup().
Referenced by getLinePositions().
|
inline |
void FONT::Draw | ( | KIGFX::GAL * | aGal, |
const wxString & | aText, | ||
const VECTOR2I & | aPosition, | ||
const VECTOR2I & | aCursor, | ||
const TEXT_ATTRIBUTES & | aAttrs, | ||
const METRICS & | aFontMetrics | ||
) | const |
Draw a string.
aGal | is the graphics context. |
aText | is the text to be drawn. |
aPosition | is the text position in world coordinates. |
aCursor | is the current text position (for multiple text blocks within a single text object, such as a run of superscript characters) |
aAttrs | are the styling attributes of the text, including its rotation |
aGal | |
aText | is the text to be drawn. |
aPosition | is the text object position in world coordinates. |
aCursor | is the current text position (for multiple text blocks within a single text object, such as a run of superscript characters) |
aAttrs | are the styling attributes of the text, including its rotation |
Definition at line 258 of file font.cpp.
References drawSingleLineText(), getLinePositions(), TEXT_ATTRIBUTES::m_Angle, TEXT_ATTRIBUTES::m_Italic, TEXT_ATTRIBUTES::m_Mirrored, TEXT_ATTRIBUTES::m_Size, TEXT_ATTRIBUTES::m_StrokeWidth, TEXT_ATTRIBUTES::m_Underlined, and KIGFX::GAL::SetLineWidth().
Referenced by BOARD_ADAPTER::addText(), KIGFX::GAL::BitmapText(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::PREVIEW::DrawTextNextToCursor(), drawTicksAlongLine(), EDA_TEXT::GetEffectiveTextShape(), GRPrintText(), KIGFX::knockoutText(), PLOTTER::PlotText(), KIGFX::PCB_PAINTER::strokeText(), KIGFX::strokeText(), PLOTTER::Text(), PCB_TEXT::TransformTextToPolySet(), PCB_TEXTBOX::TransformTextToPolySet(), TUNING_STATUS_VIEW_ITEM::ViewDraw(), ROUTER_STATUS_VIEW_ITEM::ViewDraw(), and KIGFX::ANCHOR_DEBUG::ViewDraw().
|
protected |
Definition at line 384 of file font.cpp.
References MARKUP_CACHE::Get(), MARKUP::MARKUP_PARSER::Parse(), MARKUP_CACHE::Put(), MARKUP_CACHE::ENTRY::root, s_markupCache, s_markupCacheMutex, MARKUP_CACHE::ENTRY::source, and TO_UTF8.
Referenced by boundingBoxSingleLine(), drawSingleLineText(), KIFONT::OUTLINE_FONT::GetLinesAsGlyphs(), and StringBoundaryLimits().
|
protected |
Draws a single line of text.
Multiline texts should be split before using the function.
aGal | is a pointer to the graphics abstraction layer, or nullptr (nothing is drawn) |
aBBox | is an optional pointer to be filled with the bounding box. |
aText | is the text to be drawn. |
aPosition | is text position. |
aSize | is the cap-height and em-width of the text |
aAngle | is text angle. |
aMirror | is true if text should be drawn mirrored, false otherwise. |
aOrigin | is the point around which the text should be rotated, mirrored, etc. |
Definition at line 410 of file font.cpp.
References KIGFX::GAL::DrawGlyphs(), and drawMarkup().
Referenced by Draw().
|
staticprivate |
Definition at line 137 of file font.cpp.
References KIFONT::STROKE_FONT::LoadFont(), and s_defaultFont.
Referenced by GetFont().
|
static |
Definition at line 146 of file font.cpp.
References getDefaultFont(), KICAD_FONT_NAME, KIFONT::OUTLINE_FONT::LoadFont(), and s_fontMap.
Referenced by LABEL_MANAGER::Add(), BOARD_ADAPTER::addText(), PCB_IO_IPC2581::addText(), SCH_EASYEDAPRO_PARSER::ApplyFontStyle(), KIGFX::GAL::BitmapText(), BOOST_AUTO_TEST_CASE(), KIGFX::boxText(), ALTIUM_PCB::ConvertTexts6ToEdaTextSettings(), PCB_TEXT::Deserialize(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), KIGFX::PREVIEW::DrawTextNextToCursor(), drawTicksAlongLine(), EDA_TEXT::getDrawFont(), SCH_FIELD::getDrawFont(), SCH_TEXT::getDrawFont(), SCH_TEXTBOX::getDrawFont(), KIGFX::SCH_PAINTER::getFont(), FONT_CHOICE::GetFontSelection(), SCH_FIELD::GetRenderCache(), GRPrintText(), GRTextWidth(), FEATURES_MANAGER::InitFeatureList(), KIGFX::knockoutText(), PCB_IO_KICAD_SEXPR_PARSER::Parse(), PCB_IO_EASYEDAPRO_PARSER::ParseBoard(), SCH_IO_KICAD_SEXPR_PARSER::ParseSchematic(), SCH_EASYEDA_PARSER::ParseSchematic(), SCH_IO_KICAD_SEXPR_PARSER::ParseSymbol(), SCH_EASYEDA_PARSER::ParseSymbolShapes(), DRAWING_SHEET_PARSER::parseText(), PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), SCH_TEXT::Plot(), PlotDrawingSheet(), SCH_PIN::PlotPinTexts(), BRDITEMS_PLOTTER::PlotText(), PLOTTER::PlotText(), SCH_FIELD::Print(), SCH_TEXT::Print(), EDA_TEXT::printOneLineOfText(), SCH_PIN::printPinElectricalTypeName(), SCH_PIN::printPinTexts(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), PIN_LAYOUT_CACHE::recomputeCaches(), SCH_IO_KICAD_SEXPR_PARSER::removeEntryInFontTextMap(), DRC_TEST_PROVIDER_TEXT_DIMS::Run(), EDA_TEXT::SetBold(), EDA_TEXT::SetFontIndex(), EDA_TEXT::SetItalic(), FIELDS_GRID_TABLE::SetValue(), KIGFX::PCB_PAINTER::strokeText(), KIGFX::strokeText(), PLOTTER::Text(), PDF_PLOTTER::Text(), TUNING_STATUS_VIEW_ITEM::ViewDraw(), ROUTER_STATUS_VIEW_ITEM::ViewDraw(), and KIGFX::ANCHOR_DEBUG::ViewDraw().
|
pure virtual |
Compute the distance (interline) between 2 lines of text (for multiline texts).
This is the distance between baselines, not the space between line bounding boxes.
Implemented in KIFONT::OUTLINE_FONT, and KIFONT::STROKE_FONT.
Referenced by getLinePositions(), and EDA_TEXT::GetTextBox().
|
protected |
Definition at line 179 of file font.cpp.
References boundingBoxSingleLine(), GetInterline(), GR_TEXT_H_ALIGN_CENTER, GR_TEXT_H_ALIGN_INDETERMINATE, GR_TEXT_H_ALIGN_LEFT, GR_TEXT_H_ALIGN_RIGHT, GR_TEXT_V_ALIGN_BOTTOM, GR_TEXT_V_ALIGN_CENTER, GR_TEXT_V_ALIGN_INDETERMINATE, GR_TEXT_V_ALIGN_TOP, IsStroke(), TEXT_ATTRIBUTES::m_Halign, TEXT_ATTRIBUTES::m_Italic, TEXT_ATTRIBUTES::m_LineSpacing, TEXT_ATTRIBUTES::m_Size, TEXT_ATTRIBUTES::m_StrokeWidth, TEXT_ATTRIBUTES::m_Valign, wxStringSplit(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by Draw(), and KIFONT::OUTLINE_FONT::GetLinesAsGlyphs().
|
inline |
Definition at line 149 of file font.h.
Referenced by TEXT_ATTRIBUTES::Compare(), ALTIUM_PCB::ConvertTexts6ToEdaTextSettings(), DS_DATA_MODEL_IO::format(), EDA_TEXT::GetFontIndex(), EDA_TEXT::GetFontName(), FIELDS_GRID_TABLE::GetValue(), operator<<(), EDA_TEXT::SetBold(), FONT_CHOICE::SetFontSelection(), and EDA_TEXT::SetItalic().
|
pure virtual |
Convert text string to an array of GLYPHs.
aBBox | pointer to a BOX2I that will set to the bounding box, or nullptr |
aGlyphs | storage for the returned GLYPHs |
aText | text to convert to polygon/polyline |
aSize | is the cap-height and em-width of the text |
aPosition | position of text (cursor position before this text) |
aAngle | text angle |
aMirror | is true if text should be drawn mirrored, false otherwise. |
aOrigin | is the point around which the text should be rotated, mirrored, etc. |
aTextStyle | text style flags |
Implemented in KIFONT::OUTLINE_FONT, and KIFONT::STROKE_FONT.
Referenced by drawMarkup(), LinebreakText(), and wordbreakMarkup().
|
inlinevirtual |
Reimplemented in KIFONT::OUTLINE_FONT.
Definition at line 140 of file font.h.
Referenced by operator<<().
|
inlinevirtual |
Reimplemented in KIFONT::OUTLINE_FONT.
Definition at line 141 of file font.h.
Referenced by operator<<().
|
inlinevirtual |
Reimplemented in KIFONT::OUTLINE_FONT.
Definition at line 139 of file font.h.
Referenced by ALTIUM_PCB::ConvertTexts6ToEdaTextSettings(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), PCB_IO_KICAD_SEXPR::format(), EDA_TEXT::GetEffectiveTextShape(), EDA_TEXT::GetRenderCache(), SCH_FIELD::GetRenderCache(), operator<<(), SCH_TEXT::Plot(), SCH_TEXT::Print(), DRC_TEST_PROVIDER_TEXT_DIMS::Run(), StringBoundaryLimits(), KIGFX::PCB_PAINTER::strokeText(), and KIGFX::strokeText().
|
inlinevirtual |
Reimplemented in KIFONT::STROKE_FONT.
Definition at line 138 of file font.h.
Referenced by SCHEMATIC::EmbedFonts(), BOARD::EmbedFonts(), getLinePositions(), EDA_TEXT::GetTextBox(), ALTIUM_PCB::HelperSetTextAlignmentAndPos(), ALTIUM_PCB::HelperSetTextboxAlignmentAndPos(), DIALOG_DIMENSION_PROPERTIES::onFontSelected(), DIALOG_TEXT_PROPERTIES::onFontSelected(), DIALOG_TEXTBOX_PROPERTIES::onFontSelected(), operator<<(), EDA_TEXT::SetBold(), EDA_TEXT::SetItalic(), StringBoundaryLimits(), KIGFX::PCB_PAINTER::strokeText(), and KIGFX::strokeText().
|
static |
Definition at line 171 of file font.cpp.
References _, and KICAD_FONT_NAME.
void FONT::LinebreakText | ( | wxString & | aText, |
int | aColumnWidth, | ||
const VECTOR2I & | aGlyphSize, | ||
int | aThickness, | ||
bool | aBold, | ||
bool | aItalic | ||
) | const |
Insert
characters into text to ensure that no lines are wider than aColumnWidth.
Definition at line 589 of file font.cpp.
References ANGLE_0, GetTextAsGlyphs(), wordbreakMarkup(), wxStringSplit(), and VECTOR2< T >::x.
Referenced by PCB_TEXTBOX::GetShownText(), and SCH_TEXTBOX::GetShownText().
|
inlineprotected |
|
inline |
Definition at line 150 of file font.h.
Referenced by DS_DATA_MODEL_IO::format().
VECTOR2I FONT::StringBoundaryLimits | ( | const wxString & | aText, |
const VECTOR2I & | aSize, | ||
int | aThickness, | ||
bool | aBold, | ||
bool | aItalic, | ||
const METRICS & | aFontMetrics | ||
) | const |
Compute the boundary limits of aText (the bounding box of all shapes).
Definition at line 435 of file font.cpp.
References ANGLE_0, boundingBox(), drawMarkup(), BOX2< Vec >::GetSize(), BOX2< Vec >::Inflate(), IsOutline(), IsStroke(), and KiROUND().
Referenced by LABEL_MANAGER::Add(), EDA_TEXT::GetTextBox(), KIGFX::GetTextExtents(), GRTextWidth(), PIN_LAYOUT_CACHE::recomputeExtentsCache(), PDF_PLOTTER::Text(), and SCH_PIN::validateExtentsCache().
|
protected |
Definition at line 568 of file font.cpp.
References MARKUP::MARKUP_PARSER::Parse(), TO_UTF8, and wordbreakMarkup().
Referenced by LinebreakText(), and wordbreakMarkup().
|
protected |
Font file name.
Definition at line 279 of file font.h.
Referenced by KIFONT::STROKE_FONT::loadNewStrokeFont().
|
protected |
Font name.
Definition at line 278 of file font.h.
Referenced by KIFONT::STROKE_FONT::loadNewStrokeFont().
|
staticprivate |
Definition at line 282 of file font.h.
Referenced by getDefaultFont().
|
staticprivate |