Give all GAL canvases access to a GAL_DISPLAY_OPTIONS structure instance
Also loads the gal options when loading a canvas, as the canvas otherwise might not register the initial settings.
This commit is contained in:
parent
cdfcc9a2ab
commit
ddded86a06
|
@ -39,7 +39,10 @@
|
|||
|
||||
using namespace KIGFX;
|
||||
|
||||
BASIC_GAL basic_gal;
|
||||
KIGFX::GAL_DISPLAY_OPTIONS basic_displayOptions;
|
||||
|
||||
// the basic GAL doesn't get an external display option object
|
||||
BASIC_GAL basic_gal( basic_displayOptions );
|
||||
|
||||
const VECTOR2D BASIC_GAL::transform( const VECTOR2D& aPoint ) const
|
||||
{
|
||||
|
|
|
@ -114,15 +114,12 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin
|
|||
Connect( m_onShowTimer.GetId(), wxEVT_TIMER,
|
||||
wxTimerEventHandler( EDA_DRAW_PANEL_GAL::onShowTimer ), NULL, this );
|
||||
m_onShowTimer.Start( 10 );
|
||||
|
||||
LoadGalSettings();
|
||||
}
|
||||
|
||||
|
||||
EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL()
|
||||
{
|
||||
StopDrawing();
|
||||
SaveGalSettings();
|
||||
|
||||
assert( !m_drawing );
|
||||
|
||||
|
@ -353,7 +350,7 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
|
|||
break;
|
||||
|
||||
case GAL_TYPE_CAIRO:
|
||||
new_gal = new KIGFX::CAIRO_GAL( this, this, this );
|
||||
new_gal = new KIGFX::CAIRO_GAL( m_options, this, this, this );
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -363,19 +360,21 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
|
|||
case GAL_TYPE_NONE:
|
||||
// KIGFX::GAL is a stub - it actually does cannot display anything,
|
||||
// but prevents code relying on GAL canvas existence from crashing
|
||||
new_gal = new KIGFX::GAL();
|
||||
new_gal = new KIGFX::GAL( m_options );
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch( std::runtime_error& err )
|
||||
{
|
||||
new_gal = new KIGFX::GAL();
|
||||
new_gal = new KIGFX::GAL( m_options );
|
||||
aGalType = GAL_TYPE_NONE;
|
||||
DisplayError( m_parent, wxString( err.what() ) );
|
||||
result = false;
|
||||
}
|
||||
|
||||
SaveGalSettings();
|
||||
// trigger update of the gal options in case they differ
|
||||
// from the defaults
|
||||
m_options.NotifyChanged();
|
||||
|
||||
assert( new_gal );
|
||||
delete m_gal;
|
||||
|
@ -391,49 +390,11 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
|
|||
m_view->SetGAL( m_gal );
|
||||
|
||||
m_backend = aGalType;
|
||||
LoadGalSettings();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_DRAW_PANEL_GAL::SaveGalSettings()
|
||||
{
|
||||
if( !m_edaFrame || !m_gal )
|
||||
return false;
|
||||
|
||||
wxConfigBase* cfg = Kiface().KifaceSettings();
|
||||
wxString baseCfgName = m_edaFrame->GetName();
|
||||
|
||||
if( !cfg )
|
||||
return false;
|
||||
|
||||
if( !cfg->Write( baseCfgName + GRID_STYLE_CFG, (long) GetGAL()->GetGridStyle() ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_DRAW_PANEL_GAL::LoadGalSettings()
|
||||
{
|
||||
if( !m_edaFrame || !m_gal )
|
||||
return false;
|
||||
|
||||
wxConfigBase* cfg = Kiface().KifaceSettings();
|
||||
wxString baseCfgName = m_edaFrame->GetName();
|
||||
|
||||
if( !cfg )
|
||||
return false;
|
||||
|
||||
long gridStyle;
|
||||
cfg->Read( baseCfgName + GRID_STYLE_CFG, &gridStyle, (long) KIGFX::GRID_STYLE::GRID_STYLE_DOTS );
|
||||
GetGAL()->SetGridStyle( (KIGFX::GRID_STYLE) gridStyle );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_PANEL_GAL::onEvent( wxEvent& aEvent )
|
||||
{
|
||||
if( m_lostFocus )
|
||||
|
|
|
@ -42,8 +42,10 @@ using namespace KIGFX;
|
|||
|
||||
|
||||
|
||||
CAIRO_GAL::CAIRO_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||
CAIRO_GAL::CAIRO_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions,
|
||||
wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||
wxEvtHandler* aPaintListener, const wxString& aName ) :
|
||||
GAL( aDisplayOptions ),
|
||||
wxWindow( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxEXPAND, aName )
|
||||
{
|
||||
parentWindow = aParent;
|
||||
|
@ -103,6 +105,20 @@ CAIRO_GAL::~CAIRO_GAL()
|
|||
}
|
||||
|
||||
|
||||
bool CAIRO_GAL::updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions )
|
||||
{
|
||||
bool refresh = false;
|
||||
|
||||
if( super::updatedGalDisplayOptions( aOptions ) )
|
||||
{
|
||||
Refresh();
|
||||
refresh = true;
|
||||
}
|
||||
|
||||
return refresh;
|
||||
}
|
||||
|
||||
|
||||
void CAIRO_GAL::BeginDrawing()
|
||||
{
|
||||
initSurface();
|
||||
|
|
|
@ -26,7 +26,11 @@
|
|||
|
||||
using namespace KIGFX;
|
||||
|
||||
static const wxString GalGLAntialiasingKeyword( wxT( "OpenGLAntialiasingMode" ) );
|
||||
/*
|
||||
* Config option strings
|
||||
*/
|
||||
static const wxString GalGLAntialiasingKeyword( "OpenGLAntialiasingMode" );
|
||||
|
||||
|
||||
GAL_DISPLAY_OPTIONS::GAL_DISPLAY_OPTIONS()
|
||||
: gl_antialiasing_mode( OPENGL_ANTIALIASING_MODE::NONE )
|
||||
|
@ -36,8 +40,8 @@ GAL_DISPLAY_OPTIONS::GAL_DISPLAY_OPTIONS()
|
|||
void GAL_DISPLAY_OPTIONS::ReadConfig( wxConfigBase* aCfg, wxString aBaseName )
|
||||
{
|
||||
aCfg->Read( aBaseName + GalGLAntialiasingKeyword,
|
||||
reinterpret_cast<long*>(&gl_antialiasing_mode),
|
||||
(long)KIGFX::OPENGL_ANTIALIASING_MODE::NONE );
|
||||
reinterpret_cast<long*>( &gl_antialiasing_mode ),
|
||||
static_cast<long>( KIGFX::OPENGL_ANTIALIASING_MODE::NONE ) );
|
||||
|
||||
NotifyChanged();
|
||||
}
|
||||
|
@ -46,7 +50,7 @@ void GAL_DISPLAY_OPTIONS::ReadConfig( wxConfigBase* aCfg, wxString aBaseName )
|
|||
void GAL_DISPLAY_OPTIONS::WriteConfig( wxConfigBase* aCfg, wxString aBaseName )
|
||||
{
|
||||
aCfg->Write( aBaseName + GalGLAntialiasingKeyword,
|
||||
static_cast<long>(gl_antialiasing_mode) );
|
||||
static_cast<long>( gl_antialiasing_mode ) );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -37,7 +37,8 @@ using namespace KIGFX;
|
|||
const double GAL::METRIC_UNIT_LENGTH = 1e9;
|
||||
|
||||
|
||||
GAL::GAL() :
|
||||
GAL::GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions ) :
|
||||
options( aDisplayOptions ),
|
||||
strokeFont( this )
|
||||
{
|
||||
// Set the default values for the internal variables
|
||||
|
@ -68,6 +69,9 @@ GAL::GAL() :
|
|||
SetCursorEnabled( false );
|
||||
|
||||
strokeFont.LoadNewStrokeFont( newstroke_font, newstroke_font_bufsize );
|
||||
|
||||
// subscribe for settings updates
|
||||
observerLink = options.Subscribe( this );
|
||||
}
|
||||
|
||||
|
||||
|
@ -75,6 +79,23 @@ GAL::~GAL()
|
|||
{
|
||||
}
|
||||
|
||||
void GAL::OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& aOptions )
|
||||
{
|
||||
// defer to the child class first
|
||||
updatedGalDisplayOptions( aOptions );
|
||||
|
||||
// there is no refresh to do at this level
|
||||
}
|
||||
|
||||
|
||||
bool GAL::updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions )
|
||||
{
|
||||
bool refresh = false;
|
||||
|
||||
// tell the derived class if the base class needs an update or not
|
||||
return refresh;
|
||||
}
|
||||
|
||||
|
||||
void GAL::SetTextAttributes( const EDA_TEXT* aText )
|
||||
{
|
||||
|
|
|
@ -66,9 +66,10 @@ SHADER* OPENGL_GAL::shader = NULL;
|
|||
OPENGL_GAL::OPENGL_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions, wxWindow* aParent,
|
||||
wxEvtHandler* aMouseListener, wxEvtHandler* aPaintListener,
|
||||
const wxString& aName ) :
|
||||
GAL( aDisplayOptions ),
|
||||
wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
|
||||
wxEXPAND, aName ),
|
||||
options( aDisplayOptions ), mouseListener( aMouseListener ), paintListener( aPaintListener )
|
||||
mouseListener( aMouseListener ), paintListener( aPaintListener )
|
||||
{
|
||||
if( glMainContext == NULL )
|
||||
{
|
||||
|
@ -101,8 +102,6 @@ OPENGL_GAL::OPENGL_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions, wxWindow* aParent,
|
|||
SetViewWantsBestResolution( true );
|
||||
#endif
|
||||
|
||||
observerLink = options.Subscribe( this );
|
||||
|
||||
// Connecting the event handlers
|
||||
Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) );
|
||||
|
||||
|
@ -182,18 +181,27 @@ OPENGL_GAL::~OPENGL_GAL()
|
|||
GL_CONTEXT_MANAGER::Get().DestroyCtx( glMainContext );
|
||||
glMainContext = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void OPENGL_GAL::OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& aDisplayOptions )
|
||||
bool OPENGL_GAL::updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions )
|
||||
{
|
||||
bool refresh = false;
|
||||
|
||||
if( options.gl_antialiasing_mode != compositor->GetAntialiasingMode() )
|
||||
{
|
||||
compositor->SetAntialiasingMode( options.gl_antialiasing_mode );
|
||||
isFramebufferInitialized = false;
|
||||
Refresh();
|
||||
refresh = true;
|
||||
}
|
||||
|
||||
if( super::updatedGalDisplayOptions( aOptions ) || refresh )
|
||||
{
|
||||
Refresh();
|
||||
refresh = true;
|
||||
}
|
||||
|
||||
return refresh;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -64,7 +64,8 @@ private:
|
|||
std::stack <TRANSFORM_PRM> m_transformHistory;
|
||||
|
||||
public:
|
||||
BASIC_GAL()
|
||||
BASIC_GAL( KIGFX::GAL_DISPLAY_OPTIONS& aDisplayOptions ) :
|
||||
GAL( aDisplayOptions )
|
||||
{
|
||||
m_DC = NULL;
|
||||
m_Color = RED;
|
||||
|
|
|
@ -177,18 +177,6 @@ public:
|
|||
return m_edaFrame;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function SaveGalSettings()
|
||||
* Stores GAL related settings in the configuration storage.
|
||||
*/
|
||||
virtual bool SaveGalSettings();
|
||||
|
||||
/**
|
||||
* Function LoadGalSettings()
|
||||
* Loads GAL related settings from the configuration storage.
|
||||
*/
|
||||
virtual bool LoadGalSettings();
|
||||
|
||||
/**
|
||||
* Function OnShow()
|
||||
* Called when the window is shown for the first time.
|
||||
|
|
|
@ -81,7 +81,8 @@ public:
|
|||
*
|
||||
* @param aName is the name of this window for use by wxWindow::FindWindowByName()
|
||||
*/
|
||||
CAIRO_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener = NULL,
|
||||
CAIRO_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions,
|
||||
wxWindow* aParent, wxEvtHandler* aMouseListener = NULL,
|
||||
wxEvtHandler* aPaintListener = NULL, const wxString& aName = wxT( "CairoCanvas" ) );
|
||||
|
||||
virtual ~CAIRO_GAL();
|
||||
|
@ -352,6 +353,9 @@ private:
|
|||
|
||||
int wxBufferWidth;
|
||||
|
||||
///> Cairo-specific update handlers
|
||||
bool updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions ) override;
|
||||
|
||||
void flushPath();
|
||||
// Methods
|
||||
void storePath(); ///< Store the actual path
|
||||
|
|
|
@ -29,9 +29,16 @@
|
|||
class wxConfigBase;
|
||||
class wxString;
|
||||
|
||||
namespace KIGFX {
|
||||
|
||||
class GAL_DISPLAY_OPTIONS;
|
||||
namespace KIGFX
|
||||
{
|
||||
/**
|
||||
* GridStyle: Type definition of the grid style
|
||||
*/
|
||||
enum GRID_STYLE
|
||||
{
|
||||
GRID_STYLE_LINES, ///< Use lines for the grid
|
||||
GRID_STYLE_DOTS ///< Use dots for the grid
|
||||
};
|
||||
|
||||
enum class OPENGL_ANTIALIASING_MODE : long
|
||||
{
|
||||
|
@ -42,6 +49,8 @@ namespace KIGFX {
|
|||
SUPERSAMPLING_X4 = 4
|
||||
};
|
||||
|
||||
class GAL_DISPLAY_OPTIONS;
|
||||
|
||||
class GAL_DISPLAY_OPTIONS_OBSERVER
|
||||
{
|
||||
public:
|
||||
|
@ -53,12 +62,12 @@ namespace KIGFX {
|
|||
public:
|
||||
GAL_DISPLAY_OPTIONS();
|
||||
|
||||
OPENGL_ANTIALIASING_MODE gl_antialiasing_mode;
|
||||
|
||||
void ReadConfig ( wxConfigBase* aCfg, wxString aBaseName );
|
||||
void WriteConfig( wxConfigBase* aCfg, wxString aBaseName );
|
||||
|
||||
void NotifyChanged();
|
||||
|
||||
OPENGL_ANTIALIASING_MODE gl_antialiasing_mode;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <gal/color4d.h>
|
||||
#include <gal/definitions.h>
|
||||
#include <gal/stroke_font.h>
|
||||
#include <gal/gal_display_options.h>
|
||||
#include <newstroke_font.h>
|
||||
|
||||
class SHAPE_LINE_CHAIN;
|
||||
|
@ -43,15 +44,6 @@ class SHAPE_POLY_SET;
|
|||
|
||||
namespace KIGFX
|
||||
{
|
||||
/**
|
||||
* GridStyle: Type definition of the grid style
|
||||
*/
|
||||
enum GRID_STYLE
|
||||
{
|
||||
GRID_STYLE_LINES, ///< Use lines for the grid
|
||||
GRID_STYLE_DOTS ///< Use dots for the grid
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief Class GAL is the abstract interface for drawing on a 2D-surface.
|
||||
|
@ -63,11 +55,11 @@ enum GRID_STYLE
|
|||
* for drawing purposes these are transformed to screen units with this layer. So zooming is handled here as well.
|
||||
*
|
||||
*/
|
||||
class GAL
|
||||
class GAL: GAL_DISPLAY_OPTIONS_OBSERVER
|
||||
{
|
||||
public:
|
||||
// Constructor / Destructor
|
||||
GAL();
|
||||
GAL( GAL_DISPLAY_OPTIONS& aOptions );
|
||||
virtual ~GAL();
|
||||
|
||||
/// @brief Returns the initalization status for the canvas.
|
||||
|
@ -975,6 +967,10 @@ public:
|
|||
static const double METRIC_UNIT_LENGTH;
|
||||
|
||||
protected:
|
||||
|
||||
GAL_DISPLAY_OPTIONS& options;
|
||||
UTIL::LINK observerLink;
|
||||
|
||||
std::stack<double> depthStack; ///< Stored depth values
|
||||
VECTOR2I screenSize; ///< Screen size in screen coordinates
|
||||
|
||||
|
@ -1043,6 +1039,25 @@ protected:
|
|||
/// Depth level on which the grid is drawn
|
||||
static const int GRID_DEPTH;
|
||||
|
||||
// ---------------
|
||||
// Settings observer interface
|
||||
// ---------------
|
||||
/**
|
||||
* Handler for observer settings changes
|
||||
*/
|
||||
void OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& aOptions ) override;
|
||||
|
||||
/**
|
||||
* Function updatedGalDisplayOptions
|
||||
*
|
||||
* @brief handler for updated display options. Derived classes
|
||||
* should call up to this to set base-class methods.
|
||||
*
|
||||
* @return true if the new settings changed something. Derived classes
|
||||
* can use this information to refresh themselves
|
||||
*/
|
||||
virtual bool updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions );
|
||||
|
||||
private:
|
||||
struct TEXT_PROPERTIES
|
||||
{
|
||||
|
|
|
@ -62,7 +62,7 @@ class SHADER;
|
|||
* and quads. The purpose is to provide a fast graphics interface, that takes advantage of modern
|
||||
* graphics card GPUs. All methods here benefit thus from the hardware acceleration.
|
||||
*/
|
||||
class OPENGL_GAL : public GAL, public wxGLCanvas, GAL_DISPLAY_OPTIONS_OBSERVER
|
||||
class OPENGL_GAL : public GAL, public wxGLCanvas
|
||||
{
|
||||
public:
|
||||
/**
|
||||
|
@ -99,8 +99,6 @@ public:
|
|||
return IsShownOnScreen();
|
||||
}
|
||||
|
||||
void OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& ) override;
|
||||
|
||||
// ---------------
|
||||
// Drawing methods
|
||||
// ---------------
|
||||
|
@ -282,9 +280,6 @@ private:
|
|||
/// Super class definition
|
||||
typedef GAL super;
|
||||
|
||||
GAL_DISPLAY_OPTIONS& options;
|
||||
UTIL::LINK observerLink;
|
||||
|
||||
static const int CIRCLE_POINTS = 64; ///< The number of points for circle approximation
|
||||
static const int CURVE_POINTS = 32; ///< The number of points for curve approximation
|
||||
|
||||
|
@ -322,6 +317,9 @@ private:
|
|||
///< when the window is visible
|
||||
bool isGrouping; ///< Was a group started?
|
||||
|
||||
///< Update handler for OpenGL settings
|
||||
bool updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions ) override;
|
||||
|
||||
// Polygon tesselation
|
||||
/// The tessellator
|
||||
GLUtesselator* tesselator;
|
||||
|
|
Loading…
Reference in New Issue