Implement super- and subscript printing and plotting for eeschema.
This commit is contained in:
parent
65c88ba2c3
commit
5e5edd03f6
|
@ -30,6 +30,7 @@
|
||||||
#include <gal/graphics_abstraction_layer.h>
|
#include <gal/graphics_abstraction_layer.h>
|
||||||
#include <math/util.h> // for KiROUND
|
#include <math/util.h> // for KiROUND
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
|
#include <gr_text.h>
|
||||||
|
|
||||||
|
|
||||||
using namespace KIGFX;
|
using namespace KIGFX;
|
||||||
|
|
|
@ -42,6 +42,22 @@
|
||||||
|
|
||||||
#include <basic_gal.h>
|
#include <basic_gal.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int s_textMarkupFlags = 0;
|
||||||
|
|
||||||
|
|
||||||
|
void SetTextMarkupFlags( int aMarkupFlags )
|
||||||
|
{
|
||||||
|
s_textMarkupFlags = aMarkupFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int GetTextMarkupFlags()
|
||||||
|
{
|
||||||
|
return s_textMarkupFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetPensizeForBold
|
* Function GetPensizeForBold
|
||||||
* @return the "best" value for a pen size to draw/plot a bold text
|
* @return the "best" value for a pen size to draw/plot a bold text
|
||||||
|
@ -165,7 +181,7 @@ void GRText( wxDC* aDC, const wxPoint& aPos, COLOR4D aColor, const wxString& aTe
|
||||||
basic_gal.m_Color = aColor;
|
basic_gal.m_Color = aColor;
|
||||||
basic_gal.SetClipBox( nullptr );
|
basic_gal.SetClipBox( nullptr );
|
||||||
|
|
||||||
basic_gal.StrokeText( aText, VECTOR2D( aPos ), aOrient * M_PI/1800 );
|
basic_gal.StrokeText( aText, VECTOR2D( aPos ), aOrient * M_PI/1800, GetTextMarkupFlags() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
|
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <gr_basic.h>
|
|
||||||
#include <trigo.h>
|
#include <trigo.h>
|
||||||
#include <eda_base_frame.h>
|
#include <eda_base_frame.h>
|
||||||
#include <base_struct.h>
|
#include <base_struct.h>
|
||||||
|
@ -879,7 +878,15 @@ void DXF_PLOTTER::Text( const wxPoint& aPos,
|
||||||
if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
|
if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
|
||||||
aMultilineAllowed = false; // the text has only one line.
|
aMultilineAllowed = false; // the text has only one line.
|
||||||
|
|
||||||
if( textAsLines || containsNonAsciiChars( aText ) || aMultilineAllowed )
|
bool processSuperSub = false;
|
||||||
|
|
||||||
|
if( ( GetTextMarkupFlags() & ENABLE_SUBSCRIPT_MARKUP ) && aText.Contains( wxT( "#" ) ) )
|
||||||
|
processSuperSub = true;
|
||||||
|
|
||||||
|
if( ( GetTextMarkupFlags() & ENABLE_SUPERSCRIPT_MARKUP ) && aText.Contains( wxT( "^" ) ) )
|
||||||
|
processSuperSub = true;
|
||||||
|
|
||||||
|
if( textAsLines || containsNonAsciiChars( aText ) || aMultilineAllowed || processSuperSub )
|
||||||
{
|
{
|
||||||
// output text as graphics.
|
// output text as graphics.
|
||||||
// Perhaps multiline texts could be handled as DXF text entity
|
// Perhaps multiline texts could be handled as DXF text entity
|
||||||
|
|
|
@ -998,9 +998,18 @@ void PS_PLOTTER::Text( const wxPoint& aPos,
|
||||||
if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
|
if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
|
||||||
aMultilineAllowed = false; // the text has only one line.
|
aMultilineAllowed = false; // the text has only one line.
|
||||||
|
|
||||||
|
bool processSuperSub = false;
|
||||||
|
|
||||||
|
if( ( GetTextMarkupFlags() & ENABLE_SUBSCRIPT_MARKUP ) && aText.Contains( wxT( "#" ) ) )
|
||||||
|
processSuperSub = true;
|
||||||
|
|
||||||
|
if( ( GetTextMarkupFlags() & ENABLE_SUPERSCRIPT_MARKUP ) && aText.Contains( wxT( "^" ) ) )
|
||||||
|
processSuperSub = true;
|
||||||
|
|
||||||
// Draw the native postscript text (if requested)
|
// Draw the native postscript text (if requested)
|
||||||
// Currently: does not work: disable it
|
// Currently: does not work: disable it
|
||||||
bool use_native = false; // = m_textMode == PLOT_TEXT_MODE::NATIVE && !aMultilineAllowed;
|
bool use_native = false; // = m_textMode == PLOT_TEXT_MODE::NATIVE
|
||||||
|
// && !aMultilineAllowed && !processSuperSub;
|
||||||
|
|
||||||
if( use_native )
|
if( use_native )
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <panel_eeschema_display_options.h>
|
#include <panel_eeschema_display_options.h>
|
||||||
#include <widgets/gal_options_panel.h>
|
#include <widgets/gal_options_panel.h>
|
||||||
#include <sch_junction.h>
|
#include <sch_junction.h>
|
||||||
|
#include <gr_text.h>
|
||||||
|
|
||||||
PANEL_EESCHEMA_DISPLAY_OPTIONS::PANEL_EESCHEMA_DISPLAY_OPTIONS( SCH_EDIT_FRAME* aFrame,
|
PANEL_EESCHEMA_DISPLAY_OPTIONS::PANEL_EESCHEMA_DISPLAY_OPTIONS( SCH_EDIT_FRAME* aFrame,
|
||||||
wxWindow* aWindow ) :
|
wxWindow* aWindow ) :
|
||||||
|
@ -76,7 +77,7 @@ bool PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataToWindow()
|
||||||
m_junctionSize.SetValue( SCH_JUNCTION::GetSymbolSize() );
|
m_junctionSize.SetValue( SCH_JUNCTION::GetSymbolSize() );
|
||||||
m_checkShowHiddenPins->SetValue( m_frame->GetShowAllPins() );
|
m_checkShowHiddenPins->SetValue( m_frame->GetShowAllPins() );
|
||||||
|
|
||||||
int superSubFlags = KIGFX::ENABLE_SUBSCRIPT_MARKUP | KIGFX::ENABLE_SUPERSCRIPT_MARKUP;
|
int superSubFlags = ENABLE_SUBSCRIPT_MARKUP | ENABLE_SUPERSCRIPT_MARKUP;
|
||||||
|
|
||||||
m_checkSuperSub->SetValue( GetTextMarkupFlags() & superSubFlags );
|
m_checkSuperSub->SetValue( GetTextMarkupFlags() & superSubFlags );
|
||||||
|
|
||||||
|
@ -130,7 +131,7 @@ bool PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataFromWindow()
|
||||||
// Update canvas
|
// Update canvas
|
||||||
m_frame->GetRenderSettings()->m_ShowHiddenPins = m_checkShowHiddenPins->GetValue();
|
m_frame->GetRenderSettings()->m_ShowHiddenPins = m_checkShowHiddenPins->GetValue();
|
||||||
|
|
||||||
int superSubFlags = KIGFX::ENABLE_SUBSCRIPT_MARKUP | KIGFX::ENABLE_SUPERSCRIPT_MARKUP;
|
int superSubFlags = ENABLE_SUBSCRIPT_MARKUP | ENABLE_SUPERSCRIPT_MARKUP;
|
||||||
|
|
||||||
if( m_checkSuperSub->GetValue() )
|
if( m_checkSuperSub->GetValue() )
|
||||||
SetTextMarkupFlags( GetTextMarkupFlags() | superSubFlags );
|
SetTextMarkupFlags( GetTextMarkupFlags() | superSubFlags );
|
||||||
|
|
|
@ -44,13 +44,13 @@
|
||||||
#include <widgets/symbol_tree_pane.h>
|
#include <widgets/symbol_tree_pane.h>
|
||||||
#include <dialogs/panel_libedit_settings.h>
|
#include <dialogs/panel_libedit_settings.h>
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
|
#include <gr_text.h>
|
||||||
#include "sch_junction.h"
|
#include "sch_junction.h"
|
||||||
|
|
||||||
static int s_defaultBusThickness = DEFAULTBUSTHICKNESS;
|
static int s_defaultBusThickness = DEFAULTBUSTHICKNESS;
|
||||||
static int s_defaultWireThickness = DEFAULTDRAWLINETHICKNESS;
|
static int s_defaultWireThickness = DEFAULTDRAWLINETHICKNESS;
|
||||||
static int s_defaultTextSize = DEFAULT_SIZE_TEXT;
|
static int s_defaultTextSize = DEFAULT_SIZE_TEXT;
|
||||||
static int s_drawDefaultLineThickness = -1;
|
static int s_drawDefaultLineThickness = -1;
|
||||||
static int s_textMarkupFlags = 0;
|
|
||||||
static bool s_selectTextAsBox = false;
|
static bool s_selectTextAsBox = false;
|
||||||
static bool s_selectDrawChildren = true;
|
static bool s_selectDrawChildren = true;
|
||||||
static bool s_selectFillShapes = false;
|
static bool s_selectFillShapes = false;
|
||||||
|
@ -98,18 +98,6 @@ int GetDefaultLineThickness()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SetTextMarkupFlags( int aMarkupFlags )
|
|
||||||
{
|
|
||||||
s_textMarkupFlags = aMarkupFlags;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int GetTextMarkupFlags()
|
|
||||||
{
|
|
||||||
return s_textMarkupFlags;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SetDefaultLineThickness( int aThickness )
|
void SetDefaultLineThickness( int aThickness )
|
||||||
{
|
{
|
||||||
s_drawDefaultLineThickness = std::max( 1, aThickness );
|
s_drawDefaultLineThickness = std::max( 1, aThickness );
|
||||||
|
|
|
@ -147,9 +147,6 @@ void SetSelectionFillShapes( bool aBool );
|
||||||
int GetSelectionThickness();
|
int GetSelectionThickness();
|
||||||
void SetSelectionThickness( int aThickness );
|
void SetSelectionThickness( int aThickness );
|
||||||
|
|
||||||
int GetTextMarkupFlags();
|
|
||||||
void SetTextMarkupFlags( int aMarkupFlags );
|
|
||||||
|
|
||||||
COLOR4D GetLayerColor( SCH_LAYER_ID aLayer );
|
COLOR4D GetLayerColor( SCH_LAYER_ID aLayer );
|
||||||
void SetLayerColor( COLOR4D aColor, SCH_LAYER_ID aLayer );
|
void SetLayerColor( COLOR4D aColor, SCH_LAYER_ID aLayer );
|
||||||
|
|
||||||
|
|
|
@ -46,12 +46,6 @@ class BITMAP_BASE;
|
||||||
namespace KIGFX
|
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.
|
* @brief Class GAL is the abstract interface for drawing on a 2D-surface.
|
||||||
*
|
*
|
||||||
|
|
|
@ -50,6 +50,15 @@
|
||||||
|
|
||||||
class PLOTTER;
|
class PLOTTER;
|
||||||
|
|
||||||
|
enum TEXT_MARKUP_FLAGS
|
||||||
|
{
|
||||||
|
ENABLE_SUBSCRIPT_MARKUP = 1 << 0,
|
||||||
|
ENABLE_SUPERSCRIPT_MARKUP = 1 << 1
|
||||||
|
};
|
||||||
|
|
||||||
|
int GetTextMarkupFlags();
|
||||||
|
void SetTextMarkupFlags( int aMarkupFlags );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function Clamp_Text_PenSize
|
* Function Clamp_Text_PenSize
|
||||||
*As a rule, pen width should not be >1/4em, otherwise the character
|
*As a rule, pen width should not be >1/4em, otherwise the character
|
||||||
|
|
|
@ -976,7 +976,7 @@ void PCB_PAINTER::draw( const TEXTE_PCB* aText, int aLayer )
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetTextAttributes( aText );
|
m_gal->SetTextAttributes( aText );
|
||||||
m_gal->StrokeText( shownText, position, aText->GetTextAngleRadians() );
|
m_gal->StrokeText( shownText, position, aText->GetTextAngleRadians(), GetTextMarkupFlags() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1008,7 +1008,7 @@ void PCB_PAINTER::draw( const TEXTE_MODULE* aText, int aLayer )
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetTextAttributes( aText );
|
m_gal->SetTextAttributes( aText );
|
||||||
m_gal->StrokeText( shownText, position, aText->GetDrawRotationRadians() );
|
m_gal->StrokeText( shownText, position, aText->GetDrawRotationRadians(), GetTextMarkupFlags() );
|
||||||
|
|
||||||
// Draw the umbilical line
|
// Draw the umbilical line
|
||||||
if( aText->IsSelected() )
|
if( aText->IsSelected() )
|
||||||
|
@ -1138,7 +1138,8 @@ void PCB_PAINTER::draw( const DIMENSION* aDimension, int aLayer )
|
||||||
|
|
||||||
m_gal->SetLineWidth( text.GetThickness() );
|
m_gal->SetLineWidth( text.GetThickness() );
|
||||||
m_gal->SetTextAttributes( &text );
|
m_gal->SetTextAttributes( &text );
|
||||||
m_gal->StrokeText( text.GetShownText(), position, text.GetTextAngleRadians() );
|
m_gal->StrokeText( text.GetShownText(), position, text.GetTextAngleRadians(),
|
||||||
|
GetTextMarkupFlags() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue