Add super- and subscript support to Eeschema.

Note that since the markup might exist for other reasons, it has
to be turned on with a preference setting.  (It goes through a set
of bitflags so the same architecture can be used for other markup
structures that we might want to support in the future.)

Note also that this is more about engineering nomenclature than
visual formatting.  In that respect it's more similar to overbar
than italic or bold.
This commit is contained in:
Jeff Young 2019-10-21 19:03:54 +01:00
parent 52fcbeab44
commit 35c8d64f98
22 changed files with 403 additions and 588 deletions

View File

@ -41,7 +41,6 @@ set( GAL_SRCS
gl_context_mgr.cpp
${FONT_SRC}
painter.cpp
text_utils.cpp
gal/color4d.cpp
gal/gal_display_options.cpp
gal/graphics_abstraction_layer.cpp

View File

@ -162,14 +162,14 @@ bool EDA_TEXT::Replace( wxFindReplaceData& aSearchData )
}
int EDA_TEXT::LenSize( const wxString& aLine, int aThickness ) const
int EDA_TEXT::LenSize( const wxString& aLine, int aThickness, int aMarkupFlags ) const
{
basic_gal.SetFontItalic( IsItalic() );
basic_gal.SetFontBold( IsBold() );
basic_gal.SetLineWidth( (float) aThickness );
basic_gal.SetGlyphSize( VECTOR2D( GetTextSize() ) );
VECTOR2D tsize = basic_gal.GetTextLineSize( aLine );
VECTOR2D tsize = basic_gal.GetTextLineSize( aLine, aMarkupFlags );
return KiROUND( tsize.x );
}
@ -196,7 +196,7 @@ int EDA_TEXT::GetInterline() const
}
EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY, int aMarkupFlags ) const
{
EDA_RECT rect;
wxArrayString strings;
@ -232,8 +232,10 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
}
// calculate the H and V size
int dx = KiROUND( basic_gal.GetStrokeFont().ComputeStringBoundaryLimits(
text, VECTOR2D( GetTextSize() ), double( thickness ) ).x );
const auto& font = basic_gal.GetStrokeFont();
VECTOR2D size( GetTextSize() );
double penWidth( thickness );
int dx = KiROUND( font.ComputeStringBoundaryLimits( text, size, penWidth, aMarkupFlags ).x );
int dy = GetInterline();
// Creates bounding box (rectangle) for an horizontal
@ -258,9 +260,8 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
{ // A overbar adds an extra size to the text
// Height from the base line text of chars like [ or {
double curr_height = GetTextHeight() * 1.15;
int extra_height = KiROUND(
basic_gal.GetStrokeFont().ComputeOverbarVerticalPosition( GetTextHeight(), thickness ) - curr_height );
extra_height += thickness/2;
int extra_height = KiROUND( font.ComputeOverbarVerticalPosition( size.y, penWidth ) - curr_height );
extra_height += thickness / 2;
textsize.y += extra_height;
rect.Move( wxPoint( 0, -extra_height ) );
}
@ -272,9 +273,8 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
for( unsigned ii = 1; ii < strings.GetCount(); ii++ )
{
text = strings.Item( ii );
dx = KiROUND( basic_gal.GetStrokeFont().ComputeStringBoundaryLimits(
text, VECTOR2D( GetTextSize() ), double( thickness ) ).x );
textsize.x = std::max( textsize.x, dx );
dx = KiROUND( font.ComputeStringBoundaryLimits( text, size, penWidth, aMarkupFlags ).x );
textsize.x = std::max( textsize.x, dx );
textsize.y += dy;
}
}

View File

@ -167,12 +167,12 @@ void GAL::ResetTextAttributes()
}
VECTOR2D GAL::GetTextLineSize( const UTF8& aText ) const
VECTOR2D GAL::GetTextLineSize( const UTF8& aText, int aMarkupFlags ) const
{
// Compute the X and Y size of a given text.
// Because computeTextLineSize expects a one line text,
// aText is expected to be only one line text.
return strokeFont.computeTextLineSize( aText );
return strokeFont.computeTextLineSize( aText, aMarkupFlags );
}

View File

@ -31,7 +31,6 @@
#include <gal/definitions.h>
#include <gl_context_mgr.h>
#include <geometry/shape_poly_set.h>
#include <text_utils.h>
#include <bitmap_base.h>
#include <macros.h>
@ -1125,10 +1124,7 @@ void OPENGL_GAL::BitmapText( const wxString& aText, const VECTOR2D& aPosition,
{
wxASSERT_MSG( !IsTextMirrored(), "No support for mirrored text using bitmap fonts." );
auto processedText = ProcessOverbars( aText );
const auto& text = processedText.first;
const auto& overbars = processedText.second;
const UTF8 text( aText );
// Compute text size, so it can be properly justified
VECTOR2D textSize;
float commonOffset;
@ -1192,14 +1188,25 @@ void OPENGL_GAL::BitmapText( const wxString& aText, const VECTOR2D& aPosition,
unsigned int c = *chIt;
wxASSERT_MSG( c != '\n' && c != '\r', wxT( "No support for multiline bitmap text yet" ) );
// Handle overbar
if( overbars[i] && !overbar )
bool wasOverbar = overbar;
if( *chIt == '~' )
{
overbar = true; // beginning of an overbar
if( ++chIt == end )
break;
if( *chIt == '~' )
{
// double ~ is really a ~ so go ahead and process the second one
}
else
{
overbar = !overbar;
}
}
else if( overbar && !overbars[i] )
if( wasOverbar && !overbar )
{
overbar = false; // end of an overbar
drawBitmapOverbar( overbarLength, overbarHeight );
overbarLength = 0;
}

View File

@ -28,7 +28,6 @@
#include <gal/stroke_font.h>
#include <gal/graphics_abstraction_layer.h>
#include <text_utils.h>
#include <wx/string.h>
@ -141,12 +140,10 @@ BOX2D STROKE_FONT::computeBoundingBox( const GLYPH& aGLYPH, const VECTOR2D& aGLY
boundingPoints.emplace_back( VECTOR2D( aGLYPHBoundingX.x, 0 ) );
boundingPoints.emplace_back( VECTOR2D( aGLYPHBoundingX.y, 0 ) );
for( const auto& pointList : aGLYPH )
for( const std::vector<VECTOR2D>& pointList : aGLYPH )
{
for( const auto& pt : pointList )
{
boundingPoints.emplace_back( aGLYPHBoundingX.x, pt.y );
}
for( const VECTOR2D& point : pointList )
boundingPoints.emplace_back( aGLYPHBoundingX.x, point.y );
}
boundingBox.Compute( boundingPoints );
@ -155,7 +152,8 @@ BOX2D STROKE_FONT::computeBoundingBox( const GLYPH& aGLYPH, const VECTOR2D& aGLY
}
void STROKE_FONT::Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRotationAngle )
void STROKE_FONT::Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRotationAngle,
int markupFlags )
{
if( aText.empty() )
return;
@ -220,7 +218,7 @@ void STROKE_FONT::Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRo
{
size_t length = newlinePos - begin;
drawSingleLineText( aText.substr( begin, length ) );
drawSingleLineText( aText.substr( begin, length ), markupFlags );
m_gal->Translate( VECTOR2D( 0.0, lineHeight ) );
begin = newlinePos + 1;
@ -229,15 +227,16 @@ void STROKE_FONT::Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRo
// Draw the last (or the only one) line
if( !aText.empty() )
drawSingleLineText( aText.substr( begin ) );
drawSingleLineText( aText.substr( begin ), markupFlags );
m_gal->Restore();
}
void STROKE_FONT::drawSingleLineText( const UTF8& aText )
void STROKE_FONT::drawSingleLineText( const UTF8& aText, int markupFlags )
{
double xOffset;
double yOffset;
VECTOR2D glyphSize( m_gal->GetGlyphSize() );
double overbar_italic_comp = computeOverbarVerticalPosition() * ITALIC_TILT;
@ -245,7 +244,7 @@ void STROKE_FONT::drawSingleLineText( const UTF8& aText )
overbar_italic_comp = -overbar_italic_comp;
// Compute the text size
VECTOR2D textSize = computeTextLineSize( aText );
VECTOR2D textSize = computeTextLineSize( aText, markupFlags );
double half_thickness = m_gal->GetLineWidth()/2;
// Context needs to be saved before any transformations
@ -296,13 +295,13 @@ void STROKE_FONT::drawSingleLineText( const UTF8& aText )
// must not be indented on subsequent letters to ensure that the bar segments
// overlap.
bool last_had_overbar = false;
auto processedText = ProcessOverbars( aText );
const auto& text = processedText.first;
const auto& overbars = processedText.second;
int overbar_index = 0;
bool in_overbar = false;
for( UTF8::uni_iter chIt = text.ubegin(), end = text.uend(); chIt < end; ++chIt )
yOffset = 0;
for( UTF8::uni_iter chIt = aText.ubegin(), end = aText.uend(); chIt < end; ++chIt )
{
// Index into bounding boxes table
int dd = *chIt - ' ';
// Handle tabs as locked to the nearest 4th column (counting in spaces)
@ -317,6 +316,63 @@ void STROKE_FONT::drawSingleLineText( const UTF8& aText )
// Set the character to ' ' instead of the '?' for tab
dd = 0;
glyphSize = m_gal->GetGlyphSize();
yOffset = 0;
}
else if( *chIt == '~' )
{
if( ++chIt == end )
break;
if( *chIt == '~' )
{
// double ~ is really a ~ so go ahead and process the second one
}
else
{
in_overbar = !in_overbar;
}
}
else if( *chIt == '^' && ( markupFlags & ENABLE_SUPERSCRIPT_MARKUP ) )
{
if( ++chIt == end )
break;
if( *chIt == '^' )
{
// double ^ is really a ^ so go ahead and process the second one
}
else
{
// single ^ starts a superscript
dd = *chIt - ' ';
glyphSize = m_gal->GetGlyphSize() * 0.8;
yOffset = -m_gal->GetGlyphSize().y * 0.3;
}
}
else if( *chIt == '#' && ( markupFlags & ENABLE_SUBSCRIPT_MARKUP ) )
{
if( ++chIt == end )
break;
if( *chIt == '#' )
{
// double # is really a # so go ahead and process the second one
}
else
{
// single _ starts a subscript
dd = *chIt - ' ';
glyphSize = m_gal->GetGlyphSize() * 0.8;
yOffset = m_gal->GetGlyphSize().y * 0.1;
}
}
else if( *chIt == ' ' )
{
// space ends a super- or subscript
glyphSize = m_gal->GetGlyphSize();
yOffset = 0;
}
if( dd >= (int) m_glyphBoundingBoxes.size() || dd < 0 )
@ -325,7 +381,7 @@ void STROKE_FONT::drawSingleLineText( const UTF8& aText )
GLYPH& glyph = m_glyphs[dd];
BOX2D& bbox = m_glyphBoundingBoxes[dd];
if( overbars[overbar_index] )
if( in_overbar )
{
double overbar_start_x = xOffset;
double overbar_start_y = - computeOverbarVerticalPosition();
@ -350,32 +406,31 @@ void STROKE_FONT::drawSingleLineText( const UTF8& aText )
last_had_overbar = false;
}
for( const auto& pointList : glyph )
for( std::vector<VECTOR2D>& ptList : glyph )
{
std::deque<VECTOR2D> pointListScaled;
std::deque<VECTOR2D> ptListScaled;
for( const auto& pt : pointList )
for( VECTOR2D& pt : ptList )
{
VECTOR2D pointPos( pt.x * glyphSize.x + xOffset, pt.y * glyphSize.y );
VECTOR2D scaledPt( pt.x * glyphSize.x + xOffset, pt.y * glyphSize.y + yOffset );
if( m_gal->IsFontItalic() )
{
// FIXME should be done other way - referring to the lowest Y value of point
// because now italic fonts are translated a bit
if( m_gal->IsTextMirrored() )
pointPos.x += pointPos.y * STROKE_FONT::ITALIC_TILT;
scaledPt.x += scaledPt.y * STROKE_FONT::ITALIC_TILT;
else
pointPos.x -= pointPos.y * STROKE_FONT::ITALIC_TILT;
scaledPt.x -= scaledPt.y * STROKE_FONT::ITALIC_TILT;
}
pointListScaled.push_back( pointPos );
ptListScaled.push_back( scaledPt );
}
m_gal->DrawPolyline( pointListScaled );
m_gal->DrawPolyline( ptListScaled );
}
xOffset += glyphSize.x * bbox.GetEnd().x;
++overbar_index;
}
m_gal->Restore();
@ -399,19 +454,23 @@ double STROKE_FONT::computeOverbarVerticalPosition() const
}
VECTOR2D STROKE_FONT::computeTextLineSize( const UTF8& aText ) const
VECTOR2D STROKE_FONT::computeTextLineSize( const UTF8& aText, int aMarkupFlags ) const
{
return ComputeStringBoundaryLimits( aText, m_gal->GetGlyphSize(), m_gal->GetLineWidth() );
return ComputeStringBoundaryLimits( aText, m_gal->GetGlyphSize(), m_gal->GetLineWidth(),
aMarkupFlags );
}
VECTOR2D STROKE_FONT::ComputeStringBoundaryLimits( const UTF8& aText, const VECTOR2D& aGlyphSize,
double aGlyphThickness ) const
double aGlyphThickness, int markupFlags ) const
{
VECTOR2D string_bbox;
int line_count = 1;
double maxX = 0.0, curX = 0.0;
double curScale = 1.0;
bool in_overbar = false;
for( UTF8::uni_iter it = aText.ubegin(), end = aText.uend(); it < end; ++it )
{
if( *it == '\n' )
@ -422,12 +481,68 @@ VECTOR2D STROKE_FONT::ComputeStringBoundaryLimits( const UTF8& aText, const VECT
continue;
}
// If it is double tilda, then it is displayed as a single tilda
// If it is single tilda, then it is toggling overbar, so we need to skip it
if( *it == '~' )
// Handle tabs as locked to the nearest 4th column (counting in spaces)
// The choice of spaces is somewhat arbitrary but sufficient for aligning text
if( *it == '\t' )
{
if( ++it >= end )
double fourSpaces = 4.0 * m_glyphBoundingBoxes[0].GetEnd().x;
double addlSpace = fourSpaces - std::fmod( curX, fourSpaces );
// Add the remaining space (between 0 and 3 spaces)
curX += addlSpace;
// Tab ends a super- or subscript
curScale = 1.0;
}
else if( *it == '~' )
{
if( ++it == end )
break;
if( *it == '~' )
{
// double ~ is really a ~ so go ahead and process the second one
}
else
{
// single ~ toggles overbar
in_overbar = !in_overbar;
}
}
else if( *it == '^' && ( markupFlags & ENABLE_SUPERSCRIPT_MARKUP ) )
{
if( ++it == end )
break;
if( *it == '^' )
{
// double ^ is really a ^ so go ahead and process the second one
}
else
{
// single ^ starts a superscript
curScale = 0.8;
}
}
else if( *it == '#' && ( markupFlags & ENABLE_SUBSCRIPT_MARKUP ) )
{
if( ++it == end )
break;
if( *it == '#' )
{
// double # is really a # so go ahead and process the second one
}
else
{
// single _ starts a subscript
curScale = 0.8;
}
}
else if( *it == ' ' )
{
// space ends a super- or subscript
curScale = 1.0;
}
// Index in the bounding boxes table
@ -437,11 +552,10 @@ VECTOR2D STROKE_FONT::ComputeStringBoundaryLimits( const UTF8& aText, const VECT
dd = '?' - ' ';
const BOX2D& box = m_glyphBoundingBoxes[dd];
curX += box.GetEnd().x;
curX += box.GetEnd().x * curScale;
}
string_bbox.x = std::max( maxX, curX );
string_bbox.x *= aGlyphSize.x;
string_bbox.x = std::max( maxX, curX ) * aGlyphSize.x;
string_bbox.x += aGlyphThickness;
string_bbox.y = line_count * GetInterline( aGlyphSize.y );

View File

@ -1,55 +0,0 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 2017 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <text_utils.h>
std::pair<UTF8, std::vector<bool>> ProcessOverbars( const UTF8& aText )
{
UTF8 text;
std::vector<bool> flags;
bool overbar = false;
for( UTF8::uni_iter chIt = aText.ubegin(), end = aText.uend(); chIt < end; ++chIt )
{
if( *chIt == '~' )
{
if( ++chIt >= end )
break;
// It was a single tilda, it toggles overbar
if( *chIt != '~' )
overbar = !overbar;
// If it is a double tilda, just process the second one
}
// remember: *chIt is not necessary a ASCII7 char.
// it is an unsigned giving a multibyte char in UTF8 strings
text += *chIt;
flags.push_back( overbar );
}
return std::make_pair( text, flags );
}

View File

@ -71,6 +71,11 @@ bool PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataToWindow()
m_wireWidth.SetValue( GetDefaultWireThickness() );
m_junctionSize.SetValue( SCH_JUNCTION::GetSymbolSize() );
m_checkShowHiddenPins->SetValue( m_frame->GetShowAllPins() );
int superSubFlags = KIGFX::ENABLE_SUBSCRIPT_MARKUP | KIGFX::ENABLE_SUPERSCRIPT_MARKUP;
m_checkSuperSub->SetValue( GetTextMarkupFlags() & superSubFlags );
m_checkPageLimits->SetValue( m_frame->ShowPageLimits() );
m_galOptsPanel->TransferDataToWindow();
@ -111,6 +116,14 @@ bool PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataFromWindow()
// Update canvas
m_frame->GetRenderSettings()->m_ShowHiddenPins = m_checkShowHiddenPins->GetValue();
int superSubFlags = KIGFX::ENABLE_SUBSCRIPT_MARKUP | KIGFX::ENABLE_SUPERSCRIPT_MARKUP;
if( m_checkSuperSub->GetValue() )
SetTextMarkupFlags( GetTextMarkupFlags() | superSubFlags );
else
SetTextMarkupFlags( GetTextMarkupFlags() & ~superSubFlags );
m_frame->GetRenderSettings()->SetShowPageLimits( m_checkPageLimits->GetValue() );
m_frame->GetCanvas()->GetView()->MarkDirty();
m_frame->GetCanvas()->GetView()->UpdateAllItems( KIGFX::REPAINT );

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 30 2017)
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@ -9,103 +9,106 @@
///////////////////////////////////////////////////////////////////////////
PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE::PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE::PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
wxBoxSizer* bPanelSizer;
bPanelSizer = new wxBoxSizer( wxHORIZONTAL );
m_galOptionsSizer = new wxBoxSizer( wxVERTICAL );
bPanelSizer->Add( m_galOptionsSizer, 1, wxEXPAND|wxLEFT, 5 );
wxBoxSizer* bRightColumn;
bRightColumn = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizer2;
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Dimensions") ), wxVERTICAL );
wxFlexGridSizer* fgSizer32;
fgSizer32 = new wxFlexGridSizer( 0, 3, 3, 0 );
fgSizer32->AddGrowableCol( 1 );
fgSizer32->SetFlexibleDirection( wxBOTH );
fgSizer32->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_busWidthLabel = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("&Bus thickness:"), wxDefaultPosition, wxDefaultSize, 0 );
m_busWidthLabel->Wrap( -1 );
fgSizer32->Add( m_busWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_busWidthCtrl = new wxTextCtrl( sbSizer2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_WRAP );
fgSizer32->Add( m_busWidthCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
m_busWidthUnits = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("mils"), wxDefaultPosition, wxDefaultSize, 0 );
m_busWidthUnits->Wrap( -1 );
fgSizer32->Add( m_busWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_wireWidthLabel = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("&Wire thickness:"), wxDefaultPosition, wxDefaultSize, 0 );
m_wireWidthLabel->Wrap( -1 );
fgSizer32->Add( m_wireWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_wireWidthCtrl = new wxTextCtrl( sbSizer2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_WRAP );
fgSizer32->Add( m_wireWidthCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
m_wireWidthUnits = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("mils"), wxDefaultPosition, wxDefaultSize, 0 );
m_wireWidthUnits->Wrap( -1 );
fgSizer32->Add( m_wireWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_jctSizeLabel = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("Junction size:"), wxDefaultPosition, wxDefaultSize, 0 );
m_jctSizeLabel->Wrap( -1 );
fgSizer32->Add( m_jctSizeLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_jctSizeCtrl = new wxTextCtrl( sbSizer2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer32->Add( m_jctSizeCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
m_jctSizeUnits = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("mils"), wxDefaultPosition, wxDefaultSize, 0 );
m_jctSizeUnits->Wrap( -1 );
fgSizer32->Add( m_jctSizeUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
sbSizer2->Add( fgSizer32, 0, wxBOTTOM|wxRIGHT|wxEXPAND, 5 );
bRightColumn->Add( sbSizer2, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxStaticBoxSizer* sbSizer1;
sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Annotations") ), wxVERTICAL );
wxBoxSizer* bSizer6;
bSizer6 = new wxBoxSizer( wxHORIZONTAL );
m_staticText26 = new wxStaticText( sbSizer1->GetStaticBox(), wxID_ANY, _("Symbol unit notation:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText26->Wrap( -1 );
bSizer6->Add( m_staticText26, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
wxString m_choiceSeparatorRefIdChoices[] = { _("A"), _(".A"), _("-A"), _("_A"), _(".1"), _("-1"), _("_1") };
int m_choiceSeparatorRefIdNChoices = sizeof( m_choiceSeparatorRefIdChoices ) / sizeof( wxString );
m_choiceSeparatorRefId = new wxChoice( sbSizer1->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceSeparatorRefIdNChoices, m_choiceSeparatorRefIdChoices, 0 );
m_choiceSeparatorRefId->SetSelection( 0 );
bSizer6->Add( m_choiceSeparatorRefId, 1, wxEXPAND|wxRIGHT, 5 );
sbSizer1->Add( bSizer6, 0, wxEXPAND|wxRIGHT, 5 );
sbSizer1->Add( 0, 0, 0, wxEXPAND|wxTOP|wxBOTTOM, 10 );
m_checkShowHiddenPins = new wxCheckBox( sbSizer1->GetStaticBox(), wxID_ANY, _("S&how hidden pins"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizer1->Add( m_checkShowHiddenPins, 0, wxEXPAND|wxALL, 5 );
m_checkSuperSub = new wxCheckBox( sbSizer1->GetStaticBox(), wxID_ANY, _("Enable superscript/subscript markup"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizer1->Add( m_checkSuperSub, 0, wxALL, 5 );
m_checkPageLimits = new wxCheckBox( sbSizer1->GetStaticBox(), wxID_ANY, _("Show page limi&ts"), wxDefaultPosition, wxDefaultSize, 0 );
m_checkPageLimits->SetValue(true);
m_checkPageLimits->SetValue(true);
sbSizer1->Add( m_checkPageLimits, 0, wxEXPAND|wxALL, 5 );
bRightColumn->Add( sbSizer1, 1, wxEXPAND|wxTOP|wxRIGHT, 5 );
bPanelSizer->Add( bRightColumn, 1, wxEXPAND|wxRIGHT|wxLEFT, 10 );
this->SetSizer( bPanelSizer );
this->Layout();
bPanelSizer->Fit( this );

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="13" />
<FileVersion major="1" minor="15" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
@ -14,6 +14,7 @@
<property name="file">panel_eeschema_display_options_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property>
<property name="name">PanelEeschemaDisplayOptions</property>
<property name="namespace"></property>
@ -48,36 +49,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnInitDialog"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bPanelSizer</property>
@ -115,7 +86,6 @@
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxEXPAND</property>
@ -165,6 +135,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">&amp;Bus thickness:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -190,29 +161,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -277,33 +225,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -339,6 +260,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mils</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -364,29 +286,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -422,6 +321,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">&amp;Wire thickness:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -447,29 +347,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -534,33 +411,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -596,6 +446,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mils</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -621,29 +472,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -679,6 +507,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Junction size:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -704,29 +533,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -791,33 +597,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -853,6 +632,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mils</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -878,29 +658,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
@ -919,7 +676,6 @@
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxRIGHT</property>
@ -962,6 +718,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Symbol unit notation:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -987,29 +744,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -1074,30 +808,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
@ -1174,30 +884,70 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Enable superscript/subscript markup</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkSuperSub</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -1262,30 +1012,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>

View File

@ -1,12 +1,11 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 30 2017)
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE_H__
#define __PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE_H__
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
@ -29,10 +28,10 @@
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE : public wxPanel
class PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE : public wxPanel
{
private:
protected:
wxBoxSizer* m_galOptionsSizer;
wxStaticText* m_busWidthLabel;
@ -47,13 +46,13 @@ class PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE : public wxPanel
wxStaticText* m_staticText26;
wxChoice* m_choiceSeparatorRefId;
wxCheckBox* m_checkShowHiddenPins;
wxCheckBox* m_checkSuperSub;
wxCheckBox* m_checkPageLimits;
public:
PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE();
};
#endif //__PANEL_EESCHEMA_DISPLAY_OPTIONS_BASE_H__

View File

@ -51,6 +51,7 @@ static int s_defaultBusThickness = DEFAULTBUSTHICKNESS;
static int s_defaultWireThickness = DEFAULTDRAWLINETHICKNESS;
static int s_defaultTextSize = DEFAULT_SIZE_TEXT;
static int s_drawDefaultLineThickness = -1;
static int s_textMarkupFlags = 0;
int GetDefaultBusThickness()
@ -95,6 +96,18 @@ int GetDefaultLineThickness()
}
void SetTextMarkupFlags( int aMarkupFlags )
{
s_textMarkupFlags = aMarkupFlags;
}
int GetTextMarkupFlags()
{
return s_textMarkupFlags;
}
void SetDefaultLineThickness( int aThickness )
{
s_drawDefaultLineThickness = std::max( 1, aThickness );
@ -249,6 +262,7 @@ static const wxChar DefaultJctSizeEntry[] = wxT( "DefaultJunctionSize" )
static const wxChar ShowHiddenPinsEntry[] = wxT( "ShowHiddenPins" );
static const wxChar HorzVertLinesOnlyEntry[] = wxT( "HorizVertLinesOnly" );
static const wxChar FieldNamesEntry[] = wxT( "FieldNames" );
static const wxString TextMarkupFlagsEntry = "TextMarkupFlags";
static const wxString ShowPageLimitsEntry = "ShowPageLimits";
static const wxString UnitsEntry = "Units";
static const wxString PrintMonochromeEntry = "PrintMonochrome";
@ -325,6 +339,8 @@ void SCH_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
SetDefaultWireThickness( (int) tmp );
SetTextMarkupFlags( (int) aCfg->Read( TextMarkupFlagsEntry, 0L ) );
if( aCfg->Read( DefaultJctSizeEntry, &tmp ) )
SCH_JUNCTION::SetSymbolSize( (int) tmp );
@ -389,6 +405,8 @@ void SCH_EDIT_FRAME::SaveSettings( wxConfigBase* aCfg )
record.Replace( wxT(" "), wxT(" "), true ); // double space to single
aCfg->Write( FieldNamesEntry, record );
aCfg->Write( TextMarkupFlagsEntry, GetTextMarkupFlags() );
}

View File

@ -120,6 +120,9 @@ void SetDefaultBusThickness( int aThickness );
int GetDefaultWireThickness();
void SetDefaultWireThickness( int aThickness );
int GetTextMarkupFlags();
void SetTextMarkupFlags( int aMarkupFlags );
COLOR4D GetLayerColor( SCH_LAYER_ID aLayer );
void SetLayerColor( COLOR4D aColor, SCH_LAYER_ID aLayer );

View File

@ -317,7 +317,7 @@ const EDA_RECT LIB_FIELD::GetBoundingBox() const
/* Y coordinates for LIB_ITEMS are bottom to top, so we must invert the Y position when
* calling GetTextBox() that works using top to bottom Y axis orientation.
*/
EDA_RECT rect = GetTextBox( -1, -1, true );
EDA_RECT rect = GetTextBox( -1, -1, true, GetTextMarkupFlags() );
rect.RevertYAxis();
// We are using now a bottom to top Y axis.

View File

@ -273,7 +273,7 @@ const EDA_RECT LIB_TEXT::GetBoundingBox() const
/* Y coordinates for LIB_ITEMS are bottom to top, so we must invert the Y position when
* calling GetTextBox() that works using top to bottom Y axis orientation.
*/
EDA_RECT rect = GetTextBox( -1, -1, true );
EDA_RECT rect = GetTextBox( -1, -1, true, GetTextMarkupFlags() );
rect.RevertYAxis();
// We are using now a bottom to top Y axis.

View File

@ -208,10 +208,10 @@ const EDA_RECT SCH_FIELD::GetBoundingBox() const
SCH_FIELD text( *this ); // Make a local copy to change text
// because GetBoundingBox() is const
text.SetText( GetFullyQualifiedText() );
rect = text.GetTextBox( -1, linewidth );
rect = text.GetTextBox( -1, linewidth, false, GetTextMarkupFlags() );
}
else
rect = GetTextBox( -1, linewidth );
rect = GetTextBox( -1, linewidth, false, GetTextMarkupFlags() );
// Calculate the bounding box position relative to the component:
wxPoint origin = parentComponent->GetPosition();

View File

@ -300,6 +300,12 @@ float SCH_PAINTER::getTextThickness( const SCH_TEXT* aItem, bool aDrawingShadows
}
void SCH_PAINTER::strokeText( const wxString& aText, const VECTOR2D& aPosition, double aAngle )
{
m_gal->StrokeText( aText, aPosition, aAngle, GetTextMarkupFlags() );
}
void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit, int aConvert )
{
if( !aUnit )
@ -536,7 +542,7 @@ void SCH_PAINTER::draw( LIB_FIELD *aField, int aLayer )
auto pos = mapCoords( aField->GetPosition() );
double orient = aField->GetTextAngleRadians();
m_gal->StrokeText( aField->GetText(), pos, orient );
strokeText( aField->GetText(), pos, orient );
// Draw the umbilical line
if( aField->IsMoving() && m_schSettings.m_ShowUmbilicals )
@ -582,7 +588,7 @@ void SCH_PAINTER::draw( LIB_TEXT *aText, int aLayer )
m_gal->SetGlyphSize( VECTOR2D( aText->GetTextSize() ) );
m_gal->SetFontBold( aText->IsBold() );
m_gal->SetFontItalic( aText->IsItalic() );
m_gal->StrokeText( aText->GetText(), pos, orient );
strokeText( aText->GetText(), pos, orient );
}
@ -886,28 +892,28 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
SET_DC( INSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_RIGHT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText( text[INSIDE], pos + VECTOR2D( -insideOffset - len, 0 ), 0 );
strokeText( text[INSIDE], pos + VECTOR2D( -insideOffset - len, 0 ), 0 );
}
if( size[OUTSIDE] )
{
SET_DC( OUTSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_LEFT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText( text[OUTSIDE], pos + VECTOR2D( outsideOffset, 0 ), 0 );
strokeText( text[OUTSIDE], pos + VECTOR2D( outsideOffset, 0 ), 0 );
}
if( size[ABOVE] )
{
SET_DC( ABOVE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_BOTTOM );
m_gal->StrokeText( text[ABOVE], pos + VECTOR2D( -len / 2.0, -aboveOffset ), 0 );
strokeText( text[ABOVE], pos + VECTOR2D( -len / 2.0, -aboveOffset ), 0 );
}
if( size[BELOW] )
{
SET_DC( BELOW );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_TOP );
m_gal->StrokeText( text[BELOW], pos + VECTOR2D( -len / 2.0, belowOffset ), 0 );
strokeText( text[BELOW], pos + VECTOR2D( -len / 2.0, belowOffset ), 0 );
}
break;
@ -918,28 +924,28 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_LEFT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_LEFT );
m_gal->StrokeText( text[INSIDE], pos + VECTOR2D( insideOffset + len, 0 ), 0 );
strokeText( text[INSIDE], pos + VECTOR2D( insideOffset + len, 0 ), 0 );
}
if( size[OUTSIDE] )
{
SET_DC( OUTSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_RIGHT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText( text[OUTSIDE], pos + VECTOR2D( -outsideOffset, 0 ), 0 );
strokeText( text[OUTSIDE], pos + VECTOR2D( -outsideOffset, 0 ), 0 );
}
if( size[ABOVE] )
{
SET_DC( ABOVE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_BOTTOM );
m_gal->StrokeText( text[ABOVE], pos + VECTOR2D( len / 2.0, -aboveOffset ), 0 );
strokeText( text[ABOVE], pos + VECTOR2D( len / 2.0, -aboveOffset ), 0 );
}
if( size[BELOW] )
{
SET_DC( BELOW );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_TOP );
m_gal->StrokeText( text[BELOW], pos + VECTOR2D( len / 2.0, belowOffset ), 0 );
strokeText( text[BELOW], pos + VECTOR2D( len / 2.0, belowOffset ), 0 );
}
break;
@ -949,28 +955,28 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
SET_DC( INSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_RIGHT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText ( text[INSIDE], pos + VECTOR2D( 0, insideOffset + len ), M_PI / 2);
strokeText ( text[INSIDE], pos + VECTOR2D( 0, insideOffset + len ), M_PI / 2);
}
if( size[OUTSIDE] )
{
SET_DC( OUTSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_LEFT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText ( text[OUTSIDE], pos + VECTOR2D( 0, -outsideOffset ), M_PI / 2);
strokeText ( text[OUTSIDE], pos + VECTOR2D( 0, -outsideOffset ), M_PI / 2);
}
if( size[ABOVE] )
{
SET_DC( ABOVE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_BOTTOM );
m_gal->StrokeText( text[ABOVE], pos + VECTOR2D( -aboveOffset, len / 2.0 ), M_PI / 2 );
strokeText( text[ABOVE], pos + VECTOR2D( -aboveOffset, len / 2.0 ), M_PI / 2 );
}
if( size[BELOW] )
{
SET_DC( BELOW );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_TOP );
m_gal->StrokeText( text[BELOW], pos + VECTOR2D( belowOffset, len / 2.0 ), M_PI / 2 );
strokeText( text[BELOW], pos + VECTOR2D( belowOffset, len / 2.0 ), M_PI / 2 );
}
break;
@ -980,28 +986,28 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
SET_DC( INSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_LEFT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText ( text[INSIDE], pos + VECTOR2D( 0, -insideOffset - len ), M_PI / 2);
strokeText ( text[INSIDE], pos + VECTOR2D( 0, -insideOffset - len ), M_PI / 2);
}
if( size[OUTSIDE] )
{
SET_DC( OUTSIDE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_RIGHT );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
m_gal->StrokeText ( text[OUTSIDE], pos + VECTOR2D( 0, outsideOffset ), M_PI / 2);
strokeText ( text[OUTSIDE], pos + VECTOR2D( 0, outsideOffset ), M_PI / 2);
}
if( size[ABOVE] )
{
SET_DC( ABOVE );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_BOTTOM );
m_gal->StrokeText( text[ABOVE], pos + VECTOR2D( -aboveOffset, -len / 2.0 ), M_PI / 2 );
strokeText( text[ABOVE], pos + VECTOR2D( -aboveOffset, -len / 2.0 ), M_PI / 2 );
}
if( size[BELOW] )
{
SET_DC( BELOW );
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_TOP );
m_gal->StrokeText( text[BELOW], pos + VECTOR2D( belowOffset, -len / 2.0 ), M_PI / 2 );
strokeText( text[BELOW], pos + VECTOR2D( belowOffset, -len / 2.0 ), M_PI / 2 );
}
break;
@ -1206,7 +1212,7 @@ void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
}
if( !shownText.IsEmpty() )
m_gal->StrokeText( shownText, text_offset, aText->GetTextAngleRadians() );
strokeText( shownText, text_offset, aText->GetTextAngleRadians() );
if( aText->IsDangling() )
drawDanglingSymbol( aText->GetTextPos(), drawingShadows );
@ -1373,7 +1379,7 @@ void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
m_gal->SetFontItalic( aField->IsItalic() );
m_gal->SetTextMirrored( aField->IsMirrored() );
m_gal->SetLineWidth( getLineWidth( aField, drawingShadows ) );
m_gal->StrokeText( aField->GetFullyQualifiedText(), textpos, orient == TEXT_ANGLE_VERT ? M_PI/2 : 0 );
strokeText( aField->GetFullyQualifiedText(), textpos, orient == TEXT_ANGLE_VERT ? M_PI/2 : 0 );
// Draw the umbilical line
if( aField->IsMoving() )
@ -1548,7 +1554,7 @@ void SCH_PAINTER::draw( SCH_SHEET *aSheet, int aLayer )
m_gal->SetFontBold( false );
m_gal->SetFontItalic( false );
m_gal->StrokeText( text, pos_sheetname, nameAngle );
strokeText( text, pos_sheetname, nameAngle );
txtSize = aSheet->GetFileNameSize();
m_gal->SetGlyphSize( VECTOR2D( txtSize, txtSize ) );
@ -1556,7 +1562,7 @@ void SCH_PAINTER::draw( SCH_SHEET *aSheet, int aLayer )
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_TOP );
text = wxT( "File: " ) + aSheet->GetFileName();
m_gal->StrokeText( text, pos_filename, nameAngle );
strokeText( text, pos_filename, nameAngle );
}
}

View File

@ -171,6 +171,7 @@ private:
bool setDeviceColors( const LIB_ITEM* aItem, int aLayer );
void triLine ( const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c );
void strokeText( const wxString& aText, const VECTOR2D& aPosition, double aRotationAngle );
SCH_RENDER_SETTINGS m_schSettings;
};

View File

@ -427,7 +427,7 @@ const EDA_RECT SCH_TEXT::GetBoundingBox() const
linewidth = Clamp_Text_PenSize( linewidth, GetTextSize(), IsBold() );
EDA_RECT rect = GetTextBox( -1, linewidth );
EDA_RECT rect = GetTextBox( -1, linewidth, false, GetTextMarkupFlags() );
if( GetTextAngle() != 0 ) // Rotate rect
{
@ -694,7 +694,7 @@ bool SCH_LABEL::IsType( const KICAD_T aScanTypes[] )
const EDA_RECT SCH_LABEL::GetBoundingBox() const
{
int linewidth = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness();
EDA_RECT rect = GetTextBox( -1, linewidth );
EDA_RECT rect = GetTextBox( -1, linewidth, false, GetTextMarkupFlags() );
if( GetTextAngle() != 0.0 )
{
@ -850,7 +850,7 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aPoints, const
aPoints.clear();
int symb_len = LenSize( GetShownText(), linewidth ) + ( TXT_MARGIN * 2 );
int symb_len = LenSize( GetShownText(), linewidth, GetTextMarkupFlags() ) + ( TXT_MARGIN * 2 );
// Create outline shape : 6 points
int x = symb_len + linewidth + 3;
@ -947,7 +947,7 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
height = ( (GetTextHeight() * 15) / 10 ) + width + 2 * TXT_MARGIN;
// text X size add height for triangular shapes(bidirectional)
length = LenSize( GetShownText(), width ) + height + DANGLING_SYMBOL_SIZE;
length = LenSize( GetShownText(), width, GetTextMarkupFlags() ) + height + DANGLING_SYMBOL_SIZE;
switch( GetLabelSpinStyle() ) // respect orientation
{
@ -1109,7 +1109,7 @@ const EDA_RECT SCH_HIERLABEL::GetBoundingBox() const
int width = GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness();
height = GetTextHeight() + width + 2 * TXT_MARGIN;
length = LenSize( GetShownText(), width )
length = LenSize( GetShownText(), width, GetTextMarkupFlags() )
+ height // add height for triangular shapes
+ 2 * DANGLING_SYMBOL_SIZE;

View File

@ -303,8 +303,10 @@ public:
* @param aLine : the line of text to consider.
* For single line text, this parameter is always m_Text
* @param aThickness : the stroke width of the text
* @param aMarkupFlags a flagset of MARKUP_FLAG enums indicating which markup tokens should
* be processed
*/
int LenSize( const wxString& aLine, int aThickness ) const;
int LenSize( const wxString& aLine, int aThickness, int aMarkupFlags ) const;
/**
* Function GetTextBox
@ -321,8 +323,11 @@ public:
* @param aThickness Overrides the current penwidth when greater than 0.
* This is needed when the current penwidth is 0 and a default penwidth is used.
* @param aInvertY Invert the Y axis when calculating bounding box.
* @param aMarkupFlags a flagset of MARKUP_FLAG enums indicating which markup tokens should
* be processed
*/
EDA_RECT GetTextBox( int aLine = -1, int aThickness = -1, bool aInvertY = false ) const;
EDA_RECT GetTextBox( int aLine = -1, int aThickness = -1, bool aInvertY = false,
int aMarkupFlags = 0 ) const;
/**
* Return the distance between two lines of text.

View File

@ -46,6 +46,12 @@ class BITMAP_BASE;
namespace KIGFX
{
enum TEXT_MARKUP_FLAGS
{
ENABLE_SUBSCRIPT_MARKUP = 1 << 0,
ENABLE_SUPERSCRIPT_MARKUP = 1 << 1
};
/**
* @brief Class GAL is the abstract interface for drawing on a 2D-surface.
*
@ -335,11 +341,12 @@ public:
* @param aText is the text to be drawn.
* @param aPosition is the text position in world coordinates.
* @param aRotationAngle is the text rotation angle.
* @param aMarkupFlags a bitset of TEXT_MARKUP_FLAGS.
*/
virtual void StrokeText( const wxString& aText, const VECTOR2D& aPosition,
double aRotationAngle )
double aRotationAngle, int aMarkupFlags = 0 )
{
strokeFont.Draw( aText, aPosition, aRotationAngle );
strokeFont.Draw( aText, aPosition, aRotationAngle, aMarkupFlags );
}
/**
@ -370,9 +377,10 @@ public:
* a only one line text.
*
* @param aText is the text string (one line).
* @param aMarkupFlags a bitset of TEXT_MARKUP_FLAGS.
* @return is the text size.
*/
VECTOR2D GetTextLineSize( const UTF8& aText ) const;
VECTOR2D GetTextLineSize( const UTF8& aText, int aMarkupFlags = 0 ) const;
/**
* Compute the vertical position of an overbar, sometimes used in texts.

View File

@ -73,8 +73,11 @@ public:
* @param aText is the text to be drawn.
* @param aPosition is the text position in world coordinates.
* @param aRotationAngle is the text rotation angle in radians.
* @param markupFlags a flagset of MARKUP_FLAG enums indicating which markup tokens should
* be processed
*/
void Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRotationAngle );
void Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRotationAngle,
int markupFlags );
/**
* Function SetGAL
@ -90,10 +93,12 @@ public:
* Compute the boundary limits of aText (the bounding box of all shapes).
* The overbar and alignment are not taken in account, '~' characters are skipped.
*
* @param markupFlags a flagset of MARKUP_FLAG enums indicating which markup tokens should
* be processed
* @return a VECTOR2D giving the width and height of text.
*/
VECTOR2D ComputeStringBoundaryLimits( const UTF8& aText, const VECTOR2D& aGlyphSize,
double aGlyphThickness ) const;
double aGlyphThickness, int markupFlags ) const;
/**
* Compute the vertical position of an overbar, sometimes used in texts.
@ -124,9 +129,10 @@ private:
* a only one line text.
*
* @param aText is the text string (one line).
* @param aMarkupFlags a bitset of TEXT_MARKUP_FLAGS.
* @return the text size.
*/
VECTOR2D computeTextLineSize( const UTF8& aText ) const;
VECTOR2D computeTextLineSize( const UTF8& aText, int aMarkupFlags ) const;
/**
* Compute the vertical position of an overbar, sometimes used in texts.
@ -150,7 +156,7 @@ private:
*
* @param aText is the text to be drawn.
*/
void drawSingleLineText( const UTF8& aText );
void drawSingleLineText( const UTF8& aText, int markupFlags );
/**
* @brief Returns number of lines for a given text.

View File

@ -1,38 +0,0 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 2017 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef TEXT_UTILS_H
#define TEXT_UTILS_H
#include <utf8.h>
#include <vector>
/**
* Processes a text to extract the raw text and overbar flags.
* @param aText is the text to be processed.
* @return Pair of raw text and overbar enable flags for each character in the raw text.
*/
std::pair<UTF8, std::vector<bool>> ProcessOverbars( const UTF8& aText );
#endif /* TEXT_UTILS_H */