Draw invisible pins in grey in pin preview.

Also pins the zoom at 100% as we don't seem to be very good at
calculating the bounding box for short pins.

Fixes: lp:1836658
* https://bugs.launchpad.net/kicad/+bug/1836658
This commit is contained in:
Jeff Young 2019-07-16 01:29:25 +01:00
parent 7d10b29592
commit 787b16db98
3 changed files with 22 additions and 21 deletions

View File

@ -419,7 +419,7 @@ void LIB_PART::Print( wxDC* aDc, const wxPoint& aOffset, int aMulti, int aConver
if( drawItem.Type() == LIB_PIN_T )
{
drawItem.Print( aDc, aOffset, (void*) aOpts.show_elec_type, aOpts.transform );
drawItem.Print( aDc, aOffset, (void*) &aOpts, aOpts.transform );
}
else if( drawItem.Type() == LIB_FIELD_T )
{

View File

@ -164,12 +164,15 @@ void DIALOG_LIB_EDIT_PIN::OnPaintShowPanel( wxPaintEvent& event )
double yscale = (double) dc_size.y / bBox.GetHeight();
double scale = std::min( xscale, yscale );
// Give a 10% margin
scale *= 0.9;
// Give a 10% margin and limit to no more than 100% zoom
scale = std::min( scale * 0.9, 1.0 );
dc.SetUserScale( scale, scale );
GRResetPenAndBrush( &dc );
m_dummyPin->Print( &dc, -bBox.Centre(), (void*)0, DefaultTransform );
PART_DRAW_OPTIONS opts = PART_DRAW_OPTIONS::Default();
opts.draw_hidden_fields = true;
m_dummyPin->Print( &dc, -bBox.Centre(), (void*) &opts, DefaultTransform );
m_dummyPin->SetParent( nullptr );

View File

@ -560,10 +560,8 @@ int LIB_PIN::GetPenSize() const
void LIB_PIN::print( wxDC* aDC, const wxPoint& aOffset, void* aData, const TRANSFORM& aTransform )
{
// aData is used here as a boolean.
bool drawElectricalTypeName = (bool) aData;
LIB_PART* Entry = GetParent();
PART_DRAW_OPTIONS* opts = (PART_DRAW_OPTIONS*) aData;
LIB_PART* part = GetParent();
/* Calculate pin orient taking in account the component orientation. */
int orient = PinDrawOrient( aTransform );
@ -571,17 +569,17 @@ void LIB_PIN::print( wxDC* aDC, const wxPoint& aOffset, void* aData, const TRANS
/* Calculate the pin position */
wxPoint pos1 = aTransform.TransformCoordinate( m_position ) + aOffset;
if( !IsVisible() )
return;
if( IsVisible() || ( opts && opts->draw_hidden_fields ) )
{
PrintPinSymbol( aDC, pos1, orient );
PrintPinTexts( aDC, pos1, orient, Entry->GetPinNameOffset(), Entry->ShowPinNumbers(),
Entry->ShowPinNames() );
PrintPinTexts( aDC, pos1, orient, part->GetPinNameOffset(), part->ShowPinNumbers(),
part->ShowPinNames() );
if( drawElectricalTypeName )
if( opts && opts->show_elec_type )
PrintPinElectricalTypeName( aDC, pos1, orient );
}
}
void LIB_PIN::PrintPinSymbol( wxDC* aDC, const wxPoint& aPos, int aOrient )