KiCad PCB EDA Suite
EDA_DRAW_PANEL_GAL Class Reference

#include <class_draw_panel_gal.h>

Inheritance diagram for EDA_DRAW_PANEL_GAL:
GERBVIEW_DRAW_PANEL_GAL PCB_DRAW_PANEL_GAL PL_DRAW_PANEL_GAL SCH_DRAW_PANEL SCH_PREVIEW_PANEL FOOTPRINT_PREVIEW_PANEL

Public Types

enum  GAL_TYPE {
  GAL_TYPE_UNKNOWN = -1, GAL_TYPE_NONE = 0, GAL_TYPE_OPENGL, GAL_TYPE_CAIRO,
  GAL_TYPE_LAST
}
 

Public Member Functions

 EDA_DRAW_PANEL_GAL (wxWindow *aParentWindow, wxWindowID aWindowId, const wxPoint &aPosition, const wxSize &aSize, KIGFX::GAL_DISPLAY_OPTIONS &aOptions, GAL_TYPE aGalType=GAL_TYPE_OPENGL)
 Create a drawing panel that is contained inside aParentWindow. More...
 
 ~EDA_DRAW_PANEL_GAL ()
 
virtual void SetFocus () override
 
virtual bool SwitchBackend (GAL_TYPE aGalType)
 Switch method of rendering graphics. More...
 
GAL_TYPE GetBackend () const
 Return the type of backend currently used by GAL canvas. More...
 
KIGFX::GALGetGAL () const
 Return a pointer to the GAL instance used in the panel. More...
 
virtual KIGFX::VIEWGetView () const
 Return a pointer to the #VIEW instance used in the panel. More...
 
KIGFX::VIEW_CONTROLSGetViewControls () const
 Return a pointer to the #VIEW_CONTROLS instance used in the panel. More...
 
virtual void Refresh (bool aEraseBackground=true, const wxRect *aRect=NULL) override
 Update the board display after modifying it by a python script (note: it is automatically called by action plugins, after running the plugin, so call this function is usually not needed inside action plugins. More...
 
void ForceRefresh ()
 Force a redraw. More...
 
void SetEventDispatcher (TOOL_DISPATCHER *aEventDispatcher)
 Set a dispatcher that processes events and forwards them to tools. More...
 
void StartDrawing ()
 Begin drawing if it was stopped previously. More...
 
void StopDrawing ()
 Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called. More...
 
virtual void SetHighContrastLayer (int aLayer)
 Take care of display settings for the given layer to be displayed in high contrast mode. More...
 
virtual void SetTopLayer (int aLayer)
 Move the selected layer to the top, so it is displayed above all others. More...
 
virtual void GetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
 
EDA_DRAW_FRAMEGetParentEDAFrame () const
 Returns parent EDA_DRAW_FRAME, if available or NULL otherwise. More...
 
bool IsDialogPreview () const
 
virtual void OnShow ()
 Called when the window is shown for the first time. More...
 
void SetStealsFocus (bool aStealsFocus)
 Set whether focus is taken on certain events (mouseover, keys, etc). More...
 
void SetCurrentCursor (KICURSOR cursor)
 Set the current cursor shape for this panel. More...
 
virtual BOX2I GetDefaultViewBBox () const
 Return the bounding box of the view that should be used if model is not valid. More...
 
void OnEvent (wxEvent &aEvent)
 Used to forward events to the canvas from popups, etc. More...
 
void DoRePaint ()
 Repaint the canvas, and fix scrollbar cursors. More...
 
std::shared_ptr< KIGFX::VIEW_OVERLAYDebugOverlay ()
 Create an overlay for rendering debug graphics. More...
 
void ClearDebugOverlay ()
 Clear the contents of the debug overlay and removes it from the VIEW. More...
 

Static Public Attributes

static constexpr GAL_TYPE GAL_FALLBACK = GAL_TYPE_CAIRO
 

Protected Member Functions

virtual void onPaint (wxPaintEvent &WXUNUSED(aEvent))
 
void onSize (wxSizeEvent &aEvent)
 
void onEnter (wxMouseEvent &aEvent)
 
void onLostFocus (wxFocusEvent &aEvent)
 
void onRefreshTimer (wxTimerEvent &aEvent)
 
void onShowTimer (wxTimerEvent &aEvent)
 
void onSetCursor (wxSetCursorEvent &event)
 

Protected Attributes

wxCursor m_currentCursor
 Current mouse cursor shape id. More...
 
KICURSOR m_currentKiCursor
 
wxWindow * m_parent
 Pointer to the parent window. More...
 
EDA_DRAW_FRAMEm_edaFrame
 Parent EDA_DRAW_FRAME (if available) More...
 
wxLongLong m_lastRefresh
 Last timestamp when the panel was refreshed. More...
 
bool m_pendingRefresh
 Is there a redraw event requested? More...
 
wxTimer m_refreshTimer
 Timer to prevent too-frequent refreshing. More...
 
bool m_drawing
 True if GAL is currently redrawing the view. More...
 
bool m_drawingEnabled
 Flag that determines if VIEW may use GAL for redrawing the screen. More...
 
wxTimer m_onShowTimer
 Timer used to execute OnShow() when the window finally appears on the screen. More...
 
KIGFX::GALm_gal
 Interface for drawing objects on a 2D-surface. More...
 
KIGFX::VIEWm_view
 Stores view settings (scale, center, etc.) and items to be drawn. More...
 
std::unique_ptr< KIGFX::PAINTERm_painter
 Contains information about how to draw items using GAL. More...
 
KIGFX::WX_VIEW_CONTROLSm_viewControls
 Control for VIEW (moving, zooming, etc.) More...
 
GAL_TYPE m_backend
 Currently used GAL. More...
 
KIGFX::GAL_DISPLAY_OPTIONSm_options
 
TOOL_DISPATCHERm_eventDispatcher
 Processes and forwards events to tools. More...
 
bool m_lostFocus
 Flag to indicate that focus should be regained on the next mouse event. More...
 
bool m_stealsFocus
 Flag to indicate whether the panel should take focus at certain times (when moused over, and on various mouse/key events) More...
 
std::shared_ptr< KIGFX::VIEW_OVERLAYm_debugOverlay
 Optional overlay for drawing transient debug objects. More...
 

Static Protected Attributes

static const int MinRefreshPeriod = 17
 60 FPS. More...
 

Detailed Description

Definition at line 56 of file class_draw_panel_gal.h.

Member Enumeration Documentation

◆ GAL_TYPE

Enumerator
GAL_TYPE_UNKNOWN 

not specified: a GAL engine must be set by the client

GAL_TYPE_NONE 

GAL not used (the legacy wxDC engine is used)

GAL_TYPE_OPENGL 

OpenGL implementation.

GAL_TYPE_CAIRO 

Cairo implementation.

GAL_TYPE_LAST 

Sentinel, do not use as a parameter.

Definition at line 59 of file class_draw_panel_gal.h.

59  {
60  GAL_TYPE_UNKNOWN = -1,
61  GAL_TYPE_NONE = 0,
65  };
Sentinel, do not use as a parameter.
not specified: a GAL engine must be set by the client
GAL not used (the legacy wxDC engine is used)

Constructor & Destructor Documentation

◆ EDA_DRAW_PANEL_GAL()

EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL ( wxWindow *  aParentWindow,
wxWindowID  aWindowId,
const wxPoint &  aPosition,
const wxSize &  aSize,
KIGFX::GAL_DISPLAY_OPTIONS aOptions,
GAL_TYPE  aGalType = GAL_TYPE_OPENGL 
)

Create a drawing panel that is contained inside aParentWindow.

If aParentWindow is not an EDA frame, a search through all the parents of the parent window will be done to find the frame.

Parameters
aParentWindowis the window immediately containing this panel

Definition at line 54 of file draw_panel_gal.cpp.

58  : wxScrolledCanvas( aParentWindow, aWindowId, aPosition, aSize ),
59  m_edaFrame( nullptr ),
60  m_gal( nullptr ),
61  m_view( nullptr ),
62  m_painter( nullptr ),
63  m_viewControls( nullptr ),
65  m_options( aOptions ),
66  m_eventDispatcher( nullptr ),
67  m_lostFocus( false ),
68  m_stealsFocus( true )
69 {
70  m_parent = aParentWindow;
73 
74  SetLayoutDirection( wxLayout_LeftToRight );
75 
76  m_edaFrame = dynamic_cast<EDA_DRAW_FRAME*>( m_parent );
77 
78  // If we're in a dialog, we have to go looking for our parent frame
79  if( !m_edaFrame )
80  {
81  wxWindow* ancestor = aParentWindow->GetParent();
82 
83  while( ancestor && !dynamic_cast<EDA_DRAW_FRAME*>( ancestor ) )
84  ancestor = ancestor->GetParent();
85 
86  if( ancestor )
87  m_edaFrame = dynamic_cast<EDA_DRAW_FRAME*>( ancestor );
88  }
89 
90  SwitchBackend( aGalType );
91  SetBackgroundStyle( wxBG_STYLE_CUSTOM );
92 
93  ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
94  EnableScrolling( false, false ); // otherwise Zoom Auto disables GAL canvas
95 
96  Connect( wxEVT_SIZE, wxSizeEventHandler( EDA_DRAW_PANEL_GAL::onSize ), NULL, this );
97  Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( EDA_DRAW_PANEL_GAL::onEnter ), NULL, this );
98  Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( EDA_DRAW_PANEL_GAL::onLostFocus ), NULL, this );
99  Connect( wxEVT_SET_CURSOR, wxSetCursorEventHandler( EDA_DRAW_PANEL_GAL::onSetCursor ), NULL, this );
100 
101  const wxEventType events[] =
102  {
103  // Binding both EVT_CHAR and EVT_CHAR_HOOK ensures that all key events,
104  // especially special key like arrow keys, are handled by the GAL event dispatcher,
105  // and not sent to GUI without filtering, because they have a default action (scroll)
106  // that must not be called.
107  wxEVT_LEFT_UP, wxEVT_LEFT_DOWN, wxEVT_LEFT_DCLICK,
108  wxEVT_RIGHT_UP, wxEVT_RIGHT_DOWN, wxEVT_RIGHT_DCLICK,
109  wxEVT_MIDDLE_UP, wxEVT_MIDDLE_DOWN, wxEVT_MIDDLE_DCLICK,
110  wxEVT_MOTION, wxEVT_MOUSEWHEEL, wxEVT_CHAR, wxEVT_CHAR_HOOK,
111 #if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
112  wxEVT_MAGNIFY,
113 #endif
115  };
116 
117  for( wxEventType eventType : events )
118  Connect( eventType, wxEventHandler( EDA_DRAW_PANEL_GAL::OnEvent ), NULL, m_eventDispatcher );
119 
120  m_pendingRefresh = false;
121  m_drawing = false;
122  m_drawingEnabled = false;
123 
124  // Set up timer that prevents too frequent redraw commands
125  m_refreshTimer.SetOwner( this );
126  Connect( m_refreshTimer.GetId(), wxEVT_TIMER,
127  wxTimerEventHandler( EDA_DRAW_PANEL_GAL::onRefreshTimer ), NULL, this );
128 
129  // Set up timer to execute OnShow() method when the window appears on the screen
130  m_onShowTimer.SetOwner( this );
131  Connect( m_onShowTimer.GetId(), wxEVT_TIMER,
132  wxTimerEventHandler( EDA_DRAW_PANEL_GAL::onShowTimer ), NULL, this );
133  m_onShowTimer.Start( 10 );
134 }
bool m_pendingRefresh
Is there a redraw event requested?
wxTimer m_refreshTimer
Timer to prevent too-frequent refreshing.
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
KIGFX::WX_VIEW_CONTROLS * m_viewControls
Control for VIEW (moving, zooming, etc.)
GAL_TYPE m_backend
Currently used GAL.
static const wxEventType EVT_REFRESH_MOUSE
void OnEvent(wxEvent &aEvent)
Used to forward events to the canvas from popups, etc.
virtual bool SwitchBackend(GAL_TYPE aGalType)
Switch method of rendering graphics.
KIGFX::GAL_DISPLAY_OPTIONS & m_options
void onLostFocus(wxFocusEvent &aEvent)
void onShowTimer(wxTimerEvent &aEvent)
void SetCurrentCursor(KICURSOR cursor)
Set the current cursor shape for this panel.
void onEnter(wxMouseEvent &aEvent)
void onRefreshTimer(wxTimerEvent &aEvent)
bool m_drawing
True if GAL is currently redrawing the view.
wxWindow * m_parent
Pointer to the parent window.
#define NULL
GAL not used (the legacy wxDC engine is used)
std::unique_ptr< KIGFX::PAINTER > m_painter
Contains information about how to draw items using GAL.
bool m_lostFocus
Flag to indicate that focus should be regained on the next mouse event.
void onSetCursor(wxSetCursorEvent &event)
EDA_DRAW_FRAME * m_edaFrame
Parent EDA_DRAW_FRAME (if available)
void onSize(wxSizeEvent &aEvent)
TOOL_DISPATCHER * m_eventDispatcher
Processes and forwards events to tools.
wxTimer m_onShowTimer
Timer used to execute OnShow() when the window finally appears on the screen.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
bool m_drawingEnabled
Flag that determines if VIEW may use GAL for redrawing the screen.
bool m_stealsFocus
Flag to indicate whether the panel should take focus at certain times (when moused over,...

References ARROW, DEFAULT, KIGFX::WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE, m_currentKiCursor, m_drawing, m_drawingEnabled, m_edaFrame, m_eventDispatcher, m_onShowTimer, m_parent, m_pendingRefresh, m_refreshTimer, NULL, onEnter(), OnEvent(), onLostFocus(), onRefreshTimer(), onSetCursor(), onShowTimer(), onSize(), SetCurrentCursor(), and SwitchBackend().

◆ ~EDA_DRAW_PANEL_GAL()

EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL ( )

Definition at line 137 of file draw_panel_gal.cpp.

138 {
139  StopDrawing();
140 
141  wxASSERT( !m_drawing );
142 
143  delete m_viewControls;
144  delete m_view;
145  delete m_gal;
146 }
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
KIGFX::WX_VIEW_CONTROLS * m_viewControls
Control for VIEW (moving, zooming, etc.)
bool m_drawing
True if GAL is currently redrawing the view.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
void StopDrawing()
Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.

References m_drawing, m_gal, m_view, m_viewControls, and StopDrawing().

Member Function Documentation

◆ ClearDebugOverlay()

void EDA_DRAW_PANEL_GAL::ClearDebugOverlay ( )

Clear the contents of the debug overlay and removes it from the VIEW.

Definition at line 617 of file draw_panel_gal.cpp.

618 {
619  if( m_debugOverlay )
620  {
621  m_view->Remove( m_debugOverlay.get() );
622  m_debugOverlay = nullptr;
623  }
624 }
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:357
std::shared_ptr< KIGFX::VIEW_OVERLAY > m_debugOverlay
Optional overlay for drawing transient debug objects.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.

References m_debugOverlay, m_view, and KIGFX::VIEW::Remove().

◆ DebugOverlay()

std::shared_ptr< KIGFX::VIEW_OVERLAY > EDA_DRAW_PANEL_GAL::DebugOverlay ( )

Create an overlay for rendering debug graphics.

Definition at line 605 of file draw_panel_gal.cpp.

606 {
607  if( !m_debugOverlay )
608  {
609  m_debugOverlay.reset( new KIGFX::VIEW_OVERLAY() );
610  m_view->Add( m_debugOverlay.get() );
611  }
612 
613  return m_debugOverlay;
614 }
std::shared_ptr< KIGFX::VIEW_OVERLAY > m_debugOverlay
Optional overlay for drawing transient debug objects.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:327

References KIGFX::VIEW::Add(), m_debugOverlay, and m_view.

◆ DoRePaint()

void EDA_DRAW_PANEL_GAL::DoRePaint ( )

Repaint the canvas, and fix scrollbar cursors.

Usually called by a OnPaint event.

Because it does not use a wxPaintDC, it can be called outside a wxPaintEvent.

Definition at line 162 of file draw_panel_gal.cpp.

163 {
164  // Repaint the canvas, and fix scrollbar cursors
165  // Usually called by a OnPaint event, but because it does not use a wxPaintDC,
166  // it can be called outside a wxPaintEvent.
167 
168  // Update current zoom settings if the canvas is managed by a EDA frame
169  // (i.e. not by a preview panel in a dialog)
170  if( !IsDialogPreview() && GetParentEDAFrame() && GetParentEDAFrame()->GetScreen() )
172 
174 
175  if( !m_gal->IsVisible() )
176  return;
177 
178  m_pendingRefresh = false;
179 
180  if( m_drawing )
181  return;
182 
183 #ifdef PROFILE
184  PROF_COUNTER totalRealTime;
185 #endif /* PROFILE */
186 
187  wxASSERT( m_painter );
188 
189  m_drawing = true;
190  KIGFX::RENDER_SETTINGS* settings = static_cast<KIGFX::RENDER_SETTINGS*>( m_painter->GetSettings() );
191 
192  try
193  {
194  m_view->UpdateItems();
195 
197 
200  {
201  m_view->MarkDirty();
202  }
203 
204  m_gal->SetClearColor( settings->GetBackgroundColor() );
205  m_gal->SetGridColor( settings->GetGridColor() );
206  m_gal->SetCursorColor( settings->GetCursorColor() );
207 
208  // TODO: find why ClearScreen() must be called here in opengl mode
209  // and only if m_view->IsDirty() in Cairo mode to avoid distaly artifacts
210  // when moving the mouse cursor
211  if( m_backend == GAL_TYPE_OPENGL )
212  m_gal->ClearScreen();
213 
214  if( m_view->IsDirty() )
215  {
216  if( m_backend != GAL_TYPE_OPENGL && // Already called in opengl
218  m_gal->ClearScreen();
219 
220  m_view->ClearTargets();
221 
222  // Grid has to be redrawn only when the NONCACHED target is redrawn
224  m_gal->DrawGrid();
225 
226  m_view->Redraw();
227  }
228 
230  }
231  catch( std::runtime_error& err )
232  {
233  if( GAL_FALLBACK != m_backend )
234  {
236 
238  _( "Could not use OpenGL, falling back to software rendering" ),
239  wxString( err.what() ) );
240  }
241  else
242  {
243  // We're well and truly banjaxed if we get here without a fallback.
244  DisplayInfoMessage( m_parent, _( "Could not use OpenGL" ), wxString( err.what() ) );
245  }
246  }
247 
248 #ifdef PROFILE
249  totalRealTime.Stop();
250  wxLogTrace( "GAL_PROFILE", "EDA_DRAW_PANEL_GAL::DoRePaint(): %.1f ms", totalRealTime.msecs() );
251 #endif /* PROFILE */
252 
253  m_lastRefresh = wxGetLocalTimeMillis();
254  m_drawing = false;
255 }
void Stop()
Save the time when this function was called, and set the counter stane to stop.
Definition: profile.h:85
bool m_pendingRefresh
Is there a redraw event requested?
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
void SetClearColor(const COLOR4D &aColor)
virtual const COLOR4D & GetGridColor()=0
Return current grid color settings.
KIGFX::WX_VIEW_CONTROLS * m_viewControls
Control for VIEW (moving, zooming, etc.)
GAL_TYPE m_backend
Currently used GAL.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
virtual const COLOR4D & GetCursorColor()=0
Return current cursor color settings.
virtual const COLOR4D & GetBackgroundColor()=0
Return current background color settings.
double msecs(bool aSinceLast=false)
Definition: profile.h:146
const VECTOR2D & GetCenter() const
Return the center point of this VIEW (in world space coordinates).
Definition: view.h:333
virtual bool SwitchBackend(GAL_TYPE aGalType)
Switch method of rendering graphics.
static constexpr GAL_TYPE GAL_FALLBACK
virtual bool HasTarget(RENDER_TARGET aTarget)
Returns true if the target exists.
A small class to help profiling.
Definition: profile.h:45
Auxiliary rendering target (noncached)
Definition: definitions.h:49
bool m_drawing
True if GAL is currently redrawing the view.
void SetGridColor(const COLOR4D &aGridColor)
Set the grid color.
wxWindow * m_parent
Pointer to the parent window.
virtual void Redraw()
Immediately redraws the whole view.
Definition: view.cpp:1123
bool IsTargetDirty(int aTarget) const
Return true if any of layers belonging to the target or the target itself should be redrawn.
Definition: view.h:559
std::unique_ptr< KIGFX::PAINTER > m_painter
Contains information about how to draw items using GAL.
virtual void DrawGrid()
Draw the grid
virtual void DrawCursor(const VECTOR2D &aCursorPosition)
Draw the cursor.
Items that may change while the view stays the same (noncached)
Definition: definitions.h:50
virtual KIGFX::VIEW * GetView() const
Return a pointer to the #VIEW instance used in the panel.
void UpdateItems()
Iterate through the list of items that asked for updating and updates them.
Definition: view.cpp:1394
void SetCursorColor(const COLOR4D &aCursorColor)
Set the cursor color.
virtual void ClearScreen()
Clear the screen.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
#define _(s)
Definition: 3d_actions.cpp:33
EDA_DRAW_FRAME * GetParentEDAFrame() const
Returns parent EDA_DRAW_FRAME, if available or NULL otherwise.
VECTOR2D GetCursorPosition(bool aSnappingEnabled) const override
<
virtual bool IsVisible() const
Returns true if the GAL canvas is visible on the screen.
void ClearTargets()
Clear targets that are marked as dirty.
Definition: view.cpp:1104
wxLongLong m_lastRefresh
Last timestamp when the panel was refreshed.
VECTOR2D m_ScrollCenter
Current scroll center point in logical units.
Definition: base_screen.h:104
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:281
virtual BASE_SCREEN * GetScreen() const
Return a pointer to a BASE_SCREEN or one of its derivatives.
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:594
bool IsDirty() const
Return true if any of the VIEW layers needs to be refreshened.
Definition: view.h:542

References _, KIGFX::GAL::ClearScreen(), KIGFX::VIEW::ClearTargets(), DisplayInfoMessage(), KIGFX::GAL::DrawCursor(), KIGFX::GAL::DrawGrid(), GAL_FALLBACK, GAL_TYPE_OPENGL, KIGFX::RENDER_SETTINGS::GetBackgroundColor(), KIGFX::VIEW::GetCenter(), KIGFX::RENDER_SETTINGS::GetCursorColor(), KIGFX::WX_VIEW_CONTROLS::GetCursorPosition(), KIGFX::RENDER_SETTINGS::GetGridColor(), GetParentEDAFrame(), EDA_DRAW_FRAME::GetScreen(), GetView(), KIGFX::GAL::HasTarget(), IsDialogPreview(), KIGFX::VIEW::IsDirty(), KIGFX::VIEW::IsTargetDirty(), KIGFX::GAL::IsVisible(), m_backend, m_drawing, m_gal, m_lastRefresh, m_painter, m_parent, m_pendingRefresh, BASE_SCREEN::m_ScrollCenter, m_view, m_viewControls, KIGFX::VIEW::MarkDirty(), PROF_COUNTER::msecs(), KIGFX::VIEW::Redraw(), KIGFX::GAL::SetClearColor(), KIGFX::GAL::SetCursorColor(), KIGFX::GAL::SetGridColor(), PROF_COUNTER::Stop(), SwitchBackend(), KIGFX::TARGET_NONCACHED, KIGFX::TARGET_OVERLAY, KIGFX::VIEW::UpdateItems(), and KIGFX::WX_VIEW_CONTROLS::UpdateScrollbars().

Referenced by ForceRefresh(), onPaint(), and onRefreshTimer().

◆ ForceRefresh()

◆ GetBackend()

◆ GetDefaultViewBBox()

virtual BOX2I EDA_DRAW_PANEL_GAL::GetDefaultViewBBox ( ) const
inlinevirtual

Return the bounding box of the view that should be used if model is not valid.

For example, the worksheet bounding box for an empty PCB

Returns
the default bounding box for the panel.

Reimplemented in PCB_DRAW_PANEL_GAL, and GERBVIEW_DRAW_PANEL_GAL.

Definition at line 201 of file class_draw_panel_gal.h.

201 { return BOX2I(); }
BOX2< VECTOR2I > BOX2I
Definition: box2.h:522

Referenced by COMMON_TOOLS::CenterContents(), and COMMON_TOOLS::doZoomFit().

◆ GetGAL()

KIGFX::GAL* EDA_DRAW_PANEL_GAL::GetGAL ( ) const
inline

◆ GetMsgPanelInfo()

virtual void EDA_DRAW_PANEL_GAL::GetMsgPanelInfo ( EDA_DRAW_FRAME aFrame,
std::vector< MSG_PANEL_ITEM > &  aList 
)
inlinevirtual

Reimplemented in PCB_DRAW_PANEL_GAL, GERBVIEW_DRAW_PANEL_GAL, and PL_DRAW_PANEL_GAL.

Definition at line 165 of file class_draw_panel_gal.h.

166  {
167  wxASSERT( false );
168  }

◆ GetParentEDAFrame()

◆ GetView()

virtual KIGFX::VIEW* EDA_DRAW_PANEL_GAL::GetView ( ) const
inlinevirtual

Return a pointer to the #VIEW instance used in the panel.

Returns
The instance of #VIEW.

Reimplemented in PCB_DRAW_PANEL_GAL, and SCH_DRAW_PANEL.

Definition at line 114 of file class_draw_panel_gal.h.

114 { return m_view; }
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.

References m_view.

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::applyDisplaySettingsToGAL(), GERBVIEW_FRAME::Clear_DrawLayers(), PL_EDITOR_FRAME::CommonSettingsChanged(), PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems(), DIALOG_PRINT_GERBVIEW::createPrintout(), GERBVIEW_CONTROL::DisplayControl(), SYMBOL_PREVIEW_WIDGET::DisplayPart(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), GERBVIEW_FRAME::doCloseWindow(), DoRePaint(), SYMBOL_PREVIEW_WIDGET::fitOnDrawArea(), EDA_DRAW_FRAME::FocusOnLocation(), GERBVIEW_FRAME::GetVisibleLayers(), GERBVIEW_CONTROL::HighlightControl(), PROPERTIES_FRAME::OnAcceptPrms(), GERBER_LAYER_WIDGET::OnLayerColorChange(), EDA_DRAW_FRAME::OnMove(), GERBER_LAYER_WIDGET::OnRenderColorChange(), GERBER_LAYER_WIDGET::OnRenderEnable(), PL_EDITOR_FRAME::OnSelectPage(), GERBVIEW_FRAME::Read_EXCELLON_File(), GERBVIEW_FRAME::Read_GERBER_File(), GERBER_LAYER_WIDGET::ReFill(), PCB_BASE_FRAME::SetDisplayOptions(), GERBVIEW_FRAME::SetElementVisibility(), EDA_DRAW_FRAME::SetGridVisibility(), GERBVIEW_FRAME::SetVisibleLayers(), GERBVIEW_FRAME::SortLayersByX2Attributes(), SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET(), PANEL_PL_EDITOR_COLOR_SETTINGS::TransferDataFromWindow(), PANEL_GAL_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_GERBVIEW_DISPLAY_OPTIONS::TransferDataFromWindow(), GERBVIEW_FRAME::UpdateDisplayOptions(), PANEL_EESCHEMA_COLOR_SETTINGS::updatePreview(), PANEL_EESCHEMA_COLOR_SETTINGS::zoomFitPreview(), GERBVIEW_FRAME::~GERBVIEW_FRAME(), and SYMBOL_PREVIEW_WIDGET::~SYMBOL_PREVIEW_WIDGET().

◆ GetViewControls()

◆ IsDialogPreview()

bool EDA_DRAW_PANEL_GAL::IsDialogPreview ( ) const
inline

Definition at line 175 of file class_draw_panel_gal.h.

175 { return m_parent != (wxWindow*) m_edaFrame; }
wxWindow * m_parent
Pointer to the parent window.
EDA_DRAW_FRAME * m_edaFrame
Parent EDA_DRAW_FRAME (if available)

References m_edaFrame, and m_parent.

Referenced by DoRePaint(), PCB_DRAW_PANEL_GAL::OnShow(), and PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL().

◆ onEnter()

void EDA_DRAW_PANEL_GAL::onEnter ( wxMouseEvent &  aEvent)
protected

Definition at line 524 of file draw_panel_gal.cpp.

525 {
526  bool shouldSetFocus = m_stealsFocus
529 
530 #if defined( _WIN32 )
531  // Ensure we are the active foreground window before we attempt to steal focus
532  // mouse events are generated on Win32 regardless if window is active
533  shouldSetFocus = shouldSetFocus && ( m_edaFrame->GetHWND() == GetForegroundWindow() );
534 #endif
535 
536  // Getting focus is necessary in order to receive key events properly
537  if( shouldSetFocus )
538  SetFocus();
539 
540  aEvent.Skip();
541 }
bool IsModalDialogFocused()
Definition: ui_common.cpp:149
bool IsInputControlFocused()
Checks if a input control has focus.
Definition: ui_common.cpp:137
virtual void SetFocus() override
EDA_DRAW_FRAME * m_edaFrame
Parent EDA_DRAW_FRAME (if available)
bool m_stealsFocus
Flag to indicate whether the panel should take focus at certain times (when moused over,...

References KIUI::IsInputControlFocused(), KIUI::IsModalDialogFocused(), m_edaFrame, m_stealsFocus, and SetFocus().

Referenced by EDA_DRAW_PANEL_GAL().

◆ OnEvent()

void EDA_DRAW_PANEL_GAL::OnEvent ( wxEvent &  aEvent)

Used to forward events to the canvas from popups, etc.

Definition at line 500 of file draw_panel_gal.cpp.

501 {
502  bool shouldSetFocus = m_lostFocus && m_stealsFocus
505 
506 #if defined( _WIN32 )
507  // Ensure we are the active foreground window before we attempt to steal focus
508  // mouse events are generated on Win32 regardless if window is active
509  shouldSetFocus = shouldSetFocus && ( m_edaFrame->GetHWND() == GetForegroundWindow() );
510 #endif
511 
512  if( shouldSetFocus )
513  SetFocus();
514 
515  if( !m_eventDispatcher )
516  aEvent.Skip();
517  else
519 
520  Refresh();
521 }
bool IsModalDialogFocused()
Definition: ui_common.cpp:149
bool IsInputControlFocused()
Checks if a input control has focus.
Definition: ui_common.cpp:137
virtual void DispatchWxEvent(wxEvent &aEvent)
Process wxEvents (mostly UI events), translate them to TOOL_EVENTs, and make tools handle those.
bool m_lostFocus
Flag to indicate that focus should be regained on the next mouse event.
virtual void SetFocus() override
EDA_DRAW_FRAME * m_edaFrame
Parent EDA_DRAW_FRAME (if available)
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
TOOL_DISPATCHER * m_eventDispatcher
Processes and forwards events to tools.
bool m_stealsFocus
Flag to indicate whether the panel should take focus at certain times (when moused over,...

References TOOL_DISPATCHER::DispatchWxEvent(), KIUI::IsInputControlFocused(), KIUI::IsModalDialogFocused(), m_edaFrame, m_eventDispatcher, m_lostFocus, m_stealsFocus, Refresh(), and SetFocus().

Referenced by EDA_DRAW_PANEL_GAL(), and STATUS_POPUP::onCharHook().

◆ onLostFocus()

void EDA_DRAW_PANEL_GAL::onLostFocus ( wxFocusEvent &  aEvent)
protected

Definition at line 544 of file draw_panel_gal.cpp.

545 {
546  m_lostFocus = true;
547 
548  aEvent.Skip();
549 }
bool m_lostFocus
Flag to indicate that focus should be regained on the next mouse event.

References m_lostFocus.

Referenced by EDA_DRAW_PANEL_GAL().

◆ onPaint()

void EDA_DRAW_PANEL_GAL::onPaint ( wxPaintEvent &  WXUNUSEDaEvent)
protectedvirtual

Reimplemented in SCH_PREVIEW_PANEL, and SCH_DRAW_PANEL.

Definition at line 156 of file draw_panel_gal.cpp.

157 {
158  DoRePaint();
159 }
void DoRePaint()
Repaint the canvas, and fix scrollbar cursors.

References DoRePaint().

Referenced by SCH_DRAW_PANEL::onPaint(), SCH_PREVIEW_PANEL::onPaint(), onRefreshTimer(), and StopDrawing().

◆ onRefreshTimer()

void EDA_DRAW_PANEL_GAL::onRefreshTimer ( wxTimerEvent &  aEvent)
protected

Definition at line 552 of file draw_panel_gal.cpp.

553 {
554  if( !m_drawingEnabled )
555  {
556  if( m_gal && m_gal->IsInitialized() )
557  {
558  m_drawing = false;
559  m_pendingRefresh = true;
560  Connect( wxEVT_PAINT, wxPaintEventHandler( EDA_DRAW_PANEL_GAL::onPaint ), NULL, this );
561  m_drawingEnabled = true;
562  }
563  else
564  {
565  // Try again soon
566  m_refreshTimer.StartOnce( 100 );
567  return;
568  }
569  }
570 
571  //wxPaintEvent redrawEvent;
572  //wxPostEvent( this, redrawEvent );
573  DoRePaint();
574 }
bool m_pendingRefresh
Is there a redraw event requested?
wxTimer m_refreshTimer
Timer to prevent too-frequent refreshing.
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
void DoRePaint()
Repaint the canvas, and fix scrollbar cursors.
bool m_drawing
True if GAL is currently redrawing the view.
virtual void onPaint(wxPaintEvent &WXUNUSED(aEvent))
#define NULL
bool m_drawingEnabled
Flag that determines if VIEW may use GAL for redrawing the screen.
virtual bool IsInitialized() const
Returns the initialization status for the canvas.

References DoRePaint(), KIGFX::GAL::IsInitialized(), m_drawing, m_drawingEnabled, m_gal, m_pendingRefresh, m_refreshTimer, NULL, and onPaint().

Referenced by EDA_DRAW_PANEL_GAL().

◆ onSetCursor()

void EDA_DRAW_PANEL_GAL::onSetCursor ( wxSetCursorEvent &  event)
protected

Definition at line 599 of file draw_panel_gal.cpp.

600 {
601  event.SetCursor( m_currentCursor );
602 }
wxCursor m_currentCursor
Current mouse cursor shape id.

References m_currentCursor.

Referenced by EDA_DRAW_PANEL_GAL(), and SwitchBackend().

◆ OnShow()

virtual void EDA_DRAW_PANEL_GAL::OnShow ( )
inlinevirtual

Called when the window is shown for the first time.

Reimplemented in PCB_DRAW_PANEL_GAL, SCH_DRAW_PANEL, SCH_PREVIEW_PANEL, and GERBVIEW_DRAW_PANEL_GAL.

Definition at line 180 of file class_draw_panel_gal.h.

180 {}

Referenced by onShowTimer().

◆ onShowTimer()

void EDA_DRAW_PANEL_GAL::onShowTimer ( wxTimerEvent &  aEvent)
protected

Definition at line 577 of file draw_panel_gal.cpp.

578 {
579  if( m_gal && m_gal->IsVisible() )
580  {
581  m_onShowTimer.Stop();
582  OnShow();
583  }
584 }
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
virtual void OnShow()
Called when the window is shown for the first time.
wxTimer m_onShowTimer
Timer used to execute OnShow() when the window finally appears on the screen.
virtual bool IsVisible() const
Returns true if the GAL canvas is visible on the screen.

References KIGFX::GAL::IsVisible(), m_gal, m_onShowTimer, and OnShow().

Referenced by EDA_DRAW_PANEL_GAL().

◆ onSize()

void EDA_DRAW_PANEL_GAL::onSize ( wxSizeEvent &  aEvent)
protected

Definition at line 258 of file draw_panel_gal.cpp.

259 {
260  // If we get a second wx update call before the first finishes, don't crash
261  if( m_gal->IsContextLocked() )
262  return;
263 
265  wxSize clientSize = GetClientSize();
266  WX_INFOBAR* infobar = GetParentEDAFrame() ? GetParentEDAFrame()->GetInfoBar() : nullptr;
267 
268  if( VECTOR2I( clientSize ) == m_gal->GetScreenPixelSize() )
269  return;
270 
271  clientSize.x = std::max( 10, clientSize.x );
272  clientSize.y = std::max( 10, clientSize.y );
273 
274  VECTOR2D bottom( 0, 0 );
275 
276  if( m_view )
277  bottom = m_view->ToWorld( m_gal->GetScreenPixelSize(), true );
278 
279  m_gal->ResizeScreen( clientSize.GetX(), clientSize.GetY() );
280 
281  if( m_view )
282  {
283  if( infobar && infobar->IsLocked() )
284  m_view->SetCenter( bottom - m_view->ToWorld( clientSize, false ) / 2.0 );
285 
288  }
289 }
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:456
VECTOR2< int > VECTOR2I
Definition: vector2d.h:630
Auxiliary rendering target (noncached)
Definition: definitions.h:49
const VECTOR2I & GetScreenPixelSize() const
Returns GAL canvas size in pixels.
bool IsLocked()
Returns true if the infobar is being updated.
Definition: infobar.h:185
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:585
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:570
virtual void ResizeScreen(int aWidth, int aHeight)
Resizes the canvas.
A modified version of the wxInfoBar class that allows us to:
Definition: infobar.h:71
Main rendering target (cached)
Definition: definitions.h:48
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
EDA_DRAW_FRAME * GetParentEDAFrame() const
Returns parent EDA_DRAW_FRAME, if available or NULL otherwise.
WX_INFOBAR * GetInfoBar()
virtual bool IsContextLocked()
Checks the state of the context lock.

References EDA_BASE_FRAME::GetInfoBar(), GetParentEDAFrame(), KIGFX::GAL::GetScreenPixelSize(), KIGFX::GAL::IsContextLocked(), WX_INFOBAR::IsLocked(), m_gal, m_view, KIGFX::VIEW::MarkTargetDirty(), KIGFX::GAL::ResizeScreen(), KIGFX::VIEW::SetCenter(), KIGFX::TARGET_CACHED, KIGFX::TARGET_NONCACHED, and KIGFX::VIEW::ToWorld().

Referenced by EDA_DRAW_PANEL_GAL().

◆ Refresh()

void EDA_DRAW_PANEL_GAL::Refresh ( bool  aEraseBackground = true,
const wxRect *  aRect = NULL 
)
overridevirtual

Update the board display after modifying it by a python script (note: it is automatically called by action plugins, after running the plugin, so call this function is usually not needed inside action plugins.

Could be deprecated because modifying a board (especially deleting items) outside a action plugin can crash Pcbnew.

Reimplemented in SCH_PREVIEW_PANEL.

Definition at line 292 of file draw_panel_gal.cpp.

293 {
294  wxLongLong t = wxGetLocalTimeMillis();
295  wxLongLong delta = t - m_lastRefresh;
296 
297  // If it has been too long since the last frame (possible depending on platform timer latency),
298  // just do a refresh. Otherwise, start the refresh timer if it hasn't already been started.
299  // This ensures that we will render often enough but not too often.
300  if( delta >= MinRefreshPeriod )
301  {
302  if( !m_pendingRefresh )
303  ForceRefresh();
304 
305  m_refreshTimer.Start( MinRefreshPeriod, true );
306  }
307  else if( !m_refreshTimer.IsRunning() )
308  {
309  m_refreshTimer.Start( ( MinRefreshPeriod - delta ).ToLong(), true );
310  }
311 }
bool m_pendingRefresh
Is there a redraw event requested?
wxTimer m_refreshTimer
Timer to prevent too-frequent refreshing.
void ForceRefresh()
Force a redraw.
static const int MinRefreshPeriod
60 FPS.
wxLongLong m_lastRefresh
Last timestamp when the panel was refreshed.

References ForceRefresh(), m_lastRefresh, m_pendingRefresh, m_refreshTimer, and MinRefreshPeriod.

Referenced by DIALOG_GLOBAL_DELETION::acceptPcbDelete(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_EDIT_FRAME::AnnotateComponents(), SCH_EDITOR_CONTROL::AssignFootprints(), SCH_EDIT_TOOL::BreakWire(), DIALOG_NET_INSPECTOR::buildNetsList(), SCH_BASE_FRAME::CenterScreen(), ZONE_FILLER_TOOL::CheckAllZones(), GERBVIEW_CONTROL::ClearAllLayers(), FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList(), FOOTPRINT_WIZARD_FRAME::ClickOnPageList(), PL_EDITOR_FRAME::CommonSettingsChanged(), SCH_BASE_FRAME::CommonSettingsChanged(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), SCH_EDIT_FRAME::DeleteAnnotation(), FOOTPRINT_PREVIEW_PANEL::DisplayFootprint(), APPEARANCE_CONTROLS::doApplyLayerPreset(), DIALOG_CLEANUP_GRAPHICS::doCleanup(), DIALOG_CLEANUP_TRACKS_AND_VIAS::doCleanup(), SCH_EDIT_TOOL::DoDelete(), BOARD_INSPECTION_TOOL::doHideNet(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), SYMBOL_EDITOR_EDIT_TOOL::editFieldProperties(), SYMBOL_EDITOR_EDIT_TOOL::editGraphicProperties(), SYMBOL_EDITOR_EDIT_TOOL::editTextProperties(), GERBVIEW_FRAME::Erase_Current_DrawLayer(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), ZONE_FILLER_TOOL::FillAllZones(), SCH_EDITOR_CONTROL::FindComponentAndItem(), SCH_EDITOR_CONTROL::FindNext(), PCB_BASE_FRAME::FocusOnItem(), PL_EDITOR_FRAME::GetLayoutFromRedoList(), PL_EDITOR_FRAME::GetLayoutFromUndoList(), PCB_VIEWER_TOOLS::GraphicOutlines(), PL_EDITOR_FRAME::HardRedraw(), GERBVIEW_CONTROL::HighlightControl(), SCH_EDITOR_CONTROL::ImportFPAssignments(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), SCH_EDIT_FRAME::KiwayMailIn(), GERBVIEW_FRAME::LoadListOfGerberAndDrillFiles(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), PCB_VIEWER_TOOLS::MeasureTool(), DIALOG_MIGRATE_BUSES::onAcceptClicked(), PROPERTIES_FRAME::OnAcceptPrms(), DIALOG_ANNOTATE::OnApplyClick(), DIALOG_BOARD_REANNOTATE::OnApplyClick(), DIALOG_INSPECTOR::onCellClicked(), APPEARANCE_CONTROLS::OnColorSwatchChanged(), DIALOG_FOOTPRINT_CHECKER::OnDeleteAllClick(), DIALOG_DRC::OnDRCItemSelected(), DIALOG_ERC::OnEraseDrcMarkersClick(), OnEvent(), EDA_DRAW_FRAME::OnGridSettings(), GERBER_LAYER_WIDGET::OnLayerColorChange(), APPEARANCE_CONTROLS::OnLayerContextMenu(), GERBER_LAYER_WIDGET::OnLayerSelect(), APPEARANCE_CONTROLS::onLayerVisibilityChanged(), GERBER_LAYER_WIDGET::OnLayerVisible(), DIALOG_GROUP_PROPERTIES::OnMemberSelected(), SCH_EDIT_FRAME::OnModify(), APPEARANCE_CONTROLS::onNetclassColorChanged(), APPEARANCE_CONTROLS::onNetclassContextMenu(), APPEARANCE_CONTROLS::onNetContextMenu(), APPEARANCE_CONTROLS::onObjectVisibilityChanged(), DIALOG_EXCHANGE_FOOTPRINTS::OnOKClicked(), GERBER_LAYER_WIDGET::onPopupSelection(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), DIALOG_GROUP_PROPERTIES::OnRemoveMember(), DIALOG_NET_INSPECTOR::onRenameNet(), GERBER_LAYER_WIDGET::OnRenderColorChange(), GERBER_LAYER_WIDGET::OnRenderEnable(), DIALOG_NET_INSPECTOR::onSelChanged(), GERBVIEW_FRAME::OnSelectActiveDCode(), PL_EDITOR_FRAME::OnSelectCoordOriginCorner(), GERBVIEW_FRAME::OnSelectDisplayMode(), EDA_DRAW_FRAME::OnSelectGrid(), DIALOG_FOOTPRINT_CHECKER::OnSelectItem(), DIALOG_CLEANUP_GRAPHICS::OnSelectItem(), DIALOG_CLEANUP_TRACKS_AND_VIAS::OnSelectItem(), PL_EDITOR_FRAME::OnSelectPage(), EDA_DRAW_FRAME::OnSelectZoom(), PROPERTIES_FRAME::OnSetDefaultValues(), DIALOG_NET_INSPECTOR::onSortingChanged(), DIALOG_UPDATE_FROM_PCB::OnUpdateClick(), GERBVIEW_CONTROL::OpenDrillFile(), GERBVIEW_CONTROL::OpenJobFile(), GERBVIEW_CONTROL::OpenZipFile(), PCB_VIEWER_TOOLS::PadDisplayMode(), PL_EDITOR_FRAME::PrintPage(), PCB_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_TOOL::Properties(), FOOTPRINT_EDITOR_CONTROL::Properties(), ReannotateFromPCBNew(), SYMBOL_EDIT_FRAME::RebuildView(), SYMBOL_VIEWER_FRAME::ReCreateLibList(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), FOOTPRINT_WIZARD_FRAME::ReCreatePageList(), SCH_EDITOR_CONTROL::Redo(), DIALOG_PAD_PROPERTIES::redraw(), DIALOG_ERC::redrawDrawPanel(), SCH_BASE_FRAME::RedrawScreen(), SCH_PREVIEW_PANEL::Refresh(), Refresh(), DIALOG_DRC::refreshBoardEditor(), refreshCallback(), EDA_DRAW_FRAME::RefreshCanvas(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), FOOTPRINT_WIZARD_FRAME::ReloadFootprint(), SCH_EDITOR_CONTROL::RemapSymbols(), EDIT_TOOL::Remove(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), SCH_EDITOR_CONTROL::rescueProject(), FOOTPRINT_EDIT_FRAME::RevertFootprint(), PL_EDITOR_FRAME::RollbackFromUndo(), SCH_EDIT_FRAME::RollbackSchematicFromUndo(), DIALOG_FOOTPRINT_CHECKER::runChecks(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), GERBVIEW_FRAME::SetActiveLayer(), SYMBOL_EDIT_FRAME::SetCurPart(), PCB_BASE_FRAME::SetDisplayOptions(), EDA_DRAW_FRAME::SetGridVisibility(), APPEARANCE_CONTROLS::SetObjectVisible(), SYMBOL_VIEWER_FRAME::SetSelectedLibrary(), SYMBOL_EDITOR_CONTROL::ShowElectricalTypes(), PCB_VIEWER_TOOLS::ShowPadNumbers(), SCH_EDIT_FRAME::ShowSchematicSetupDialog(), GERBVIEW_FRAME::SortLayersByX2Attributes(), GLOBAL_EDIT_TOOL::SwapLayers(), SCH_DRAW_PANEL::SwitchBackend(), PCB_BASE_FRAME::SwitchLayer(), PCB_EDIT_FRAME::SwitchLayer(), DIALOG_ERC::testErc(), PCB_VIEWER_TOOLS::TextOutlines(), SCH_EDITOR_CONTROL::ToggleHiddenFields(), SCH_EDITOR_CONTROL::ToggleHiddenPins(), PCB_CONTROL::ToggleRatsnest(), PCB_CONTROL::TrackDisplayMode(), PANEL_GAL_DISPLAY_OPTIONS::TransferDataFromWindow(), DIALOG_JUNCTION_PROPS::TransferDataFromWindow(), PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_EDIT_OPTIONS::TransferDataFromWindow(), DIALOG_EDIT_LINE_STYLE::TransferDataFromWindow(), PANEL_SETUP_FORMATTING::TransferDataFromWindow(), PANEL_GERBVIEW_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_SYM_EDITING_OPTIONS::TransferDataFromWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), SCH_EDITOR_CONTROL::Undo(), GERBVIEW_FRAME::UpdateDisplayOptions(), SCH_EDITOR_CONTROL::UpdateFind(), NET_GRID_TABLE::updateNetColor(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), PANEL_PCBNEW_COLOR_SETTINGS::updatePreview(), SCH_EDIT_FRAME::UpdateSymbolFromEditor(), PCB_CONTROL::ViaDisplayMode(), PCB_CONTROL::ZoneDisplayMode(), ZONE_FILLER_TOOL::ZoneFill(), ZONE_FILLER_TOOL::ZoneUnfill(), ZONE_FILLER_TOOL::ZoneUnfillAll(), and DIALOG_GROUP_PROPERTIES::~DIALOG_GROUP_PROPERTIES().

◆ SetCurrentCursor()

void EDA_DRAW_PANEL_GAL::SetCurrentCursor ( KICURSOR  cursor)

Set the current cursor shape for this panel.

Definition at line 587 of file draw_panel_gal.cpp.

588 {
589  if( m_currentKiCursor == cursor )
590  return;
591 
593  m_currentKiCursor = cursor;
594 
595  SetCursor( m_currentCursor );
596 }
static const wxCursor GetCursor(KICURSOR aCursorType)
Definition: cursors.cpp:392
wxCursor m_currentCursor
Current mouse cursor shape id.

References CURSOR_STORE::GetCursor(), m_currentCursor, and m_currentKiCursor.

Referenced by SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), EDA_DRAW_PANEL_GAL(), PAD_TOOL::EnumeratePads(), ROUTER_TOOL::finishInteractive(), ROUTER_TOOL::InlineDrag(), ZOOM_TOOL::Main(), PL_EDIT_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCB_PICKER_TOOL::Main(), PL_SELECTION_TOOL::Main(), PICKER_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), PCB_SELECTION_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), EE_SELECTION_TOOL::OnIdle(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), BOARD_EDITOR_CONTROL::PlaceModule(), BOARD_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), DRAWING_TOOL::SetAnchor(), EE_POINT_EDITOR::setEditedPoint(), PL_POINT_EDITOR::setEditedPoint(), PCB_POINT_EDITOR::setEditedPoint(), SCH_DRAWING_TOOLS::SingleClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ SetEventDispatcher()

void EDA_DRAW_PANEL_GAL::SetEventDispatcher ( TOOL_DISPATCHER aEventDispatcher)

Set a dispatcher that processes events and forwards them to tools.

#DRAW_PANEL_GAL does not take over the ownership. Passing NULL disconnects all event handlers from the #DRAW_PANEL_GAL and parent frame.

Parameters
aEventDispatcheris the object that will be used for dispatching events.

Definition at line 323 of file draw_panel_gal.cpp.

324 {
325  m_eventDispatcher = aEventDispatcher;
326  const wxEventType eventTypes[] = { wxEVT_TOOL };
327 
328  if( m_eventDispatcher )
329  {
330  for( wxEventType type : eventTypes )
331  {
332  m_parent->Connect( type, wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
334  }
335  }
336  else
337  {
338  for( wxEventType type : eventTypes )
339  {
340  // While loop is used to be sure that all event handlers are removed.
341  while( m_parent->Disconnect( type,
342  wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
343  NULL, m_eventDispatcher ) );
344  }
345  }
346 }
wxWindow * m_parent
Pointer to the parent window.
#define NULL
TOOL_DISPATCHER * m_eventDispatcher
Processes and forwards events to tools.
virtual void DispatchWxCommand(wxCommandEvent &aEvent)
Process wxCommands (mostly menu related events) and runs appropriate actions (eg.

References TOOL_DISPATCHER::DispatchWxCommand(), m_eventDispatcher, m_parent, and NULL.

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), FOOTPRINT_EDIT_FRAME::doCloseWindow(), EVT_GRID_CMD_CELL_CHANGED(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), PL_EDITOR_FRAME::setupTools(), FOOTPRINT_EDIT_FRAME::setupTools(), SYMBOL_VIEWER_FRAME::setupTools(), SYMBOL_EDIT_FRAME::setupTools(), and SCH_EDIT_FRAME::setupTools().

◆ SetFocus()

void EDA_DRAW_PANEL_GAL::SetFocus ( )
overridevirtual

Definition at line 149 of file draw_panel_gal.cpp.

150 {
151  wxScrolledCanvas::SetFocus();
152  m_lostFocus = false;
153 }
bool m_lostFocus
Flag to indicate that focus should be regained on the next mouse event.

References m_lostFocus.

Referenced by onEnter(), OnEvent(), PCB_EDIT_FRAME::OpenProjectFiles(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), GERBVIEW_FRAME::SetActiveLayer(), ZONE_FILLER_TOOL::singleShotRefocus(), and DIALOG_NET_INSPECTOR::~DIALOG_NET_INSPECTOR().

◆ SetHighContrastLayer()

void EDA_DRAW_PANEL_GAL::SetHighContrastLayer ( int  aLayer)
virtual

Take care of display settings for the given layer to be displayed in high contrast mode.

Reimplemented in PCB_DRAW_PANEL_GAL, and GERBVIEW_DRAW_PANEL_GAL.

Definition at line 365 of file draw_panel_gal.cpp.

366 {
367  // Set display settings for high contrast mode
369 
370  SetTopLayer( aLayer );
371 
372  rSettings->ClearHighContrastLayers();
373  rSettings->SetLayerIsHighContrast( aLayer );
374 
376 }
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:207
virtual void SetTopLayer(int aLayer)
Move the selected layer to the top, so it is displayed above all others.
void SetLayerIsHighContrast(int aLayerId, bool aEnabled=true)
Set the specified layer as high-contrast.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
void ClearHighContrastLayers()
Clear the list of active layers.
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
Definition: view.cpp:776

References KIGFX::RENDER_SETTINGS::ClearHighContrastLayers(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), m_view, KIGFX::RENDER_SETTINGS::SetLayerIsHighContrast(), SetTopLayer(), and KIGFX::VIEW::UpdateAllLayersColor().

Referenced by GERBVIEW_FRAME::SetActiveLayer(), and PCB_BASE_FRAME::SetDisplayOptions().

◆ SetStealsFocus()

void EDA_DRAW_PANEL_GAL::SetStealsFocus ( bool  aStealsFocus)
inline

Set whether focus is taken on certain events (mouseover, keys, etc).

This should be true (and is by default) for any primary canvas, but can be false to make well behaved preview panes and the like.

Definition at line 188 of file class_draw_panel_gal.h.

188 { m_stealsFocus = aStealsFocus; }
bool m_stealsFocus
Flag to indicate whether the panel should take focus at certain times (when moused over,...

References m_stealsFocus.

Referenced by SYMBOL_VIEWER_FRAME::ClickOnCmpList(), FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList(), FOOTPRINT_VIEWER_FRAME::ClickOnLibList(), FOOTPRINT_PREVIEW_PANEL::FOOTPRINT_PREVIEW_PANEL(), PANEL_EESCHEMA_COLOR_SETTINGS::PANEL_EESCHEMA_COLOR_SETTINGS(), DIALOG_PAD_PROPERTIES::prepareCanvas(), SYMBOL_VIEWER_FRAME::SetSelectedLibrary(), and SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET().

◆ SetTopLayer()

void EDA_DRAW_PANEL_GAL::SetTopLayer ( int  aLayer)
virtual

Move the selected layer to the top, so it is displayed above all others.

Reimplemented in PCB_DRAW_PANEL_GAL, PL_DRAW_PANEL_GAL, and GERBVIEW_DRAW_PANEL_GAL.

Definition at line 379 of file draw_panel_gal.cpp.

380 {
382  m_view->SetTopLayer( aLayer );
384 }
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Set given layer to be displayed on the top or sets back the default order of layers.
Definition: view.cpp:838
void UpdateAllLayersOrder()
Do everything that is needed to apply the rendering order of layers.
Definition: view.cpp:905
void ClearTopLayers()
Remove all layers from the on-the-top set (they are no longer displayed over the rest of layers).
Definition: view.cpp:890
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.

References KIGFX::VIEW::ClearTopLayers(), m_view, KIGFX::VIEW::SetTopLayer(), and KIGFX::VIEW::UpdateAllLayersOrder().

Referenced by SetHighContrastLayer().

◆ StartDrawing()

void EDA_DRAW_PANEL_GAL::StartDrawing ( )

Begin drawing if it was stopped previously.

Definition at line 349 of file draw_panel_gal.cpp.

350 {
351  // Start querying GAL if it is ready
352  m_refreshTimer.StartOnce( 100 );
353 }
wxTimer m_refreshTimer
Timer to prevent too-frequent refreshing.

References m_refreshTimer.

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), EDA_DRAW_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), FOOTPRINT_PREVIEW_PANEL::FOOTPRINT_PREVIEW_PANEL(), DIALOG_PAD_PROPERTIES::prepareCanvas(), DIALOG_PAD_PROPERTIES::redraw(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), and SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL().

◆ StopDrawing()

void EDA_DRAW_PANEL_GAL::StopDrawing ( )

Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.

Definition at line 356 of file draw_panel_gal.cpp.

357 {
358  m_drawingEnabled = false;
359  Disconnect( wxEVT_PAINT, wxPaintEventHandler( EDA_DRAW_PANEL_GAL::onPaint ), NULL, this );
360  m_pendingRefresh = false;
361  m_refreshTimer.Stop();
362 }
bool m_pendingRefresh
Is there a redraw event requested?
wxTimer m_refreshTimer
Timer to prevent too-frequent refreshing.
virtual void onPaint(wxPaintEvent &WXUNUSED(aEvent))
#define NULL
bool m_drawingEnabled
Flag that determines if VIEW may use GAL for redrawing the screen.

References m_drawingEnabled, m_pendingRefresh, m_refreshTimer, NULL, and onPaint().

Referenced by SYMBOL_VIEWER_FRAME::doCloseWindow(), FOOTPRINT_EDIT_FRAME::doCloseWindow(), FOOTPRINT_VIEWER_FRAME::doCloseWindow(), GERBVIEW_FRAME::doCloseWindow(), DIALOG_PAD_PROPERTIES::OnCancel(), DIALOG_PAD_PROPERTIES::redraw(), SwitchBackend(), DISPLAY_FOOTPRINTS_FRAME::~DISPLAY_FOOTPRINTS_FRAME(), ~EDA_DRAW_PANEL_GAL(), FOOTPRINT_VIEWER_FRAME::~FOOTPRINT_VIEWER_FRAME(), and FOOTPRINT_WIZARD_FRAME::~FOOTPRINT_WIZARD_FRAME().

◆ SwitchBackend()

bool EDA_DRAW_PANEL_GAL::SwitchBackend ( GAL_TYPE  aGalType)
virtual

Switch method of rendering graphics.

Parameters
aGalTypeis a type of rendering engine that you want to use.

Reimplemented in PCB_DRAW_PANEL_GAL, SCH_DRAW_PANEL, PL_DRAW_PANEL_GAL, and GERBVIEW_DRAW_PANEL_GAL.

Definition at line 387 of file draw_panel_gal.cpp.

388 {
389  // Do not do anything if the currently used GAL is correct
390  if( aGalType == m_backend && m_gal != NULL )
391  return true;
392 
393  VECTOR2D grid_size = m_gal ? m_gal->GetGridSize() : VECTOR2D();
394  bool grid_visibility = m_gal ? m_gal->GetGridVisibility() : true;
395  bool result = true; // assume everything will be fine
396 
397  // Prevent refreshing canvas during backend switch
398  StopDrawing();
399 
400  KIGFX::GAL* new_gal = NULL;
401 
402  try
403  {
404  switch( aGalType )
405  {
406  case GAL_TYPE_OPENGL:
407  {
408  wxString errormsg = KIGFX::OPENGL_GAL::CheckFeatures( m_options );
409 
410  if( errormsg.empty() )
411  {
412  new_gal = new KIGFX::OPENGL_GAL( m_options, this, this, this );
413  }
414  else
415  {
416  if( GAL_FALLBACK != aGalType )
417  {
418  aGalType = GAL_FALLBACK;
420  _( "Could not use OpenGL, falling back to software rendering" ),
421  errormsg );
422  new_gal = new KIGFX::CAIRO_GAL( m_options, this, this, this );
423  }
424  else
425  {
426  // We're well and truly banjaxed if we get here without a fallback.
427  DisplayInfoMessage( m_parent, _( "Could not use OpenGL" ), errormsg );
428  }
429  }
430  break;
431  }
432 
433  case GAL_TYPE_CAIRO:
434  new_gal = new KIGFX::CAIRO_GAL( m_options, this, this, this );
435  break;
436 
437  default:
438  wxASSERT( false );
440  // warn about unhandled GAL canvas type, but continue with the fallback option
441 
442  case GAL_TYPE_NONE:
443  // KIGFX::GAL is a stub - it actually does cannot display anything,
444  // but prevents code relying on GAL canvas existence from crashing
445  new_gal = new KIGFX::GAL( m_options );
446  break;
447  }
448  }
449  catch( std::runtime_error& err )
450  {
451  // Create a dummy GAL
452  new_gal = new KIGFX::GAL( m_options );
453  aGalType = GAL_TYPE_NONE;
454  DisplayError( m_parent, wxString( err.what() ) );
455  result = false;
456  }
457 
458  // trigger update of the gal options in case they differ
459  // from the defaults
461 
462  wxWindow* galWindow = dynamic_cast<wxWindow*>( new_gal );
463 
464  if( galWindow )
465  {
466  galWindow->Connect( wxEVT_SET_CURSOR,
467  wxSetCursorEventHandler( EDA_DRAW_PANEL_GAL::onSetCursor ), NULL,
468  this );
469  }
470 
471  delete m_gal;
472  m_gal = new_gal;
473 
474  wxSize clientSize = GetClientSize();
475  clientSize.x = std::max( 10, clientSize.x );
476  clientSize.y = std::max( 10, clientSize.y );
477  m_gal->ResizeScreen( clientSize.GetX(), clientSize.GetY() );
478 
479  if( grid_size.x > 0 && grid_size.y > 0 )
480  m_gal->SetGridSize( grid_size );
481 
482  m_gal->SetGridVisibility( grid_visibility );
483 
484  if( m_painter )
485  m_painter->SetGAL( m_gal );
486 
487  if( m_view )
488  {
489  m_view->SetGAL( m_gal );
490  // Note: OpenGL requires reverse draw order when draw priority is enabled
491  m_view->ReverseDrawOrder( aGalType == GAL_TYPE_OPENGL );
492  }
493 
494  m_backend = aGalType;
495 
496  return result;
497 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:253
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
void ReverseDrawOrder(bool aFlag)
Only takes effect if UseDrawPriority is true.
Definition: view.h:657
GAL_TYPE m_backend
Currently used GAL.
KIGFX::GAL_DISPLAY_OPTIONS & m_options
Class OpenGL_GAL is the OpenGL implementation of the Graphics Abstraction Layer.
Definition: opengl_gal.h:65
static constexpr GAL_TYPE GAL_FALLBACK
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
wxWindow * m_parent
Pointer to the parent window.
#define NULL
VECTOR2< double > VECTOR2D
Definition: vector2d.h:629
GAL not used (the legacy wxDC engine is used)
std::unique_ptr< KIGFX::PAINTER > m_painter
Contains information about how to draw items using GAL.
void onSetCursor(wxSetCursorEvent &event)
virtual void ResizeScreen(int aWidth, int aHeight)
Resizes the canvas.
void SetGridSize(const VECTOR2D &aGridSize)
Set the grid size.
const VECTOR2D & GetGridSize() const
Returns the grid size.
static wxString CheckFeatures(GAL_DISPLAY_OPTIONS &aOptions)
Checks OpenGL features.
Definition: opengl_gal.cpp:328
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
#define _(s)
Definition: 3d_actions.cpp:33
void SetGridVisibility(bool aVisibility)
Sets the visibility setting of the grid.
bool GetGridVisibility() const
void SetGAL(GAL *aGal)
Assign a rendering device for the VIEW.
Definition: view.cpp:500
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:281
void StopDrawing()
Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.
Class GAL is the abstract interface for drawing on a 2D-surface.

References _, KIGFX::OPENGL_GAL::CheckFeatures(), DisplayError(), DisplayInfoMessage(), GAL_FALLBACK, GAL_TYPE_CAIRO, GAL_TYPE_NONE, GAL_TYPE_OPENGL, KIGFX::GAL::GetGridSize(), KIGFX::GAL::GetGridVisibility(), KI_FALLTHROUGH, m_backend, m_gal, m_options, m_painter, m_parent, m_view, KIGFX::GAL_DISPLAY_OPTIONS::NotifyChanged(), NULL, onSetCursor(), KIGFX::GAL::ResizeScreen(), KIGFX::VIEW::ReverseDrawOrder(), KIGFX::VIEW::SetGAL(), KIGFX::GAL::SetGridSize(), KIGFX::GAL::SetGridVisibility(), StopDrawing(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), GERBVIEW_DRAW_PANEL_GAL::SwitchBackend(), SCH_DRAW_PANEL::SwitchBackend(), PL_DRAW_PANEL_GAL::SwitchBackend(), PCB_DRAW_PANEL_GAL::SwitchBackend(), and EDA_DRAW_FRAME::SwitchCanvas().

Member Data Documentation

◆ GAL_FALLBACK

◆ m_backend

◆ m_currentCursor

wxCursor EDA_DRAW_PANEL_GAL::m_currentCursor
protected

Current mouse cursor shape id.

Definition at line 239 of file class_draw_panel_gal.h.

Referenced by onSetCursor(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), and SetCurrentCursor().

◆ m_currentKiCursor

KICURSOR EDA_DRAW_PANEL_GAL::m_currentKiCursor
protected

Definition at line 240 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), and SetCurrentCursor().

◆ m_debugOverlay

std::shared_ptr<KIGFX::VIEW_OVERLAY> EDA_DRAW_PANEL_GAL::m_debugOverlay
protected

Optional overlay for drawing transient debug objects.

Definition at line 286 of file class_draw_panel_gal.h.

Referenced by ClearDebugOverlay(), and DebugOverlay().

◆ m_drawing

bool EDA_DRAW_PANEL_GAL::m_drawing
protected

True if GAL is currently redrawing the view.

Definition at line 250 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), onRefreshTimer(), and ~EDA_DRAW_PANEL_GAL().

◆ m_drawingEnabled

bool EDA_DRAW_PANEL_GAL::m_drawingEnabled
protected

Flag that determines if VIEW may use GAL for redrawing the screen.

Definition at line 253 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), onRefreshTimer(), and StopDrawing().

◆ m_edaFrame

EDA_DRAW_FRAME* EDA_DRAW_PANEL_GAL::m_edaFrame
protected

◆ m_eventDispatcher

TOOL_DISPATCHER* EDA_DRAW_PANEL_GAL::m_eventDispatcher
protected

Processes and forwards events to tools.

Definition at line 275 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), OnEvent(), and SetEventDispatcher().

◆ m_gal

◆ m_lastRefresh

wxLongLong EDA_DRAW_PANEL_GAL::m_lastRefresh
protected

Last timestamp when the panel was refreshed.

Definition at line 245 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), and Refresh().

◆ m_lostFocus

bool EDA_DRAW_PANEL_GAL::m_lostFocus
protected

Flag to indicate that focus should be regained on the next mouse event.

It is a workaround for cases when the panel loses keyboard focus, so it does not react to hotkeys anymore.

Definition at line 279 of file class_draw_panel_gal.h.

Referenced by OnEvent(), onLostFocus(), and SetFocus().

◆ m_onShowTimer

wxTimer EDA_DRAW_PANEL_GAL::m_onShowTimer
protected

Timer used to execute OnShow() when the window finally appears on the screen.

Definition at line 256 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), and onShowTimer().

◆ m_options

KIGFX::GAL_DISPLAY_OPTIONS& EDA_DRAW_PANEL_GAL::m_options
protected

Definition at line 272 of file class_draw_panel_gal.h.

Referenced by SwitchBackend().

◆ m_painter

std::unique_ptr<KIGFX::PAINTER> EDA_DRAW_PANEL_GAL::m_painter
protected

◆ m_parent

wxWindow* EDA_DRAW_PANEL_GAL::m_parent
protected

Pointer to the parent window.

Definition at line 242 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), IsDialogPreview(), SetEventDispatcher(), and SwitchBackend().

◆ m_pendingRefresh

bool EDA_DRAW_PANEL_GAL::m_pendingRefresh
protected

Is there a redraw event requested?

Definition at line 246 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), ForceRefresh(), onRefreshTimer(), Refresh(), and StopDrawing().

◆ m_refreshTimer

wxTimer EDA_DRAW_PANEL_GAL::m_refreshTimer
protected

Timer to prevent too-frequent refreshing.

Definition at line 247 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), onRefreshTimer(), Refresh(), StartDrawing(), and StopDrawing().

◆ m_stealsFocus

bool EDA_DRAW_PANEL_GAL::m_stealsFocus
protected

Flag to indicate whether the panel should take focus at certain times (when moused over, and on various mouse/key events)

Definition at line 283 of file class_draw_panel_gal.h.

Referenced by onEnter(), OnEvent(), and SetStealsFocus().

◆ m_view

KIGFX::VIEW* EDA_DRAW_PANEL_GAL::m_view
protected

Stores view settings (scale, center, etc.) and items to be drawn.

Definition at line 262 of file class_draw_panel_gal.h.

Referenced by ClearDebugOverlay(), DebugOverlay(), PCB_DRAW_PANEL_GAL::DisplayBoard(), PL_DRAW_PANEL_GAL::DisplayWorksheet(), DoRePaint(), GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), GERBVIEW_DRAW_PANEL_GAL::GetDefaultViewBBox(), PCB_DRAW_PANEL_GAL::GetDefaultViewBBox(), SCH_DRAW_PANEL::GetView(), PCB_DRAW_PANEL_GAL::GetView(), GetView(), GERBVIEW_DRAW_PANEL_GAL::OnShow(), SCH_DRAW_PANEL::OnShow(), PCB_DRAW_PANEL_GAL::OnShow(), onSize(), PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), PCB_DRAW_PANEL_GAL::RedrawRatsnest(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), PL_DRAW_PANEL_GAL::setDefaultLayerDeps(), SCH_DRAW_PANEL::setDefaultLayerDeps(), SCH_PREVIEW_PANEL::setDefaultLayerDeps(), GERBVIEW_DRAW_PANEL_GAL::setDefaultLayerDeps(), PCB_DRAW_PANEL_GAL::setDefaultLayerDeps(), SCH_DRAW_PANEL::setDefaultLayerOrder(), SCH_PREVIEW_PANEL::setDefaultLayerOrder(), PCB_DRAW_PANEL_GAL::setDefaultLayerOrder(), GERBVIEW_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), SetHighContrastLayer(), GERBVIEW_DRAW_PANEL_GAL::SetTopLayer(), PL_DRAW_PANEL_GAL::SetTopLayer(), PCB_DRAW_PANEL_GAL::SetTopLayer(), SetTopLayer(), PCB_DRAW_PANEL_GAL::SetWorksheet(), GERBVIEW_DRAW_PANEL_GAL::SetWorksheet(), GERBVIEW_DRAW_PANEL_GAL::SwitchBackend(), SwitchBackend(), PCB_DRAW_PANEL_GAL::SyncLayersVisibility(), PCB_DRAW_PANEL_GAL::UpdateColors(), SCH_PREVIEW_PANEL::view(), and ~EDA_DRAW_PANEL_GAL().

◆ m_viewControls

◆ MinRefreshPeriod

const int EDA_DRAW_PANEL_GAL::MinRefreshPeriod = 17
staticprotected

60 FPS.

Definition at line 237 of file class_draw_panel_gal.h.

Referenced by Refresh().


The documentation for this class was generated from the following files: