Handle flipped horiz/vert justifications in FIELDS_GRID_TABLE.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15677
This commit is contained in:
Jeff Young 2023-09-18 12:38:09 +01:00
parent 93a5d01230
commit 6f62565093
3 changed files with 38 additions and 11 deletions

View File

@ -35,7 +35,6 @@
#include <sch_edit_frame.h>
#include <ee_collectors.h>
#include <sch_symbol.h>
#include <sch_label.h>
#include <lib_field.h>
#include <template_fieldnames.h>
#include <symbol_library.h>
@ -46,8 +45,6 @@
#include <sch_text.h>
#include <scintilla_tricks.h>
#include <wildcards_and_files_ext.h>
#include <sim/sim_model.h>
#include <sim/sim_lib_mgr.h>
DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES( SCH_BASE_FRAME* aParent, const wxString& aTitle,

View File

@ -578,7 +578,7 @@ wxString FIELDS_GRID_TABLE<T>::GetValue( int aRow, int aCol )
return StringFromBool( field.IsNameShown() );
case FDC_H_ALIGN:
switch ( field.GetHorizJustify() )
switch ( field.GetEffectiveHorizJustify() )
{
case GR_TEXT_H_ALIGN_LEFT: return _( "Left" );
case GR_TEXT_H_ALIGN_CENTER: return _( "Center" );
@ -588,7 +588,7 @@ wxString FIELDS_GRID_TABLE<T>::GetValue( int aRow, int aCol )
break;
case FDC_V_ALIGN:
switch ( field.GetVertJustify() )
switch ( field.GetEffectiveVertJustify() )
{
case GR_TEXT_V_ALIGN_TOP: return _( "Top" );
case GR_TEXT_V_ALIGN_CENTER: return _( "Center" );
@ -717,28 +717,52 @@ void FIELDS_GRID_TABLE<T>::SetValue( int aRow, int aCol, const wxString &aValue
break;
case FDC_H_ALIGN:
{
GR_TEXT_H_ALIGN_T horizontalJustification;
if( value == _( "Left" ) )
field.SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
horizontalJustification = GR_TEXT_H_ALIGN_LEFT;
else if( value == _( "Center" ) )
field.SetHorizJustify( GR_TEXT_H_ALIGN_CENTER );
horizontalJustification = GR_TEXT_H_ALIGN_CENTER;
else if( value == _( "Right" ) )
field.SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT );
horizontalJustification = GR_TEXT_H_ALIGN_RIGHT;
else
wxFAIL_MSG( wxT( "unknown horizontal alignment: " ) + value );
// Note that we must set justifications before we can ask if they're flipped. If the old
// justification is center then it won't know (whereas if the new justification is center
// the we don't care).
field.SetHorizJustify( horizontalJustification );
if( field.IsHorizJustifyFlipped() )
field.SetHorizJustify( EDA_TEXT::MapHorizJustify( - horizontalJustification ) );
break;
}
case FDC_V_ALIGN:
{
GR_TEXT_V_ALIGN_T verticalJustification;
if( value == _( "Top" ) )
field.SetVertJustify( GR_TEXT_V_ALIGN_TOP );
verticalJustification = GR_TEXT_V_ALIGN_TOP;
else if( value == _( "Center" ) )
field.SetVertJustify( GR_TEXT_V_ALIGN_CENTER );
verticalJustification = GR_TEXT_V_ALIGN_CENTER;
else if( value == _( "Bottom" ) )
field.SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
verticalJustification = GR_TEXT_V_ALIGN_BOTTOM;
else
wxFAIL_MSG( wxT( "unknown vertical alignment: " ) + value);
// Note that we must set justifications before we can ask if they're flipped. If the old
// justification is center then it won't know (whereas if the new justification is center
// the we don't care).
field.SetVertJustify( verticalJustification );
if( field.IsVertJustifyFlipped() )
field.SetVertJustify( EDA_TEXT::MapVertJustify( -verticalJustification ) );
break;
}
case FDC_ITALIC:
field.SetItalic( BoolFromString( value ) );

View File

@ -124,6 +124,12 @@ public:
KIFONT::FONT* getDrawFont() const override;
bool IsHorizJustifyFlipped() const { return false; }
bool IsVertJustifyFlipped() const { return false; }
GR_TEXT_H_ALIGN_T GetEffectiveHorizJustify() const { return GetHorizJustify(); }
GR_TEXT_V_ALIGN_T GetEffectiveVertJustify() const { return GetVertJustify(); }
/**
* Copy parameters of this field to another field. Pointers are not copied.
*