Improve overbar rendering in PCB and global labels

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8584
Moves the font slightly down in global labels
Keeps font with overbar at the same size in PCB OpenGL renderer
This commit is contained in:
david-beinder 2021-07-25 13:37:23 +02:00 committed by Jeff Young
parent 78fd268b18
commit bab13debcb
2 changed files with 10 additions and 18 deletions

View File

@ -2040,7 +2040,7 @@ void OPENGL_GAL::drawBitmapOverbar( double aLength, double aHeight )
Save();
Translate( VECTOR2D( -aLength, -aHeight - 1.5 * H ) );
Translate( VECTOR2D( -aLength, -aHeight ) );
m_currentManager->Reserve( 6 );
m_currentManager->Color( m_strokeColor.r, m_strokeColor.g, m_strokeColor.b, m_strokeColor.a );
@ -2109,15 +2109,7 @@ std::pair<VECTOR2D, float> OPENGL_GAL::computeBitmapTextSize( const UTF8& aText
}
if( glyph )
{
textSize.x += glyph->advance;
if( overbarDepth != -1 )
{
const float H = lineGlyph->maxy - lineGlyph->miny;
textSize.y = std::max<float>( textSize.y, charHeight + 1.5 * H );
}
}
}
textSize.y = std::max<float>( textSize.y, charHeight );

View File

@ -994,15 +994,17 @@ void SCH_GLOBALLABEL::RunOnChildren( const std::function<void( SCH_ITEM* )>& aFu
wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const
{
wxPoint text_offset;
int dist = GetTextOffset( aSettings );
int horiz = GetTextOffset( aSettings );
// Center the text on the center line of "E" instead of "R" to make room for an overbar
int vert = GetTextHeight() * 0.0715;
switch( m_shape )
{
case PINSHEETLABEL_SHAPE::PS_INPUT:
case PINSHEETLABEL_SHAPE::PS_BIDI:
case PINSHEETLABEL_SHAPE::PS_TRISTATE:
dist += GetTextHeight() * 3 / 4; // Use three-quarters-height as proxy for triangle size
horiz += GetTextHeight() * 3 / 4; // Use three-quarters-height as proxy for triangle size
break;
case PINSHEETLABEL_SHAPE::PS_OUTPUT:
@ -1014,13 +1016,11 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset( const RENDER_SETTINGS* aSetting
switch( GetLabelSpinStyle() )
{
default:
case LABEL_SPIN_STYLE::LEFT: text_offset.x -= dist; break;
case LABEL_SPIN_STYLE::UP: text_offset.y -= dist; break;
case LABEL_SPIN_STYLE::RIGHT: text_offset.x += dist; break;
case LABEL_SPIN_STYLE::BOTTOM: text_offset.y += dist; break;
case LABEL_SPIN_STYLE::LEFT: return wxPoint( -horiz, vert );
case LABEL_SPIN_STYLE::UP: return wxPoint( vert, -horiz );
case LABEL_SPIN_STYLE::RIGHT: return wxPoint( horiz, vert );
case LABEL_SPIN_STYLE::BOTTOM: return wxPoint( vert, horiz );
}
return text_offset;
}