← Back to team overview

kicad-developers team mailing list archive

Re: GAL canvas strategy - testers needed!

 

Le 14/09/2018 à 11:30, Jeff Young a écrit :
> I pushed JP’s patches.
> 
> What’s our plan for getting this branch merged to master?
> 
> Cheers,
> Jeff.
> 


Hi Jeff,
Attached 3 other patches.
The patch 0003 is mandatory, because it fixes a Eeschema crash at startup.

Currently there a blocking issue in Eeschema:
If a text or a symbol is added, the action cannot be undone.
If it is undone, the new item is still on screen, and any added item
(for instance adding a wire) crashes Eeschema.

An annoying but not blocking issue is the fact Scrollbars are no longer
displayed in GAL mode (I don't know why).

There are in Eeschema a few (minor?) cosmetic problems:
In Symbol selector the preview canvas shows artifacts in OpenGL mode.
Symbols with filled arcs have outlines drawn as pie, not arc in Cairo mode.

-- 
Jean-Pierre CHARRAS
From 5c24f435428b35d8c64acbbcd00ccbdcc0b1b0f5 Mon Sep 17 00:00:00 2001
From: jean-pierre charras <jp.charras@xxxxxxxxxx>
Date: Sat, 15 Sep 2018 09:00:13 +0200
Subject: [PATCH 1/3] Make SYMBOL_PREVIEW_WIDGET working, and using the canvas
 type of the caller. Fix an issue with F3 zoom key in libedit.

---
 common/gal/opengl/opengl_gal.cpp             |  46 +--
 common/legacy_gal/eda_draw_frame.cpp         |   8 +-
 eeschema/dialogs/dialog_choose_component.cpp |   3 +-
 eeschema/dialogs/dialog_rescue_each.cpp      |  37 ++-
 eeschema/dialogs/dialog_rescue_each_base.cpp |  22 +-
 eeschema/dialogs/dialog_rescue_each_base.fbp | 280 +++++++------------
 eeschema/dialogs/dialog_rescue_each_base.h   |  10 +-
 eeschema/project_rescue.cpp                  |   2 +-
 eeschema/sch_base_frame.cpp                  |  12 +-
 eeschema/sch_painter.cpp                     |   4 +-
 eeschema/widgets/symbol_preview_widget.cpp   |  31 +-
 eeschema/widgets/symbol_preview_widget.h     |   6 +-
 12 files changed, 207 insertions(+), 254 deletions(-)

diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp
index 62c567d52..1ba0747c7 100644
--- a/common/gal/opengl/opengl_gal.cpp
+++ b/common/gal/opengl/opengl_gal.cpp
@@ -653,29 +653,6 @@ void OPENGL_GAL::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double a
     Save();
     currentManager->Translate( aCenterPoint.x, aCenterPoint.y, 0.0 );
 
-    if( isStrokeEnabled )
-    {
-        currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
-
-        VECTOR2D p( cos( aStartAngle ) * aRadius, sin( aStartAngle ) * aRadius );
-        double alpha;
-
-        for( alpha = aStartAngle + alphaIncrement; alpha <= aEndAngle; alpha += alphaIncrement )
-        {
-            VECTOR2D p_next( cos( alpha ) * aRadius, sin( alpha ) * aRadius );
-            DrawLine( p, p_next );
-
-            p = p_next;
-        }
-
-        // Draw the last missing part
-        if( alpha != aEndAngle )
-        {
-            VECTOR2D p_last( cos( aEndAngle ) * aRadius, sin( aEndAngle ) * aRadius );
-            DrawLine( p, p_last );
-        }
-    }
-
     if( isFillEnabled )
     {
         double alpha;
@@ -701,6 +678,29 @@ void OPENGL_GAL::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double a
         currentManager->Vertex( endPoint.x,    endPoint.y,     0.0 );
     }
 
+    if( isStrokeEnabled )
+    {
+        currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+        VECTOR2D p( cos( aStartAngle ) * aRadius, sin( aStartAngle ) * aRadius );
+        double alpha;
+
+        for( alpha = aStartAngle + alphaIncrement; alpha <= aEndAngle; alpha += alphaIncrement )
+        {
+            VECTOR2D p_next( cos( alpha ) * aRadius, sin( alpha ) * aRadius );
+            DrawLine( p, p_next );
+
+            p = p_next;
+        }
+
+        // Draw the last missing part
+        if( alpha != aEndAngle )
+        {
+            VECTOR2D p_last( cos( aEndAngle ) * aRadius, sin( aEndAngle ) * aRadius );
+            DrawLine( p, p_last );
+        }
+    }
+
     Restore();
 }
 
diff --git a/common/legacy_gal/eda_draw_frame.cpp b/common/legacy_gal/eda_draw_frame.cpp
index 9d8718c52..2a39567a7 100644
--- a/common/legacy_gal/eda_draw_frame.cpp
+++ b/common/legacy_gal/eda_draw_frame.cpp
@@ -1468,14 +1468,11 @@ void EDA_DRAW_FRAME::SetNextZoomAndRedraw( const wxPoint& aCenterPoint, bool aWa
     if( idx >= (int)zoomList.size() )
         return;
 
-    VECTOR2D cpos = GetGalCanvas()->GetViewControls()->GetCursorPosition();
-    wxPoint center( (int)cpos.x, (int)cpos.y );
-
     if( m_zoomSelectBox )
         m_zoomSelectBox->SetSelection( idx );
 
     if( GetScreen()->SetZoom( GetScreen()->m_ZoomList[idx] ) )
-        RedrawScreen( aCenterPoint, true );
+        RedrawScreen( aCenterPoint, aWarpPointer );
 }
 
 
@@ -1497,9 +1494,6 @@ void EDA_DRAW_FRAME::SetPreviousZoomAndRedraw( const wxPoint& aCenterPoint, bool
     if( idx < 0 )
         return;
 
-    VECTOR2D cpos = GetGalCanvas()->GetViewControls()->GetCursorPosition();
-    wxPoint center( (int)cpos.x, (int)cpos.y );
-
     if( m_zoomSelectBox )
         m_zoomSelectBox->SetSelection( idx );
 
diff --git a/eeschema/dialogs/dialog_choose_component.cpp b/eeschema/dialogs/dialog_choose_component.cpp
index 9ef0ad824..ff4fb81f7 100644
--- a/eeschema/dialogs/dialog_choose_component.cpp
+++ b/eeschema/dialogs/dialog_choose_component.cpp
@@ -207,7 +207,8 @@ wxPanel* DIALOG_CHOOSE_COMPONENT::ConstructRightPanel( wxWindow* aParent )
     auto panel = new wxPanel( aParent );
     auto sizer = new wxBoxSizer( wxVERTICAL );
 
-    m_symbol_preview = new SYMBOL_PREVIEW_WIDGET( panel, Kiway() );
+    m_symbol_preview = new SYMBOL_PREVIEW_WIDGET( panel, Kiway(),
+                                                  m_parent->GetGalCanvas()->GetBackend() );
     m_symbol_preview->SetLayoutDirection( wxLayout_LeftToRight );
 
     if( m_show_footprints )
diff --git a/eeschema/dialogs/dialog_rescue_each.cpp b/eeschema/dialogs/dialog_rescue_each.cpp
index 48bde0054..099a7c98f 100644
--- a/eeschema/dialogs/dialog_rescue_each.cpp
+++ b/eeschema/dialogs/dialog_rescue_each.cpp
@@ -52,6 +52,8 @@ public:
 
 private:
     SCH_EDIT_FRAME* m_Parent;
+    SYMBOL_PREVIEW_WIDGET* m_previewNewWidget;
+    SYMBOL_PREVIEW_WIDGET* m_previewOldWidget;
     wxConfigBase*   m_Config;
     RESCUER*        m_Rescuer;
     bool            m_AskShowAgain;
@@ -63,6 +65,10 @@ private:
     void OnConflictSelect( wxDataViewEvent& aEvent ) override;
     void OnNeverShowClick( wxCommandEvent& aEvent ) override;
     void OnCancelClick( wxCommandEvent& aEvent ) override;
+
+    // Display the 2 items (old in cache and new in library) corresponding to the
+    // selected conflict in m_ListOfConflicts
+    void displayItemsInConflict();
 };
 
 
@@ -73,6 +79,12 @@ DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH( SCH_EDIT_FRAME* aParent, RESCUER& aRescu
       m_Rescuer( &aRescuer ),
       m_AskShowAgain( aAskShowAgain )
 {
+    m_previewOldWidget = new SYMBOL_PREVIEW_WIDGET( m_previewOldPanel,  Kiway(), m_Parent->GetGalCanvas()->GetBackend() );
+	m_SizerOldPanel->Add( m_previewOldWidget, 1, wxEXPAND | wxALL, 5 );
+
+    m_previewNewWidget = new SYMBOL_PREVIEW_WIDGET( m_previewNewPanel,  Kiway(), m_Parent->GetGalCanvas()->GetBackend() );
+	m_SizerNewPanel->Add( m_previewNewWidget, 1, wxEXPAND | wxALL, 5 );
+
     m_Config = Kiface().KifaceSettings();
     m_stdButtonsOK->SetDefault();
 
@@ -172,6 +184,8 @@ void DIALOG_RESCUE_EACH::PopulateConflictList()
     {
         // Select the first choice
         m_ListOfConflicts->SelectRow( 0 );
+        // Ensure this choice is displayed:
+        displayItemsInConflict();
     }
 }
 
@@ -209,16 +223,8 @@ void DIALOG_RESCUE_EACH::PopulateInstanceList()
 }
 
 
-void DIALOG_RESCUE_EACH::OnConflictSelect( wxDataViewEvent& aEvent )
+void DIALOG_RESCUE_EACH::displayItemsInConflict()
 {
-    // wxformbuilder connects this event to the _dialog_, not the data view.
-    // Make sure the correct item triggered it, otherwise we trigger recursively
-    // and get a stack overflow.
-    if( aEvent.GetEventObject() != m_ListOfConflicts )
-        return;
-
-    PopulateInstanceList();
-
     int row = m_ListOfConflicts->GetSelectedRow();
 
     if( row < 0 )
@@ -235,6 +241,19 @@ void DIALOG_RESCUE_EACH::OnConflictSelect( wxDataViewEvent& aEvent )
 }
 
 
+void DIALOG_RESCUE_EACH::OnConflictSelect( wxDataViewEvent& aEvent )
+{
+    // wxformbuilder connects this event to the _dialog_, not the data view.
+    // Make sure the correct item triggered it, otherwise we trigger recursively
+    // and get a stack overflow.
+    if( aEvent.GetEventObject() != m_ListOfConflicts )
+        return;
+
+    PopulateInstanceList();
+    displayItemsInConflict();
+}
+
+
 bool DIALOG_RESCUE_EACH::TransferDataFromWindow()
 {
     if( !wxDialog::TransferDataFromWindow() )
diff --git a/eeschema/dialogs/dialog_rescue_each_base.cpp b/eeschema/dialogs/dialog_rescue_each_base.cpp
index 336523c80..dfc87bf5a 100644
--- a/eeschema/dialogs/dialog_rescue_each_base.cpp
+++ b/eeschema/dialogs/dialog_rescue_each_base.cpp
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 30 2017)
+// C++ code generated with wxFormBuilder (version Jul 11 2018)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO *NOT* EDIT THIS FILE!
@@ -53,16 +53,12 @@ DIALOG_RESCUE_EACH_BASE::DIALOG_RESCUE_EACH_BASE( wxWindow* parent, wxWindowID i
 	bSizerLeftPreview->Add( m_previewOldLabel, 0, 0, 5 );
 	
 	m_previewOldPanel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-	wxBoxSizer* bSizerOldPanel;
-	bSizerOldPanel = new wxBoxSizer( wxVERTICAL );
+	m_SizerOldPanel = new wxBoxSizer( wxVERTICAL );
 	
-	m_previewOldWidget = new SYMBOL_PREVIEW_WIDGET( m_previewOldPanel, Kiway() );
-	bSizerOldPanel->Add( m_previewOldWidget, 1, wxEXPAND, 5 );
 	
-	
-	m_previewOldPanel->SetSizer( bSizerOldPanel );
+	m_previewOldPanel->SetSizer( m_SizerOldPanel );
 	m_previewOldPanel->Layout();
-	bSizerOldPanel->Fit( m_previewOldPanel );
+	m_SizerOldPanel->Fit( m_previewOldPanel );
 	bSizerLeftPreview->Add( m_previewOldPanel, 1, wxEXPAND | wxALL, 5 );
 	
 	
@@ -78,16 +74,12 @@ DIALOG_RESCUE_EACH_BASE::DIALOG_RESCUE_EACH_BASE( wxWindow* parent, wxWindowID i
 	bSizerRightPreview->Add( m_previewNewLabel, 0, 0, 5 );
 	
 	m_previewNewPanel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-	wxBoxSizer* bSizerNewPanel;
-	bSizerNewPanel = new wxBoxSizer( wxVERTICAL );
-	
-	m_previewNewWidget = new SYMBOL_PREVIEW_WIDGET( m_previewNewPanel, Kiway() );
-	bSizerNewPanel->Add( m_previewNewWidget, 1, wxEXPAND, 5 );
+	m_SizerNewPanel = new wxBoxSizer( wxVERTICAL );
 	
 	
-	m_previewNewPanel->SetSizer( bSizerNewPanel );
+	m_previewNewPanel->SetSizer( m_SizerNewPanel );
 	m_previewNewPanel->Layout();
-	bSizerNewPanel->Fit( m_previewNewPanel );
+	m_SizerNewPanel->Fit( m_previewNewPanel );
 	bSizerRightPreview->Add( m_previewNewPanel, 1, wxEXPAND | wxALL, 5 );
 	
 	
diff --git a/eeschema/dialogs/dialog_rescue_each_base.fbp b/eeschema/dialogs/dialog_rescue_each_base.fbp
index 8b032182d..086b3a75b 100644
--- a/eeschema/dialogs/dialog_rescue_each_base.fbp
+++ b/eeschema/dialogs/dialog_rescue_each_base.fbp
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 <wxFormBuilder_Project>
-    <FileVersion major="1" minor="13" />
+    <FileVersion major="1" minor="14" />
     <object class="Project" expanded="1">
         <property name="class_decoration"></property>
         <property name="code_generation">C++</property>
@@ -14,6 +14,7 @@
         <property name="file">dialog_rescue_each_base</property>
         <property name="first_id">1000</property>
         <property name="help_provider">none</property>
+        <property name="indent_with_spaces"></property>
         <property name="internationalize">1</property>
         <property name="name">dialog_rescue_each_base</property>
         <property name="namespace"></property>
@@ -54,13 +55,20 @@
             <property name="window_style"></property>
             <event name="OnActivate"></event>
             <event name="OnActivateApp"></event>
-            <event name="OnAuiFindManager"></event>
+            <event name="OnAuiPaneActivated"></event>
             <event name="OnAuiPaneButton"></event>
             <event name="OnAuiPaneClose"></event>
             <event name="OnAuiPaneMaximize"></event>
             <event name="OnAuiPaneRestore"></event>
             <event name="OnAuiRender"></event>
+            <event name="OnAux1DClick"></event>
+            <event name="OnAux1Down"></event>
+            <event name="OnAux1Up"></event>
+            <event name="OnAux2DClick"></event>
+            <event name="OnAux2Down"></event>
+            <event name="OnAux2Up"></event>
             <event name="OnChar"></event>
+            <event name="OnCharHook"></event>
             <event name="OnClose"></event>
             <event name="OnEnterWindow"></event>
             <event name="OnEraseBackground"></event>
@@ -75,17 +83,23 @@
             <event name="OnLeftDClick"></event>
             <event name="OnLeftDown"></event>
             <event name="OnLeftUp"></event>
+            <event name="OnMaximize"></event>
             <event name="OnMiddleDClick"></event>
             <event name="OnMiddleDown"></event>
             <event name="OnMiddleUp"></event>
             <event name="OnMotion"></event>
             <event name="OnMouseEvents"></event>
             <event name="OnMouseWheel"></event>
+            <event name="OnMove"></event>
+            <event name="OnMoveEnd"></event>
+            <event name="OnMoveStart"></event>
+            <event name="OnMoving"></event>
             <event name="OnPaint"></event>
             <event name="OnRightDClick"></event>
             <event name="OnRightDown"></event>
             <event name="OnRightUp"></event>
             <event name="OnSetFocus"></event>
+            <event name="OnShow"></event>
             <event name="OnSize">OnDialogResize</event>
             <event name="OnUpdateUI"></event>
             <object class="wxBoxSizer" expanded="1">
@@ -130,7 +144,7 @@
                         <property name="maximum_size"></property>
                         <property name="min_size"></property>
                         <property name="minimize_button">0</property>
-                        <property name="minimum_size">-1,50</property>
+                        <property name="minimum_size">-1,80</property>
                         <property name="moveable">1</property>
                         <property name="name">m_htmlPrompt</property>
                         <property name="pane_border">1</property>
@@ -149,7 +163,14 @@
                         <property name="window_extra_style"></property>
                         <property name="window_name"></property>
                         <property name="window_style"></property>
+                        <event name="OnAux1DClick"></event>
+                        <event name="OnAux1Down"></event>
+                        <event name="OnAux1Up"></event>
+                        <event name="OnAux2DClick"></event>
+                        <event name="OnAux2Down"></event>
+                        <event name="OnAux2Up"></event>
                         <event name="OnChar"></event>
+                        <event name="OnCharHook"></event>
                         <event name="OnEnterWindow"></event>
                         <event name="OnEraseBackground"></event>
                         <event name="OnHtmlCellClicked"></event>
@@ -210,6 +231,7 @@
                         <property name="hidden">0</property>
                         <property name="id">wxID_ANY</property>
                         <property name="label">Symbols to update:</property>
+                        <property name="markup">0</property>
                         <property name="max_size"></property>
                         <property name="maximize_button">0</property>
                         <property name="maximum_size"></property>
@@ -235,7 +257,14 @@
                         <property name="window_name"></property>
                         <property name="window_style"></property>
                         <property name="wrap">-1</property>
+                        <event name="OnAux1DClick"></event>
+                        <event name="OnAux1Down"></event>
+                        <event name="OnAux1Up"></event>
+                        <event name="OnAux2DClick"></event>
+                        <event name="OnAux2Down"></event>
+                        <event name="OnAux2Up"></event>
                         <event name="OnChar"></event>
+                        <event name="OnCharHook"></event>
                         <event name="OnEnterWindow"></event>
                         <event name="OnEraseBackground"></event>
                         <event name="OnKeyDown"></event>
@@ -285,7 +314,14 @@
                         <property name="window_extra_style"></property>
                         <property name="window_name"></property>
                         <property name="window_style"></property>
+                        <event name="OnAux1DClick"></event>
+                        <event name="OnAux1Down"></event>
+                        <event name="OnAux1Up"></event>
+                        <event name="OnAux2DClick"></event>
+                        <event name="OnAux2Down"></event>
+                        <event name="OnAux2Up"></event>
                         <event name="OnChar"></event>
+                        <event name="OnCharHook"></event>
                         <event name="OnDataViewListCtrlColumnHeaderClick"></event>
                         <event name="OnDataViewListCtrlColumnHeaderRightClick"></event>
                         <event name="OnDataViewListCtrlColumnReordered"></event>
@@ -361,6 +397,7 @@
                         <property name="hidden">0</property>
                         <property name="id">wxID_ANY</property>
                         <property name="label">Instances of this symbol:</property>
+                        <property name="markup">0</property>
                         <property name="max_size"></property>
                         <property name="maximize_button">0</property>
                         <property name="maximum_size"></property>
@@ -386,7 +423,14 @@
                         <property name="window_name"></property>
                         <property name="window_style"></property>
                         <property name="wrap">-1</property>
+                        <event name="OnAux1DClick"></event>
+                        <event name="OnAux1Down"></event>
+                        <event name="OnAux1Up"></event>
+                        <event name="OnAux2DClick"></event>
+                        <event name="OnAux2Down"></event>
+                        <event name="OnAux2Up"></event>
                         <event name="OnChar"></event>
+                        <event name="OnCharHook"></event>
                         <event name="OnEnterWindow"></event>
                         <event name="OnEraseBackground"></event>
                         <event name="OnKeyDown"></event>
@@ -436,7 +480,14 @@
                         <property name="window_extra_style"></property>
                         <property name="window_name"></property>
                         <property name="window_style"></property>
+                        <event name="OnAux1DClick"></event>
+                        <event name="OnAux1Down"></event>
+                        <event name="OnAux1Up"></event>
+                        <event name="OnAux2DClick"></event>
+                        <event name="OnAux2Down"></event>
+                        <event name="OnAux2Up"></event>
                         <event name="OnChar"></event>
+                        <event name="OnCharHook"></event>
                         <event name="OnDataViewListCtrlColumnHeaderClick"></event>
                         <event name="OnDataViewListCtrlColumnHeaderRightClick"></event>
                         <event name="OnDataViewListCtrlColumnReordered"></event>
@@ -530,6 +581,7 @@
                                         <property name="hidden">0</property>
                                         <property name="id">wxID_ANY</property>
                                         <property name="label">Cached Symbol:</property>
+                                        <property name="markup">0</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -555,7 +607,14 @@
                                         <property name="window_name"></property>
                                         <property name="window_style"></property>
                                         <property name="wrap">-1</property>
+                                        <event name="OnAux1DClick"></event>
+                                        <event name="OnAux1Down"></event>
+                                        <event name="OnAux1Up"></event>
+                                        <event name="OnAux2DClick"></event>
+                                        <event name="OnAux2Down"></event>
+                                        <event name="OnAux2Up"></event>
                                         <event name="OnChar"></event>
+                                        <event name="OnCharHook"></event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
                                         <event name="OnKeyDown"></event>
@@ -635,7 +694,14 @@
                                         <property name="window_extra_style"></property>
                                         <property name="window_name"></property>
                                         <property name="window_style">wxTAB_TRAVERSAL</property>
+                                        <event name="OnAux1DClick"></event>
+                                        <event name="OnAux1Down"></event>
+                                        <event name="OnAux1Up"></event>
+                                        <event name="OnAux2DClick"></event>
+                                        <event name="OnAux2Down"></event>
+                                        <event name="OnAux2Up"></event>
                                         <event name="OnChar"></event>
+                                        <event name="OnCharHook"></event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
                                         <event name="OnKeyDown"></event>
@@ -660,94 +726,9 @@
                                         <event name="OnUpdateUI"></event>
                                         <object class="wxBoxSizer" expanded="1">
                                             <property name="minimum_size"></property>
-                                            <property name="name">bSizerOldPanel</property>
+                                            <property name="name">m_SizerOldPanel</property>
                                             <property name="orient">wxVERTICAL</property>
-                                            <property name="permission">none</property>
-                                            <object class="sizeritem" expanded="1">
-                                                <property name="border">5</property>
-                                                <property name="flag">wxEXPAND</property>
-                                                <property name="proportion">1</property>
-                                                <object class="CustomControl" expanded="1">
-                                                    <property name="BottomDockable">1</property>
-                                                    <property name="LeftDockable">1</property>
-                                                    <property name="RightDockable">1</property>
-                                                    <property name="TopDockable">1</property>
-                                                    <property name="aui_layer"></property>
-                                                    <property name="aui_name"></property>
-                                                    <property name="aui_position"></property>
-                                                    <property name="aui_row"></property>
-                                                    <property name="best_size"></property>
-                                                    <property name="bg"></property>
-                                                    <property name="caption"></property>
-                                                    <property name="caption_visible">1</property>
-                                                    <property name="center_pane">0</property>
-                                                    <property name="class">SYMBOL_PREVIEW_WIDGET</property>
-                                                    <property name="close_button">1</property>
-                                                    <property name="construction">m_previewOldWidget = new SYMBOL_PREVIEW_WIDGET( m_previewOldPanel, Kiway() );</property>
-                                                    <property name="context_help"></property>
-                                                    <property name="context_menu">1</property>
-                                                    <property name="declaration"></property>
-                                                    <property name="default_pane">0</property>
-                                                    <property name="dock">Dock</property>
-                                                    <property name="dock_fixed">0</property>
-                                                    <property name="docking">Left</property>
-                                                    <property name="enabled">1</property>
-                                                    <property name="fg"></property>
-                                                    <property name="floatable">1</property>
-                                                    <property name="font"></property>
-                                                    <property name="gripper">0</property>
-                                                    <property name="hidden">0</property>
-                                                    <property name="id">wxID_ANY</property>
-                                                    <property name="include">#include &lt;symbol_preview_widget.h&gt;</property>
-                                                    <property name="max_size"></property>
-                                                    <property name="maximize_button">0</property>
-                                                    <property name="maximum_size"></property>
-                                                    <property name="min_size"></property>
-                                                    <property name="minimize_button">0</property>
-                                                    <property name="minimum_size"></property>
-                                                    <property name="moveable">1</property>
-                                                    <property name="name">m_previewOldWidget</property>
-                                                    <property name="pane_border">1</property>
-                                                    <property name="pane_position"></property>
-                                                    <property name="pane_size"></property>
-                                                    <property name="permission">protected</property>
-                                                    <property name="pin_button">1</property>
-                                                    <property name="pos"></property>
-                                                    <property name="resize">Resizable</property>
-                                                    <property name="settings"></property>
-                                                    <property name="show">1</property>
-                                                    <property name="size"></property>
-                                                    <property name="subclass">; forward_declare</property>
-                                                    <property name="toolbar_pane">0</property>
-                                                    <property name="tooltip"></property>
-                                                    <property name="window_extra_style"></property>
-                                                    <property name="window_name"></property>
-                                                    <property name="window_style"></property>
-                                                    <event name="OnChar"></event>
-                                                    <event name="OnEnterWindow"></event>
-                                                    <event name="OnEraseBackground"></event>
-                                                    <event name="OnKeyDown"></event>
-                                                    <event name="OnKeyUp"></event>
-                                                    <event name="OnKillFocus"></event>
-                                                    <event name="OnLeaveWindow"></event>
-                                                    <event name="OnLeftDClick"></event>
-                                                    <event name="OnLeftDown"></event>
-                                                    <event name="OnLeftUp"></event>
-                                                    <event name="OnMiddleDClick"></event>
-                                                    <event name="OnMiddleDown"></event>
-                                                    <event name="OnMiddleUp"></event>
-                                                    <event name="OnMotion"></event>
-                                                    <event name="OnMouseEvents"></event>
-                                                    <event name="OnMouseWheel"></event>
-                                                    <event name="OnPaint"></event>
-                                                    <event name="OnRightDClick"></event>
-                                                    <event name="OnRightDown"></event>
-                                                    <event name="OnRightUp"></event>
-                                                    <event name="OnSetFocus"></event>
-                                                    <event name="OnSize"></event>
-                                                    <event name="OnUpdateUI"></event>
-                                                </object>
-                                            </object>
+                                            <property name="permission">protected</property>
                                         </object>
                                     </object>
                                 </object>
@@ -795,6 +776,7 @@
                                         <property name="hidden">0</property>
                                         <property name="id">wxID_ANY</property>
                                         <property name="label">Library Symbol:</property>
+                                        <property name="markup">0</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -820,7 +802,14 @@
                                         <property name="window_name"></property>
                                         <property name="window_style"></property>
                                         <property name="wrap">-1</property>
+                                        <event name="OnAux1DClick"></event>
+                                        <event name="OnAux1Down"></event>
+                                        <event name="OnAux1Up"></event>
+                                        <event name="OnAux2DClick"></event>
+                                        <event name="OnAux2Down"></event>
+                                        <event name="OnAux2Up"></event>
                                         <event name="OnChar"></event>
+                                        <event name="OnCharHook"></event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
                                         <event name="OnKeyDown"></event>
@@ -900,7 +889,14 @@
                                         <property name="window_extra_style"></property>
                                         <property name="window_name"></property>
                                         <property name="window_style">wxTAB_TRAVERSAL</property>
+                                        <event name="OnAux1DClick"></event>
+                                        <event name="OnAux1Down"></event>
+                                        <event name="OnAux1Up"></event>
+                                        <event name="OnAux2DClick"></event>
+                                        <event name="OnAux2Down"></event>
+                                        <event name="OnAux2Up"></event>
                                         <event name="OnChar"></event>
+                                        <event name="OnCharHook"></event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
                                         <event name="OnKeyDown"></event>
@@ -925,94 +921,9 @@
                                         <event name="OnUpdateUI"></event>
                                         <object class="wxBoxSizer" expanded="1">
                                             <property name="minimum_size"></property>
-                                            <property name="name">bSizerNewPanel</property>
+                                            <property name="name">m_SizerNewPanel</property>
                                             <property name="orient">wxVERTICAL</property>
-                                            <property name="permission">none</property>
-                                            <object class="sizeritem" expanded="1">
-                                                <property name="border">5</property>
-                                                <property name="flag">wxEXPAND</property>
-                                                <property name="proportion">1</property>
-                                                <object class="CustomControl" expanded="1">
-                                                    <property name="BottomDockable">1</property>
-                                                    <property name="LeftDockable">1</property>
-                                                    <property name="RightDockable">1</property>
-                                                    <property name="TopDockable">1</property>
-                                                    <property name="aui_layer"></property>
-                                                    <property name="aui_name"></property>
-                                                    <property name="aui_position"></property>
-                                                    <property name="aui_row"></property>
-                                                    <property name="best_size"></property>
-                                                    <property name="bg"></property>
-                                                    <property name="caption"></property>
-                                                    <property name="caption_visible">1</property>
-                                                    <property name="center_pane">0</property>
-                                                    <property name="class">SYMBOL_PREVIEW_WIDGET</property>
-                                                    <property name="close_button">1</property>
-                                                    <property name="construction">m_previewNewWidget = new SYMBOL_PREVIEW_WIDGET( m_previewNewPanel, Kiway() );</property>
-                                                    <property name="context_help"></property>
-                                                    <property name="context_menu">1</property>
-                                                    <property name="declaration"></property>
-                                                    <property name="default_pane">0</property>
-                                                    <property name="dock">Dock</property>
-                                                    <property name="dock_fixed">0</property>
-                                                    <property name="docking">Left</property>
-                                                    <property name="enabled">1</property>
-                                                    <property name="fg"></property>
-                                                    <property name="floatable">1</property>
-                                                    <property name="font"></property>
-                                                    <property name="gripper">0</property>
-                                                    <property name="hidden">0</property>
-                                                    <property name="id">wxID_ANY</property>
-                                                    <property name="include">#include &lt;symbol_preview_widget.h&gt;</property>
-                                                    <property name="max_size"></property>
-                                                    <property name="maximize_button">0</property>
-                                                    <property name="maximum_size"></property>
-                                                    <property name="min_size"></property>
-                                                    <property name="minimize_button">0</property>
-                                                    <property name="minimum_size"></property>
-                                                    <property name="moveable">1</property>
-                                                    <property name="name">m_previewNewWidget</property>
-                                                    <property name="pane_border">1</property>
-                                                    <property name="pane_position"></property>
-                                                    <property name="pane_size"></property>
-                                                    <property name="permission">protected</property>
-                                                    <property name="pin_button">1</property>
-                                                    <property name="pos"></property>
-                                                    <property name="resize">Resizable</property>
-                                                    <property name="settings"></property>
-                                                    <property name="show">1</property>
-                                                    <property name="size"></property>
-                                                    <property name="subclass">; forward_declare</property>
-                                                    <property name="toolbar_pane">0</property>
-                                                    <property name="tooltip"></property>
-                                                    <property name="window_extra_style"></property>
-                                                    <property name="window_name"></property>
-                                                    <property name="window_style"></property>
-                                                    <event name="OnChar"></event>
-                                                    <event name="OnEnterWindow"></event>
-                                                    <event name="OnEraseBackground"></event>
-                                                    <event name="OnKeyDown"></event>
-                                                    <event name="OnKeyUp"></event>
-                                                    <event name="OnKillFocus"></event>
-                                                    <event name="OnLeaveWindow"></event>
-                                                    <event name="OnLeftDClick"></event>
-                                                    <event name="OnLeftDown"></event>
-                                                    <event name="OnLeftUp"></event>
-                                                    <event name="OnMiddleDClick"></event>
-                                                    <event name="OnMiddleDown"></event>
-                                                    <event name="OnMiddleUp"></event>
-                                                    <event name="OnMotion"></event>
-                                                    <event name="OnMouseEvents"></event>
-                                                    <event name="OnMouseWheel"></event>
-                                                    <event name="OnPaint"></event>
-                                                    <event name="OnRightDClick"></event>
-                                                    <event name="OnRightDown"></event>
-                                                    <event name="OnRightUp"></event>
-                                                    <event name="OnSetFocus"></event>
-                                                    <event name="OnSize"></event>
-                                                    <event name="OnUpdateUI"></event>
-                                                </object>
-                                            </object>
+                                            <property name="permission">protected</property>
                                         </object>
                                     </object>
                                 </object>
@@ -1044,25 +955,31 @@
                                 <property name="aui_row"></property>
                                 <property name="best_size"></property>
                                 <property name="bg"></property>
+                                <property name="bitmap"></property>
                                 <property name="caption"></property>
                                 <property name="caption_visible">1</property>
                                 <property name="center_pane">0</property>
                                 <property name="close_button">1</property>
                                 <property name="context_help"></property>
                                 <property name="context_menu">1</property>
+                                <property name="current"></property>
                                 <property name="default">0</property>
                                 <property name="default_pane">0</property>
+                                <property name="disabled"></property>
                                 <property name="dock">Dock</property>
                                 <property name="dock_fixed">0</property>
                                 <property name="docking">Left</property>
                                 <property name="enabled">1</property>
                                 <property name="fg"></property>
                                 <property name="floatable">1</property>
+                                <property name="focus"></property>
                                 <property name="font"></property>
                                 <property name="gripper">0</property>
                                 <property name="hidden">0</property>
                                 <property name="id">wxID_ANY</property>
                                 <property name="label">Never Show Again</property>
+                                <property name="margins"></property>
+                                <property name="markup">0</property>
                                 <property name="max_size"></property>
                                 <property name="maximize_button">0</property>
                                 <property name="maximum_size"></property>
@@ -1077,6 +994,8 @@
                                 <property name="permission">protected</property>
                                 <property name="pin_button">1</property>
                                 <property name="pos"></property>
+                                <property name="position"></property>
+                                <property name="pressed"></property>
                                 <property name="resize">Resizable</property>
                                 <property name="show">1</property>
                                 <property name="size"></property>
@@ -1091,8 +1010,15 @@
                                 <property name="window_extra_style"></property>
                                 <property name="window_name"></property>
                                 <property name="window_style"></property>
+                                <event name="OnAux1DClick"></event>
+                                <event name="OnAux1Down"></event>
+                                <event name="OnAux1Up"></event>
+                                <event name="OnAux2DClick"></event>
+                                <event name="OnAux2Down"></event>
+                                <event name="OnAux2Up"></event>
                                 <event name="OnButtonClick">OnNeverShowClick</event>
                                 <event name="OnChar"></event>
+                                <event name="OnCharHook"></event>
                                 <event name="OnEnterWindow"></event>
                                 <event name="OnEraseBackground"></event>
                                 <event name="OnKeyDown"></event>
diff --git a/eeschema/dialogs/dialog_rescue_each_base.h b/eeschema/dialogs/dialog_rescue_each_base.h
index f6bc920b9..47f61ce27 100644
--- a/eeschema/dialogs/dialog_rescue_each_base.h
+++ b/eeschema/dialogs/dialog_rescue_each_base.h
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 30 2017)
+// C++ code generated with wxFormBuilder (version Jul 11 2018)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO *NOT* EDIT THIS FILE!
@@ -20,9 +20,11 @@
 #include <wx/string.h>
 #include <wx/stattext.h>
 #include <wx/dataview.h>
-#include <symbol_preview_widget.h>
 #include <wx/sizer.h>
 #include <wx/panel.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
 #include <wx/button.h>
 #include <wx/dialog.h>
 
@@ -44,10 +46,10 @@ class DIALOG_RESCUE_EACH_BASE : public DIALOG_SHIM
 		wxDataViewListCtrl* m_ListOfInstances;
 		wxStaticText* m_previewOldLabel;
 		wxPanel* m_previewOldPanel;
-		SYMBOL_PREVIEW_WIDGET* m_previewOldWidget; 
+		wxBoxSizer* m_SizerOldPanel;
 		wxStaticText* m_previewNewLabel;
 		wxPanel* m_previewNewPanel;
-		SYMBOL_PREVIEW_WIDGET* m_previewNewWidget; 
+		wxBoxSizer* m_SizerNewPanel;
 		wxButton* m_btnNeverShowAgain;
 		wxStdDialogButtonSizer* m_stdButtons;
 		wxButton* m_stdButtonsOK;
diff --git a/eeschema/project_rescue.cpp b/eeschema/project_rescue.cpp
index dce3a40a2..32fb10e85 100644
--- a/eeschema/project_rescue.cpp
+++ b/eeschema/project_rescue.cpp
@@ -338,7 +338,7 @@ RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE(
     LIB_PART* aLibCandidate ) : RESCUE_CANDIDATE()
 {
     m_requested_id = aRequestedId;
-    m_requested_name = aRequestedId.GetLibItemName();
+    m_requested_name = aRequestedId.Format();
     m_new_id = aNewId;
     m_lib_candidate = aLibCandidate;
     m_cache_candidate = aCacheCandidate;
diff --git a/eeschema/sch_base_frame.cpp b/eeschema/sch_base_frame.cpp
index 3a71df32b..86a63fbf4 100644
--- a/eeschema/sch_base_frame.cpp
+++ b/eeschema/sch_base_frame.cpp
@@ -496,7 +496,7 @@ void SCH_BASE_FRAME::CenterScreen( const wxPoint& aCenterPoint, bool aWarpPointe
 
 void SCH_BASE_FRAME::HardRedraw()
 {
-    GetCanvas()->DisplaySheet( GetScreen() );
+    // Currently: just refresh the screen
     GetCanvas()->Refresh();
 }
 
@@ -598,15 +598,15 @@ bool SCH_BASE_FRAME::HandleBlockBegin( wxDC* aDC, EDA_KEY aKey, const wxPoint& a
 
 void SCH_BASE_FRAME::createCanvas()
 {
-    EDA_DRAW_PANEL_GAL::GAL_TYPE canvasType = LoadCanvasTypeSetting();
+    m_canvasType = LoadCanvasTypeSetting();
 
     // Allows only a CAIRO or OPENGL canvas:
-    if( canvasType != EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL &&
-        canvasType != EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO )
-        canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL;
+    if( m_canvasType != EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL &&
+        m_canvasType != EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO )
+        m_canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL;
 
     m_canvas = new SCH_DRAW_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), m_FrameSize,
-                                   GetGalDisplayOptions(), canvasType );
+                                   GetGalDisplayOptions(), m_canvasType );
 
     m_useSingleCanvasPane = true;
 
diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp
index 5dfd7e4c8..875f8d00a 100644
--- a/eeschema/sch_painter.cpp
+++ b/eeschema/sch_painter.cpp
@@ -424,8 +424,8 @@ void SCH_PAINTER::draw( LIB_POLYLINE *aLine, int aLayer )
     for( auto p : aLine->GetPolyPoints() )
         vtx.push_back ( mapCoords( p ) );
 
-    if( aLine->GetFillMode() == FILLED_WITH_BG_BODYCOLOR || aLine->GetFillMode() == FILLED_SHAPE )
-        vtx.push_back( vtx[0] );
+//    if( aLine->GetFillMode() == FILLED_WITH_BG_BODYCOLOR || aLine->GetFillMode() == FILLED_SHAPE )
+//        vtx.push_back( vtx[0] );
 
     m_gal->DrawPolygon( vtx );
 }
diff --git a/eeschema/widgets/symbol_preview_widget.cpp b/eeschema/widgets/symbol_preview_widget.cpp
index 7364a3d54..43741ef88 100644
--- a/eeschema/widgets/symbol_preview_widget.cpp
+++ b/eeschema/widgets/symbol_preview_widget.cpp
@@ -29,7 +29,8 @@
 #include <pgm_base.h>
 #include <sch_painter.h>
 
-SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway ) :
+SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway,
+                                              EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType ) :
     wxPanel( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ),
     m_kiway( aKiway ),
     m_preview( nullptr ),
@@ -40,8 +41,15 @@ SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway )
     wxConfigBase* eeschemaConfig = GetNewConfig( wxString::FromUTF8( "eeschema" ) );
     m_galDisplayOptions.ReadConfig( eeschemaConfig, GAL_DISPLAY_OPTIONS_KEY );
 
+    EDA_DRAW_PANEL_GAL::GAL_TYPE canvasType = aCanvasType;
+
+    // Allows only a CAIRO or OPENGL canvas:
+    if( canvasType != EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL &&
+        canvasType != EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO )
+        canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL;
+
     m_preview = new SCH_PREVIEW_PANEL( aParent, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ),
-                                       m_galDisplayOptions, EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL );
+                                       m_galDisplayOptions, canvasType );
     m_preview->SetStealsFocus( false );
 
     SetBackgroundColour( *wxWHITE );
@@ -117,15 +125,20 @@ void SYMBOL_PREVIEW_WIDGET::DisplaySymbol( const LIB_ID& aSymbolID, int aUnit )
         view->Add( alias );
         m_previewItem = alias;
 
-        // Zoom to fit
+        // Calculate the draw scale to fit the drawing area
+
+        // First, get the symbole size, in internal units
         BOX2I     bBox = alias->GetPart()->GetUnitBoundingBox( aUnit, 0 );
-        VECTOR2D  clientSize = m_preview->GetClientSize();
+        // Now calculate the drawing area size, in internal units, for a scaling factor = 1.0
+        view->SetScale( 1.0 );
+        VECTOR2D  clientSize = view->ToWorld( m_preview->GetClientSize(), false );
         double    scale = std::min( fabs( clientSize.x / bBox.GetWidth() ),
                                     fabs( clientSize.y / bBox.GetHeight() ) );
 
         // Above calculation will yield an exact fit; add a bit of whitespace around symbol
         scale /= 1.2;
 
+        // Now fix the best scale
         view->SetScale( scale );
         view->SetCenter( bBox.Centre() );
     }
@@ -157,15 +170,19 @@ void SYMBOL_PREVIEW_WIDGET::DisplayPart( LIB_PART* aPart, int aUnit )
         view->Add( aPart );
         m_previewItem = aPart;
 
-        // Zoom to fit
+        // Calculate the draw scale to fit the drawing area
+
+        // First, get the symbole size, in internal units
         BOX2I     bBox = aPart->GetUnitBoundingBox( aUnit, 0 );
-        VECTOR2D  clientSize = m_preview->GetClientSize();
+        // Now calculate the drawing area size, in internal units, for a scaling factor = 1.0
+        view->SetScale( 1.0 );
+        VECTOR2D  clientSize = view->ToWorld( m_preview->GetClientSize(), false );
         double    scale = std::min( fabs( clientSize.x / bBox.GetWidth() ),
                                     fabs( clientSize.y / bBox.GetHeight() ) );
-
         // Above calculation will yield an exact fit; add a bit of whitespace around symbol
         scale /= 1.2;
 
+        // Now fix the best scale
         view->SetScale( scale );
         view->SetCenter( bBox.Centre() );
     }
diff --git a/eeschema/widgets/symbol_preview_widget.h b/eeschema/widgets/symbol_preview_widget.h
index b0944f476..c817b1fe4 100644
--- a/eeschema/widgets/symbol_preview_widget.h
+++ b/eeschema/widgets/symbol_preview_widget.h
@@ -23,13 +23,13 @@
 #include <wx/panel.h>
 #include <kiway.h>
 #include <gal/gal_display_options.h>
+#include <class_draw_panel_gal.h>
 
 
 class EDA_ITEM;
 class LIB_ID;
 class LIB_ALIAS;
 class LIB_PART;
-class EDA_DRAW_PANEL_GAL;
 class wxStaticText;
 class wxSizer;
 
@@ -43,8 +43,10 @@ public:
      *
      * @param aParent - parent window
      * @param aKiway - an active Kiway instance
+     * @param aCanvasType = the type of canvas (GAL_TYPE_OPENGL or GAL_TYPE_CAIRO only)
      */
-    SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway );
+    SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway,
+                           EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType );
 
     ~SYMBOL_PREVIEW_WIDGET() override;
 
-- 
2.17.0.windows.1

From e891c9ecd7795dc3be5449ac7b7d7135f6c1e6b4 Mon Sep 17 00:00:00 2001
From: jean-pierre charras <jp.charras@xxxxxxxxxx>
Date: Sat, 15 Sep 2018 12:55:53 +0200
Subject: [PATCH 2/3] Eeschema, Cairo backend: fix a minor but annoying render
 issue.

---
 common/draw_panel_gal.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/common/draw_panel_gal.cpp b/common/draw_panel_gal.cpp
index adb45b0db..543769151 100644
--- a/common/draw_panel_gal.cpp
+++ b/common/draw_panel_gal.cpp
@@ -171,10 +171,10 @@ void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
         m_gal->BeginDrawing();
         m_gal->SetClearColor( settings->GetBackgroundColor() );
         m_gal->SetCursorColor( settings->GetLayerColor( LAYER_CURSOR ) );
-        m_gal->ClearScreen( );
 
         if( m_view->IsDirty() )
         {
+            m_gal->ClearScreen();
             m_view->ClearTargets();
 
             // Grid has to be redrawn only when the NONCACHED target is redrawn
-- 
2.17.0.windows.1

From 6bf4c25d7425ae3c4443fb1e89bc397ee2f15a1a Mon Sep 17 00:00:00 2001
From: jean-pierre charras <jp.charras@xxxxxxxxxx>
Date: Sat, 15 Sep 2018 16:01:35 +0200
Subject: [PATCH 3/3] Eeschema: fix a crash at startup in OpenGL engine, when
 Eeschema is started from Kicad.

Can be platform dependent. The crash was due to a wxPaintEvent fired before the GAL engine is fully initialized.
---
 eeschema/sch_draw_panel.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/eeschema/sch_draw_panel.cpp b/eeschema/sch_draw_panel.cpp
index 95d593664..c717c02f7 100644
--- a/eeschema/sch_draw_panel.cpp
+++ b/eeschema/sch_draw_panel.cpp
@@ -50,9 +50,9 @@ BEGIN_EVENT_TABLE( SCH_DRAW_PANEL, wxScrolledCanvas )
 //    EVT_MAGNIFY( EDA_DRAW_PANEL::OnMagnify )
 #endif
 //    EVT_MOUSE_EVENTS( EDA_DRAW_PANEL::OnMouseEvent )
-    EVT_CHAR( SCH_DRAW_PANEL::OnKeyEvent )
-    EVT_CHAR_HOOK( SCH_DRAW_PANEL::OnCharHook )
-    EVT_PAINT( SCH_DRAW_PANEL::onPaint )
+      EVT_CHAR( SCH_DRAW_PANEL::OnKeyEvent )
+      EVT_CHAR_HOOK( SCH_DRAW_PANEL::OnCharHook )
+      EVT_PAINT( SCH_DRAW_PANEL::onPaint )
 //    EVT_ERASE_BACKGROUND( EDA_DRAW_PANEL::OnEraseBackground )
 //    EVT_SCROLLWIN( EDA_DRAW_PANEL::OnScroll )
 //    EVT_ACTIVATE( EDA_DRAW_PANEL::OnActivate )
@@ -675,6 +675,11 @@ void SCH_DRAW_PANEL::OnKeyEvent( wxKeyEvent& event )
 
 void SCH_DRAW_PANEL::onPaint( wxPaintEvent& aEvent )
 {
+    if( !m_gal->IsInitialized() )
+        // The first wxPaintEvent can be fired at startup before the GAL engine is fully initialized
+        // (depending on platforms). Do nothing in this case
+        return;
+
     if( m_painter )
         static_cast<KIGFX::SCH_PAINTER*>(m_painter.get())->GetSettings()->ImportLegacyColors( nullptr );
 
-- 
2.17.0.windows.1


Follow ups

References