KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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 WIDGET_DIFF_CANVAS FOOTPRINT_PREVIEW_PANEL ZONE_PREVIEW_CANVAS

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.
 
 ~EDA_DRAW_PANEL_GAL ()
 
void SetFocus () override
 
bool StatusPopupHasFocus ()
 
void SetStatusPopup (wxWindow *aPopup)
 
virtual bool SwitchBackend (GAL_TYPE aGalType)
 Switch method of rendering graphics.
 
void UpdateTouchpadGestureHandler ()
 Apply the current native touchpad gesture preference to the active backend window.
 
GAL_TYPE GetBackend () const
 Return the type of backend currently used by GAL canvas.
 
KIGFX::GAL * GetGAL () const
 Return a pointer to the GAL instance used in the panel.
 
virtual KIGFX::VIEW * GetView () const
 Return a pointer to the KIGFX::VIEW instance used in the panel.
 
KIGFX::VIEW_CONTROLS * GetViewControls () const
 Return a pointer to the KIGFX::VIEW_CONTROLS instance used in the panel.
 
bool GetScreenshot (wxImage &aDstImage)
 Capture the current canvas contents into aDstImage.
 
virtual void Refresh (bool aEraseBackground=true, const wxRect *aRect=nullptr) override
 
void ForceRefresh ()
 Force a redraw.
 
void RequestRefresh ()
 Make sure a refresh gets done on the next idle event if it hasn't already.
 
void UpdateOverlayExclusions ()
 Tell the backend which areas of this panel are covered by an overlaid infobar.
 
void ResizeGal (bool aForce=false)
 Resize the GAL to the current client size of this panel.
 
void SetEventDispatcher (TOOL_DISPATCHER *aEventDispatcher)
 Set a dispatcher that processes events and forwards them to tools.
 
void StartDrawing ()
 Begin drawing if it was stopped previously.
 
void StopDrawing ()
 Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.
 
virtual void SetHighContrastLayer (int aLayer)
 Take care of display settings for the given layer to be displayed in high contrast mode.
 
virtual void SetTopLayer (int aLayer)
 Move the selected layer to the top, so it is displayed above all others.
 
virtual void GetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
 
EDA_DRAW_FRAME * GetParentEDAFrame () const
 Returns parent EDA_DRAW_FRAME, if available or NULL otherwise.
 
bool IsDialogPreview () const
 
virtual void OnShow ()
 Called when the window is shown for the first time.
 
void SetStealsFocus (bool aStealsFocus)
 Set whether focus is taken on certain events (mouseover, keys, etc).
 
void SetCurrentCursor (KICURSOR aCursor)
 Set the current cursor shape for this panel.
 
virtual BOX2I GetDefaultViewBBox () const
 Return the bounding box of the view that should be used if model is not valid.
 
void OnEvent (wxEvent &aEvent)
 Used to forward events to the canvas from popups, etc.
 
bool DoRePaint (bool aAllowSkip=true)
 Repaint the canvas, and fix scrollbar cursors.
 
std::shared_ptr< KIGFX::VIEW_OVERLAY > DebugOverlay ()
 Create an overlay for rendering debug graphics.
 
void ClearDebugOverlay ()
 Clear the contents of the debug overlay and removes it from the VIEW.
 
virtual void prepareGridSources ()
 Hook for subclasses to push per-frame grid sources onto the GAL.
 

Static Public Member Functions

static GAL_TYPE ResolveStoredCanvasType (int aStoredCanvasType)
 Convert a stored canvas type setting into a backend that can actually be used.
 
static KIGFX::VC_SETTINGS GetVcSettings ()
 Gets a populated View Controls settings object dervived from our program settings.
 

Public Attributes

bool m_MouseCapturedLost
 used on wxMSW: true after a wxEVT_MOUSE_CAPTURE_LOST was received false after the mouse is recaptured.
 
std::unique_ptr< PROF_COUNTER > m_PaintEventCounter
 

Static Public Attributes

static constexpr GAL_TYPE GAL_FALLBACK = GAL_TYPE_CAIRO
 
static constexpr bool GAL_FALLBACK_AVAILABLE = GAL_FALLBACK != GAL_TYPE_OPENGL
 

Protected Member Functions

virtual void onPaint (wxPaintEvent &WXUNUSED(aEvent))
 
void onSize (wxSizeEvent &aEvent)
 
void onEnter (wxMouseEvent &aEvent)
 
void onLostFocus (wxFocusEvent &aEvent)
 
void onIdle (wxIdleEvent &aEvent)
 
void onRefreshTimer (wxTimerEvent &aEvent)
 
void onShowEvent (wxShowEvent &aEvent)
 
bool recoverFromGalError (const std::exception &aErr)
 
bool handleContextLoss ()
 Replace a GAL whose context was destroyed by a GPU reset.
 
void showMessageLater (const wxString &aTitle, const wxString &aDetail, bool aError)
 Show a recovery message once the current event finishes.
 

Protected Attributes

wxWindow * m_parent
 Pointer to the parent window.
 
EDA_DRAW_FRAME * m_edaFrame
 Parent EDA_DRAW_FRAME (if available)
 
std::chrono::steady_clock::time_point m_lastRepaintStart
 Timestamp of the last repaint start.
 
std::chrono::steady_clock::time_point m_lastRepaintEnd
 Timestamp of the last repaint end.
 
wxTimer m_refreshTimer
 Timer to prevent too-frequent refreshing.
 
std::mutex m_refreshMutex
 Blocks multiple calls to the draw.
 
bool m_drawing
 True if GAL is currently redrawing the view.
 
bool m_drawingEnabled
 Flag that determines if VIEW may use GAL for redrawing the screen.
 
bool m_needIdleRefresh
 True when canvas needs to be refreshed from idle handler.
 
VECTOR2D m_lastCursorPosition
 Last cursor position sent to GAL for drawing.
 
KIGFX::GAL * m_gal
 Interface for drawing objects on a 2D-surface.
 
KIGFX::VIEW * m_view
 Stores view settings (scale, center, etc.) and items to be drawn.
 
std::unique_ptr< KIGFX::PAINTER > m_painter
 Contains information about how to draw items using GAL.
 
KIGFX::WX_VIEW_CONTROLS * m_viewControls
 Control for VIEW (moving, zooming, etc.)
 
GAL_TYPE m_backend
 Currently used GAL.
 
KIGFX::GAL_DISPLAY_OPTIONS & m_options
 
TOOL_DISPATCHER * m_eventDispatcher
 Processes and forwards events to tools.
 
bool m_lostFocus
 Flag to indicate that focus should be regained on the next mouse event.
 
bool m_glRecoveryAttempted
 Set after an OpenGL recovery attempt to prevent infinite retry loops.
 
int m_contextBindFailures
 Consecutive frames dropped because the GL context could not be made current.
 
bool m_rebuiltAfterReset
 The GAL was rebuilt after a GPU reset and has not completed a frame yet.
 
bool m_pendingResize
 Set when a size change could not be applied because the GL context was unavailable.
 
bool m_stealsFocus
 Flag to indicate whether the panel should take focus at certain times (when moused over, and on various mouse/key events)
 
wxWindow * m_statusPopup
 
std::shared_ptr< KIGFX::VIEW_OVERLAY > m_debugOverlay
 Optional overlay for drawing transient debug objects.
 
std::unique_ptr< KIPLATFORM::UI::TOUCHPAD_GESTURE_HANDLER > m_touchpadGestureHandler
 

Detailed Description

Definition at line 66 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 69 of file class_draw_panel_gal.h.

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.
aWindowIdis the ID for this draw panel.
aPositionis the position of the panel.
aSizeis the size of the panel.
aOptionsare the display options for the panel.
aGalTypeis the type of graphics abstraction layer (GAL) for the panel.

Definition at line 69 of file draw_panel_gal.cpp.

References KIGFX::WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE, GAL_TYPE_NONE, KIPLATFORM::UI::ImmControl(), m_backend, m_contextBindFailures, m_drawing, m_drawingEnabled, m_edaFrame, m_eventDispatcher, m_gal, m_glRecoveryAttempted, m_lostFocus, m_MouseCapturedLost, m_needIdleRefresh, m_options, m_painter, m_PaintEventCounter, m_parent, m_pendingResize, m_rebuiltAfterReset, m_refreshTimer, m_statusPopup, m_stealsFocus, m_view, m_viewControls, onEnter(), OnEvent(), onLostFocus(), onRefreshTimer(), onShowEvent(), onSize(), Pgm(), KIPLATFORM::UI::SetOverlayScrolling(), and SwitchBackend().

Referenced by GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), FOOTPRINT_PREVIEW_PANEL::GetCanvas(), PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), and WIDGET_DIFF_CANVAS::WIDGET_DIFF_CANVAS().

◆ ~EDA_DRAW_PANEL_GAL()

EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL ( )

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 1069 of file draw_panel_gal.cpp.

References m_debugOverlay, and m_view.

◆ DebugOverlay()

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

Create an overlay for rendering debug graphics.

Definition at line 1057 of file draw_panel_gal.cpp.

References m_debugOverlay, and m_view.

◆ DoRePaint()

◆ 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 drawing sheet bounding box for an empty PCB

Returns
the default bounding box for the panel.

Reimplemented in GERBVIEW_DRAW_PANEL_GAL, and PCB_DRAW_PANEL_GAL.

Definition at line 276 of file class_draw_panel_gal.h.

Referenced by COMMON_TOOLS::doCenter(), and COMMON_TOOLS::ZoomFitBox().

◆ GetGAL()

◆ GetMsgPanelInfo()

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

Reimplemented in GERBVIEW_DRAW_PANEL_GAL, PCB_DRAW_PANEL_GAL, and PL_DRAW_PANEL_GAL.

Definition at line 240 of file class_draw_panel_gal.h.

◆ GetParentEDAFrame()

◆ GetScreenshot()

bool EDA_DRAW_PANEL_GAL::GetScreenshot ( wxImage & aDstImage)

Capture the current canvas contents into aDstImage.

Returns
true on success, false if the backend can't be captured this way (the caller should fall back to a DC blit).

Definition at line 719 of file draw_panel_gal.cpp.

References DoRePaint(), GAL_TYPE_OPENGL, GetScreenshot(), m_backend, and m_gal.

Referenced by GetScreenshot().

◆ GetVcSettings()

KIGFX::VC_SETTINGS EDA_DRAW_PANEL_GAL::GetVcSettings ( )
static

Gets a populated View Controls settings object dervived from our program settings.

Definition at line 1079 of file draw_panel_gal.cpp.

References COMMON_SETTINGS::INPUT::auto_pan, COMMON_SETTINGS::INPUT::auto_pan_acceleration, COMMON_SETTINGS::INPUT::center_on_zoom, COMMON_SETTINGS::INPUT::drag_left, COMMON_SETTINGS::INPUT::drag_middle, COMMON_SETTINGS::INPUT::drag_right, COMMON_SETTINGS::INPUT::focus_follow_sch_pcb, PGM_BASE::GetCommonSettings(), COMMON_SETTINGS::INPUT::horizontal_pan, KIGFX::VC_SETTINGS::m_autoPanAcceleration, KIGFX::VC_SETTINGS::m_autoPanSettingEnabled, KIGFX::VC_SETTINGS::m_dragLeft, KIGFX::VC_SETTINGS::m_dragMiddle, KIGFX::VC_SETTINGS::m_dragRight, KIGFX::VC_SETTINGS::m_focusFollowSchPcb, KIGFX::VC_SETTINGS::m_horizontalPan, COMMON_SETTINGS::m_Input, KIGFX::VC_SETTINGS::m_motionPanModifier, KIGFX::VC_SETTINGS::m_scrollModifierPanH, KIGFX::VC_SETTINGS::m_scrollModifierPanV, KIGFX::VC_SETTINGS::m_scrollModifierZoom, KIGFX::VC_SETTINGS::m_scrollReversePanH, KIGFX::VC_SETTINGS::m_scrollReverseZoom, KIGFX::VC_SETTINGS::m_warpCursor, KIGFX::VC_SETTINGS::m_zoomAcceleration, KIGFX::VC_SETTINGS::m_zoomSpeed, KIGFX::VC_SETTINGS::m_zoomSpeedAuto, COMMON_SETTINGS::INPUT::motion_pan_modifier, Pgm(), COMMON_SETTINGS::INPUT::reverse_scroll_pan_h, COMMON_SETTINGS::INPUT::reverse_scroll_zoom, COMMON_SETTINGS::INPUT::scroll_modifier_pan_h, COMMON_SETTINGS::INPUT::scroll_modifier_pan_v, COMMON_SETTINGS::INPUT::scroll_modifier_zoom, COMMON_SETTINGS::INPUT::zoom_acceleration, COMMON_SETTINGS::INPUT::zoom_speed, and COMMON_SETTINGS::INPUT::zoom_speed_auto.

Referenced by EDA_3D_VIEWER_FRAME::applySettings(), EDA_3D_VIEWER_FRAME::configureCanvas(), and SwitchBackend().

◆ GetView()

◆ GetViewControls()

◆ handleContextLoss()

bool EDA_DRAW_PANEL_GAL::handleContextLoss ( )
protected

Replace a GAL whose context was destroyed by a GPU reset.

Returns
true if the GAL was replaced, so the current repaint must stop.

Definition at line 273 of file draw_panel_gal.cpp.

References _, GAL_FALLBACK, GAL_FALLBACK_AVAILABLE, GAL_TYPE_NONE, m_backend, m_gal, m_rebuiltAfterReset, m_refreshTimer, KIGFX::NONE, KIGFX::RECOVERABLE, KIGFX::REPEATED, EDA_DRAW_FRAME::SetOpenGLFailureOccurred(), showMessageLater(), StartDrawing(), SwitchBackend(), and traceGalContext.

Referenced by DoRePaint(), and recoverFromGalError().

◆ IsDialogPreview()

bool EDA_DRAW_PANEL_GAL::IsDialogPreview ( ) const
inline

◆ onEnter()

void EDA_DRAW_PANEL_GAL::onEnter ( wxMouseEvent & aEvent)
protected

◆ OnEvent()

void EDA_DRAW_PANEL_GAL::OnEvent ( wxEvent & aEvent)

◆ onIdle()

void EDA_DRAW_PANEL_GAL::onIdle ( wxIdleEvent & aEvent)
protected

Definition at line 1010 of file draw_panel_gal.cpp.

References m_needIdleRefresh, and Refresh().

Referenced by ForceRefresh(), and StopDrawing().

◆ onLostFocus()

void EDA_DRAW_PANEL_GAL::onLostFocus ( wxFocusEvent & aEvent)
protected

Definition at line 994 of file draw_panel_gal.cpp.

References m_eventDispatcher, m_lostFocus, and m_viewControls.

Referenced by EDA_DRAW_PANEL_GAL().

◆ onPaint()

void EDA_DRAW_PANEL_GAL::onPaint ( wxPaintEvent & WXUNUSEDaEvent)
protectedvirtual

◆ onRefreshTimer()

void EDA_DRAW_PANEL_GAL::onRefreshTimer ( wxTimerEvent & aEvent)
protected

Definition at line 1022 of file draw_panel_gal.cpp.

References ForceRefresh().

Referenced by EDA_DRAW_PANEL_GAL().

◆ OnShow()

virtual void EDA_DRAW_PANEL_GAL::OnShow ( )
inlinevirtual

Called when the window is shown for the first time.

Reimplemented in GERBVIEW_DRAW_PANEL_GAL, PCB_DRAW_PANEL_GAL, SCH_DRAW_PANEL, and SCH_PREVIEW_PANEL.

Definition at line 255 of file class_draw_panel_gal.h.

Referenced by onShowEvent().

◆ onShowEvent()

void EDA_DRAW_PANEL_GAL::onShowEvent ( wxShowEvent & aEvent)
protected

Definition at line 1028 of file draw_panel_gal.cpp.

References m_gal, and OnShow().

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

◆ onSize()

void EDA_DRAW_PANEL_GAL::onSize ( wxSizeEvent & aEvent)
protected

Definition at line 585 of file draw_panel_gal.cpp.

References ResizeGal().

Referenced by EDA_DRAW_PANEL_GAL().

◆ prepareGridSources()

virtual void EDA_DRAW_PANEL_GAL::prepareGridSources ( )
inlinevirtual

Hook for subclasses to push per-frame grid sources onto the GAL.

Called from DoRePaint just before GAL::DrawGrid.

Reimplemented in PCB_DRAW_PANEL_GAL.

Definition at line 324 of file class_draw_panel_gal.h.

Referenced by DoRePaint().

◆ recoverFromGalError()

bool EDA_DRAW_PANEL_GAL::recoverFromGalError ( const std::exception & aErr)
protected

◆ Refresh()

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

Reimplemented in SCH_PREVIEW_PANEL.

Definition at line 656 of file draw_panel_gal.cpp.

References delta, DoRePaint(), m_gal, m_lastRepaintStart, m_refreshTimer, and RequestRefresh().

Referenced by PCB_EDIT_FRAME::ActivateGalCanvas(), SYMBOL_EDIT_FRAME::activateSymbolTab(), SCH_EDIT_FRAME::AnnotateSymbols(), WIDGET_DIFF_CANVAS::CenterOnHighlight(), GERBVIEW_CONTROL::ClearAllLayers(), SYMBOL_EDIT_FRAME::CommonSettingsChanged(), PCB_BASE_EDIT_FRAME::configureToolbars(), FOOTPRINT_EDITOR_CONTROL::CreateFootprintFromWizard(), COMMON_TOOLS::doCenter(), SCH_EDIT_FRAME::EditVariantDescription(), GERBVIEW_FRAME::Erase_Current_DrawLayer(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), FOOTPRINT_PREVIEW_PANEL::fitToCurrentFootprint(), PCB_BASE_FRAME::FocusOnItems(), PL_EDITOR_FRAME::GetLayoutFromRedoList(), PL_EDITOR_FRAME::GetLayoutFromUndoList(), PCB_VIEWER_TOOLS::GraphicOutlines(), API_HANDLER_SCH::handleDeleteVariant(), PCB_EDIT_FRAME::HandleRemoteNetHighlight(), API_HANDLER_PCB::handleSetBoardEditorAppearanceSettings(), PL_EDITOR_FRAME::HardRedraw(), GERBVIEW_CONTROL::HighlightControl(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), POSITION_RELATIVE_TOOL::InteractiveOffset(), SCH_EDIT_FRAME::KiwayMailIn(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary(), GERBVIEW_FRAME::LoadListOfGerberAndDrillFiles(), SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic(), GERBVIEW_CONTROL::LoadZipfile(), PCB_VIEWER_TOOLS::MeasureTool(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), OnEvent(), PANEL_COMPONENT_CLASS_ASSIGNMENT::OnHighlightItemsClick(), onIdle(), SCH_EDIT_FRAME::OnModify(), PCB_EDIT_FRAME::OnNetlistChanged(), SCH_EDIT_FRAME::onNetNavigatorSelection(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), GERBVIEW_FRAME::OnSelectActiveDCode(), GERBVIEW_FRAME::OnSelectActiveLayer(), PL_EDITOR_FRAME::OnSelectCoordOriginCorner(), PL_EDITOR_FRAME::OnSelectPage(), PCB_EDIT_FRAME::onVariantSelected(), GERBVIEW_CONTROL::OpenJobFile(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), GERBVIEW_CONTROL::OpenZipFile(), PCB_VIEWER_TOOLS::PadDisplayMode(), ROUTER_TOOL::performRouting(), ROUTER_TOOL::prepareInteractive(), PCB_CONTROL::RatsnestModeCycle(), WIDGET_DIFF_CANVAS::rebuildOverlay(), SYMBOL_EDIT_FRAME::RebuildView(), SYMBOL_VIEWER_FRAME::ReCreateLibList(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), FOOTPRINT_WIZARD_FRAME::ReCreateParameterList(), SCH_BASE_FRAME::RedrawScreen(), SCH_PREVIEW_PANEL::Refresh(), ZONE_FILLER_TOOL::refresh(), EDA_DRAW_FRAME::RefreshCanvas(), PCB_EDIT_FRAME::RefreshDrillSymbols(), SCH_EDIT_FRAME::RefreshErcMarkers(), FOOTPRINT_WIZARD_FRAME::RegenerateFootprint(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), GERBVIEW_CONTROL::ReloadAllLayers(), DISPLAY_FOOTPRINTS_FRAME::ReloadFootprint(), GERBVIEW_FRAME::RemapLayers(), SCH_EDIT_FRAME::RemoveVariant(), SCH_EDITOR_CONTROL::ReplaceTerminalPin(), PCB_BASE_EDIT_FRAME::RestoreCopyFromRedoList(), PCB_BASE_EDIT_FRAME::RestoreCopyFromUndoList(), FOOTPRINT_EDIT_FRAME::RevertFootprint(), PCB_BASE_EDIT_FRAME::RollbackFromUndo(), PL_EDITOR_FRAME::RollbackFromUndo(), SCH_EDIT_FRAME::RollbackSchematicFromUndo(), SCH_EDIT_FRAME::SaveProject(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), FOOTPRINT_EDIT_FRAME::SetActiveLayer(), GERBVIEW_FRAME::SetActiveLayer(), PCB_EDIT_FRAME::SetActiveLayer(), WIDGET_DIFF_CANVAS::SetContextPainter(), SYMBOL_EDIT_FRAME::SetCurSymbol(), PCB_BASE_FRAME::SetDisplayOptions(), EDA_DRAW_FRAME::SetGridVisibility(), GERBVIEW_FRAME::SetLayerDrawPrms(), PCB_BASE_FRAME::SetPlotSettings(), SYMBOL_VIEWER_FRAME::SetSelectedLibrary(), PCB_EDIT_FRAME::ShowBoardSetupDialog(), SYMBOL_EDIT_FRAME::ShowChangedLanguage(), PCB_EDIT_FRAME::ShowFootprintPropertiesDialog(), PCB_VIEWER_TOOLS::ShowPadNumbers(), SCH_EDIT_FRAME::ShowSchematicSetupDialog(), SCH_EDIT_FRAME::subscribeConnectivity(), SCH_DRAW_PANEL::SwitchBackend(), PCB_BASE_FRAME::SwitchLayer(), PCB_EDIT_FRAME::SwitchLayer(), PCB_VIEWER_TOOLS::TextOutlines(), PCB_CONTROL::ToggleRatsnest(), PCB_CONTROL::TrackDisplayMode(), SYMBOL_VIEWER_FRAME::updatePreviewSymbol(), PANEL_ASSIGN_COMPONENT_CLASSES::Validate(), PCB_CONTROL::ViaDisplayMode(), PCB_CONTROL::ZoneDisplayMode(), GLOBAL_EDIT_TOOL::ZonesManager(), COMMON_TOOLS::ZoomFitBox(), ZONE_PREVIEW_CANVAS::ZoomFitScreen(), and WIDGET_DIFF_CANVAS::ZoomToBBox().

◆ RequestRefresh()

void EDA_DRAW_PANEL_GAL::RequestRefresh ( )

Make sure a refresh gets done on the next idle event if it hasn't already.

Definition at line 650 of file draw_panel_gal.cpp.

References m_needIdleRefresh.

Referenced by DoRePaint(), ZONE_PREVIEW_CANVAS::LockZoom(), Refresh(), ResizeGal(), PCB_EDIT_FRAME::SetActiveLayer(), ZONE_PREVIEW_CANVAS::ZONE_PREVIEW_CANVAS(), and ZONE_PREVIEW_CANVAS::ZoomFitScreen().

◆ ResizeGal()

void EDA_DRAW_PANEL_GAL::ResizeGal ( bool aForce = false)

Resize the GAL to the current client size of this panel.

This must be used in preference to calling GAL::ResizeScreen() directly: it holds the GL context lock while the compositor buffers are reallocated, clamps degenerate sizes and invalidates the view.

Parameters
aForcereallocates even when the client size is unchanged, which is required after a display scale factor change because the buffers are sized in native pixels rather than client units.

Definition at line 591 of file draw_panel_gal.cpp.

References m_gal, m_pendingResize, m_view, RequestRefresh(), and ToVECTOR2I().

Referenced by DoRePaint(), EDA_DRAW_FRAME::OnMove(), and onSize().

◆ ResolveStoredCanvasType()

EDA_DRAW_PANEL_GAL::GAL_TYPE EDA_DRAW_PANEL_GAL::ResolveStoredCanvasType ( int aStoredCanvasType)
static

Convert a stored canvas type setting into a backend that can actually be used.

A settings file may have been written by hand or by another version of KiCad, so a value outside the supported range is bad data rather than a programming error. It resolves to the accelerated canvas, as does the retired wxDC canvas (GAL_TYPE_NONE).

Parameters
aStoredCanvasTypeis the raw COMMON_SETTINGS graphics.canvas_type value.
Returns
a GAL type that SwitchBackend() implements.

Definition at line 779 of file draw_panel_gal.cpp.

References GAL_TYPE_CAIRO, and GAL_TYPE_OPENGL.

Referenced by PANEL_COMMON_SETTINGS::applySettingsToPanel(), PANEL_SYMBOL_CHOOSER::constructRightPanel(), EDA_DRAW_FRAME::loadCanvasTypeSetting(), FOOTPRINT_PREVIEW_PANEL::New(), and PANEL_EESCHEMA_COLOR_SETTINGS::PANEL_EESCHEMA_COLOR_SETTINGS().

◆ SetCurrentCursor()

void EDA_DRAW_PANEL_GAL::SetCurrentCursor ( KICURSOR aCursor)

Set the current cursor shape for this panel.

Definition at line 1037 of file draw_panel_gal.cpp.

References DPI_SCALING_COMMON::GetContentScaleFactor(), m_gal, and m_parent.

Referenced by EDIT_TOOL::doMoveSelection(), PAD_TOOL::EnumeratePads(), PCB_VIEWER_TOOLS::MeasureTool(), and SwitchBackend().

◆ SetEventDispatcher()

void EDA_DRAW_PANEL_GAL::SetEventDispatcher ( TOOL_DISPATCHER * aEventDispatcher)

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

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

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

Definition at line 734 of file draw_panel_gal.cpp.

References m_eventDispatcher.

Referenced by GERBVIEW_FRAME::ActivateGalCanvas(), PCB_BASE_FRAME::ActivateGalCanvas(), DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME(), FOOTPRINT_EDIT_FRAME::doCloseWindow(), FOOTPRINT_CHOOSER_FRAME::FOOTPRINT_CHOOSER_FRAME(), FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME(), FOOTPRINT_EDIT_FRAME::setupTools(), PL_EDITOR_FRAME::setupTools(), SCH_EDIT_FRAME::setupTools(), SYMBOL_EDIT_FRAME::setupTools(), and SYMBOL_VIEWER_FRAME::setupTools().

◆ SetFocus()

◆ 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 GERBVIEW_DRAW_PANEL_GAL, and PCB_DRAW_PANEL_GAL.

Definition at line 757 of file draw_panel_gal.cpp.

References KIGFX::RENDER_SETTINGS::ClearHighContrastLayers(), m_view, KIGFX::RENDER_SETTINGS::SetLayerIsHighContrast(), and SetTopLayer().

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

◆ SetStatusPopup()

◆ 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 263 of file class_draw_panel_gal.h.

References m_stealsFocus.

Referenced by SYMBOL_VIEWER_FRAME::ClickOnSymbolList(), FOOTPRINT_PREVIEW_PANEL::FOOTPRINT_PREVIEW_PANEL(), and SYMBOL_VIEWER_FRAME::SetSelectedLibrary().

◆ 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 GERBVIEW_DRAW_PANEL_GAL, PCB_DRAW_PANEL_GAL, and PL_DRAW_PANEL_GAL.

Definition at line 771 of file draw_panel_gal.cpp.

References m_view.

Referenced by SetHighContrastLayer().

◆ showMessageLater()

void EDA_DRAW_PANEL_GAL::showMessageLater ( const wxString & aTitle,
const wxString & aDetail,
bool aError )
protected

Show a recovery message once the current event finishes.

Recovery runs inside a repaint, where a modal dialog would stop every canvas from painting until it was closed.

Definition at line 332 of file draw_panel_gal.cpp.

References DisplayErrorMessage(), DisplayInfoMessage(), and m_parent.

Referenced by DoRePaint(), handleContextLoss(), recoverFromGalError(), and SwitchBackend().

◆ StartDrawing()

◆ StatusPopupHasFocus()

bool EDA_DRAW_PANEL_GAL::StatusPopupHasFocus ( )
inline

Definition at line 106 of file class_draw_panel_gal.h.

References m_statusPopup.

◆ StopDrawing()

◆ SwitchBackend()

◆ UpdateOverlayExclusions()

void EDA_DRAW_PANEL_GAL::UpdateOverlayExclusions ( )

Tell the backend which areas of this panel are covered by an overlaid infobar.

Must be called whenever an infobar is shown, hidden or moved.

Definition at line 630 of file draw_panel_gal.cpp.

References m_gal, and KIGFX::CAIRO_GAL::SetOverlayExclusions().

Referenced by SwitchBackend().

◆ UpdateTouchpadGestureHandler()

Member Data Documentation

◆ GAL_FALLBACK

◆ GAL_FALLBACK_AVAILABLE

bool EDA_DRAW_PANEL_GAL::GAL_FALLBACK_AVAILABLE = GAL_FALLBACK != GAL_TYPE_OPENGL
staticconstexpr

Definition at line 83 of file class_draw_panel_gal.h.

Referenced by handleContextLoss(), recoverFromGalError(), and SwitchBackend().

◆ m_backend

◆ m_contextBindFailures

int EDA_DRAW_PANEL_GAL::m_contextBindFailures
protected

Consecutive frames dropped because the GL context could not be made current.

Definition at line 400 of file class_draw_panel_gal.h.

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

◆ 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 415 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 362 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), 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 365 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), ForceRefresh(), 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 390 of file class_draw_panel_gal.h.

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

◆ m_gal

◆ m_glRecoveryAttempted

bool EDA_DRAW_PANEL_GAL::m_glRecoveryAttempted
protected

Set after an OpenGL recovery attempt to prevent infinite retry loops.

Definition at line 397 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), and recoverFromGalError().

◆ m_lastCursorPosition

VECTOR2D EDA_DRAW_PANEL_GAL::m_lastCursorPosition
protected

Last cursor position sent to GAL for drawing.

Definition at line 371 of file class_draw_panel_gal.h.

Referenced by DoRePaint().

◆ m_lastRepaintEnd

std::chrono::steady_clock::time_point EDA_DRAW_PANEL_GAL::m_lastRepaintEnd
protected

Timestamp of the last repaint end.

Definition at line 356 of file class_draw_panel_gal.h.

Referenced by DoRePaint().

◆ m_lastRepaintStart

std::chrono::steady_clock::time_point EDA_DRAW_PANEL_GAL::m_lastRepaintStart
protected

Timestamp of the last repaint start.

Definition at line 355 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 394 of file class_draw_panel_gal.h.

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

◆ m_MouseCapturedLost

bool EDA_DRAW_PANEL_GAL::m_MouseCapturedLost

used on wxMSW: true after a wxEVT_MOUSE_CAPTURE_LOST was received false after the mouse is recaptured.

Used to avoid calling twice a CaptureMouse(), not accepted by wxMSW

Definition at line 316 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL().

◆ m_needIdleRefresh

bool EDA_DRAW_PANEL_GAL::m_needIdleRefresh
protected

True when canvas needs to be refreshed from idle handler.

Definition at line 368 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), onIdle(), and RequestRefresh().

◆ m_options

KIGFX::GAL_DISPLAY_OPTIONS& EDA_DRAW_PANEL_GAL::m_options
protected

Definition at line 387 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), and SwitchBackend().

◆ m_painter

◆ m_PaintEventCounter

std::unique_ptr<PROF_COUNTER> EDA_DRAW_PANEL_GAL::m_PaintEventCounter

Definition at line 318 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL().

◆ m_parent

wxWindow* EDA_DRAW_PANEL_GAL::m_parent
protected

Pointer to the parent window.

Definition at line 352 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), IsDialogPreview(), SetCurrentCursor(), and showMessageLater().

◆ m_pendingResize

bool EDA_DRAW_PANEL_GAL::m_pendingResize
protected

Set when a size change could not be applied because the GL context was unavailable.

Definition at line 406 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), ResizeGal(), and SwitchBackend().

◆ m_rebuiltAfterReset

bool EDA_DRAW_PANEL_GAL::m_rebuiltAfterReset
protected

The GAL was rebuilt after a GPU reset and has not completed a frame yet.

Definition at line 403 of file class_draw_panel_gal.h.

Referenced by DoRePaint(), EDA_DRAW_PANEL_GAL(), handleContextLoss(), and recoverFromGalError().

◆ m_refreshMutex

std::mutex EDA_DRAW_PANEL_GAL::m_refreshMutex
protected

Blocks multiple calls to the draw.

Definition at line 359 of file class_draw_panel_gal.h.

Referenced by DoRePaint().

◆ m_refreshTimer

wxTimer EDA_DRAW_PANEL_GAL::m_refreshTimer
protected

Timer to prevent too-frequent refreshing.

Definition at line 357 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), ForceRefresh(), handleContextLoss(), Refresh(), StartDrawing(), and StopDrawing().

◆ m_statusPopup

wxWindow* EDA_DRAW_PANEL_GAL::m_statusPopup
protected

Definition at line 412 of file class_draw_panel_gal.h.

Referenced by EDA_DRAW_PANEL_GAL(), SetStatusPopup(), and StatusPopupHasFocus().

◆ 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 410 of file class_draw_panel_gal.h.

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

◆ m_touchpadGestureHandler

std::unique_ptr<KIPLATFORM::UI::TOUCHPAD_GESTURE_HANDLER> EDA_DRAW_PANEL_GAL::m_touchpadGestureHandler
protected

◆ 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 377 of file class_draw_panel_gal.h.

Referenced by WIDGET_DIFF_CANVAS::CenterOnHighlight(), ClearDebugOverlay(), DebugOverlay(), PCB_DRAW_PANEL_GAL::DisplayBoard(), PL_DRAW_PANEL_GAL::DisplayDrawingSheet(), DoRePaint(), EDA_DRAW_PANEL_GAL(), GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), GERBVIEW_DRAW_PANEL_GAL::GetDefaultViewBBox(), PCB_DRAW_PANEL_GAL::GetDefaultViewBBox(), GetView(), PCB_DRAW_PANEL_GAL::GetView(), SCH_DRAW_PANEL::GetView(), ZONE_PREVIEW_CANVAS::LockZoom(), WIDGET_DIFF_CANVAS::onDoubleClick(), GERBVIEW_DRAW_PANEL_GAL::OnShow(), PCB_DRAW_PANEL_GAL::OnShow(), SCH_DRAW_PANEL::OnShow(), PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), WIDGET_DIFF_CANVAS::rebuildOverlay(), PCB_DRAW_PANEL_GAL::RedrawRatsnest(), WIDGET_DIFF_CANVAS::refreshItemDimming(), ResizeGal(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), WIDGET_DIFF_CANVAS::SetCategoryVisible(), WIDGET_DIFF_CANVAS::SetContextItems(), WIDGET_DIFF_CANVAS::SetContextPainter(), GERBVIEW_DRAW_PANEL_GAL::setDefaultLayerDeps(), PCB_DRAW_PANEL_GAL::setDefaultLayerDeps(), PL_DRAW_PANEL_GAL::setDefaultLayerDeps(), SCH_DRAW_PANEL::setDefaultLayerDeps(), SCH_PREVIEW_PANEL::setDefaultLayerDeps(), PCB_DRAW_PANEL_GAL::setDefaultLayerOrder(), SCH_DRAW_PANEL::setDefaultLayerOrder(), SCH_PREVIEW_PANEL::setDefaultLayerOrder(), GERBVIEW_DRAW_PANEL_GAL::SetDrawingSheet(), PCB_DRAW_PANEL_GAL::SetDrawingSheet(), SetHighContrastLayer(), GERBVIEW_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), WIDGET_DIFF_CANVAS::SetItemCategories(), WIDGET_DIFF_CANVAS::SetLayerVisible(), SetTopLayer(), GERBVIEW_DRAW_PANEL_GAL::SetTopLayer(), PCB_DRAW_PANEL_GAL::SetTopLayer(), PL_DRAW_PANEL_GAL::SetTopLayer(), WIDGET_DIFF_CANVAS::shapeAt(), SwitchBackend(), GERBVIEW_DRAW_PANEL_GAL::SwitchBackend(), PCB_DRAW_PANEL_GAL::SyncLayersVisibility(), PCB_DRAW_PANEL_GAL::UpdateColors(), SCH_PREVIEW_PANEL::view(), WIDGET_DIFF_CANVAS::WIDGET_DIFF_CANVAS(), ZONE_PREVIEW_CANVAS::ZONE_PREVIEW_CANVAS(), ZONE_PREVIEW_CANVAS::ZoomFitScreen(), WIDGET_DIFF_CANVAS::ZoomToBBox(), ~EDA_DRAW_PANEL_GAL(), and WIDGET_DIFF_CANVAS::~WIDGET_DIFF_CANVAS().

◆ m_viewControls


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