KiCad PCB EDA Suite
EDA_DRAW_PANEL Class Reference

#include <class_drawpanel.h>

Inheritance diagram for EDA_DRAW_PANEL:

Public Member Functions

 EDA_DRAW_PANEL (EDA_DRAW_FRAME *parent, int id, const wxPoint &pos, const wxSize &size)
 
 ~EDA_DRAW_PANEL ()
 
void * GetDisplayOptions ()
 Function GetDisplayOptions A way to pass info to draw functions. More...
 
BASE_SCREENGetScreen ()
 
EDA_DRAW_FRAMEGetParent () const
 
void OnPaint (wxPaintEvent &event)
 
EDA_RECTGetClipBox ()
 
void SetClipBox (const EDA_RECT &aRect)
 
bool GetAbortRequest () const
 
void SetAbortRequest (bool aAbortRequest)
 
bool GetEnableMousewheelPan () const
 
void SetEnableMousewheelPan (bool aEnable)
 
bool GetEnableZoomNoCenter () const
 
void SetEnableZoomNoCenter (bool aEnable)
 
bool GetEnableAutoPan () const
 
void SetEnableAutoPan (bool aEnable)
 
void SetAutoPanRequest (bool aEnable)
 
void SetIgnoreMouseEvents (bool aIgnore)
 
void SetIgnoreLeftButtonReleaseEvent (bool aIgnore)
 
void SetEnableBlockCommands (bool aEnable)
 
bool GetPrintMirrored () const
 
void SetPrintMirrored (bool aMirror)
 
void SetCanStartBlock (int aStartBlock)
 
void DrawBackGround (wxDC *DC)
 Function DrawBackGround. More...
 
void DrawGrid (wxDC *aDC)
 Function DrawGrid draws a grid to aDC. More...
 
void DrawAuxiliaryAxis (wxDC *aDC, GR_DRAWMODE aDrawMode)
 Function DrawAuxiliaryAxis Draw the Auxiliary Axis, used in Pcbnew which as origin coordinates for gerber and excellon files. More...
 
void DrawGridAxis (wxDC *aDC, GR_DRAWMODE aDrawMode, const wxPoint &aGridOrigin)
 Function DrawGridAxis Draw on auxiliary axis, used in Pcbnew to show grid origin, when the grid origin is set by user, and is not (0,0) More...
 
void OnEraseBackground (wxEraseEvent &event)
 
void OnActivate (wxActivateEvent &event)
 Function OnActivate handles window activation events. More...
 
void OnTimer (wxTimerEvent &event)
 Function OnTimer handle timer events. More...
 
virtual void DoPrepareDC (wxDC &aDC) override
 Function DoPrepareDC sets up the device context aDC for drawing. More...
 
wxRect DeviceToLogical (const wxRect &aRect, wxDC &aDC)
 Function DeviceToLogical converts aRect from device to drawing (logical) coordinates. More...
 
void OnMouseWheel (wxMouseEvent &event)
 Function OnMouseWheel handles mouse wheel events. More...
 
void OnMouseEvent (wxMouseEvent &event)
 
void OnMouseEntering (wxMouseEvent &aEvent)
 
void OnMouseLeaving (wxMouseEvent &event)
 
void OnKeyEvent (wxKeyEvent &event)
 
void OnCharHook (wxKeyEvent &event)
 
void OnPan (wxCommandEvent &event)
 
void EraseScreen (wxDC *DC)
 
void OnScrollWin (wxCommandEvent &event)
 
void OnScroll (wxScrollWinEvent &event)
 
void SetZoom (double mode)
 
double GetZoom ()
 
void SetGrid (const wxRealPoint &size)
 
wxRealPoint GetGrid ()
 
bool OnRightClick (wxMouseEvent &event)
 Function OnRightClick builds and displays a context menu on a right mouse button click. More...
 
bool IsPointOnDisplay (const wxPoint &aPosition)
 Function IsPointOnDisplay. More...
 
void SetClipBox (wxDC &aDC, const wxRect *aRect=NULL)
 Function SetClipBox sets the clip box in drawing (logical) units from aRect in device units. More...
 
void ReDraw (wxDC *aDC, bool aEraseBackground=true)
 
void RefreshDrawingRect (const EDA_RECT &aRect, bool aEraseBackground=true)
 Function RefreshDrawingRect redraws the contents of aRect in drawing units. More...
 
virtual void Refresh (bool eraseBackground=true, const wxRect *rect=NULL) override
 Update the board display after modifying it bu 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...
 
wxPoint GetScreenCenterLogicalPosition ()
 Function GetScreenCenterLogicalPosition. More...
 
void MoveCursorToCrossHair ()
 Function MoveCursorToCrossHair warps the cursor to the current cross hair position. More...
 
wxPoint ToDeviceXY (const wxPoint &pos)
 Function ToDeviceXY transforms logical to device coordinates. More...
 
wxPoint ToLogicalXY (const wxPoint &pos)
 Function ToLogicalXY transforms device to logical coordinates. More...
 
void MoveCursor (const wxPoint &aPosition)
 Function MoveCursor moves the mouse pointer to aPosition in logical (drawing) units. More...
 
void DrawCrossHair (wxDC *aDC, COLOR4D aColor=COLOR4D::WHITE)
 Function DrawCrossHair draws the user cross hair. More...
 
void CrossHairOff (wxDC *DC)
 
void CrossHairOn (wxDC *DC)
 
void SetMouseCapture (MOUSE_CAPTURE_CALLBACK aMouseCaptureCallback, END_MOUSE_CAPTURE_CALLBACK aEndMouseCaptureCallback)
 Function SetMouseCapture sets the mouse capture and end mouse capture callbacks to aMouseCaptureCallback and aEndMouseCaptureCallback respectively. More...
 
void SetMouseCaptureCallback (MOUSE_CAPTURE_CALLBACK aMouseCaptureCallback)
 
void EndMouseCapture (int aId=-1, int aCursorId=-1, const wxString &aTitle=wxEmptyString, bool aCallEndFunc=true)
 Function EndMouseCapture ends mouse a capture. More...
 
bool IsMouseCaptured () const
 
void CallMouseCapture (wxDC *aDC, const wxPoint &aPosition, bool aErase)
 Function CallMouseCapture calls the mouse capture callback. More...
 
void CallEndMouseCapture (wxDC *aDC)
 Function CallEndMouseCapture calls the end mouse capture callback. More...
 
void SetCurrentCursor (int aCursor)
 Function SetCurrentCursor Set the current cursor shape for drawpanel. More...
 
int GetDefaultCursor () const
 Function GetDefaultCursor. More...
 
int GetCurrentCursor () const
 Function GetCurrentCursor. More...
 

Private Attributes

int m_currentCursor
 Current mouse cursor shape id. More...
 
int m_defaultCursor
 The default mouse cursor shape id. More...
 
bool m_showCrossHair
 Indicate if cross hair is to be shown. More...
 
int m_cursorLevel
 Index for cursor redraw in XOR mode. More...
 
int m_scrollIncrementX
 X axis scroll increment in pixels per unit. More...
 
int m_scrollIncrementY
 Y axis scroll increment in pixels per unit. More...
 
wxPoint m_CursorStartPos
 Used for testing the cursor movement. More...
 
wxPoint m_PanStartCenter
 Initial scroll center position when pan started. More...
 
wxPoint m_PanStartEventPosition
 Initial position of mouse event when pan started. More...
 
wxPoint m_CursorClickPos
 Used for maintaining click position. More...
 
wxTimer * m_ClickTimer
 
EDA_RECT m_ClipBox
 The drawing area used to redraw the screen which is usually the visible area of the drawing in internal units. More...
 
bool m_abortRequest
 Flag used to abort long commands. More...
 
bool m_enableZoomNoCenter
 True to enable zooming around the crosshair instead of the center. More...
 
bool m_enableMousewheelPan
 True to enable mousewheel panning by default. More...
 
bool m_enableAutoPan
 True to enable automatic panning. More...
 
bool m_requestAutoPan
 true to request an auto pan. Valid only when m_enableAutoPan = true. More...
 
bool m_ignoreMouseEvents
 Ignore mouse events when true. More...
 
bool m_ignoreNextLeftButtonRelease
 Ignore the next mouse left button release when true. More...
 
bool m_enableBlockCommands
 True enables block commands. More...
 
int m_minDragEventCount
 Count the drag events. More...
 
bool m_PrintIsMirrored
 True when drawing in mirror mode. More...
 
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
 Mouse capture move callback function. More...
 
END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback
 Abort mouse capture callback function. More...
 
int m_canStartBlock
 useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (or >= n) if a block can start More...
 
int m_doubleClickInterval
 

Detailed Description

Definition at line 55 of file class_drawpanel.h.

Constructor & Destructor Documentation

EDA_DRAW_PANEL::EDA_DRAW_PANEL ( EDA_DRAW_FRAME parent,
int  id,
const wxPoint pos,
const wxSize &  size 
)

Definition at line 100 of file draw_panel.cpp.

References ENBL_AUTO_PAN_KEY, ENBL_MOUSEWHEEL_PAN_KEY, ENBL_ZOOM_NO_CENTER_KEY, Kiface(), KIFACE_I::KifaceSettings(), m_abortRequest, m_canStartBlock, m_ClickTimer, m_ClipBox, m_currentCursor, m_cursorLevel, m_defaultCursor, m_doubleClickInterval, m_enableAutoPan, m_enableBlockCommands, m_enableMousewheelPan, m_enableZoomNoCenter, m_endMouseCaptureCallback, m_ignoreMouseEvents, m_ignoreNextLeftButtonRelease, m_minDragEventCount, m_mouseCaptureCallback, m_PrintIsMirrored, m_requestAutoPan, m_scrollIncrementX, m_scrollIncrementY, m_showCrossHair, min, EDA_RECT::SetSize(), EDA_RECT::SetX(), and EDA_RECT::SetY().

101  :
102  wxScrolledWindow( parent, id, pos, size, wxBORDER | wxHSCROLL | wxVSCROLL )
103 {
104  wxASSERT( parent );
105 
106  ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
107  DisableKeyboardScrolling();
108 
109  m_scrollIncrementX = std::min( size.x / 8, 10 );
110  m_scrollIncrementY = std::min( size.y / 8, 10 );
111 
112  SetLayoutDirection( wxLayout_LeftToRight );
113 
114  SetBackgroundColour( parent->GetDrawBgColor().ToColour() );
115 
116 #if KICAD_USE_BUFFERED_DC || KICAD_USE_BUFFERED_PAINTDC
117  SetBackgroundStyle( wxBG_STYLE_CUSTOM );
118 #endif
119 
120  m_ClipBox.SetSize( size );
121  m_ClipBox.SetX( 0 );
122  m_ClipBox.SetY( 0 );
123  m_canStartBlock = -1; // Command block can start if >= 0
124  m_abortRequest = false;
125  m_enableMousewheelPan = false;
126  m_enableZoomNoCenter = false;
127  m_enableAutoPan = true;
128  m_ignoreMouseEvents = false;
129  // Be sure a mouse release button event will be ignored when creating the canvas
130  // if the mouse click was not made inside the canvas (can happen sometimes, when
131  // launching an editor from a double click made in an other frame)
133 
134  m_mouseCaptureCallback = NULL;
136 
137  wxConfigBase* cfg = Kiface().KifaceSettings();
138 
139  if( cfg )
140  {
141  cfg->Read( ENBL_MOUSEWHEEL_PAN_KEY, &m_enableMousewheelPan, false );
142  cfg->Read( ENBL_ZOOM_NO_CENTER_KEY, &m_enableZoomNoCenter, false );
143  cfg->Read( ENBL_AUTO_PAN_KEY, &m_enableAutoPan, true );
144  }
145 
146  m_requestAutoPan = false;
147  m_enableBlockCommands = false;
149 
150 #ifdef __WXMAC__
151  m_defaultCursor = m_currentCursor = wxCURSOR_CROSS;
152  m_showCrossHair = false;
153 #else
154  m_defaultCursor = m_currentCursor = wxCURSOR_ARROW;
155  m_showCrossHair = true;
156 #endif
157 
158  m_cursorLevel = 0;
159  m_PrintIsMirrored = false;
160 
161  m_ClickTimer = (wxTimer*) NULL;
162  m_doubleClickInterval = 250;
163 }
bool m_abortRequest
Flag used to abort long commands.
int m_canStartBlock
useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (...
bool m_enableZoomNoCenter
True to enable zooming around the crosshair instead of the center.
int m_scrollIncrementX
X axis scroll increment in pixels per unit.
bool m_requestAutoPan
true to request an auto pan. Valid only when m_enableAutoPan = true.
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
bool m_PrintIsMirrored
True when drawing in mirror mode.
END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback
Abort mouse capture callback function.
bool m_enableBlockCommands
True enables block commands.
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52
#define ENBL_ZOOM_NO_CENTER_KEY
Definition: draw_panel.cpp:54
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
#define ENBL_AUTO_PAN_KEY
Definition: draw_panel.cpp:58
virtual COLOR4D GetDrawBgColor() const
Definition: draw_frame.h:321
bool m_ignoreMouseEvents
Ignore mouse events when true.
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: draw_panel.cpp:55
wxConfigBase * KifaceSettings() const
Definition: kiface_i.h:103
void SetX(int val)
bool m_ignoreNextLeftButtonRelease
Ignore the next mouse left button release when true.
void SetY(int val)
bool m_showCrossHair
Indicate if cross hair is to be shown.
void SetSize(const wxSize &size)
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
int m_currentCursor
Current mouse cursor shape id.
int m_defaultCursor
The default mouse cursor shape id.
wxTimer * m_ClickTimer
int m_minDragEventCount
Count the drag events.
bool m_enableAutoPan
True to enable automatic panning.
int m_cursorLevel
Index for cursor redraw in XOR mode.
int m_scrollIncrementY
Y axis scroll increment in pixels per unit.
#define min(a, b)
Definition: auxiliary.h:85
EDA_DRAW_PANEL::~EDA_DRAW_PANEL ( )

Definition at line 166 of file draw_panel.cpp.

References ENBL_AUTO_PAN_KEY, ENBL_MOUSEWHEEL_PAN_KEY, ENBL_ZOOM_NO_CENTER_KEY, Kiface(), KIFACE_I::KifaceSettings(), m_ClickTimer, m_enableAutoPan, m_enableMousewheelPan, and m_enableZoomNoCenter.

167 {
168  wxConfigBase* cfg = Kiface().KifaceSettings();
169 
170  if( cfg )
171  {
174  cfg->Write( ENBL_AUTO_PAN_KEY, m_enableAutoPan );
175  }
176 
177  wxDELETE( m_ClickTimer );
178 }
bool m_enableZoomNoCenter
True to enable zooming around the crosshair instead of the center.
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: kicad.cpp:52
#define ENBL_ZOOM_NO_CENTER_KEY
Definition: draw_panel.cpp:54
#define ENBL_AUTO_PAN_KEY
Definition: draw_panel.cpp:58
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: draw_panel.cpp:55
wxConfigBase * KifaceSettings() const
Definition: kiface_i.h:103
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
wxTimer * m_ClickTimer
bool m_enableAutoPan
True to enable automatic panning.

Member Function Documentation

void EDA_DRAW_PANEL::CallEndMouseCapture ( wxDC *  aDC)

Function CallEndMouseCapture calls the end mouse capture callback.

Parameters
aDCA point to a wxDC object to perform any drawing upon.

Definition at line 1571 of file draw_panel.cpp.

References m_endMouseCaptureCallback.

Referenced by LIB_EDIT_FRAME::deleteItem(), LIB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), PCB_EDIT_FRAME::OnPlaceOrRouteFootprints(), and PCB_EDIT_FRAME::Process_Special_Functions().

1572 {
1573  wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
1574 
1575  // CallEndMouseCapture is sometimes called with m_endMouseCaptureCallback == NULL
1576  // for instance after an ABORT in block paste.
1578  m_endMouseCaptureCallback( this, aDC );
1579 }
END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback
Abort mouse capture callback function.
void EDA_DRAW_PANEL::CallMouseCapture ( wxDC *  aDC,
const wxPoint aPosition,
bool  aErase 
)

Function CallMouseCapture calls the mouse capture callback.

Parameters
aDCA point to a wxDC object to perform any drawing upon.
aPositionA referecnce to a wxPoint object containing the current cursor position.
aEraseTrue indicates the item being drawn should be erase before drawing it a aPosition.

Definition at line 1562 of file draw_panel.cpp.

References m_mouseCaptureCallback.

Referenced by Abort_EditEdge(), AbortBlockCurrentCommand(), PCB_EDIT_FRAME::Begin_Route(), PCB_EDIT_FRAME::Begin_Self(), PCB_EDIT_FRAME::Begin_Zone(), PCB_EDIT_FRAME::BeginMoveDimensionText(), SCH_EDIT_FRAME::BeginSegment(), LIB_EDIT_FRAME::CreateGraphicItem(), SCH_EDIT_FRAME::CreateSheet(), PCB_EDIT_FRAME::Delete_LastCreatedCorner(), PCB_EDIT_FRAME::Delete_Segment(), Exit_Self(), EDA_DRAW_FRAME::HandleBlockBegin(), PL_EDITOR_FRAME::HandleBlockEnd(), FOOTPRINT_EDIT_FRAME::HandleBlockEnd(), GERBVIEW_FRAME::HandleBlockEnd(), LIB_EDIT_FRAME::HandleBlockEnd(), PCB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), PL_EDITOR_FRAME::HandleBlockPlace(), GERBVIEW_FRAME::HandleBlockPlace(), PCB_EDIT_FRAME::HandleBlockPlace(), SCH_EDIT_FRAME::HandleBlockPlace(), PCB_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::Other_Layer_Route(), PCB_EDIT_FRAME::Process_Special_Functions(), FOOTPRINT_EDIT_FRAME::RedrawActiveWindow(), PL_EDITOR_FRAME::RedrawActiveWindow(), GERBVIEW_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), LIB_EDIT_FRAME::RedrawActiveWindow(), PCB_EDIT_FRAME::RedrawActiveWindow(), EDA_DRAW_FRAME::RefreshCrossHair(), SCH_EDIT_FRAME::ReSizeSheet(), PCB_EDIT_FRAME::Start_Move_DrawItem(), FOOTPRINT_EDIT_FRAME::Start_Move_EdgeMod(), LIB_EDIT_FRAME::StartModifyDrawSymbol(), LIB_EDIT_FRAME::StartMoveDrawSymbol(), PCB_EDIT_FRAME::StartMoveModule(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), PCB_BASE_FRAME::StartMoveTexteModule(), and PCB_EDIT_FRAME::StartMoveTextePcb().

1563 {
1564  wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
1565  wxCHECK_RET( m_mouseCaptureCallback != NULL, wxT( "Mouse capture callback not set." ) );
1566 
1567  m_mouseCaptureCallback( this, aDC, aPosition, aErase );
1568 }
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
wxRect EDA_DRAW_PANEL::DeviceToLogical ( const wxRect &  aRect,
wxDC &  aDC 
)

Function DeviceToLogical converts aRect from device to drawing (logical) coordinates.

aRect must be in scrolled device units.

Parameters
aRectThe rectangle to convert.
aDCThe device context used for the conversion.
Returns
A rectangle converted to drawing units.
void EDA_DRAW_PANEL::DoPrepareDC ( wxDC &  aDC)
overridevirtual

Function DoPrepareDC sets up the device context aDC for drawing.

This overrides wxScrolledWindow::DoPrepareDC() for setting up the the device context used for drawing. The scale factor and drawing logical offset are set and the base method is called to set the DC device origin (scroll bar position). This connects everything together to achieve the appropriate coordinate manipulation using wxDC LogicalToDeviceXXX and DeviceToLogixalXXX methods. This gets called automatically for a paint event. If you do any drawing outside the paint event, you must call DoPrepareDC manually.

Parameters
aDCThe device context to prepare.

Definition at line 587 of file draw_panel.cpp.

References BASE_SCREEN::GetScalingFactor(), GetScreen(), GRResetPenAndBrush(), BASE_SCREEN::m_DrawOrg, scale, SetClipBox(), wxPoint::x, and wxPoint::y.

Referenced by GBR_LAYOUT::Draw().

588 {
589  wxScrolledWindow::DoPrepareDC( dc );
590 
591  if( GetScreen() != NULL )
592  {
593  double scale = GetScreen()->GetScalingFactor();
594  dc.SetUserScale( scale, scale );
595 
596  wxPoint pt = GetScreen()->m_DrawOrg;
597  dc.SetLogicalOrigin( pt.x, pt.y );
598  }
599 
600  SetClipBox( dc ); // Reset the clip box to the entire screen.
601  GRResetPenAndBrush( &dc );
602  dc.SetBackgroundMode( wxTRANSPARENT );
603 }
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:218
double GetScalingFactor() const
Function GetScalingFactor returns the inverse of the current scale used to draw items on screen...
Definition: base_screen.cpp:92
void SetClipBox(const EDA_RECT &aRect)
const int scale
wxPoint m_DrawOrg
offsets for drawing the circuit on the screen
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
void EDA_DRAW_PANEL::DrawAuxiliaryAxis ( wxDC *  aDC,
GR_DRAWMODE  aDrawMode 
)

Function DrawAuxiliaryAxis Draw the Auxiliary Axis, used in Pcbnew which as origin coordinates for gerber and excellon files.

Parameters
aDC= current Device Context
aDrawMode= draw mode (GR_COPY, GR_OR ..)

Definition at line 818 of file draw_panel.cpp.

References AXIS_SIZE_IN_PIXELS, color, EDA_DRAW_FRAME::GetAuxOrigin(), EDA_DRAW_FRAME::GetPageSizeIU(), GetParent(), GRCircle(), GRLine(), GRSetColorPen(), GRSetDrawMode(), m_ClipBox, RED, wxPoint::x, and wxPoint::y.

Referenced by DrawBackGround(), and PCB_EDIT_FRAME::OnLeftClick().

819 {
820  wxPoint origin = GetParent()->GetAuxOrigin();
821 
822  if( origin == wxPoint( 0, 0 ) )
823  return;
824 
825  COLOR4D color = COLOR4D( RED );
826 
827  GRSetDrawMode( aDC, aDrawMode );
828 
829 #if DRAW_AXIS_AS_LINES
830  wxSize pageSize = GetParent()->GetPageSizeIU();
831  // Draw the Y axis
832  GRLine( &m_ClipBox, aDC, origin.x, -pageSize.y,
833  origin.x, pageSize.y, 0, color );
834 
835  // Draw the X axis
836  GRLine( &m_ClipBox, aDC, -pageSize.x, origin.y,
837  pageSize.x, origin.y, 0, color );
838 #else
839  int radius = aDC->DeviceToLogicalXRel( AXIS_SIZE_IN_PIXELS );
840  int linewidth = aDC->DeviceToLogicalXRel( 1 );
841 
842  GRSetColorPen( aDC, color, linewidth );
843 
844  GRLine( &m_ClipBox, aDC, origin.x, origin.y-radius,
845  origin.x, origin.y+radius, 0, color );
846 
847  // Draw the + shape
848  GRLine( &m_ClipBox, aDC, origin.x-radius, origin.y,
849  origin.x+radius, origin.y, 0, color );
850 
851  GRCircle( &m_ClipBox, aDC, origin, radius, linewidth, color );
852 #endif
853 }
#define AXIS_SIZE_IN_PIXELS
Definition: draw_panel.cpp:816
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:318
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
virtual const wxSize GetPageSizeIU() const =0
Function GetPageSizeIU works off of GetPageSettings() to return the size of the paper page in the int...
Definition: colors.h:60
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:380
virtual const wxPoint & GetAuxOrigin() const =0
Function GetAuxOrigin returns the origin of the axis used for plotting and various exports...
void GRCircle(EDA_RECT *ClipBox, wxDC *DC, int xc, int yc, int r, int width, COLOR4D Color)
Definition: gr_basic.cpp:850
void GRSetColorPen(wxDC *DC, COLOR4D Color, int width, wxPenStyle style)
Function GRSetColorPen sets a pen style, width, color, and alpha into the given device context...
Definition: gr_basic.cpp:231
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void EDA_DRAW_PANEL::DrawBackGround ( wxDC *  DC)

Function DrawBackGround.

Parameters
DC= current Device Context Draws (if allowed) : the grid X and Y axis X and Y auxiliary axis

Definition at line 688 of file draw_panel.cpp.

References BLUE, DrawAuxiliaryAxis(), DrawGrid(), DrawGridAxis(), EDA_DRAW_FRAME::GetPageSizeIU(), GetParent(), GR_COPY, GRLine(), GRSetDrawMode(), and m_ClipBox.

Referenced by DISPLAY_FOOTPRINTS_FRAME::RedrawActiveWindow(), LIB_VIEW_FRAME::RedrawActiveWindow(), FOOTPRINT_VIEWER_FRAME::RedrawActiveWindow(), FOOTPRINT_EDIT_FRAME::RedrawActiveWindow(), PL_EDITOR_FRAME::RedrawActiveWindow(), FOOTPRINT_WIZARD_FRAME::RedrawActiveWindow(), GERBVIEW_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), LIB_EDIT_FRAME::RedrawActiveWindow(), and PCB_EDIT_FRAME::RedrawActiveWindow().

689 {
690  COLOR4D axis_color = COLOR4D( BLUE );
691 
692  GRSetDrawMode( DC, GR_COPY );
693 
694  if( GetParent()->IsGridVisible() )
695  DrawGrid( DC );
696 
697  // Draw axis
698  if( GetParent()->m_showAxis )
699  {
700  wxSize pageSize = GetParent()->GetPageSizeIU();
701 
702  // Draw the Y axis
703  GRLine( &m_ClipBox, DC, 0, -pageSize.y, 0, pageSize.y, 0, axis_color );
704 
705  // Draw the X axis
706  GRLine( &m_ClipBox, DC, -pageSize.x, 0, pageSize.x, 0, 0, axis_color );
707  }
708 
709  if( GetParent()->m_showOriginAxis )
710  DrawAuxiliaryAxis( DC, GR_COPY );
711 
712  if( GetParent()->m_showGridAxis )
713  DrawGridAxis( DC, GR_COPY, GetParent()->GetGridOrigin() );
714 }
Definition: colors.h:57
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:318
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
void DrawGrid(wxDC *aDC)
Function DrawGrid draws a grid to aDC.
Definition: draw_panel.cpp:717
virtual const wxSize GetPageSizeIU() const =0
Function GetPageSizeIU works off of GetPageSettings() to return the size of the paper page in the int...
void DrawGridAxis(wxDC *aDC, GR_DRAWMODE aDrawMode, const wxPoint &aGridOrigin)
Function DrawGridAxis Draw on auxiliary axis, used in Pcbnew to show grid origin, when the grid origi...
Definition: draw_panel.cpp:856
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:380
void DrawAuxiliaryAxis(wxDC *aDC, GR_DRAWMODE aDrawMode)
Function DrawAuxiliaryAxis Draw the Auxiliary Axis, used in Pcbnew which as origin coordinates for ge...
Definition: draw_panel.cpp:818
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void EDA_DRAW_PANEL::DrawCrossHair ( wxDC *  aDC,
COLOR4D  aColor = COLOR4D::WHITE 
)

Function DrawCrossHair draws the user cross hair.

The user cross hair is not the mouse cursor although they may be at the same screen position. The mouse cursor is still render by the OS. This is a drawn cross hair that is used to snap to grid when grid snapping is enabled. This is as an indicator to where the next user action will take place.

Parameters
aDC- the device context to draw the cursor
aColor- the color to draw the cursor

Definition at line 222 of file draw_panel.cpp.

References CURSOR_SIZE, EDA_DRAW_FRAME::GetCrossHairPosition(), GetParent(), GR_XOR, GRLine(), GRSetDrawMode(), m_ClipBox, m_cursorLevel, m_showCrossHair, wxPoint::x, and wxPoint::y.

Referenced by CrossHairOff(), CrossHairOn(), DISPLAY_FOOTPRINTS_FRAME::RedrawActiveWindow(), LIB_VIEW_FRAME::RedrawActiveWindow(), FOOTPRINT_VIEWER_FRAME::RedrawActiveWindow(), FOOTPRINT_EDIT_FRAME::RedrawActiveWindow(), PL_EDITOR_FRAME::RedrawActiveWindow(), FOOTPRINT_WIZARD_FRAME::RedrawActiveWindow(), GERBVIEW_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), LIB_EDIT_FRAME::RedrawActiveWindow(), and PCB_EDIT_FRAME::RedrawActiveWindow().

223 {
224  if( m_cursorLevel != 0 || aDC == NULL || !m_showCrossHair )
225  return;
226 
227  wxPoint cursor = GetParent()->GetCrossHairPosition();
228 
229  GRSetDrawMode( aDC, GR_XOR );
230 
231  if( GetParent()->GetGalDisplayOptions().m_fullscreenCursor )
232  {
233  wxSize clientSize = GetClientSize();
234 
235  // Y axis
236  wxPoint lineStart( cursor.x, aDC->DeviceToLogicalY( 0 ) );
237  wxPoint lineEnd( cursor.x, aDC->DeviceToLogicalY( clientSize.y ) );
238 
239  GRLine( &m_ClipBox, aDC, lineStart, lineEnd, 0, aColor );
240 
241  // X axis
242  lineStart = wxPoint( aDC->DeviceToLogicalX( 0 ), cursor.y );
243  lineEnd = wxPoint( aDC->DeviceToLogicalX( clientSize.x ), cursor.y );
244 
245  GRLine( &m_ClipBox, aDC, lineStart, lineEnd, 0, aColor );
246  }
247  else
248  {
249  int len = aDC->DeviceToLogicalXRel( CURSOR_SIZE );
250 
251  GRLine( &m_ClipBox, aDC, cursor.x - len, cursor.y,
252  cursor.x + len, cursor.y, 0, aColor );
253  GRLine( &m_ClipBox, aDC, cursor.x, cursor.y - len,
254  cursor.x, cursor.y + len, 0, aColor );
255  }
256 }
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:318
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:380
bool m_showCrossHair
Indicate if cross hair is to be shown.
static const int CURSOR_SIZE
Cursor size in pixels.
Definition: draw_panel.cpp:47
wxPoint GetCrossHairPosition(bool aInvertY=false) const
Function GetCrossHairPosition return the current cross hair position in logical (drawing) coordinates...
int m_cursorLevel
Index for cursor redraw in XOR mode.
void EDA_DRAW_PANEL::DrawGrid ( wxDC *  aDC)

Function DrawGrid draws a grid to aDC.

See also
m_ClipBox to determine the damaged area of the drawing to draw the grid.
EDA_DRAW_FRAME::IsGridVisible() to determine if grid is shown.
EDA_DRAW_FRAME::GetGridColor() for the color of the grid.
Parameters
aDCThe device context to draw the grid.

Definition at line 717 of file draw_panel.cpp.

References EDA_RECT::GetBottom(), BASE_SCREEN::GetGridSize(), EDA_DRAW_FRAME::GetNearestGridPosition(), GetParent(), EDA_RECT::GetPosition(), EDA_RECT::GetRight(), GetScreen(), EDA_RECT::GetX(), EDA_RECT::GetY(), GRSetColorPen(), KiROUND(), m_ClipBox, BASE_SCREEN::m_StartVisu, MIN_GRID_SIZE, wxPoint::x, and wxPoint::y.

Referenced by DrawBackGround().

718 {
719  #define MIN_GRID_SIZE 10 // min grid size in pixels to allow drawing
720  BASE_SCREEN* screen = GetScreen();
721  wxRealPoint gridSize;
722  wxSize screenSize;
723  wxPoint org;
724  wxRealPoint screenGridSize;
725 
726  /* The grid must be visible. this is possible only is grid value
727  * and zoom value are sufficient
728  */
729  gridSize = screen->GetGridSize();
730  screen->m_StartVisu = CalcUnscrolledPosition( wxPoint( 0, 0 ) );
731  screenSize = GetClientSize();
732 
733  screenGridSize.x = aDC->LogicalToDeviceXRel( KiROUND( gridSize.x ) );
734  screenGridSize.y = aDC->LogicalToDeviceYRel( KiROUND( gridSize.y ) );
735 
736  org = m_ClipBox.GetPosition();
737 
738  if( screenGridSize.x < MIN_GRID_SIZE || screenGridSize.y < MIN_GRID_SIZE )
739  {
740  screenGridSize.x *= 2.0;
741  screenGridSize.y *= 2.0;
742  gridSize.x *= 2.0;
743  gridSize.y *= 2.0;
744  }
745 
746  if( screenGridSize.x < MIN_GRID_SIZE || screenGridSize.y < MIN_GRID_SIZE )
747  return;
748 
749  org = GetParent()->GetNearestGridPosition( org, &gridSize );
750 
751  // Setting the nearest grid position can select grid points outside the clip box.
752  // Incrementing the start point by one grid step should prevent drawing grid points
753  // outside the clip box.
754  if( org.x < m_ClipBox.GetX() )
755  org.x += KiROUND( gridSize.x );
756 
757  if( org.y < m_ClipBox.GetY() )
758  org.y += KiROUND( gridSize.y );
759 
760  // Use a pixel based draw to display grid. There are a lot of calls, so the cost is
761  // high and grid is slowly drawn on some platforms. An other way using blit transfert was used,
762  // a long time ago, but it did not give very good results.
763  // The better way is highly dependent on the platform and the graphic card.
764  int xpos;
765  double right = ( double ) m_ClipBox.GetRight();
766  double bottom = ( double ) m_ClipBox.GetBottom();
767 
768 #if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
769  wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
770  if( gcdc )
771  {
772  wxGraphicsContext *gc = gcdc->GetGraphicsContext();
773 
774  // Grid point size
775  const int gsz = 1;
776  const double w = aDC->DeviceToLogicalXRel( gsz );
777  const double h = aDC->DeviceToLogicalYRel( gsz );
778 
779  // Use our own pen
780  wxPen pen( GetParent()->GetGridColor().ToColour(), h );
781  pen.SetCap( wxCAP_BUTT );
782  gc->SetPen( pen );
783 
784  // draw grid
785  wxGraphicsPath path = gc->CreatePath();
786  for( double x = (double) org.x - w/2.0; x <= right - w/2.0; x += gridSize.x )
787  {
788  for( double y = (double) org.y; y <= bottom; y += gridSize.y )
789  {
790  path.MoveToPoint( x, y );
791  path.AddLineToPoint( x+w, y );
792  }
793  }
794  gc->StrokePath( path );
795  }
796  else
797 #endif
798  {
799  GRSetColorPen( aDC, GetParent()->GetGridColor() );
800 
801  for( double x = (double) org.x; x <= right; x += gridSize.x )
802  {
803  xpos = KiROUND( x );
804 
805  for( double y = (double) org.y; y <= bottom; y += gridSize.y )
806  {
807  aDC->DrawPoint( xpos, KiROUND( y ) );
808  }
809  }
810  }
811 }
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
wxPoint m_StartVisu
Coordinates in drawing units of the current view position (upper left corner of device) ...
Class BASE_SCREEN handles how to draw a screen (a board, a schematic ...)
#define MIN_GRID_SIZE
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
int GetBottom() const
int GetRight() const
const wxPoint GetPosition() const
wxPoint GetNearestGridPosition(const wxPoint &aPosition, wxRealPoint *aGridSize=NULL) const
Function GetNearestGridPosition returns the nearest aGridSize location to aPosition.
const wxRealPoint & GetGridSize() const
Return the grid size of the currently selected grid.
void GRSetColorPen(wxDC *DC, COLOR4D Color, int width, wxPenStyle style)
Function GRSetColorPen sets a pen style, width, color, and alpha into the given device context...
Definition: gr_basic.cpp:231
int GetX() const
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
int GetY() const
void EDA_DRAW_PANEL::DrawGridAxis ( wxDC *  aDC,
GR_DRAWMODE  aDrawMode,
const wxPoint aGridOrigin 
)

Function DrawGridAxis Draw on auxiliary axis, used in Pcbnew to show grid origin, when the grid origin is set by user, and is not (0,0)

Parameters
aDC= current Device Context
aDrawMode= draw mode (GR_COPY, GR_OR ..)
aGridOrigin= the absolute coordinate of grid origin for snap.

Definition at line 856 of file draw_panel.cpp.

References AXIS_SIZE_IN_PIXELS, color, EDA_DRAW_FRAME::GetGridColor(), EDA_DRAW_FRAME::GetPageSizeIU(), GetParent(), GRCircle(), GRLine(), GRSetColorPen(), GRSetDrawMode(), m_ClipBox, wxPoint::x, and wxPoint::y.

Referenced by DrawBackGround(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), and PCB_EDIT_FRAME::OnLeftClick().

857 {
858  if( !GetParent()->m_showGridAxis || ( !aGridOrigin.x && !aGridOrigin.y ) )
859  return;
860 
862 
863  GRSetDrawMode( aDC, aDrawMode );
864 
865 #if DRAW_AXIS_AS_LINES
866  wxSize pageSize = GetParent()->GetPageSizeIU();
867  // Draw the Y axis
868  GRLine( &m_ClipBox, aDC, aGridOrigin.x, -pageSize.y,
869  aGridOrigin.x, pageSize.y, 0, color );
870 
871  // Draw the X axis
872  GRLine( &m_ClipBox, aDC, -pageSize.x, aGridOrigin.y,
873  pageSize.x, aGridOrigin.y, 0, color );
874 #else
875  int radius = aDC->DeviceToLogicalXRel( AXIS_SIZE_IN_PIXELS );
876  int linewidth = aDC->DeviceToLogicalXRel( 1 );
877 
878  GRSetColorPen( aDC, GetParent()->GetGridColor(), linewidth );
879 
880  GRLine( &m_ClipBox, aDC, aGridOrigin.x-radius, aGridOrigin.y-radius,
881  aGridOrigin.x+radius, aGridOrigin.y+radius, 0, color );
882 
883  // Draw the X shape
884  GRLine( &m_ClipBox, aDC, aGridOrigin.x+radius, aGridOrigin.y-radius,
885  aGridOrigin.x-radius, aGridOrigin.y+radius, 0, color );
886 
887  GRCircle( &m_ClipBox, aDC, aGridOrigin, radius, linewidth, color );
888 #endif
889 }
#define AXIS_SIZE_IN_PIXELS
Definition: draw_panel.cpp:816
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:318
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
virtual const wxSize GetPageSizeIU() const =0
Function GetPageSizeIU works off of GetPageSettings() to return the size of the paper page in the int...
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:380
virtual COLOR4D GetGridColor()
Function GetGridColor() , virtual.
Definition: draw_frame.h:497
void GRCircle(EDA_RECT *ClipBox, wxDC *DC, int xc, int yc, int r, int width, COLOR4D Color)
Definition: gr_basic.cpp:850
void GRSetColorPen(wxDC *DC, COLOR4D Color, int width, wxPenStyle style)
Function GRSetColorPen sets a pen style, width, color, and alpha into the given device context...
Definition: gr_basic.cpp:231
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void EDA_DRAW_PANEL::EndMouseCapture ( int  aId = -1,
int  aCursorId = -1,
const wxString &  aTitle = wxEmptyString,
bool  aCallEndFunc = true 
)

Function EndMouseCapture ends mouse a capture.

Check to see if the cursor is being managed for block or editing commands and release it.

Parameters
aIdThe command ID to restore or -1 to keep the current command ID.
aCursorIdThe wxWidgets stock cursor ID to set the cursor to or -1 to keep the current cursor.
aTitleThe tool message to display in the status bar or wxEmptyString to clear the message.
aCallEndFuncCall the abort mouse capture callback if true.

Definition at line 1541 of file draw_panel.cpp.

References GetParent(), INSTALL_UNBUFFERED_DC, m_endMouseCaptureCallback, m_mouseCaptureCallback, m_requestAutoPan, and EDA_DRAW_FRAME::SetToolID().

Referenced by EDA_DRAW_FRAME::CopyToClipboard(), LIB_EDIT_FRAME::CreateGraphicItem(), SCH_EDIT_FRAME::EndSegment(), PCB_EDIT_FRAME::Files_io_from_id(), PL_EDITOR_FRAME::HandleBlockEnd(), FOOTPRINT_EDIT_FRAME::HandleBlockEnd(), GERBVIEW_FRAME::HandleBlockEnd(), LIB_EDIT_FRAME::HandleBlockEnd(), PCB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), PL_EDITOR_FRAME::HandleBlockPlace(), FOOTPRINT_EDIT_FRAME::HandleBlockPlace(), GERBVIEW_FRAME::HandleBlockPlace(), LIB_EDIT_FRAME::HandleBlockPlace(), PCB_EDIT_FRAME::HandleBlockPlace(), SCH_EDIT_FRAME::HandleBlockPlace(), LIB_EDIT_FRAME::InstallFieldsEditorDialog(), SCH_EDIT_FRAME::OnCancelCurrentCommand(), LIB_EDIT_FRAME::OnCreateNewPart(), LIB_EDIT_FRAME::OnEditPin(), PL_EDITOR_FRAME::OnFileHistory(), PCB_EDIT_FRAME::OnFileHistory(), OnKeyEvent(), PCB_EDIT_FRAME::OnPlaceOrRouteFootprints(), LIB_EDIT_FRAME::OnSelectBodyStyle(), LIB_EDIT_FRAME::OnSelectTool(), SCH_EDIT_FRAME::OnSelectTool(), PCB_EDIT_FRAME::OnSelectTool(), LIB_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::ProcessMuWaveFunctions(), and LIB_EDIT_FRAME::saveLibrary().

1543 {
1544  if( m_mouseCaptureCallback && m_endMouseCaptureCallback && aCallEndFunc )
1545  {
1546  INSTALL_UNBUFFERED_DC( dc, this );
1547  m_endMouseCaptureCallback( this, &dc );
1548  }
1549 
1550  m_mouseCaptureCallback = NULL;
1552  m_requestAutoPan = false;
1553 
1554  if( id != -1 && cursor != -1 )
1555  {
1556  wxASSERT( cursor > wxCURSOR_NONE && cursor < wxCURSOR_MAX );
1557  GetParent()->SetToolID( id, cursor, title );
1558  }
1559 }
bool m_requestAutoPan
true to request an auto pan. Valid only when m_enableAutoPan = true.
END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback
Abort mouse capture callback function.
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg)
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
Definition: draw_frame.cpp:547
#define INSTALL_UNBUFFERED_DC(name, parent)
void EDA_DRAW_PANEL::EraseScreen ( wxDC *  DC)

Definition at line 568 of file draw_panel.cpp.

References EDA_RECT::GetBottom(), EDA_DRAW_FRAME::GetDrawBgColor(), GetParent(), EDA_RECT::GetRight(), EDA_RECT::GetX(), EDA_RECT::GetY(), GR_COPY, GRRect(), GRSetDrawMode(), GRSFilledRect(), LIGHTMAGENTA, and m_ClipBox.

Referenced by DrawPageOnClipboard(), ReDraw(), and PL_EDITOR_FRAME::RedrawActiveWindow().

569 {
570  GRSetDrawMode( DC, GR_COPY );
571 
572  COLOR4D bgColor = GetParent()->GetDrawBgColor();
573 
574  GRSFilledRect( NULL, DC, m_ClipBox.GetX(), m_ClipBox.GetY(),
576  0, bgColor, bgColor );
577 
578  // Set to one (1) to draw bounding box validate bounding box calculation.
579 #if DEBUG_SHOW_CLIP_RECT
580  EDA_RECT bBox = m_ClipBox;
581  GRRect( NULL, DC, bBox.GetOrigin().x, bBox.GetOrigin().y,
582  bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA );
583 #endif
584 }
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:318
void GRSFilledRect(EDA_RECT *aClipBox, wxDC *aDC, int x1, int y1, int x2, int y2, int aWidth, COLOR4D aColor, COLOR4D aBgColor)
Definition: gr_basic.cpp:1173
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
void GRRect(EDA_RECT *aClipBox, wxDC *aDC, int x1, int y1, int x2, int y2, COLOR4D aColor)
Definition: gr_basic.cpp:1098
virtual COLOR4D GetDrawBgColor() const
Definition: draw_frame.h:321
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
int GetBottom() const
int GetRight() const
Class EDA_RECT handles the component boundary box.
int GetX() const
int GetY() const
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
EDA_RECT* EDA_DRAW_PANEL::GetClipBox ( )
inline

Definition at line 139 of file class_drawpanel.h.

References m_ClipBox.

Referenced by Autoroute_One_Track(), DisplayRoutingMatrix(), SCH_NO_CONNECT::Draw(), SCH_JUNCTION::Draw(), TEXTE_PCB::Draw(), PCB_TARGET::Draw(), SCH_BUS_ENTRY_BASE::Draw(), SCH_BITMAP::Draw(), EDGE_MODULE::Draw(), ZONE_CONTAINER::Draw(), SCH_LINE::Draw(), GBR_LAYOUT::Draw(), BLOCK_SELECTOR::Draw(), SCH_TEXT::Draw(), SCH_FIELD::Draw(), TEXTE_MODULE::Draw(), TRACK::Draw(), DRAWSEGMENT::Draw(), DIMENSION::Draw(), LIB_ITEM::Draw(), GERBER_DRAW_ITEM::Draw(), SCH_GLOBALLABEL::Draw(), MODULE::Draw(), SCH_HIERLABEL::Draw(), SEGZONE::Draw(), VIA::Draw(), SCH_SHEET::Draw(), LIB_PART::Draw(), SCH_COMPONENT::Draw(), D_PAD::Draw(), MODULE::DrawAncre(), DrawDanglingSymbol(), ZONE_CONTAINER::DrawFilledArea(), PCB_BASE_FRAME::DrawGeneralRatsnest(), LIB_CIRCLE::drawGraphic(), LIB_POLYLINE::drawGraphic(), LIB_RECTANGLE::drawGraphic(), LIB_BEZIER::drawGraphic(), LIB_TEXT::drawGraphic(), LIB_ARC::drawGraphic(), LIB_FIELD::drawGraphic(), LIB_PIN::drawGraphic(), GBR_LAYOUT::DrawItemsDCodeID(), MARKER_BASE::DrawMarker(), PLEDITOR_PRINTOUT::DrawPage(), SCH_PRINTOUT::DrawPage(), BOARD_PRINTOUT_CONTROLLER::DrawPage(), DrawPageOnClipboard(), LIB_PIN::DrawPinElectricalTypeName(), LIB_PIN::DrawPinSymbol(), LIB_PIN::DrawPinTexts(), D_PAD::DrawShape(), TRACK::DrawShortNetname(), TEXTE_MODULE::DrawUmbilical(), ZONE_CONTAINER::DrawWhileCreateOutline(), EDA_DRAW_FRAME::DrawWorkSheet(), getOptimalModulePlacement(), PCB_EDIT_FRAME::PrintPage(), ShowBoundingBoxMicroWaveInductor(), ShowNewTrackWhenMovingCursor(), PCB_EDIT_FRAME::Solve(), PCB_BASE_FRAME::TraceAirWiresToTargets(), and PCB_BASE_FRAME::TraceModuleRatsNest().

139 { return &m_ClipBox; }
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
void * EDA_DRAW_PANEL::GetDisplayOptions ( )

Function GetDisplayOptions A way to pass info to draw functions.

this is just an accessor to the GetDisplayOptions() parent frame function.

Definition at line 188 of file draw_panel.cpp.

References EDA_DRAW_FRAME::GetDisplayOptions(), and GetParent().

Referenced by TEXTE_PCB::Draw(), PCB_TARGET::Draw(), EDGE_MODULE::Draw(), ZONE_CONTAINER::Draw(), TEXTE_MODULE::Draw(), TRACK::Draw(), DRAWSEGMENT::Draw(), DIMENSION::Draw(), SEGZONE::Draw(), ZONE_CONTAINER::DrawFilledArea(), drawMovingBlock(), MODULE::DrawOutlinesWhenMoving(), DrawSegment(), TRACK::DrawShortNetname(), ZONE_CONTAINER::DrawWhileCreateOutline(), Show_MoveNode(), and Trace_Pads_Only().

189 {
190  return GetParent()->GetDisplayOptions();
191 }
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
virtual void * GetDisplayOptions()
Function GetDisplayOptions A way to pass info to draw functions.
Definition: draw_frame.h:882
bool EDA_DRAW_PANEL::GetEnableAutoPan ( void  ) const
inline
bool EDA_DRAW_PANEL::GetEnableMousewheelPan ( void  ) const
inline
bool EDA_DRAW_PANEL::GetEnableZoomNoCenter ( void  ) const
inline
wxRealPoint EDA_DRAW_PANEL::GetGrid ( )

Definition at line 288 of file draw_panel.cpp.

References BASE_SCREEN::GetGridSize(), and GetScreen().

289 {
290  return GetScreen()->GetGridSize();
291 }
const wxRealPoint & GetGridSize() const
Return the grid size of the currently selected grid.
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
EDA_DRAW_FRAME * EDA_DRAW_PANEL::GetParent ( void  ) const

Definition at line 181 of file draw_panel.cpp.

Referenced by Abort_Create_Track(), Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_MoveOrCopyModule(), Abort_MoveTrack(), Abort_Zone_Create_Outline(), Abort_Zone_Move_Corner_Or_Outlines(), AbortBlockCurrentCommand(), AbortBuildDimension(), AbortCreateNewLine(), AbortMoveAndEditTarget(), abortMoveBitmap(), AbortMoveDimensionText(), abortMoveItem(), AbortPinMove(), AbortSymbolTraceOn(), BuildDimension(), TEXTE_PCB::Draw(), PCB_TARGET::Draw(), EDGE_MODULE::Draw(), ZONE_CONTAINER::Draw(), GBR_LAYOUT::Draw(), TEXTE_MODULE::Draw(), TRACK::Draw(), DRAWSEGMENT::Draw(), DIMENSION::Draw(), SEGZONE::Draw(), VIA::Draw(), D_PAD::Draw(), MODULE::DrawAncre(), DrawAndSizingBlockOutlines(), DrawAuxiliaryAxis(), DrawBackGround(), DrawCrossHair(), ZONE_CONTAINER::DrawFilledArea(), LIB_PIN::drawGraphic(), DrawGrid(), DrawGridAxis(), DrawMovePin(), drawMovingBlock(), DrawMovingBlockOutlines(), DrawMovingItems(), MODULE::DrawOutlinesWhenMoving(), drawPickedItems(), DrawSegment(), ZONE_CONTAINER::DrawWhileCreateOutline(), EndMouseCapture(), EraseScreen(), ExitSheet(), GetDisplayOptions(), GetScreen(), Move_Segment(), Move_Texte_Pcb(), moveBitmap(), MoveCursor(), MoveCursorToCrossHair(), MoveDimensionText(), MoveFootprint(), moveItem(), moveItemWithMouseCursor(), OnKeyEvent(), OnMouseEvent(), OnMouseLeaving(), OnMouseWheel(), OnPan(), OnRightClick(), OnScroll(), OnTimer(), PushTrack(), ReDraw(), RedrawWhileMovingCursor(), Refresh(), resizeSheetWithMouseCursor(), SetEnableAutoPan(), SetEnableMousewheelPan(), SetEnableZoomNoCenter(), EDA_DRAW_PANEL_GAL::SetFocus(), Show_Drag_Track_Segment_With_Cte_Slope(), Show_MoveNode(), Show_MoveTexte_Module(), Show_New_Edge_While_Move_Mouse(), Show_Pad_Move(), Show_Zone_Corner_Or_Outline_While_Move_Mouse(), ShowBoundingBoxMicroWaveInductor(), ShowCurrentOutlineWhileMoving(), ShowNewEdgeModule(), ShowNewTrackWhenMovingCursor(), ShowTargetShapeWhileMovingMouse(), and SymbolDisplayDraw().

182 {
183  wxWindow* mom = wxScrolledWindow::GetParent();
184  return (EDA_DRAW_FRAME*) mom;
185 }
Class EDA_DRAW_FRAME is the base class for create windows for drawing purpose.
Definition: draw_frame.h:54
bool EDA_DRAW_PANEL::GetPrintMirrored ( ) const
inline

Definition at line 167 of file class_drawpanel.h.

References m_PrintIsMirrored.

Referenced by EDGE_MODULE::Draw(), and DRAWSEGMENT::Draw().

167 { return m_PrintIsMirrored; }
bool m_PrintIsMirrored
True when drawing in mirror mode.
BASE_SCREEN * EDA_DRAW_PANEL::GetScreen ( )

Definition at line 194 of file draw_panel.cpp.

References GetParent(), and EDA_DRAW_FRAME::GetScreen().

Referenced by Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_Move_ModuleOutline(), AbortBlockCurrentCommand(), AbortBuildDimension(), AbortCreateNewLine(), AbortMoveAndEditTarget(), abortMoveBitmap(), AbortMoveDimensionText(), abortMoveItem(), AbortMoveTextModule(), EDA_DRAW_FRAME::AddMenuZoomAndGrid(), BuildDimension(), DoPrepareDC(), TEXTE_PCB::Draw(), SCH_BUS_ENTRY_BASE::Draw(), EDGE_MODULE::Draw(), ZONE_CONTAINER::Draw(), TEXTE_MODULE::Draw(), TRACK::Draw(), DRAWSEGMENT::Draw(), SEGZONE::Draw(), VIA::Draw(), LIB_PART::Draw(), SCH_COMPONENT::Draw(), DrawAndSizingBlockOutlines(), DrawDanglingSymbol(), ZONE_CONTAINER::DrawFilledArea(), DrawGrid(), drawMovingBlock(), DrawMovingBlockOutlines(), DrawMovingItems(), DrawPageOnClipboard(), drawPickedItems(), LIB_PIN::DrawPinSymbol(), DrawSegment(), TRACK::DrawShortNetname(), ZONE_CONTAINER::DrawWhileCreateOutline(), ExitSheet(), GetGrid(), GetZoom(), Move_Segment(), Move_Texte_Pcb(), moveBitmap(), MoveDimensionText(), MoveFootprint(), moveItem(), moveItemWithMouseCursor(), OnMouseEvent(), OnPaint(), ReDraw(), resizeSheetWithMouseCursor(), SetClipBox(), SetZoom(), Show_MoveTexte_Module(), ShowCurrentOutlineWhileMoving(), ShowNewEdgeModule(), ShowNewTrackWhenMovingCursor(), and ShowTargetShapeWhileMovingMouse().

195 {
196  EDA_DRAW_FRAME* parentFrame = GetParent();
197 
198  return parentFrame->GetScreen();
199 }
Class EDA_DRAW_FRAME is the base class for create windows for drawing purpose.
Definition: draw_frame.h:54
virtual BASE_SCREEN * GetScreen() const
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
Definition: draw_frame.h:344
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
wxPoint EDA_DRAW_PANEL::GetScreenCenterLogicalPosition ( )

Function GetScreenCenterLogicalPosition.

Returns
The current screen center position in logical (drawing) units.

Definition at line 345 of file draw_panel.cpp.

References INSTALL_UNBUFFERED_DC.

Referenced by EDA_DRAW_FRAME::UseGalCanvas().

346 {
347  wxSize size = GetClientSize() / 2;
348  INSTALL_UNBUFFERED_DC( dc, this );
349 
350  return wxPoint( dc.DeviceToLogicalX( size.x ), dc.DeviceToLogicalY( size.y ) );
351 }
#define INSTALL_UNBUFFERED_DC(name, parent)
double EDA_DRAW_PANEL::GetZoom ( )

Definition at line 276 of file draw_panel.cpp.

References GetScreen(), and BASE_SCREEN::GetZoom().

Referenced by EDA_DRAW_FRAME::UseGalCanvas().

277 {
278  return GetScreen()->GetZoom();
279 }
double GetZoom() const
Function GetZoom returns the current "zoom factor", which is a measure of "internal units per device ...
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
bool EDA_DRAW_PANEL::IsMouseCaptured ( ) const
inline

Definition at line 430 of file class_drawpanel.h.

Referenced by AbortBlockCurrentCommand(), PCB_EDIT_FRAME::Begin_Zone(), PCB_EDIT_FRAME::Delete_LastCreatedCorner(), PCB_EDIT_FRAME::Delete_Segment(), LIB_EDIT_FRAME::deleteItem(), SCH_BUS_ENTRY_BASE::Draw(), SCH_COMPONENT::Draw(), Exit_Self(), EDA_DRAW_FRAME::HandleBlockBegin(), PL_EDITOR_FRAME::HandleBlockEnd(), FOOTPRINT_EDIT_FRAME::HandleBlockEnd(), GERBVIEW_FRAME::HandleBlockEnd(), LIB_EDIT_FRAME::HandleBlockEnd(), PCB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), PL_EDITOR_FRAME::HandleBlockPlace(), FOOTPRINT_EDIT_FRAME::HandleBlockPlace(), GERBVIEW_FRAME::HandleBlockPlace(), LIB_EDIT_FRAME::HandleBlockPlace(), PCB_EDIT_FRAME::HandleBlockPlace(), SCH_EDIT_FRAME::HandleBlockPlace(), SCH_EDIT_FRAME::OnCancelCurrentCommand(), OnKeyEvent(), OnMouseEvent(), PCB_EDIT_FRAME::OnPlaceOrRouteFootprints(), LIB_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), FOOTPRINT_EDIT_FRAME::RedrawActiveWindow(), PL_EDITOR_FRAME::RedrawActiveWindow(), GERBVIEW_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), LIB_EDIT_FRAME::RedrawActiveWindow(), PCB_EDIT_FRAME::RedrawActiveWindow(), EDA_DRAW_FRAME::RefreshCrossHair(), and PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event().

430 { return m_mouseCaptureCallback != NULL; }
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
bool EDA_DRAW_PANEL::IsPointOnDisplay ( const wxPoint aPosition)

Function IsPointOnDisplay.

Parameters
aPositionThe position to test in logical (drawing) units.
Returns
true if aPosition is visible on the screen. false if aPosition is not visible on the screen.

Definition at line 294 of file draw_panel.cpp.

References EDA_RECT::Contains(), EDA_RECT::Inflate(), INSTALL_UNBUFFERED_DC, m_ClipBox, PIXEL_MARGIN, and SetClipBox().

Referenced by SCH_EDIT_FRAME::FindComponentAndItem(), PCB_BASE_FRAME::FocusOnLocation(), and PL_EDITOR_FRAME::MoveItem().

295 {
296  wxPoint pos;
297  EDA_RECT display_rect;
298 
299  INSTALL_UNBUFFERED_DC( dc, this ); // Refresh the clip box to the entire screen size.
300  SetClipBox( dc );
301 
302  display_rect = m_ClipBox;
303 
304  // Slightly decreased the size of the useful screen area to avoid drawing limits.
305  #define PIXEL_MARGIN 8
306  display_rect.Inflate( -PIXEL_MARGIN );
307 
308  return display_rect.Contains( aPosition );
309 }
#define PIXEL_MARGIN
bool Contains(const wxPoint &aPoint) const
Function Contains.
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
void SetClipBox(const EDA_RECT &aRect)
#define INSTALL_UNBUFFERED_DC(name, parent)
Class EDA_RECT handles the component boundary box.
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
void EDA_DRAW_PANEL::MoveCursor ( const wxPoint aPosition)

Function MoveCursor moves the mouse pointer to aPosition in logical (drawing) units.

Parameters
aPositionThe position in logical units to move the cursor.

Definition at line 360 of file draw_panel.cpp.

References GetParent(), INSTALL_UNBUFFERED_DC, kicadTraceCoords, m_scrollIncrementX, m_scrollIncrementY, wxPoint::x, and wxPoint::y.

Referenced by SCH_EDIT_FRAME::FindComponentAndItem(), EDA_DRAW_FRAME::GeneralControlKeyMovement(), and MoveCursorToCrossHair().

361 {
362  if( GetParent()->IsGalCanvasActive() )
363  return;
364 
365  int x, y, xPpu, yPpu;
366  wxPoint screenPos, drawingPos;
367  wxRect clientRect( wxPoint( 0, 0 ), GetClientSize() );
368 
369  INSTALL_UNBUFFERED_DC( dc, this );
370  screenPos.x = dc.LogicalToDeviceX( aPosition.x );
371  screenPos.y = dc.LogicalToDeviceY( aPosition.y );
372 
373  // Scroll if the requested mouse position cursor is outside the drawing area.
374  if( !clientRect.Contains( screenPos ) )
375  {
376  GetViewStart( &x, &y );
377  GetScrollPixelsPerUnit( &xPpu, &yPpu );
378  CalcUnscrolledPosition( screenPos.x, screenPos.y, &drawingPos.x, &drawingPos.y );
379 
380  wxLogTrace( kicadTraceCoords,
381  wxT( "MoveCursor() initial screen position(%d, %d) " ) \
382  wxT( "rectangle(%d, %d, %d, %d) view(%d, %d)" ),
383  screenPos.x, screenPos.y, clientRect.x, clientRect.y,
384  clientRect.width, clientRect.height, x, y );
385 
386  if( screenPos.y < clientRect.GetTop() )
387  y -= m_scrollIncrementY * yPpu;
388  else if( screenPos.y > clientRect.GetBottom() )
389  y += m_scrollIncrementY * yPpu;
390  else if( clientRect.GetRight() < screenPos.x )
391  x += m_scrollIncrementX * xPpu;
392  else
393  x -= m_scrollIncrementX * xPpu;
394 
395  Scroll( x, y );
396  CalcScrolledPosition( drawingPos.x, drawingPos.y, &screenPos.x, &screenPos.y );
397 
398  wxLogTrace( kicadTraceCoords,
399  wxT( "MoveCursor() scrolled screen position(%d, %d) view(%d, %d)" ),
400  screenPos.x, screenPos.y, x, y );
401  }
402 
403  WarpPointer( screenPos.x, screenPos.y );
404 }
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
int m_scrollIncrementX
X axis scroll increment in pixels per unit.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
#define INSTALL_UNBUFFERED_DC(name, parent)
int m_scrollIncrementY
Y axis scroll increment in pixels per unit.
void EDA_DRAW_PANEL::MoveCursorToCrossHair ( )

Function MoveCursorToCrossHair warps the cursor to the current cross hair position.

Definition at line 354 of file draw_panel.cpp.

References GetParent(), and MoveCursor().

Referenced by PCB_EDIT_FRAME::Begin_Zone(), PCB_EDIT_FRAME::BeginMoveDimensionText(), PL_EDITOR_FRAME::Block_Move(), GERBVIEW_FRAME::Block_Move(), PCB_EDIT_FRAME::Create_MuWaveComponent(), PCB_EDIT_FRAME::Create_MuWavePolygonShape(), LIB_EDIT_FRAME::CreateGraphicItem(), LIB_EDIT_FRAME::CreatePin(), SCH_EDIT_FRAME::CreateSheet(), FOOTPRINT_EDIT_FRAME::CreateTextModule(), SCH_EDIT_FRAME::DisplayCurrentSheet(), PCB_BASE_EDIT_FRAME::duplicateItem(), PCB_EDIT_FRAME::Edit_Zone_Params(), SCH_EDIT_FRAME::EditComponent(), SCH_EDIT_FRAME::EditComponentFieldText(), SCH_EDIT_FRAME::EditSheet(), PCB_EDIT_FRAME::End_Zone(), PCB_BASE_FRAME::FocusOnLocation(), LIB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), InstallBlockCmdFrame(), FOOTPRINT_EDIT_FRAME::InstallFootprintBodyItemPropertiesDlg(), PCB_EDIT_FRAME::InstallGraphicItemPropertiesDialog(), PCB_EDIT_FRAME::InstallTextPCBOptionsFrame(), SCH_EDIT_FRAME::Load_Component(), LIB_EDIT_FRAME::LoadOneSymbol(), PL_EDITOR_FRAME::Locate(), LIB_EDIT_FRAME::locateItem(), SCH_EDIT_FRAME::LocateItem(), PCB_EDIT_FRAME::moveExact(), SCH_EDIT_FRAME::MoveImage(), PL_EDITOR_FRAME::MoveItem(), PCB_EDIT_FRAME::MuWaveCommand(), DIALOG_LABEL_EDITOR::OnCancelClick(), SCH_EDIT_FRAME::OnDragItem(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), PCB_EDIT_FRAME::OnLeftClick(), LIB_EDIT_FRAME::OnLeftDClick(), SCH_EDIT_FRAME::OnLeftDClick(), PCB_EDIT_FRAME::OnLeftDClick(), LIB_EDIT_FRAME::OnOrient(), SCH_EDIT_FRAME::OnOrient(), OnRightClick(), SCH_EDIT_FRAME::OnRotate(), SCH_EDIT_FRAME::OnSelectUnit(), EDA_DRAW_FRAME::OnZoom(), SCH_EDIT_FRAME::OrientComponent(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), LIB_EDIT_FRAME::PlacePin(), SCH_EDIT_FRAME::PrepareMoveItem(), LIB_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), EDA_DRAW_FRAME::RedrawScreen(), SCH_EDIT_FRAME::ReSizeSheet(), PCB_BASE_FRAME::SelectCopperLayerPair(), LIB_EDIT_FRAME::StartMovePin(), PCB_BASE_FRAME::StartMoveTexteModule(), PCB_EDIT_FRAME::StartMoveTextePcb(), DIALOG_LABEL_EDITOR::TextPropertiesAccept(), and PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event().

355 {
356  MoveCursor( GetParent()->GetCrossHairPosition() );
357 }
void MoveCursor(const wxPoint &aPosition)
Function MoveCursor moves the mouse pointer to aPosition in logical (drawing) units.
Definition: draw_panel.cpp:360
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void EDA_DRAW_PANEL::OnActivate ( wxActivateEvent &  event)

Function OnActivate handles window activation events.

The member m_canStartBlock is initialize to avoid a block start command on activation (because a left mouse button can be pressed and no block command wanted. This happens when enter on a hierarchy sheet on double click.

Definition at line 407 of file draw_panel.cpp.

References m_canStartBlock.

408 {
409  m_canStartBlock = -1; // Block Command can't start
410  event.Skip();
411 }
int m_canStartBlock
useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (...
void EDA_DRAW_PANEL::OnCharHook ( wxKeyEvent &  event)

Definition at line 1387 of file draw_panel.cpp.

1388 {
1389  event.Skip();
1390 }
void EDA_DRAW_PANEL::OnEraseBackground ( wxEraseEvent &  event)
inline

Definition at line 211 of file class_drawpanel.h.

211 { }
void EDA_DRAW_PANEL::OnKeyEvent ( wxKeyEvent &  event)

Definition at line 1392 of file draw_panel.cpp.

References EndMouseCapture(), GetParent(), GR_KB_ALT, GR_KB_CTRL, GR_KB_SHIFT, ID_NO_TOOL_SELECTED, INSTALL_UNBUFFERED_DC, IsMouseCaptured(), m_abortRequest, m_defaultCursor, EDA_DRAW_FRAME::SetMousePosition(), wxPoint::x, and wxPoint::y.

1393 {
1394  int localkey;
1395  wxPoint pos;
1396 
1397  localkey = event.GetKeyCode();
1398 
1399  switch( localkey )
1400  {
1401  default:
1402  break;
1403 
1404  case WXK_ESCAPE:
1405  m_abortRequest = true;
1406 
1407  if( IsMouseCaptured() )
1408  EndMouseCapture();
1409  else
1411  break;
1412  }
1413 
1414  /* Normalize keys code to easily handle keys from Ctrl+A to Ctrl+Z
1415  * They have an ascii code from 1 to 27 remapped
1416  * to GR_KB_CTRL + 'A' to GR_KB_CTRL + 'Z'
1417  */
1418  if( event.ControlDown() && localkey >= WXK_CONTROL_A && localkey <= WXK_CONTROL_Z )
1419  localkey += 'A' - 1;
1420 
1421  /* Disallow shift for keys that have two keycodes on them (e.g. number and
1422  * punctuation keys) leaving only the "letter keys" of A-Z.
1423  * Then, you can have, e.g. Ctrl-5 and Ctrl-% (GB layout)
1424  * and Ctrl-( and Ctrl-5 (FR layout).
1425  * Otherwise, you'd have to have to say Ctrl-Shift-5 on a FR layout
1426  */
1427  bool keyIsLetter = ( localkey >= 'A' && localkey <= 'Z' ) ||
1428  ( localkey >= 'a' && localkey <= 'z' );
1429 
1430  if( event.ShiftDown() && ( keyIsLetter || localkey > 256 ) )
1431  localkey |= GR_KB_SHIFT;
1432 
1433  if( event.ControlDown() )
1434  localkey |= GR_KB_CTRL;
1435 
1436  if( event.AltDown() )
1437  localkey |= GR_KB_ALT;
1438 
1439  INSTALL_UNBUFFERED_DC( DC, this );
1440 
1441  // Some key commands use the current mouse position: refresh it.
1442  pos = wxGetMousePosition() - GetScreenPosition();
1443 
1444  // Compute the cursor position in drawing units. Also known as logical units to wxDC.
1445  pos = wxPoint( DC.DeviceToLogicalX( pos.x ), DC.DeviceToLogicalY( pos.y ) );
1446 
1447  GetParent()->SetMousePosition( pos );
1448 
1449  if( !GetParent()->GeneralControl( &DC, pos, localkey ) )
1450  event.Skip();
1451 }
bool m_abortRequest
Flag used to abort long commands.
void EndMouseCapture(int aId=-1, int aCursorId=-1, const wxString &aTitle=wxEmptyString, bool aCallEndFunc=true)
Function EndMouseCapture ends mouse a capture.
#define GR_KB_ALT
Definition: common.h:65
#define GR_KB_SHIFT
Definition: common.h:66
bool IsMouseCaptured() const
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void SetMousePosition(const wxPoint &aPosition)
#define INSTALL_UNBUFFERED_DC(name, parent)
int m_defaultCursor
The default mouse cursor shape id.
#define GR_KB_CTRL
Definition: common.h:64
void EDA_DRAW_PANEL::OnMouseEntering ( wxMouseEvent &  aEvent)

Definition at line 927 of file draw_panel.cpp.

References m_cursorLevel.

928 {
929  // This is an ugly hack that fixes some cross hair display bugs when the mouse leaves the
930  // canvas area during middle button mouse panning.
931  if( m_cursorLevel != 0 )
932  m_cursorLevel = 0;
933 
934  aEvent.Skip();
935 }
int m_cursorLevel
Index for cursor redraw in XOR mode.
void EDA_DRAW_PANEL::OnMouseEvent ( wxMouseEvent &  event)

Definition at line 1098 of file draw_panel.cpp.

References abs, BLOCK_MINSIZE_LIMIT, BLOCK_ZOOM, CrossHairOff(), CrossHairOn(), EDA_DRAW_FRAME::DisplayToolMsg(), EDA_DRAW_FRAME::GeneralControl(), BLOCK_SELECTOR::GetCommand(), EDA_DRAW_FRAME::GetCrossHairPosition(), BASE_SCREEN::GetCurItem(), EDA_ITEM::GetFlags(), EDA_RECT::GetHeight(), GetParent(), BASE_SCREEN::GetScalingFactor(), GetScreen(), EDA_DRAW_FRAME::GetScreen(), EDA_DRAW_FRAME::GetScrollCenterPosition(), BLOCK_SELECTOR::GetState(), EDA_DRAW_FRAME::GetToolId(), EDA_RECT::GetWidth(), GR_KB_ALT, GR_KB_CTRL, GR_KB_SHIFT, GR_M_DCLICK, GR_M_LEFT_DOWN, GR_M_MIDDLE_DOWN, EDA_DRAW_FRAME::HandleBlockBegin(), EDA_DRAW_FRAME::HandleBlockEnd(), EDA_DRAW_FRAME::HandleBlockPlace(), ID_MOUSE_DOUBLECLICK, ID_NO_TOOL_SELECTED, ID_ZOOM_SELECTION, INSTALL_UNBUFFERED_DC, BASE_SCREEN::IsBlockActive(), IsMouseCaptured(), KiROUND(), BASE_SCREEN::m_BlockLocate, m_canStartBlock, m_ClickTimer, m_currentCursor, m_CursorClickPos, m_CursorStartPos, m_doubleClickInterval, m_enableBlockCommands, m_endMouseCaptureCallback, m_ignoreMouseEvents, m_ignoreNextLeftButtonRelease, m_minDragEventCount, m_PanStartCenter, m_PanStartEventPosition, m_requestAutoPan, MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND, EDA_DRAW_FRAME::OnLeftClick(), EDA_DRAW_FRAME::OnLeftDClick(), OnRightClick(), EDA_BASE_FRAME::PrintMsg(), EDA_DRAW_FRAME::RedrawScreen(), EDA_DRAW_FRAME::RefPos(), scale, EDA_DRAW_FRAME::SetMousePosition(), EDA_RECT::SetOrigin(), STATE_BLOCK_END, STATE_BLOCK_MOVE, STATE_NO_BLOCK, wxPoint::x, and wxPoint::y.

1099 {
1100  int localbutt = 0;
1101  BASE_SCREEN* screen = GetScreen();
1102 
1103  if( !screen )
1104  return;
1105 
1106  /* Adjust value to filter mouse displacement before consider the drag
1107  * mouse is really a drag command, not just a movement while click
1108  */
1109 #define MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND 5
1110 
1111  if( event.Leaving() )
1112  m_canStartBlock = -1;
1113 
1114  if( !IsMouseCaptured() ) // No mouse capture in progress.
1115  m_requestAutoPan = false;
1116 
1117  if( GetParent()->IsActive() )
1118  SetFocus();
1119  else
1120  return;
1121 
1122  if( !event.IsButton() && !event.Moving() && !event.Dragging() )
1123  return;
1124 
1125  if( event.RightDown() )
1126  {
1127  OnRightClick( event );
1128  return;
1129  }
1130 
1131  if( m_ignoreMouseEvents )
1132  return;
1133 
1134  if( event.LeftDown() )
1135  localbutt = GR_M_LEFT_DOWN;
1136 
1137  if( event.ButtonDClick( 1 ) )
1138  localbutt = GR_M_LEFT_DOWN | GR_M_DCLICK;
1139 
1140  if( event.MiddleDown() )
1141  localbutt = GR_M_MIDDLE_DOWN;
1142 
1143  INSTALL_UNBUFFERED_DC( DC, this );
1144  DC.SetBackground( *wxBLACK_BRUSH );
1145 
1146  // Compute the cursor position in drawing (logical) units.
1147  GetParent()->SetMousePosition( event.GetLogicalPosition( DC ) );
1148 
1149  int kbstat = 0;
1150 
1151  if( event.ShiftDown() )
1152  kbstat |= GR_KB_SHIFT;
1153 
1154  if( event.ControlDown() )
1155  kbstat |= GR_KB_CTRL;
1156 
1157  if( event.AltDown() )
1158  kbstat |= GR_KB_ALT;
1159 
1160  // Calling Double Click and Click functions :
1161  if( localbutt == (int) ( GR_M_LEFT_DOWN | GR_M_DCLICK ) )
1162  {
1163  if( m_ClickTimer )
1164  {
1165  m_ClickTimer->Stop();
1166  wxDELETE( m_ClickTimer );
1167  }
1168  GetParent()->OnLeftDClick( &DC, GetParent()->RefPos( true ) );
1169 
1170  // inhibit a response to the mouse left button release,
1171  // because we have a double click, and we do not want a new
1172  // OnLeftClick command at end of this Double Click
1174  }
1175  else if( event.LeftUp() )
1176  {
1177  // A block command is in progress: a left up is the end of block
1178  // or this is the end of a double click, already seen
1179  // Note also m_ignoreNextLeftButtonRelease can be set by
1180  // the call to OnLeftClick(), so do not change it after calling OnLeftClick
1181  bool ignoreEvt = m_ignoreNextLeftButtonRelease;
1183 
1184  if( screen->m_BlockLocate.GetState() == STATE_NO_BLOCK && !ignoreEvt )
1185  {
1186  EDA_ITEM* item = screen->GetCurItem();
1187  m_CursorClickPos = GetParent()->RefPos( true );
1188 
1189  // If we have an item already selected, or we are using a tool,
1190  // we won't use the disambiguation menu so process the click immediately
1191  if( ( item && item->GetFlags() ) || GetParent()->GetToolId() != ID_NO_TOOL_SELECTED )
1193  else
1194  {
1195  wxDELETE( m_ClickTimer );
1196  m_ClickTimer = new wxTimer(this, ID_MOUSE_DOUBLECLICK);
1197  m_ClickTimer->StartOnce( m_doubleClickInterval );
1198  }
1199  }
1200 
1201  }
1202  else if( !event.LeftIsDown() )
1203  {
1204  /* be sure there is a response to a left button release command
1205  * even when a LeftUp event is not seen. This happens when a
1206  * double click opens a dialog box, and the release mouse button
1207  * is made when the dialog box is opened.
1208  */
1210  }
1211 
1212  if( event.ButtonDown( wxMOUSE_BTN_MIDDLE ) )
1213  {
1215  m_PanStartEventPosition = event.GetPosition();
1216 
1217  INSTALL_UNBUFFERED_DC( dc, this );
1218  CrossHairOff( &dc );
1219  SetCursor( wxCURSOR_SIZING );
1220  }
1221 
1222  if( event.ButtonUp( wxMOUSE_BTN_MIDDLE ) )
1223  {
1224  INSTALL_UNBUFFERED_DC( dc, this );
1225  CrossHairOn( &dc );
1226  SetCursor( (wxStockCursor) m_currentCursor );
1227  }
1228 
1229  if( event.MiddleIsDown() )
1230  {
1231  wxPoint currentPosition = event.GetPosition();
1232 
1233  double scale = GetParent()->GetScreen()->GetScalingFactor();
1234  int x = m_PanStartCenter.x +
1235  KiROUND( (double) ( m_PanStartEventPosition.x - currentPosition.x ) / scale );
1236  int y = m_PanStartCenter.y +
1237  KiROUND( (double) ( m_PanStartEventPosition.y - currentPosition.y ) / scale );
1238 
1239  GetParent()->RedrawScreen( wxPoint( x, y ), false );
1240  }
1241 
1242  // Calling the general function on mouse changes (and pseudo key commands)
1243  GetParent()->GeneralControl( &DC, event.GetLogicalPosition( DC ), 0 );
1244 
1245  /*******************************/
1246  /* Control of block commands : */
1247  /*******************************/
1248 
1249  // Command block can't start if mouse is dragging a new panel
1250  static EDA_DRAW_PANEL* lastPanel;
1251  if( lastPanel != this )
1252  {
1253  m_minDragEventCount = 0;
1254  m_canStartBlock = -1;
1255  }
1256 
1257  /* A new command block can start after a release buttons
1258  * and if the drag is enough
1259  * This is to avoid a false start block when a dialog box is dismissed,
1260  * or when changing panels in hierarchy navigation
1261  * or when clicking while and moving mouse
1262  */
1263  if( !event.LeftIsDown() && !event.MiddleIsDown() )
1264  {
1265  m_minDragEventCount = 0;
1266  m_canStartBlock = 0;
1267 
1268  /* Remember the last cursor position when a drag mouse starts
1269  * this is the last position ** before ** clicking a button
1270  * this is useful to start a block command from the point where the
1271  * mouse was clicked first
1272  * (a filter creates a delay for the real block command start, and
1273  * we must remember this point)
1274  */
1276  }
1277 
1278  if( m_enableBlockCommands && !(localbutt & GR_M_DCLICK) )
1279  {
1280  if( !screen->IsBlockActive() )
1281  {
1283  }
1284 
1285  if( event.LeftDown() )
1286  {
1287  if( screen->m_BlockLocate.GetState() == STATE_BLOCK_MOVE )
1288  {
1289  m_requestAutoPan = false;
1290  GetParent()->HandleBlockPlace( &DC );
1292  }
1293  }
1294  else if( ( m_canStartBlock >= 0 ) && event.LeftIsDown() && !IsMouseCaptured() )
1295  {
1296  // Mouse is dragging: if no block in progress, start a block command.
1297  if( screen->m_BlockLocate.GetState() == STATE_NO_BLOCK )
1298  {
1299  // Start a block command
1300  int cmd_type = kbstat;
1301 
1302  // A block command is started if the drag is enough. A small
1303  // drag is ignored (it is certainly a little mouse move when
1304  // clicking) not really a drag mouse
1307  else
1308  {
1309  auto cmd = (GetParent()->GetToolId() == ID_ZOOM_SELECTION) ? BLOCK_ZOOM : 0;
1310 
1311  if( !GetParent()->HandleBlockBegin( &DC, cmd_type, m_CursorStartPos, cmd ) )
1312  {
1313  // should not occur: error
1315  wxT( "EDA_DRAW_PANEL::OnMouseEvent() Block Error" ) );
1316  }
1317  else
1318  {
1319  m_requestAutoPan = true;
1320  SetCursor( wxCURSOR_SIZING );
1321  }
1322  }
1323  }
1324  }
1325 
1326  if( event.ButtonUp( wxMOUSE_BTN_LEFT ) )
1327  {
1328  /* Release the mouse button: end of block.
1329  * The command can finish (DELETE) or have a next command (MOVE,
1330  * COPY). However the block command is canceled if the block
1331  * size is small because a block command filtering is already
1332  * made, this case happens, but only when the on grid cursor has
1333  * not moved.
1334  */
1335  #define BLOCK_MINSIZE_LIMIT 1
1336  bool BlockIsSmall =
1338  && ( std::abs( screen->m_BlockLocate.GetHeight() ) < BLOCK_MINSIZE_LIMIT );
1339 
1340  if( (screen->m_BlockLocate.GetState() != STATE_NO_BLOCK) && BlockIsSmall )
1341  {
1343  {
1344  m_endMouseCaptureCallback( this, &DC );
1345  m_requestAutoPan = false;
1346  }
1347 
1348  SetCursor( (wxStockCursor) m_currentCursor );
1349  }
1350  else if( screen->m_BlockLocate.GetState() == STATE_BLOCK_END )
1351  {
1352  m_requestAutoPan = false;
1353  GetParent()->HandleBlockEnd( &DC );
1354  SetCursor( (wxStockCursor) m_currentCursor );
1355  if( screen->m_BlockLocate.GetState() == STATE_BLOCK_MOVE )
1356  {
1357  m_requestAutoPan = true;
1358  SetCursor( wxCURSOR_HAND );
1359  }
1360  }
1361  }
1362  }
1363 
1364  // End of block command on a double click
1365  // To avoid an unwanted block move command if the mouse is moved while double clicking
1366  if( localbutt == (int) ( GR_M_LEFT_DOWN | GR_M_DCLICK ) )
1367  {
1368  if( !screen->IsBlockActive() && IsMouseCaptured() )
1369  {
1370  m_endMouseCaptureCallback( this, &DC );
1371  }
1372  }
1373 
1374 #if 0
1375  wxString msg_debug;
1376  msg_debug.Printf( " block state %d, cmd %d",
1377  screen->m_BlockLocate.GetState(),
1378  screen->m_BlockLocate.GetCommand() );
1379  GetParent()->PrintMsg( msg_debug );
1380 #endif
1381 
1382  lastPanel = this;
1383 }
#define GR_M_DCLICK
Definition: gr_basic.h:77
void PrintMsg(const wxString &text)
Definition: basicframe.cpp:386
int m_canStartBlock
useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (...
STATUS_FLAGS GetFlags() const
Definition: base_struct.h:282
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
#define GR_M_MIDDLE_DOWN
Definition: gr_basic.h:76
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
EDA_ITEM * GetCurItem() const
virtual void HandleBlockPlace(wxDC *DC)
Function HandleBlockPlace( ) Called after HandleBlockEnd, when a block command needs to be executed a...
Definition: draw_frame.cpp:670
double GetScalingFactor() const
Function GetScalingFactor returns the inverse of the current scale used to draw items on screen...
Definition: base_screen.cpp:92
bool m_requestAutoPan
true to request an auto pan. Valid only when m_enableAutoPan = true.
int GetHeight() const
END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback
Abort mouse capture callback function.
void SetOrigin(const wxPoint &pos)
const wxPoint & GetScrollCenterPosition() const
wxPoint m_PanStartEventPosition
Initial position of mouse event when pan started.
bool m_enableBlockCommands
True enables block commands.
#define abs(a)
Definition: auxiliary.h:84
#define GR_KB_ALT
Definition: common.h:65
virtual bool HandleBlockBegin(wxDC *aDC, EDA_KEY aKey, const wxPoint &aPosition, int aExplicitCommand=0)
Initialize a block command.
Definition: draw_frame.cpp:838
bool IsBlockActive() const
virtual BASE_SCREEN * GetScreen() const
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
Definition: draw_frame.h:344
#define GR_KB_SHIFT
Definition: common.h:66
virtual void OnLeftClick(wxDC *DC, const wxPoint &MousePos)=0
bool IsMouseCaptured() const
Class BASE_SCREEN handles how to draw a screen (a board, a schematic ...)
#define BLOCK_MINSIZE_LIMIT
bool m_ignoreMouseEvents
Ignore mouse events when true.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
#define MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND
void CrossHairOff(wxDC *DC)
Definition: draw_panel.cpp:259
bool m_ignoreNextLeftButtonRelease
Ignore the next mouse left button release when true.
virtual bool HandleBlockEnd(wxDC *DC)
Function HandleBlockEnd( ) Handle the "end" of a block command, i.e.
Definition: draw_frame.cpp:675
wxPoint m_PanStartCenter
Initial scroll center position when pan started.
wxPoint RefPos(bool useMouse) const
Function RefPos Return the reference position, coming from either the mouse position or the cursor po...
void RedrawScreen(const wxPoint &aCenterPoint, bool aWarpPointer)
Function RedrawScreen redraws the entire screen area by updating the scroll bars and mouse pointer in...
Definition: zoom.cpp:46
#define GR_M_LEFT_DOWN
Definition: gr_basic.h:74
wxPoint m_CursorClickPos
Used for maintaining click position.
void CrossHairOn(wxDC *DC)
Definition: draw_panel.cpp:266
const int scale
void DisplayToolMsg(const wxString &msg)
Definition: draw_frame.cpp:509
void SetMousePosition(const wxPoint &aPosition)
BLOCK_STATE_T GetState() const
#define INSTALL_UNBUFFERED_DC(name, parent)
int m_currentCursor
Current mouse cursor shape id.
int GetToolId() const
Definition: draw_frame.h:468
wxTimer * m_ClickTimer
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:178
int GetWidth() const
bool OnRightClick(wxMouseEvent &event)
Function OnRightClick builds and displays a context menu on a right mouse button click.
Definition: draw_panel.cpp:892
int m_minDragEventCount
Count the drag events.
BLOCK_COMMAND_T GetCommand() const
wxPoint m_CursorStartPos
Used for testing the cursor movement.
virtual bool GeneralControl(wxDC *aDC, const wxPoint &aPosition, EDA_KEY aHotKey=0)
Function GeneralControl performs application specific control using aDC at aPosition in logical units...
Definition: draw_frame.h:586
virtual void OnLeftDClick(wxDC *DC, const wxPoint &MousePos)
Definition: draw_frame.cpp:504
#define GR_KB_CTRL
Definition: common.h:64
wxPoint GetCrossHairPosition(bool aInvertY=false) const
Function GetCrossHairPosition return the current cross hair position in logical (drawing) coordinates...
void EDA_DRAW_PANEL::OnMouseLeaving ( wxMouseEvent &  event)

Definition at line 938 of file draw_panel.cpp.

References GetParent(), ID_POPUP_ZOOM_CENTER, INSTALL_UNBUFFERED_DC, m_enableAutoPan, m_ignoreMouseEvents, m_mouseCaptureCallback, m_requestAutoPan, EDA_DRAW_FRAME::SetCrossHairPosition(), wxPoint::x, and wxPoint::y.

939 {
940  if( m_mouseCaptureCallback == NULL ) // No command in progress.
941  m_requestAutoPan = false;
942 
944  return;
945 
946  // Auto pan when mouse has left the client window
947  // Ensure the cross_hair position is updated,
948  // because it will be used to center the screen.
949  // We use a position inside the client window
950  wxRect area( wxPoint( 0, 0 ), GetClientSize() );
951  wxPoint cross_hair_pos = event.GetPosition();
952 
953  // Certain window managers (e.g. awesome wm) incorrectly trigger "on leave" event,
954  // therefore test if the cursor has really left the panel area
955  if( !area.Contains( cross_hair_pos ) )
956  {
957  INSTALL_UNBUFFERED_DC( dc, this );
958  cross_hair_pos.x = dc.DeviceToLogicalX( cross_hair_pos.x );
959  cross_hair_pos.y = dc.DeviceToLogicalY( cross_hair_pos.y );
960 
961  GetParent()->SetCrossHairPosition( cross_hair_pos );
962 
963  wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_POPUP_ZOOM_CENTER );
964  cmd.SetEventObject( this );
965  GetEventHandler()->ProcessEvent( cmd );
966  }
967 
968  event.Skip();
969 }
bool m_requestAutoPan
true to request an auto pan. Valid only when m_enableAutoPan = true.
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
bool m_ignoreMouseEvents
Ignore mouse events when true.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
#define INSTALL_UNBUFFERED_DC(name, parent)
bool m_enableAutoPan
True to enable automatic panning.
void SetCrossHairPosition(const wxPoint &aPosition, bool aSnapToGrid=true)
Function SetCrossHairPosition sets the screen cross hair position to aPosition in logical (drawing) u...
void EDA_DRAW_PANEL::OnMouseWheel ( wxMouseEvent &  event)

Function OnMouseWheel handles mouse wheel events.

The mouse wheel is used to provide support for zooming and panning. This is accomplished by converting mouse wheel events in pseudo menu command events and sending them to the appropriate parent window event handler.

Definition at line 972 of file draw_panel.cpp.

References GetParent(), BASE_SCREEN::GetScalingFactor(), EDA_DRAW_FRAME::GetScreen(), EDA_DRAW_FRAME::GetScrollCenterPosition(), ID_OFFCENTER_ZOOM_IN, ID_OFFCENTER_ZOOM_OUT, ID_PAN_DOWN, ID_PAN_LEFT, ID_PAN_RIGHT, ID_PAN_UP, ID_POPUP_ZOOM_IN, ID_POPUP_ZOOM_OUT, INSTALL_UNBUFFERED_DC, kicadTraceCoords, KiROUND(), m_enableMousewheelPan, m_enableZoomNoCenter, m_ignoreMouseEvents, EDA_DRAW_FRAME::RedrawScreen(), scale, EDA_DRAW_FRAME::SetCrossHairPosition(), EDA_DRAW_FRAME::SetScrollCenterPosition(), wxPoint::x, and wxPoint::y.

973 {
974  if( m_ignoreMouseEvents )
975  return;
976 
977  wxRect rect = wxRect( wxPoint( 0, 0 ), GetClientSize() );
978 
979  // Ignore scroll events if the cursor is outside the drawing area.
980  if( event.GetWheelRotation() == 0 || !GetParent()->IsEnabled()
981  || !rect.Contains( event.GetPosition() ) )
982  {
983  wxLogTrace( kicadTraceCoords,
984  wxT( "OnMouseWheel() position(%d, %d) rectangle(%d, %d, %d, %d)" ),
985  event.GetPosition().x, event.GetPosition().y,
986  rect.x, rect.y, rect.width, rect.height );
987  event.Skip();
988  return;
989  }
990 
991  INSTALL_UNBUFFERED_DC( dc, this );
992  GetParent()->SetCrossHairPosition( event.GetLogicalPosition( dc ) );
993 
994  wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
995  cmd.SetEventObject( this );
996 
997  bool offCenterReq = event.ControlDown() && event.ShiftDown();
998  offCenterReq = offCenterReq || m_enableZoomNoCenter;
999 
1000  int axis = event.GetWheelAxis();
1001  int wheelRotation = event.GetWheelRotation();
1002 
1003  if( m_enableMousewheelPan )
1004  {
1005  // MousewheelPAN + Ctrl = zooming
1006  if( event.ControlDown() && !event.ShiftDown() )
1007  {
1008  if( wheelRotation > 0 )
1009  cmd.SetId( ID_POPUP_ZOOM_IN );
1010  else if( wheelRotation < 0)
1011  cmd.SetId( ID_POPUP_ZOOM_OUT );
1012  }
1013  // MousewheelPAN + Shift = horizontal scrolling
1014  // Without modifiers MousewheelPAN - just pan
1015  else
1016  {
1017  if( event.ShiftDown() && !event.ControlDown() )
1018  axis = wxMOUSE_WHEEL_HORIZONTAL;
1019 
1020  wxPoint newStart = GetViewStart();
1022  double scale = GetParent()->GetScreen()->GetScalingFactor();
1023 
1024  if( axis == wxMOUSE_WHEEL_HORIZONTAL )
1025  {
1026  newStart.x += wheelRotation;
1027  center.x += KiROUND( (double) wheelRotation / scale );
1028  }
1029  else
1030  {
1031  newStart.y -= wheelRotation;
1032  center.y -= KiROUND( (double) wheelRotation / scale );
1033  }
1034  Scroll( newStart );
1035 
1036  GetParent()->SetScrollCenterPosition( center );
1037  GetParent()->SetCrossHairPosition( center, true );
1038  GetParent()->RedrawScreen( center, false );
1039  }
1040  }
1041  else if( wheelRotation > 0 )
1042  {
1043  if( event.ShiftDown() && !event.ControlDown() )
1044  cmd.SetId( ID_PAN_UP );
1045  else if( event.ControlDown() && !event.ShiftDown() )
1046  cmd.SetId( ID_PAN_LEFT );
1047  else if( offCenterReq )
1048  cmd.SetId( ID_OFFCENTER_ZOOM_IN );
1049  else
1050  cmd.SetId( ID_POPUP_ZOOM_IN );
1051  }
1052  else if( wheelRotation < 0 )
1053  {
1054  if( event.ShiftDown() && !event.ControlDown() )
1055  cmd.SetId( ID_PAN_DOWN );
1056  else if( event.ControlDown() && !event.ShiftDown() )
1057  cmd.SetId( ID_PAN_RIGHT );
1058  else if( offCenterReq )
1059  cmd.SetId( ID_OFFCENTER_ZOOM_OUT );
1060  else
1061  cmd.SetId( ID_POPUP_ZOOM_OUT );
1062  }
1063 
1064  if( cmd.GetId() )
1065  GetEventHandler()->ProcessEvent( cmd );
1066  event.Skip();
1067 }
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
double GetScalingFactor() const
Function GetScalingFactor returns the inverse of the current scale used to draw items on screen...
Definition: base_screen.cpp:92
bool m_enableZoomNoCenter
True to enable zooming around the crosshair instead of the center.
void SetScrollCenterPosition(const wxPoint &aPoint)
const wxPoint & GetScrollCenterPosition() const
virtual BASE_SCREEN * GetScreen() const
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
Definition: draw_frame.h:344
bool m_ignoreMouseEvents
Ignore mouse events when true.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void RedrawScreen(const wxPoint &aCenterPoint, bool aWarpPointer)
Function RedrawScreen redraws the entire screen area by updating the scroll bars and mouse pointer in...
Definition: zoom.cpp:46
const int scale
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
#define INSTALL_UNBUFFERED_DC(name, parent)
Definition: id.h:252
void SetCrossHairPosition(const wxPoint &aPosition, bool aSnapToGrid=true)
Function SetCrossHairPosition sets the screen cross hair position to aPosition in logical (drawing) u...
void EDA_DRAW_PANEL::OnPaint ( wxPaintEvent &  event)

Definition at line 606 of file draw_panel.cpp.

References GetScreen(), INSTALL_PAINTDC, ReDraw(), and SetClipBox().

607 {
608  if( GetScreen() == NULL )
609  {
610  event.Skip();
611  return;
612  }
613 
614  INSTALL_PAINTDC( paintDC, this );
615 
616  wxRect region = GetUpdateRegion().GetBox();
617  SetClipBox( paintDC, &region );
618  ReDraw( &paintDC, true );
619 }
#define INSTALL_PAINTDC(name, parent)
void SetClipBox(const EDA_RECT &aRect)
void ReDraw(wxDC *aDC, bool aEraseBackground=true)
Definition: draw_panel.cpp:622
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
void EDA_DRAW_PANEL::OnPan ( wxCommandEvent &  event)

Definition at line 1454 of file draw_panel.cpp.

References GetParent(), BASE_SCREEN::GetScalingFactor(), EDA_DRAW_FRAME::GetScreen(), EDA_DRAW_FRAME::GetScrollCenterPosition(), ID_PAN_DOWN, ID_PAN_LEFT, ID_PAN_RIGHT, ID_PAN_UP, kicadTraceCoords, KiROUND(), m_scrollIncrementX, m_scrollIncrementY, scale, EDA_DRAW_FRAME::SetScrollCenterPosition(), wxPoint::x, and wxPoint::y.

1455 {
1456  int x, y;
1457  int ppux, ppuy;
1458  int unitsX, unitsY;
1459  int maxX, maxY;
1460  int tmpX, tmpY;
1461 
1462  GetViewStart( &x, &y );
1463  GetScrollPixelsPerUnit( &ppux, &ppuy );
1464  GetVirtualSize( &unitsX, &unitsY );
1465  tmpX = x;
1466  tmpY = y;
1467  maxX = unitsX;
1468  maxY = unitsY;
1469  unitsX /= ppux;
1470  unitsY /= ppuy;
1471 
1472  wxLogTrace( kicadTraceCoords,
1473  wxT( "Scroll center position before pan: (%d, %d)" ), tmpX, tmpY );
1474 
1475  switch( event.GetId() )
1476  {
1477  case ID_PAN_UP:
1478  y -= m_scrollIncrementY;
1479  break;
1480 
1481  case ID_PAN_DOWN:
1482  y += m_scrollIncrementY;
1483  break;
1484 
1485  case ID_PAN_LEFT:
1486  x -= m_scrollIncrementX;
1487  break;
1488 
1489  case ID_PAN_RIGHT:
1490  x += m_scrollIncrementX;
1491  break;
1492 
1493  default:
1494  wxLogDebug( wxT( "Unknown ID %d in EDA_DRAW_PANEL::OnPan()." ), event.GetId() );
1495  }
1496 
1497  bool updateCenterScrollPos = true;
1498 
1499  if( x < 0 )
1500  {
1501  x = 0;
1502  updateCenterScrollPos = false;
1503  }
1504 
1505  if( y < 0 )
1506  {
1507  y = 0;
1508  updateCenterScrollPos = false;
1509  }
1510 
1511  if( x > maxX )
1512  {
1513  x = maxX;
1514  updateCenterScrollPos = false;
1515  }
1516 
1517  if( y > maxY )
1518  {
1519  y = maxY;
1520  updateCenterScrollPos = false;
1521  }
1522 
1523  // Don't update the scroll position beyond the scroll limits.
1524  if( updateCenterScrollPos )
1525  {
1526  double scale = GetParent()->GetScreen()->GetScalingFactor();
1527 
1529  center.x += KiROUND( (double) ( x - tmpX ) / scale );
1530  center.y += KiROUND( (double) ( y - tmpY ) / scale );
1531  GetParent()->SetScrollCenterPosition( center );
1532 
1533  wxLogTrace( kicadTraceCoords,
1534  wxT( "Scroll center position after pan: (%d, %d)" ), center.x, center.y );
1535  }
1536 
1537  Scroll( x/ppux, y/ppuy );
1538 }
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
double GetScalingFactor() const
Function GetScalingFactor returns the inverse of the current scale used to draw items on screen...
Definition: base_screen.cpp:92
int m_scrollIncrementX
X axis scroll increment in pixels per unit.
void SetScrollCenterPosition(const wxPoint &aPoint)
const wxPoint & GetScrollCenterPosition() const
virtual BASE_SCREEN * GetScreen() const
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
Definition: draw_frame.h:344
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
const int scale
Definition: id.h:252
int m_scrollIncrementY
Y axis scroll increment in pixels per unit.
bool EDA_DRAW_PANEL::OnRightClick ( wxMouseEvent &  event)

Function OnRightClick builds and displays a context menu on a right mouse button click.

Returns
true if the context menu is shown, or false

Definition at line 892 of file draw_panel.cpp.

References EDA_DRAW_FRAME::AddMenuZoomAndGrid(), GetParent(), INSTALL_UNBUFFERED_DC, m_ignoreMouseEvents, and MoveCursorToCrossHair().

Referenced by OnMouseEvent().

893 {
894  wxPoint pos;
895  wxMenu MasterMenu;
896 
897  INSTALL_UNBUFFERED_DC( dc, this );
898 
899  pos = event.GetLogicalPosition( dc );
900 
901  if( !GetParent()->OnRightClick( pos, &MasterMenu ) )
902  return false;
903 
904  GetParent()->AddMenuZoomAndGrid( &MasterMenu );
905 
906  pos = event.GetPosition();
907  m_ignoreMouseEvents = true;
908  PopupMenu( &MasterMenu, pos );
909  // here, we are waiting for popup menu closing.
910  // Among different ways, it can be closed by clicking on the left mouse button.
911  // The expected behavior is to move the mouse cursor to its initial
912  // location, where the right click was made.
913  // However there is a case where the move cursor does not work as expected:
914  // when the user left clicks on the caption frame: the entire window is moved.
915  // Calling wxSafeYield avoid this behavior because it allows the left click
916  // to be proceeded before moving the mouse
917  wxSafeYield();
918 
919  // Move the mouse cursor to its initial position:
921  m_ignoreMouseEvents = false;
922 
923  return true;
924 }
void MoveCursorToCrossHair()
Function MoveCursorToCrossHair warps the cursor to the current cross hair position.
Definition: draw_panel.cpp:354
bool m_ignoreMouseEvents
Ignore mouse events when true.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
#define INSTALL_UNBUFFERED_DC(name, parent)
bool OnRightClick(wxMouseEvent &event)
Function OnRightClick builds and displays a context menu on a right mouse button click.
Definition: draw_panel.cpp:892
virtual void AddMenuZoomAndGrid(wxMenu *aMasterMenu)
Function AddMenuZoomAndGrid (virtual) Add standard zoom commands and submenu zoom and grid selection ...
Definition: zoom.cpp:239
void EDA_DRAW_PANEL::OnScroll ( wxScrollWinEvent &  event)

Definition at line 422 of file draw_panel.cpp.

References GetParent(), BASE_SCREEN::GetScalingFactor(), EDA_DRAW_FRAME::GetScreen(), EDA_DRAW_FRAME::GetScrollCenterPosition(), kicadTraceCoords, KiROUND(), m_scrollIncrementX, m_scrollIncrementY, scale, EDA_DRAW_FRAME::SetScrollCenterPosition(), wxPoint::x, and wxPoint::y.

423 {
424  int id = event.GetEventType();
425  int x, y;
426  int ppux, ppuy;
427  int csizeX, csizeY;
428  int unitsX, unitsY;
429 
430  GetViewStart( &x, &y );
431  GetScrollPixelsPerUnit( &ppux, &ppuy );
432  GetClientSize( &csizeX, &csizeY );
433  GetVirtualSize( &unitsX, &unitsY );
434 
435  int tmpX = x;
436  int tmpY = y;
437 
438  csizeX /= ppux;
439  csizeY /= ppuy;
440 
441  unitsX /= ppux;
442  unitsY /= ppuy;
443 
444  int dir = event.GetOrientation(); // wxHORIZONTAL or wxVERTICAL
445 
446  // On windows and on wxWidgets >= 2.9.5 and < 3.1,
447  // there is a bug in mousewheel event which always generates 2 scroll events
448  // (should be the case only for the default mousewheel event)
449  // with id = wxEVT_SCROLLWIN_LINEUP or wxEVT_SCROLLWIN_LINEDOWN
450  // so we skip these events.
451  // Note they are here just in case, because they are not actually used
452  // in Kicad
453 #if wxCHECK_VERSION( 3, 1, 0 ) || !wxCHECK_VERSION( 2, 9, 5 ) || ( !defined (__WINDOWS__) && !defined (__WXMAC__) )
454  int maxX = unitsX - csizeX;
455  int maxY = unitsY - csizeY;
456 
457  if( id == wxEVT_SCROLLWIN_LINEUP )
458  {
459  if( dir == wxHORIZONTAL )
460  {
461  x -= m_scrollIncrementX;
462 
463  if( x < 0 )
464  x = 0;
465  }
466  else
467  {
468  y -= m_scrollIncrementY;
469 
470  if( y < 0 )
471  y = 0;
472  }
473  }
474  else if( id == wxEVT_SCROLLWIN_LINEDOWN )
475  {
476  if( dir == wxHORIZONTAL )
477  {
478  x += m_scrollIncrementX;
479  if( x > maxX )
480  x = maxX;
481  }
482  else
483  {
484  y += m_scrollIncrementY;
485 
486  if( y > maxY )
487  y = maxY;
488  }
489  }
490  else
491 #endif
492  if( id == wxEVT_SCROLLWIN_THUMBTRACK )
493  {
494  if( dir == wxHORIZONTAL )
495  x = event.GetPosition();
496  else
497  y = event.GetPosition();
498  }
499  else
500  {
501  event.Skip();
502  return;
503  }
504 
505  wxLogTrace( kicadTraceCoords,
506  wxT( "Setting scroll bars ppuX=%d, ppuY=%d, unitsX=%d, unitsY=%d, posX=%d, posY=%d" ),
507  ppux, ppuy, unitsX, unitsY, x, y );
508 
509  double scale = GetParent()->GetScreen()->GetScalingFactor();
510 
512  center.x += KiROUND( (double) ( x - tmpX ) / scale );
513  center.y += KiROUND( (double) ( y - tmpY ) / scale );
514  GetParent()->SetScrollCenterPosition( center );
515 
516  Scroll( x, y );
517  event.Skip();
518 }
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
double GetScalingFactor() const
Function GetScalingFactor returns the inverse of the current scale used to draw items on screen...
Definition: base_screen.cpp:92
int m_scrollIncrementX
X axis scroll increment in pixels per unit.
void SetScrollCenterPosition(const wxPoint &aPoint)
const wxPoint & GetScrollCenterPosition() const
virtual BASE_SCREEN * GetScreen() const
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
Definition: draw_frame.h:344
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
const int scale
int m_scrollIncrementY
Y axis scroll increment in pixels per unit.
void EDA_DRAW_PANEL::OnScrollWin ( wxCommandEvent &  event)
void EDA_DRAW_PANEL::OnTimer ( wxTimerEvent &  event)

Function OnTimer handle timer events.

The class will start a timer when a mouse-up event is handled. If a double-click event is not handled inside of a specified interval, the timer event will fire, causing the single-click event to be handled. Otherwise, the system will process the double-click.

Definition at line 414 of file draw_panel.cpp.

References GetParent(), INSTALL_UNBUFFERED_DC, m_CursorClickPos, and EDA_DRAW_FRAME::OnLeftClick().

415 {
416  INSTALL_UNBUFFERED_DC( DC, this );
417  DC.SetBackground( *wxBLACK_BRUSH );
419 }
virtual void OnLeftClick(wxDC *DC, const wxPoint &MousePos)=0
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
wxPoint m_CursorClickPos
Used for maintaining click position.
#define INSTALL_UNBUFFERED_DC(name, parent)
void EDA_DRAW_PANEL::ReDraw ( wxDC *  aDC,
bool  aEraseBackground = true 
)

Definition at line 622 of file draw_panel.cpp.

References BLACK, EraseScreen(), g_GhostColor, g_XorMode, EDA_RECT::GetBottom(), KIGFX::COLOR4D::GetBrightness(), EDA_DRAW_FRAME::GetDrawBgColor(), GetParent(), EDA_RECT::GetRight(), GetScreen(), EDA_RECT::GetX(), EDA_RECT::GetY(), GR_NXOR, GR_XOR, GRResetPenAndBrush(), kicadTraceCoords, m_ClipBox, EDA_DRAW_FRAME::RedrawActiveWindow(), and WHITE.

Referenced by PCB_EDIT_FRAME::AutoPlaceModule(), and OnPaint().

623 {
624  BASE_SCREEN* Screen = GetScreen();
625 
626  if( Screen == NULL )
627  return;
628 
629  COLOR4D bgColor = GetParent()->GetDrawBgColor();
630 
631  // TODO(JE): Is this correct?
632  if( bgColor.GetBrightness() > 0.5 )
633  {
634  g_XorMode = GR_NXOR;
636  }
637  else
638  {
639  g_XorMode = GR_XOR;
641  }
642 
643  GRResetPenAndBrush( DC );
644 
645  DC->SetBackground( wxBrush( bgColor.ToColour() ) );
646  DC->SetBackgroundMode( wxSOLID );
647 
648  if( erasebg )
649  EraseScreen( DC );
650 
651  GetParent()->RedrawActiveWindow( DC, erasebg );
652 
653  // Verfies that the clipping is working correctly. If these two sets of numbers are
654  // not the same or really close. The clipping algorithms are broken.
655  wxLogTrace( kicadTraceCoords,
656  wxT( "Clip box: (%d, %d, %d, %d), Draw extents (%d, %d, %d, %d)" ),
658  DC->MinX(), DC->MinY(), DC->MaxX(), DC->MaxY() );
659 }
GR_DRAWMODE g_XorMode
Definition: gr_basic.cpp:73
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:218
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
virtual COLOR4D GetDrawBgColor() const
Definition: draw_frame.h:321
Class BASE_SCREEN handles how to draw a screen (a board, a schematic ...)
double GetBrightness() const
Function GetBrightness Returns the brightness value of the color ranged from 0.0 to 1...
Definition: color4d.h:259
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
int GetBottom() const
int GetRight() const
virtual void RedrawActiveWindow(wxDC *DC, bool EraseBg)=0
int GetX() const
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
Definition: colors.h:49
int GetY() const
Definition: colors.h:45
void EraseScreen(wxDC *DC)
Definition: draw_panel.cpp:568
COLOR4D g_GhostColor
Draw color for moving objects.
Definition: common.cpp:57
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void EDA_DRAW_PANEL::Refresh ( bool  eraseBackground = true,
const wxRect *  rect = NULL 
)
overridevirtual

Update the board display after modifying it bu 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.

Definition at line 332 of file draw_panel.cpp.

References EDA_DRAW_FRAME::GetGalCanvas(), GetParent(), Refresh(), and EDA_DRAW_PANEL_GAL::Refresh().

Referenced by Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_MoveOrCopyModule(), Abort_MoveTrack(), Abort_Zone_Move_Corner_Or_Outlines(), AbortCreateNewLine(), abortMoveBitmap(), abortMoveItem(), AbortPinMove(), AbortSymbolTraceOn(), DIALOG_GLOBAL_DELETION::AcceptPcbDelete(), SCH_EDIT_FRAME::AddNoConnect(), SCH_EDIT_FRAME::AnnotateComponents(), SCH_EDIT_FRAME::AppendSchematic(), PCB_EDIT_FRAME::Block_Delete(), PCB_EDIT_FRAME::Block_Duplicate(), PCB_EDIT_FRAME::Block_Flip(), PL_EDITOR_FRAME::Block_Move(), GERBVIEW_FRAME::Block_Move(), PCB_EDIT_FRAME::Block_Move(), PCB_EDIT_FRAME::Block_Rotate(), PCB_EDIT_FRAME::Clean_Pcb(), FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList(), FOOTPRINT_WIZARD_FRAME::ClickOnPageList(), PCB_EDIT_FRAME::Delete_Module(), PCB_EDIT_FRAME::Delete_OldZone_Fill(), SCH_EDIT_FRAME::DeleteAnnotation(), LIB_EDIT_FRAME::deleteItem(), SCH_EDIT_FRAME::DeleteItemAtCrossHair(), SCH_EDIT_FRAME::DisplayCurrentSheet(), SCH_EDIT_FRAME::EditComponent(), SCH_EDIT_FRAME::EditComponentFieldText(), LIB_EDIT_FRAME::EditField(), LIB_EDIT_FRAME::EditGraphicSymbol(), SCH_EDIT_FRAME::EditImage(), SCH_EDIT_FRAME::EditLine(), SCH_EDIT_FRAME::EditSheetPin(), PCB_EDIT_FRAME::End_Move_Zone_Corner_Or_Outlines(), LIB_EDIT_FRAME::EndDrawGraphicItem(), GERBVIEW_FRAME::Erase_Current_DrawLayer(), SCH_EDIT_FRAME::ExecuteRemoteCommand(), PL_EDITOR_FRAME::Files_io(), GERBVIEW_FRAME::Files_io(), PCB_EDIT_FRAME::Files_io_from_id(), LEGACY_ARRAY_CREATOR::finalise(), PCB_EDIT_FRAME::FlipTextePcb(), GERBVIEW_FRAME::GERBVIEW_FRAME(), LIB_EDIT_FRAME::GetComponentFromRedoList(), LIB_EDIT_FRAME::GetComponentFromUndoList(), PL_EDITOR_FRAME::GetLayoutFromRedoList(), PL_EDITOR_FRAME::GetLayoutFromUndoList(), SCH_EDIT_FRAME::GetSchematicFromRedoList(), SCH_EDIT_FRAME::GetSchematicFromUndoList(), FOOTPRINT_EDIT_FRAME::HandleBlockEnd(), LIB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), FOOTPRINT_EDIT_FRAME::HandleBlockPlace(), LIB_EDIT_FRAME::HandleBlockPlace(), SCH_EDIT_FRAME::HandleBlockPlace(), SCH_EDIT_FRAME::HighlightConnectionAtPosition(), SCH_EDIT_FRAME::ImportFile(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), GERBVIEW_FRAME::InstallGerberOptionsDialog(), PCB_EDIT_FRAME::InstallModuleOptionsFrame(), SCH_EDIT_FRAME::KiwayMailIn(), GERBVIEW_FRAME::LoadGerberJobFile(), LIB_EDIT_FRAME::LoadOneSymbol(), SCH_EDIT_FRAME::MirrorImage(), SCH_EDIT_FRAME::MirrorSheet(), PCB_EDIT_FRAME::moveExact(), moveItem(), PL_EDITOR_FRAME::MoveItem(), PROPERTIES_FRAME::OnAcceptPrms(), DIALOG_EDIT_COMPONENTS_LIBID::onApplyButton(), DIALOG_ANNOTATE::OnApplyClick(), SCH_EDIT_FRAME::OnAutoplaceFields(), LIB_EDIT_FRAME::OnEditComponentProperties(), SCH_EDIT_FRAME::OnEditItem(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), LIB_EDIT_FRAME::OnEditPin(), DIALOG_ERC::OnEraseDrcMarkersClick(), FOOTPRINT_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotKey(), GERBVIEW_FRAME::OnHotKey(), PCB_LAYER_WIDGET::OnLayerColorChange(), GERBER_LAYER_WIDGET::OnLayerColorChange(), PCB_LAYER_WIDGET::OnLayerSelect(), GERBER_LAYER_WIDGET::OnLayerSelect(), PCB_LAYER_WIDGET::OnLayerVisible(), GERBER_LAYER_WIDGET::OnLayerVisible(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), PL_EDITOR_FRAME::OnLeftClick(), FOOTPRINT_EDIT_FRAME::OnLeftDClick(), SCH_EDIT_FRAME::OnLeftDClick(), PL_EDITOR_FRAME::OnNewPageLayout(), DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick(), DIALOG_GENERALOPTIONS::OnOkClick(), DIALOG_EXCHANGE_MODULE::OnOkClick(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::OnOkClick(), DIALOG_PAGES_SETTINGS::OnOkClick(), SCH_EDIT_FRAME::OnOrient(), GERBER_LAYER_WIDGET::onPopupSelection(), LIB_EDIT_FRAME::OnPreferencesOptions(), SCH_EDIT_FRAME::OnPreferencesOptions(), PCB_LAYER_WIDGET::OnRenderColorChange(), GERBER_LAYER_WIDGET::OnRenderColorChange(), PCB_LAYER_WIDGET::OnRenderEnable(), GERBER_LAYER_WIDGET::OnRenderEnable(), PL_EDITOR_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRotate(), LIB_EDIT_FRAME::OnRotateItem(), GERBVIEW_FRAME::OnSelectActiveDCode(), GERBVIEW_FRAME::OnSelectActiveLayer(), LIB_EDIT_FRAME::OnSelectAlias(), LIB_EDIT_FRAME::OnSelectBodyStyle(), PL_EDITOR_FRAME::OnSelectCoordOriginCorner(), GERBVIEW_FRAME::OnSelectDisplayMode(), EDA_DRAW_FRAME::OnSelectGrid(), GERBVIEW_FRAME::OnSelectHighlightChoice(), DISPLAY_FOOTPRINTS_FRAME::OnSelectOptionToolbar(), FOOTPRINT_EDIT_FRAME::OnSelectOptionToolbar(), SCH_EDIT_FRAME::OnSelectOptionToolbar(), GERBVIEW_FRAME::OnSelectOptionToolbar(), PCB_EDIT_FRAME::OnSelectOptionToolbar(), LIB_EDIT_FRAME::OnSelectPart(), LIB_VIEW_FRAME::onSelectSymbolBodyStyle(), LIB_VIEW_FRAME::onSelectSymbolUnit(), PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode(), SCH_EDIT_FRAME::OnSelectUnit(), PROPERTIES_FRAME::OnSetDefaultValues(), LIB_VIEW_FRAME::OnShowElectricalType(), LIB_EDIT_FRAME::OnShowElectricalType(), EDA_DRAW_FRAME::OnToggleGridState(), PCB_BASE_FRAME::OnTogglePadDrawMode(), PL_EDITOR_FRAME::OnTreeSelection(), EDA_DRAW_FRAME::OnZoom(), SCH_EDIT_FRAME::OpenProjectFiles(), SCH_EDIT_FRAME::OrientComponent(), DIALOG_UPDATE_PCB::PerformUpdate(), FOOTPRINT_EDIT_FRAME::Place_EdgeMod(), PCB_EDIT_FRAME::Place_Texte_Pcb(), LIB_EDIT_FRAME::PlaceAnchor(), PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment(), PCB_BASE_FRAME::PlaceModule(), LIB_EDIT_FRAME::PlacePin(), SCH_EDIT_FRAME::PrepareMoveItem(), PL_EDITOR_FRAME::Process_Config(), PCB_EDIT_FRAME::Process_Config(), EDA_DRAW_FRAME::Process_PageSettings(), LIB_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), LIB_VIEW_FRAME::ReCreateListLib(), FOOTPRINT_WIZARD_FRAME::ReCreatePageList(), DIALOG_DRC_CONTROL::RedrawDrawPanel(), EDA_DRAW_FRAME::RedrawScreen(), EDA_DRAW_FRAME::RedrawScreen2(), Refresh(), FOOTPRINT_WIZARD_FRAME::ReloadFootprint(), PCB_EDIT_FRAME::RemoveMisConnectedTracks(), FOOTPRINT_EDIT_FRAME::RemoveStruct(), SCH_EDIT_FRAME::RepeatDrawItem(), SCH_EDIT_FRAME::rescueProject(), PCB_BASE_FRAME::ResetModuleTextSizes(), PCB_BASE_FRAME::ResetTextSize(), DIALOG_EDIT_COMPONENTS_LIBID::revertChanges(), PCB_BASE_FRAME::Rotate_Module(), PCB_EDIT_FRAME::Rotate_Texte_Pcb(), SCH_EDIT_FRAME::RotateHierarchicalSheet(), SCH_EDIT_FRAME::RotateImage(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), FOOTPRINT_VIEWER_FRAME::SelectCurrentFootprint(), PCB_BASE_FRAME::SetFastGrid1(), PCB_BASE_FRAME::SetFastGrid2(), PCB_BASE_FRAME::SetNextGrid(), PCB_BASE_FRAME::SetPrevGrid(), LIB_VIEW_FRAME::SetSelectedComponent(), LIB_VIEW_FRAME::SetSelectedLibrary(), PCB_BASE_FRAME::SetToolID(), PCB_EDIT_FRAME::Show_1_Ratsnest(), PCB_EDIT_FRAME::SpreadFootprints(), LIB_EDIT_FRAME::StartMovePin(), PCB_EDIT_FRAME::StartMoveTextePcb(), PCB_EDIT_FRAME::Swap_Layers(), PCB_BASE_FRAME::SwitchLayer(), PCB_EDIT_FRAME::SwitchLayer(), DIALOG_ERC::TestErc(), PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event(), WIDGET_EESCHEMA_COLOR_CONFIG::TransferDataFromControl(), DIALOG_DISPLAY_OPTIONS::TransferDataFromWindow(), DIALOG_MODEDIT_DISPLAY_OPTIONS::TransferDataFromWindow(), DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::UpdateObjectSettings(), and GERBVIEW_FRAME::UseGalCanvas().

333 {
334  if( GetParent()->IsGalCanvasActive() )
335  {
337  }
338  else
339  {
340  wxScrolledWindow::Refresh( eraseBackground, rect );
341  }
342 }
void Refresh()
Update the board display after modifying it bu a python script (note: it is automatically called by a...
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it bu a python script (note: it is automatically called by a...
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:867
void EDA_DRAW_PANEL::RefreshDrawingRect ( const EDA_RECT aRect,
bool  aEraseBackground = true 
)

Function RefreshDrawingRect redraws the contents of aRect in drawing units.

aRect is converted to screen coordinates and wxWindow::RefreshRect() is called to repaint the region.

Parameters
aRectThe rectangle to repaint.
aEraseBackgroundErases the background if true.

Definition at line 312 of file draw_panel.cpp.

References EDA_RECT::GetHeight(), EDA_RECT::GetWidth(), EDA_RECT::GetX(), EDA_RECT::GetY(), INSTALL_UNBUFFERED_DC, and kicadTraceCoords.

Referenced by AbortMoveTextModule(), PCB_BASE_FRAME::AddPad(), PCB_EDIT_FRAME::Change_Side_Module(), PCB_EDIT_FRAME::Delete_net(), PCB_EDIT_FRAME::Delete_Segment(), PCB_EDIT_FRAME::Delete_Zone_Contour(), SCH_EDIT_FRAME::DeleteItem(), PCB_BASE_FRAME::DeletePad(), PCB_BASE_FRAME::DeleteTextModule(), PCB_BASE_FRAME::GlobalChange_PadSettings(), PCB_BASE_FRAME::Import_Pad_Settings(), moveBitmap(), PCB_BASE_FRAME::PlaceTexteModule(), SCH_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Remove_One_Track(), PCB_EDIT_FRAME::Remove_Zone_Corner(), PCB_BASE_FRAME::Rotate_Module(), PCB_EDIT_FRAME::StartMoveModule(), DIALOG_LABEL_EDITOR::TextPropertiesAccept(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

313 {
314  INSTALL_UNBUFFERED_DC( dc, this );
315 
316  wxRect rect = aRect;
317 
318  rect.x = dc.LogicalToDeviceX( rect.x );
319  rect.y = dc.LogicalToDeviceY( rect.y );
320  rect.width = dc.LogicalToDeviceXRel( rect.width );
321  rect.height = dc.LogicalToDeviceYRel( rect.height );
322 
323  wxLogTrace( kicadTraceCoords,
324  wxT( "Refresh area: drawing (%d, %d, %d, %d), device (%d, %d, %d, %d)" ),
325  aRect.GetX(), aRect.GetY(), aRect.GetWidth(), aRect.GetHeight(),
326  rect.x, rect.y, rect.width, rect.height );
327 
328  RefreshRect( rect, aEraseBackground );
329 }
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
int GetHeight() const
#define INSTALL_UNBUFFERED_DC(name, parent)
int GetX() const
int GetWidth() const
int GetY() const
void EDA_DRAW_PANEL::SetCanStartBlock ( int  aStartBlock)
inline

Definition at line 170 of file class_drawpanel.h.

Referenced by SCH_EDIT_FRAME::DisplayCurrentSheet(), EDA_DRAW_FRAME::OnActivate(), EDA_DRAW_FRAME::OnMenuOpen(), GERBVIEW_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), and PCB_EDIT_FRAME::OnRightClick().

170 { m_canStartBlock = aStartBlock; }
int m_canStartBlock
useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (...
void EDA_DRAW_PANEL::SetClipBox ( const EDA_RECT aRect)
inline

Definition at line 141 of file class_drawpanel.h.

Referenced by DoPrepareDC(), GBR_LAYOUT::Draw(), PLEDITOR_PRINTOUT::DrawPage(), SCH_PRINTOUT::DrawPage(), BOARD_PRINTOUT_CONTROLLER::DrawPage(), DrawPageOnClipboard(), IsPointOnDisplay(), and OnPaint().

141 { m_ClipBox = aRect; }
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
void EDA_DRAW_PANEL::SetClipBox ( wxDC &  aDC,
const wxRect *  aRect = NULL 
)

Function SetClipBox sets the clip box in drawing (logical) units from aRect in device units.

If aRect is NULL, then the entire visible area of the screen is used as the clip area. The clip box is used when drawing to determine which objects are not visible and do not need to be drawn. Note that this is not the same as setting the device context clipping with wxDC::SetClippingRegion(). This is the rectangle used by the drawing functions in gr_basic.cpp used to determine if the item to draw is off screen and therefore not drawn.

Parameters
aDCThe device context use for drawing with the correct scale and offsets already configured. See DoPrepareDC().
aRectThe clip rectangle in device units or NULL for the entire visible area of the screen.

Definition at line 521 of file draw_panel.cpp.

References CLIP_BOX_PADDING, BASE_SCREEN::GetGridSize(), EDA_RECT::GetHeight(), BASE_SCREEN::GetScalingFactor(), GetScreen(), EDA_RECT::GetWidth(), EDA_RECT::GetX(), EDA_RECT::GetY(), kicadTraceCoords, KiROUND(), m_ClipBox, BASE_SCREEN::m_ScrollbarPos, m_scrollIncrementX, m_scrollIncrementY, BASE_SCREEN::m_StartVisu, max, EDA_RECT::SetOrigin(), EDA_RECT::SetSize(), wxPoint::x, and wxPoint::y.

522 {
523  wxRect clipBox;
524 
525  // Use the entire visible device area if no clip area was defined.
526  if( aRect == NULL )
527  {
528  BASE_SCREEN* Screen = GetScreen();
529 
530  if( !Screen )
531  return;
532 
533  Screen->m_StartVisu = CalcUnscrolledPosition( wxPoint( 0, 0 ) );
534  clipBox.SetSize( GetClientSize() );
535 
536  int scrollX, scrollY;
537 
538  double scalar = Screen->GetScalingFactor();
539  scrollX = KiROUND( Screen->GetGridSize().x * scalar );
540  scrollY = KiROUND( Screen->GetGridSize().y * scalar );
541 
542  m_scrollIncrementX = std::max( GetClientSize().x / 8, scrollX );
543  m_scrollIncrementY = std::max( GetClientSize().y / 8, scrollY );
544  Screen->m_ScrollbarPos.x = GetScrollPos( wxHORIZONTAL );
545  Screen->m_ScrollbarPos.y = GetScrollPos( wxVERTICAL );
546  }
547  else
548  {
549  clipBox = *aRect;
550  }
551 
552  // Pad clip box in device units.
553  clipBox.Inflate( CLIP_BOX_PADDING );
554 
555  // Convert from device units to drawing units.
556  m_ClipBox.SetOrigin( wxPoint( aDC.DeviceToLogicalX( clipBox.x ),
557  aDC.DeviceToLogicalY( clipBox.y ) ) );
558  m_ClipBox.SetSize( wxSize( aDC.DeviceToLogicalXRel( clipBox.width ),
559  aDC.DeviceToLogicalYRel( clipBox.height ) ) );
560 
561  wxLogTrace( kicadTraceCoords,
562  wxT( "Device clip box=(%d, %d, %d, %d), Logical clip box=(%d, %d, %d, %d)" ),
563  clipBox.x, clipBox.y, clipBox.width, clipBox.height,
565 }
static const wxString kicadTraceCoords
Flag to enable draw panel coordinate debug tracing.
Definition: draw_panel.cpp:73
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
double GetScalingFactor() const
Function GetScalingFactor returns the inverse of the current scale used to draw items on screen...
Definition: base_screen.cpp:92
int m_scrollIncrementX
X axis scroll increment in pixels per unit.
EDA_RECT m_ClipBox
The drawing area used to redraw the screen which is usually the visible area of the drawing in intern...
int GetHeight() const
void SetOrigin(const wxPoint &pos)
wxPoint m_StartVisu
Coordinates in drawing units of the current view position (upper left corner of device) ...
Class BASE_SCREEN handles how to draw a screen (a board, a schematic ...)
#define CLIP_BOX_PADDING
Definition: draw_panel.cpp:49
wxPoint m_ScrollbarPos
Current scroll bar position in scroll units.
void SetSize(const wxSize &size)
#define max(a, b)
Definition: auxiliary.h:86
const wxRealPoint & GetGridSize() const
Return the grid size of the currently selected grid.
int GetX() const
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
int GetWidth() const
int GetY() const
int m_scrollIncrementY
Y axis scroll increment in pixels per unit.
void EDA_DRAW_PANEL::SetCurrentCursor ( int  aCursor)
inline

Function SetCurrentCursor Set the current cursor shape for drawpanel.

Definition at line 456 of file class_drawpanel.h.

Referenced by EDA_DRAW_FRAME::SetToolID().

457  {
458  m_currentCursor = aCursor;
459  SetCursor( (wxStockCursor) m_currentCursor );
460  }
int m_currentCursor
Current mouse cursor shape id.
void EDA_DRAW_PANEL::SetEnableAutoPan ( bool  aEnable)

Definition at line 670 of file draw_panel.cpp.

References KIGFX::VIEW_CONTROLS::EnableAutoPan(), EDA_DRAW_FRAME::GetGalCanvas(), GetParent(), EDA_DRAW_PANEL_GAL::GetViewControls(), and m_enableAutoPan.

Referenced by DIALOG_GENERALOPTIONS::OnOkClick(), SCH_EDIT_FRAME::OnPreferencesOptions(), EDA_DRAW_FRAME::PushPreferences(), and DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::UpdateObjectSettings().

671 {
672  m_enableAutoPan = aEnable;
673 
674  if( GetParent()->IsGalCanvasActive() )
676 }
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
virtual void EnableAutoPan(bool aEnabled)
Function EnableAutoPan Turns on/off auto panning (user setting to disable it entirely).
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel...
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:867
bool m_enableAutoPan
True to enable automatic panning.
void EDA_DRAW_PANEL::SetEnableBlockCommands ( bool  aEnable)
inline

Definition at line 165 of file class_drawpanel.h.

Referenced by GERBVIEW_FRAME::GERBVIEW_FRAME(), LIB_EDIT_FRAME::LIB_EDIT_FRAME(), and PL_EDITOR_FRAME::PL_EDITOR_FRAME().

165 { m_enableBlockCommands = aEnable; }
bool m_enableBlockCommands
True enables block commands.
void EDA_DRAW_PANEL::SetEnableMousewheelPan ( bool  aEnable)

Definition at line 662 of file draw_panel.cpp.

References KIGFX::VIEW_CONTROLS::EnableMousewheelPan(), EDA_DRAW_FRAME::GetGalCanvas(), GetParent(), EDA_DRAW_PANEL_GAL::GetViewControls(), and m_enableMousewheelPan.

Referenced by DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick(), DIALOG_GENERALOPTIONS::OnOkClick(), SCH_EDIT_FRAME::OnPreferencesOptions(), and DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::UpdateObjectSettings().

663 {
664  m_enableMousewheelPan = aEnable;
665 
666  if( GetParent()->IsGalCanvasActive() )
668 }
virtual void EnableMousewheelPan(bool aEnable)
Function EnableMousewheelPan() Enables or disables mousewheel panning.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel...
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:867
void EDA_DRAW_PANEL::SetEnableZoomNoCenter ( bool  aEnable)

Definition at line 679 of file draw_panel.cpp.

References KIGFX::VIEW_CONTROLS::EnableCursorWarping(), EDA_DRAW_FRAME::GetGalCanvas(), GetParent(), EDA_DRAW_PANEL_GAL::GetViewControls(), and m_enableZoomNoCenter.

Referenced by DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick(), DIALOG_GENERALOPTIONS::OnOkClick(), SCH_EDIT_FRAME::OnPreferencesOptions(), EDA_DRAW_FRAME::PushPreferences(), and DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::UpdateObjectSettings().

680 {
681  m_enableZoomNoCenter = aEnable;
682 
683  if( GetParent()->IsGalCanvasActive() )
685 }
bool m_enableZoomNoCenter
True to enable zooming around the crosshair instead of the center.
void EnableCursorWarping(bool aEnable)
Function EnableCursorWarping() Enables or disables warping the cursor.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:181
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel...
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:867
void EDA_DRAW_PANEL::SetGrid ( const wxRealPoint &  size)
void EDA_DRAW_PANEL::SetIgnoreLeftButtonReleaseEvent ( bool  aIgnore)
inline

Definition at line 163 of file class_drawpanel.h.

Referenced by EDA_DRAW_FRAME::SkipNextLeftButtonReleaseEvent().

163 { m_ignoreNextLeftButtonRelease = aIgnore; }
bool m_ignoreNextLeftButtonRelease
Ignore the next mouse left button release when true.
void EDA_DRAW_PANEL::SetMouseCapture ( MOUSE_CAPTURE_CALLBACK  aMouseCaptureCallback,
END_MOUSE_CAPTURE_CALLBACK  aEndMouseCaptureCallback 
)
inline

Function SetMouseCapture sets the mouse capture and end mouse capture callbacks to aMouseCaptureCallback and aEndMouseCaptureCallback respectively.

Definition at line 400 of file class_drawpanel.h.

Referenced by Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_Move_ModuleOutline(), Abort_Move_Pad(), Abort_MoveOrCopyModule(), Abort_MoveTrack(), Abort_Zone_Create_Outline(), Abort_Zone_Move_Corner_Or_Outlines(), AbortBlockCurrentCommand(), AbortMoveAndEditTarget(), AbortMoveDimensionText(), abortMoveItem(), AbortMoveTextModule(), PCB_EDIT_FRAME::Begin_DrawSegment(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), PCB_EDIT_FRAME::Begin_Route(), PCB_EDIT_FRAME::Begin_Self(), PCB_EDIT_FRAME::Begin_Zone(), PCB_EDIT_FRAME::BeginMoveDimensionText(), PCB_EDIT_FRAME::BeginMoveTarget(), SCH_EDIT_FRAME::BeginSegment(), LIB_EDIT_FRAME::CreateGraphicItem(), SCH_EDIT_FRAME::CreateNewImage(), LIB_EDIT_FRAME::CreatePin(), SCH_EDIT_FRAME::CreateSheet(), PCB_EDIT_FRAME::Delete_LastCreatedCorner(), PCB_EDIT_FRAME::Delete_Segment(), PCB_EDIT_FRAME::Delete_Texte_Pcb(), PCB_EDIT_FRAME::EditDimension(), PCB_EDIT_FRAME::End_Edge(), FOOTPRINT_EDIT_FRAME::End_Edge_Module(), PCB_EDIT_FRAME::End_Move_Zone_Corner_Or_Outlines(), PCB_EDIT_FRAME::End_Route(), PCB_EDIT_FRAME::End_Zone(), LIB_EDIT_FRAME::EndDrawGraphicItem(), Exit_Self(), LIB_EDIT_FRAME::HandleBlockEnd(), SCH_EDIT_FRAME::HandleBlockEnd(), BLOCK_SELECTOR::InitData(), moveBitmap(), SCH_EDIT_FRAME::MoveImage(), PL_EDITOR_FRAME::MoveItem(), SCH_FIELD::Place(), PCB_EDIT_FRAME::Place_DrawItem(), FOOTPRINT_EDIT_FRAME::Place_EdgeMod(), PCB_EDIT_FRAME::Place_Texte_Pcb(), PCB_EDIT_FRAME::PlaceDimensionText(), PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment(), PL_EDITOR_FRAME::PlaceItem(), PCB_BASE_FRAME::PlaceModule(), PCB_BASE_FRAME::PlacePad(), LIB_EDIT_FRAME::PlacePin(), PCB_EDIT_FRAME::PlaceTarget(), PCB_BASE_FRAME::PlaceTexteModule(), SCH_EDIT_FRAME::PrepareMoveItem(), SCH_EDIT_FRAME::ReSizeSheet(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::Start_Move_DrawItem(), FOOTPRINT_EDIT_FRAME::Start_Move_EdgeMod(), PCB_EDIT_FRAME::Start_Move_Zone_Corner(), PCB_EDIT_FRAME::Start_Move_Zone_Drag_Outline_Edge(), PCB_EDIT_FRAME::Start_Move_Zone_Outlines(), LIB_EDIT_FRAME::StartModifyDrawSymbol(), LIB_EDIT_FRAME::StartMoveDrawSymbol(), PCB_EDIT_FRAME::StartMoveModule(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), PCB_BASE_FRAME::StartMovePad(), LIB_EDIT_FRAME::StartMovePin(), PCB_BASE_FRAME::StartMoveTexteModule(), and PCB_EDIT_FRAME::StartMoveTextePcb().

402  {
403  m_mouseCaptureCallback = aMouseCaptureCallback;
404  m_endMouseCaptureCallback = aEndMouseCaptureCallback;
405  }
END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback
Abort mouse capture callback function.
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
void EDA_DRAW_PANEL::SetPrintMirrored ( bool  aMirror)
inline

Definition at line 168 of file class_drawpanel.h.

Referenced by FOOTPRINT_EDIT_FRAME::PrintPage(), PCB_EDIT_FRAME::PrintPage(), and GERBVIEW_FRAME::PrintPage().

168 { m_PrintIsMirrored = aMirror; }
bool m_PrintIsMirrored
True when drawing in mirror mode.
void EDA_DRAW_PANEL::SetZoom ( double  mode)

Definition at line 282 of file draw_panel.cpp.

References GetScreen(), and BASE_SCREEN::SetZoom().

Referenced by EDA_DRAW_FRAME::UseGalCanvas().

283 {
284  GetScreen()->SetZoom( zoom );
285 }
bool SetZoom(double iu_per_du)
Function SetZoom adjusts the current zoom factor.
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:194
wxPoint EDA_DRAW_PANEL::ToDeviceXY ( const wxPoint pos)

Function ToDeviceXY transforms logical to device coordinates.

Definition at line 202 of file draw_panel.cpp.

References INSTALL_UNBUFFERED_DC, wxPoint::x, and wxPoint::y.

Referenced by EDA_DRAW_FRAME::OnZoom(), and EDA_DRAW_FRAME::RedrawScreen2().

203 {
204  wxPoint ret;
205  INSTALL_UNBUFFERED_DC( dc, this );
206  ret.x = dc.LogicalToDeviceX( pos.x );
207  ret.y = dc.LogicalToDeviceY( pos.y );
208  return ret;
209 }
#define INSTALL_UNBUFFERED_DC(name, parent)
wxPoint EDA_DRAW_PANEL::ToLogicalXY ( const wxPoint pos)

Function ToLogicalXY transforms device to logical coordinates.

Definition at line 212 of file draw_panel.cpp.

References INSTALL_UNBUFFERED_DC, wxPoint::x, and wxPoint::y.

Referenced by EDA_DRAW_FRAME::RedrawScreen2().

213 {
214  wxPoint ret;
215  INSTALL_UNBUFFERED_DC( dc, this );
216  ret.x = dc.DeviceToLogicalX( pos.x );
217  ret.y = dc.DeviceToLogicalY( pos.y );
218  return ret;
219 }
#define INSTALL_UNBUFFERED_DC(name, parent)

Member Data Documentation

bool EDA_DRAW_PANEL::m_abortRequest
private

Flag used to abort long commands.

Definition at line 76 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), GetAbortRequest(), and OnKeyEvent().

int EDA_DRAW_PANEL::m_canStartBlock
private

useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (or >= n) if a block can start

Definition at line 117 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), OnActivate(), and OnMouseEvent().

wxTimer* EDA_DRAW_PANEL::m_ClickTimer
private

Definition at line 70 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), OnMouseEvent(), and ~EDA_DRAW_PANEL().

EDA_RECT EDA_DRAW_PANEL::m_ClipBox
private

The drawing area used to redraw the screen which is usually the visible area of the drawing in internal units.

Definition at line 74 of file class_drawpanel.h.

Referenced by DrawAuxiliaryAxis(), DrawBackGround(), DrawCrossHair(), DrawGrid(), DrawGridAxis(), EDA_DRAW_PANEL(), EraseScreen(), GetClipBox(), IsPointOnDisplay(), ReDraw(), and SetClipBox().

int EDA_DRAW_PANEL::m_currentCursor
private

Current mouse cursor shape id.

Definition at line 58 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), GetCurrentCursor(), and OnMouseEvent().

wxPoint EDA_DRAW_PANEL::m_CursorClickPos
private

Used for maintaining click position.

Definition at line 69 of file class_drawpanel.h.

Referenced by OnMouseEvent(), and OnTimer().

int EDA_DRAW_PANEL::m_cursorLevel
private

Index for cursor redraw in XOR mode.

Definition at line 61 of file class_drawpanel.h.

Referenced by CrossHairOff(), CrossHairOn(), DrawCrossHair(), EDA_DRAW_PANEL(), and OnMouseEntering().

wxPoint EDA_DRAW_PANEL::m_CursorStartPos
private

Used for testing the cursor movement.

Definition at line 65 of file class_drawpanel.h.

Referenced by OnMouseEvent().

int EDA_DRAW_PANEL::m_defaultCursor
private

The default mouse cursor shape id.

Definition at line 59 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), GetDefaultCursor(), and OnKeyEvent().

int EDA_DRAW_PANEL::m_doubleClickInterval
private

Definition at line 119 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), and OnMouseEvent().

bool EDA_DRAW_PANEL::m_enableAutoPan
private

True to enable automatic panning.

Definition at line 81 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), GetEnableAutoPan(), OnMouseLeaving(), SetEnableAutoPan(), and ~EDA_DRAW_PANEL().

bool EDA_DRAW_PANEL::m_enableBlockCommands
private

True enables block commands.

Definition at line 94 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), and OnMouseEvent().

bool EDA_DRAW_PANEL::m_enableMousewheelPan
private

True to enable mousewheel panning by default.

Definition at line 79 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), GetEnableMousewheelPan(), OnMouseWheel(), SetEnableMousewheelPan(), and ~EDA_DRAW_PANEL().

bool EDA_DRAW_PANEL::m_enableZoomNoCenter
private

True to enable zooming around the crosshair instead of the center.

Definition at line 78 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), GetEnableZoomNoCenter(), OnMouseWheel(), SetEnableZoomNoCenter(), and ~EDA_DRAW_PANEL().

END_MOUSE_CAPTURE_CALLBACK EDA_DRAW_PANEL::m_endMouseCaptureCallback
private

Abort mouse capture callback function.

Definition at line 112 of file class_drawpanel.h.

Referenced by CallEndMouseCapture(), EDA_DRAW_PANEL(), EndMouseCapture(), and OnMouseEvent().

bool EDA_DRAW_PANEL::m_ignoreMouseEvents
private

Ignore mouse events when true.

Definition at line 85 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), OnMouseEvent(), OnMouseLeaving(), OnMouseWheel(), and OnRightClick().

bool EDA_DRAW_PANEL::m_ignoreNextLeftButtonRelease
private

Ignore the next mouse left button release when true.

Definition at line 92 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), and OnMouseEvent().

int EDA_DRAW_PANEL::m_minDragEventCount
private

Count the drag events.

Used to filter mouse moves before starting a block command. A block command can be started only if MinDragEventCount > MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND in order to avoid spurious block commands.

Definition at line 102 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), and OnMouseEvent().

MOUSE_CAPTURE_CALLBACK EDA_DRAW_PANEL::m_mouseCaptureCallback
private

Mouse capture move callback function.

Definition at line 109 of file class_drawpanel.h.

Referenced by CallMouseCapture(), EDA_DRAW_PANEL(), EndMouseCapture(), and OnMouseLeaving().

wxPoint EDA_DRAW_PANEL::m_PanStartCenter
private

Initial scroll center position when pan started.

Definition at line 66 of file class_drawpanel.h.

Referenced by OnMouseEvent().

wxPoint EDA_DRAW_PANEL::m_PanStartEventPosition
private

Initial position of mouse event when pan started.

Definition at line 67 of file class_drawpanel.h.

Referenced by OnMouseEvent().

bool EDA_DRAW_PANEL::m_PrintIsMirrored
private

True when drawing in mirror mode.

Used by the draw arc function, because arcs are oriented, and in mirror mode, orientations are reversed.

Definition at line 106 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), and GetPrintMirrored().

bool EDA_DRAW_PANEL::m_requestAutoPan
private

true to request an auto pan. Valid only when m_enableAutoPan = true.

Definition at line 83 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), EndMouseCapture(), OnMouseEvent(), and OnMouseLeaving().

int EDA_DRAW_PANEL::m_scrollIncrementX
private

X axis scroll increment in pixels per unit.

Definition at line 62 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), MoveCursor(), OnPan(), OnScroll(), and SetClipBox().

int EDA_DRAW_PANEL::m_scrollIncrementY
private

Y axis scroll increment in pixels per unit.

Definition at line 63 of file class_drawpanel.h.

Referenced by EDA_DRAW_PANEL(), MoveCursor(), OnPan(), OnScroll(), and SetClipBox().

bool EDA_DRAW_PANEL::m_showCrossHair
private

Indicate if cross hair is to be shown.

Definition at line 60 of file class_drawpanel.h.

Referenced by DrawCrossHair(), and EDA_DRAW_PANEL().


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