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...
 
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
 
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 return the default cursor shape. More...
 
int GetCurrentCursor () const
 Function GetCurrentCursor return the current cursor shape, depending on the current selected tool. 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...
 
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...
 

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 99 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_ClipBox, m_currentCursor, m_cursorLevel, m_defaultCursor, 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().

100  :
101  wxScrolledWindow( parent, id, pos, size, wxBORDER | wxHSCROLL | wxVSCROLL )
102 {
103  wxASSERT( parent );
104 
105  ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
106  DisableKeyboardScrolling();
107 
108  m_scrollIncrementX = std::min( size.x / 8, 10 );
109  m_scrollIncrementY = std::min( size.y / 8, 10 );
110 
111  SetLayoutDirection( wxLayout_LeftToRight );
112 
113  SetBackgroundColour( parent->GetDrawBgColor().ToColour() );
114 
115 #if KICAD_USE_BUFFERED_DC || KICAD_USE_BUFFERED_PAINTDC
116  SetBackgroundStyle( wxBG_STYLE_CUSTOM );
117 #endif
118 
119  m_ClipBox.SetSize( size );
120  m_ClipBox.SetX( 0 );
121  m_ClipBox.SetY( 0 );
122  m_canStartBlock = -1; // Command block can start if >= 0
123  m_abortRequest = false;
124  m_enableMousewheelPan = false;
125  m_enableZoomNoCenter = false;
126  m_enableAutoPan = true;
127  m_ignoreMouseEvents = false;
128  // Be sure a mouse release button event will be ignored when creating the canvas
129  // if the mouse click was not made inside the canvas (can happen sometimes, when
130  // launching an editor from a double click made in an other frame)
132 
133  m_mouseCaptureCallback = NULL;
135 
136  wxConfigBase* cfg = Kiface().KifaceSettings();
137 
138  if( cfg )
139  {
140  cfg->Read( ENBL_MOUSEWHEEL_PAN_KEY, &m_enableMousewheelPan, false );
141  cfg->Read( ENBL_ZOOM_NO_CENTER_KEY, &m_enableZoomNoCenter, false );
142  cfg->Read( ENBL_AUTO_PAN_KEY, &m_enableAutoPan, true );
143  }
144 
145  m_requestAutoPan = false;
146  m_enableBlockCommands = false;
148 
149 #ifdef __WXMAC__
150  m_defaultCursor = m_currentCursor = wxCURSOR_CROSS;
151  m_showCrossHair = false;
152 #else
153  m_defaultCursor = m_currentCursor = wxCURSOR_ARROW;
154  m_showCrossHair = true;
155 #endif
156 
157  m_cursorLevel = 0;
158  m_PrintIsMirrored = false;
159 }
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:53
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
#define ENBL_AUTO_PAN_KEY
Definition: draw_panel.cpp:57
virtual COLOR4D GetDrawBgColor() const
Definition: draw_frame.h:286
bool m_ignoreMouseEvents
Ignore mouse events when true.
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: draw_panel.cpp:54
wxConfigBase * KifaceSettings() const
Definition: kiface_i.h:101
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.
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 162 of file draw_panel.cpp.

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

163 {
164  wxConfigBase* cfg = Kiface().KifaceSettings();
165 
166  if( cfg )
167  {
170  cfg->Write( ENBL_AUTO_PAN_KEY, m_enableAutoPan );
171  }
172 }
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:53
#define ENBL_AUTO_PAN_KEY
Definition: draw_panel.cpp:57
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: draw_panel.cpp:54
wxConfigBase * KifaceSettings() const
Definition: kiface_i.h:101
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
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 1524 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().

1525 {
1526  wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
1527 
1528  // CallEndMouseCapture is sometimes called with m_endMouseCaptureCallback == NULL
1529  // for instance after an ABORT in block paste.
1531  m_endMouseCaptureCallback( this, aDC );
1532 }
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 1515 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(), LIB_EDIT_FRAME::RedrawActiveWindow(), SCH_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().

1516 {
1517  wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
1518  wxCHECK_RET( m_mouseCaptureCallback != NULL, wxT( "Mouse capture callback not set." ) );
1519 
1520  m_mouseCaptureCallback( this, aDC, aPosition, aErase );
1521 }
MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback
Mouse capture move callback function.
void EDA_DRAW_PANEL::CrossHairOn ( wxDC *  DC)

Definition at line 260 of file draw_panel.cpp.

References DrawCrossHair(), and m_cursorLevel.

Referenced by SCH_EDIT_FRAME::AddJunction(), PCB_EDIT_FRAME::Attribut_net(), PCB_EDIT_FRAME::Attribut_Segment(), PCB_EDIT_FRAME::Attribut_Track(), SCH_EDIT_FRAME::CreateSheet(), PCB_BASE_FRAME::CursorGoto(), LIB_EDIT_FRAME::deleteItem(), PCB_EDIT_FRAME::Edit_Track_Width(), PCB_EDIT_FRAME::Edit_TrackSegm_Width(), SCH_EDIT_FRAME::FindComponentAndItem(), SCH_EDIT_FRAME::MoveImage(), SCH_EDIT_FRAME::OnConvertTextType(), LIB_EDIT_FRAME::OnCreateNewPartFromExisting(), PCB_EDIT_FRAME::OnHotkeyPlaceItem(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), OnMouseEvent(), EDA_DRAW_FRAME::OnToggleCrossHairStyle(), SCH_EDIT_FRAME::OrientComponent(), LIB_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), EDA_DRAW_FRAME::RefreshCrossHair(), LIB_EDIT_FRAME::RepeatPinItem(), SCH_EDIT_FRAME::ReSizeSheet(), DIALOG_MODULE_BOARD_EDITOR::TransferDataFromWindow(), and EDA_CROSS_HAIR_MANAGER::~EDA_CROSS_HAIR_MANAGER().

261 {
262  ++m_cursorLevel;
263  DrawCrossHair( DC );
264 
265  if( m_cursorLevel > 0 ) // Shouldn't happen, but just in case ..
266  m_cursorLevel = 0;
267 }
void DrawCrossHair(wxDC *aDC, COLOR4D aColor=COLOR4D::WHITE)
Function DrawCrossHair draws the user cross hair.
Definition: draw_panel.cpp:216
int m_cursorLevel
Index for cursor redraw in XOR mode.
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 573 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().

574 {
575  wxScrolledWindow::DoPrepareDC( dc );
576 
577  if( GetScreen() != NULL )
578  {
579  double scale = GetScreen()->GetScalingFactor();
580  dc.SetUserScale( scale, scale );
581 
582  wxPoint pt = GetScreen()->m_DrawOrg;
583  dc.SetLogicalOrigin( pt.x, pt.y );
584  }
585 
586  SetClipBox( dc ); // Reset the clip box to the entire screen.
587  GRResetPenAndBrush( &dc );
588  dc.SetBackgroundMode( wxTRANSPARENT );
589 }
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:196
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:188
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 796 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().

797 {
798  wxPoint origin = GetParent()->GetAuxOrigin();
799 
800  if( origin == wxPoint( 0, 0 ) )
801  return;
802 
803  COLOR4D color = COLOR4D( RED );
804 
805  GRSetDrawMode( aDC, aDrawMode );
806 
807 #if DRAW_AXIS_AS_LINES
808  wxSize pageSize = GetParent()->GetPageSizeIU();
809  // Draw the Y axis
810  GRLine( &m_ClipBox, aDC, origin.x, -pageSize.y,
811  origin.x, pageSize.y, 0, color );
812 
813  // Draw the X axis
814  GRLine( &m_ClipBox, aDC, -pageSize.x, origin.y,
815  pageSize.x, origin.y, 0, color );
816 #else
817  int radius = aDC->DeviceToLogicalXRel( AXIS_SIZE_IN_PIXELS );
818  int linewidth = aDC->DeviceToLogicalXRel( 1 );
819 
820  GRSetColorPen( aDC, color, linewidth );
821 
822  GRLine( &m_ClipBox, aDC, origin.x, origin.y-radius,
823  origin.x, origin.y+radius, 0, color );
824 
825  // Draw the + shape
826  GRLine( &m_ClipBox, aDC, origin.x-radius, origin.y,
827  origin.x+radius, origin.y, 0, color );
828 
829  GRCircle( &m_ClipBox, aDC, origin, radius, linewidth, color );
830 #endif
831 }
#define AXIS_SIZE_IN_PIXELS
Definition: draw_panel.cpp:794
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:290
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color)
Definition: gr_basic.cpp:352
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:175
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:791
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:209
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 666 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(), LIB_EDIT_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), and PCB_EDIT_FRAME::RedrawActiveWindow().

667 {
668  COLOR4D axis_color = COLOR4D( BLUE );
669 
670  GRSetDrawMode( DC, GR_COPY );
671 
672  if( GetParent()->IsGridVisible() )
673  DrawGrid( DC );
674 
675  // Draw axis
676  if( GetParent()->m_showAxis )
677  {
678  wxSize pageSize = GetParent()->GetPageSizeIU();
679 
680  // Draw the Y axis
681  GRLine( &m_ClipBox, DC, 0, -pageSize.y, 0, pageSize.y, 0, axis_color );
682 
683  // Draw the X axis
684  GRLine( &m_ClipBox, DC, -pageSize.x, 0, pageSize.x, 0, 0, axis_color );
685  }
686 
687  if( GetParent()->m_showOriginAxis )
688  DrawAuxiliaryAxis( DC, GR_COPY );
689 
690  if( GetParent()->m_showGridAxis )
691  DrawGridAxis( DC, GR_COPY, GetParent()->GetGridOrigin() );
692 }
Definition: colors.h:57
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:290
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color)
Definition: gr_basic.cpp:352
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:695
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:834
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
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:796
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 216 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(), LIB_EDIT_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), and PCB_EDIT_FRAME::RedrawActiveWindow().

217 {
218  if( m_cursorLevel != 0 || aDC == NULL || !m_showCrossHair )
219  return;
220 
221  wxPoint cursor = GetParent()->GetCrossHairPosition();
222 
223  GRSetDrawMode( aDC, GR_XOR );
224 
225  if( GetParent()->GetGalDisplayOptions().m_fullscreenCursor )
226  {
227  wxSize clientSize = GetClientSize();
228 
229  // Y axis
230  wxPoint lineStart( cursor.x, aDC->DeviceToLogicalY( 0 ) );
231  wxPoint lineEnd( cursor.x, aDC->DeviceToLogicalY( clientSize.y ) );
232 
233  GRLine( &m_ClipBox, aDC, lineStart, lineEnd, 0, aColor );
234 
235  // X axis
236  lineStart = wxPoint( aDC->DeviceToLogicalX( 0 ), cursor.y );
237  lineEnd = wxPoint( aDC->DeviceToLogicalX( clientSize.x ), cursor.y );
238 
239  GRLine( &m_ClipBox, aDC, lineStart, lineEnd, 0, aColor );
240  }
241  else
242  {
243  int len = aDC->DeviceToLogicalXRel( CURSOR_SIZE );
244 
245  GRLine( &m_ClipBox, aDC, cursor.x - len, cursor.y,
246  cursor.x + len, cursor.y, 0, aColor );
247  GRLine( &m_ClipBox, aDC, cursor.x, cursor.y - len,
248  cursor.x, cursor.y + len, 0, aColor );
249  }
250 }
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:290
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color)
Definition: gr_basic.cpp:352
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:175
bool m_showCrossHair
Indicate if cross hair is to be shown.
static const int CURSOR_SIZE
Cursor size in pixels.
Definition: draw_panel.cpp:46
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 695 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().

696 {
697  #define MIN_GRID_SIZE 10 // min grid size in pixels to allow drawing
698  BASE_SCREEN* screen = GetScreen();
699  wxRealPoint gridSize;
700  wxSize screenSize;
701  wxPoint org;
702  wxRealPoint screenGridSize;
703 
704  /* The grid must be visible. this is possible only is grid value
705  * and zoom value are sufficient
706  */
707  gridSize = screen->GetGridSize();
708  screen->m_StartVisu = CalcUnscrolledPosition( wxPoint( 0, 0 ) );
709  screenSize = GetClientSize();
710 
711  screenGridSize.x = aDC->LogicalToDeviceXRel( KiROUND( gridSize.x ) );
712  screenGridSize.y = aDC->LogicalToDeviceYRel( KiROUND( gridSize.y ) );
713 
714  org = m_ClipBox.GetPosition();
715 
716  if( screenGridSize.x < MIN_GRID_SIZE || screenGridSize.y < MIN_GRID_SIZE )
717  {
718  screenGridSize.x *= 2.0;
719  screenGridSize.y *= 2.0;
720  gridSize.x *= 2.0;
721  gridSize.y *= 2.0;
722  }
723 
724  if( screenGridSize.x < MIN_GRID_SIZE || screenGridSize.y < MIN_GRID_SIZE )
725  return;
726 
727  org = GetParent()->GetNearestGridPosition( org, &gridSize );
728 
729  // Setting the nearest grid position can select grid points outside the clip box.
730  // Incrementing the start point by one grid step should prevent drawing grid points
731  // outside the clip box.
732  if( org.x < m_ClipBox.GetX() )
733  org.x += KiROUND( gridSize.x );
734 
735  if( org.y < m_ClipBox.GetY() )
736  org.y += KiROUND( gridSize.y );
737 
738  // Use a pixel based draw to display grid. There are a lot of calls, so the cost is
739  // high and grid is slowly drawn on some platforms. An other way using blit transfert was used,
740  // a long time ago, but it did not give very good results.
741  // The better way is highly dependent on the platform and the graphic card.
742  int xpos;
743  double right = ( double ) m_ClipBox.GetRight();
744  double bottom = ( double ) m_ClipBox.GetBottom();
745 
746 #if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
747  wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
748  if( gcdc )
749  {
750  wxGraphicsContext *gc = gcdc->GetGraphicsContext();
751 
752  // Grid point size
753  const int gsz = 1;
754  const double w = aDC->DeviceToLogicalXRel( gsz );
755  const double h = aDC->DeviceToLogicalYRel( gsz );
756 
757  // Use our own pen
758  wxPen pen( GetParent()->GetGridColor().ToColour(), h );
759  pen.SetCap( wxCAP_BUTT );
760  gc->SetPen( pen );
761 
762  // draw grid
763  wxGraphicsPath path = gc->CreatePath();
764  for( double x = (double) org.x - w/2.0; x <= right - w/2.0; x += gridSize.x )
765  {
766  for( double y = (double) org.y; y <= bottom; y += gridSize.y )
767  {
768  path.MoveToPoint( x, y );
769  path.AddLineToPoint( x+w, y );
770  }
771  }
772  gc->StrokePath( path );
773  }
774  else
775 #endif
776  {
777  GRSetColorPen( aDC, GetParent()->GetGridColor() );
778 
779  for( double x = (double) org.x; x <= right; x += gridSize.x )
780  {
781  xpos = KiROUND( x );
782 
783  for( double y = (double) org.y; y <= bottom; y += gridSize.y )
784  {
785  aDC->DrawPoint( xpos, KiROUND( y ) );
786  }
787  }
788  }
789 }
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:175
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:209
int GetX() const
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:188
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 834 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().

835 {
836  if( !GetParent()->m_showGridAxis || ( !aGridOrigin.x && !aGridOrigin.y ) )
837  return;
838 
840 
841  GRSetDrawMode( aDC, aDrawMode );
842 
843 #if DRAW_AXIS_AS_LINES
844  wxSize pageSize = GetParent()->GetPageSizeIU();
845  // Draw the Y axis
846  GRLine( &m_ClipBox, aDC, aGridOrigin.x, -pageSize.y,
847  aGridOrigin.x, pageSize.y, 0, color );
848 
849  // Draw the X axis
850  GRLine( &m_ClipBox, aDC, -pageSize.x, aGridOrigin.y,
851  pageSize.x, aGridOrigin.y, 0, color );
852 #else
853  int radius = aDC->DeviceToLogicalXRel( AXIS_SIZE_IN_PIXELS );
854  int linewidth = aDC->DeviceToLogicalXRel( 1 );
855 
856  GRSetColorPen( aDC, GetParent()->GetGridColor(), linewidth );
857 
858  GRLine( &m_ClipBox, aDC, aGridOrigin.x-radius, aGridOrigin.y-radius,
859  aGridOrigin.x+radius, aGridOrigin.y+radius, 0, color );
860 
861  // Draw the X shape
862  GRLine( &m_ClipBox, aDC, aGridOrigin.x+radius, aGridOrigin.y-radius,
863  aGridOrigin.x-radius, aGridOrigin.y+radius, 0, color );
864 
865  GRCircle( &m_ClipBox, aDC, aGridOrigin, radius, linewidth, color );
866 #endif
867 }
#define AXIS_SIZE_IN_PIXELS
Definition: draw_panel.cpp:794
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:290
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color)
Definition: gr_basic.cpp:352
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:175
void GRCircle(EDA_RECT *ClipBox, wxDC *DC, int xc, int yc, int r, int width, COLOR4D Color)
Definition: gr_basic.cpp:791
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:209
virtual COLOR4D GetGridColor() const
Function GetGridColor() , virtual.
Definition: draw_frame.h:435
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 1494 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(), LIB_EDIT_FRAME::CreateNewLibraryPart(), LIB_EDIT_FRAME::DeleteOnePart(), 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(), LIB_EDIT_FRAME::LoadOneLibraryPart(), SCH_EDIT_FRAME::OnCancelCurrentCommand(), 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::SaveActiveLibrary().

1496 {
1497  if( m_mouseCaptureCallback && m_endMouseCaptureCallback && aCallEndFunc )
1498  {
1499  INSTALL_UNBUFFERED_DC( dc, this );
1500  m_endMouseCaptureCallback( this, &dc );
1501  }
1502 
1503  m_mouseCaptureCallback = NULL;
1505  m_requestAutoPan = false;
1506 
1507  if( id != -1 && cursor != -1 )
1508  {
1509  wxASSERT( cursor > wxCURSOR_NONE && cursor < wxCURSOR_MAX );
1510  GetParent()->SetToolID( id, cursor, title );
1511  }
1512 }
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:175
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:535
#define INSTALL_UNBUFFERED_DC(name, parent)
void EDA_DRAW_PANEL::EraseScreen ( wxDC *  DC)

Definition at line 554 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().

555 {
556  GRSetDrawMode( DC, GR_COPY );
557 
558  COLOR4D bgColor = GetParent()->GetDrawBgColor();
559 
560  GRSFilledRect( NULL, DC, m_ClipBox.GetX(), m_ClipBox.GetY(),
562  0, bgColor, bgColor );
563 
564  // Set to one (1) to draw bounding box validate bounding box calculation.
565 #if DEBUG_SHOW_CLIP_RECT
566  EDA_RECT bBox = m_ClipBox;
567  GRRect( NULL, DC, bBox.GetOrigin().x, bBox.GetOrigin().y,
568  bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA );
569 #endif
570 }
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:290
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:1152
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:1077
virtual COLOR4D GetDrawBgColor() const
Definition: draw_frame.h:286
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
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 134 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_LINE::Draw(), SCH_BITMAP::Draw(), EDGE_MODULE::Draw(), RATSNEST_ITEM::Draw(), GBR_LAYOUT::Draw(), BLOCK_SELECTOR::Draw(), ZONE_CONTAINER::Draw(), SCH_TEXT::Draw(), SCH_FIELD::Draw(), TEXTE_MODULE::Draw(), TRACK::Draw(), DRAWSEGMENT::Draw(), DIMENSION::Draw(), GERBER_DRAW_ITEM::Draw(), LIB_ITEM::Draw(), SCH_GLOBALLABEL::Draw(), MODULE::Draw(), D_PAD::Draw(), SCH_HIERLABEL::Draw(), SEGZONE::Draw(), VIA::Draw(), SCH_COMPONENT::Draw(), SCH_SHEET::Draw(), LIB_PART::Draw(), MODULE::DrawAncre(), DrawDanglingSymbol(), ZONE_CONTAINER::DrawFilledArea(), 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(), and PCB_BASE_FRAME::TraceAirWiresToTargets().

134 { 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 182 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(), ShowNewTrackWhenMovingCursor(), and Trace_Pads_Only().

183 {
184  return GetParent()->GetDisplayOptions();
185 }
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
virtual void * GetDisplayOptions()
Function GetDisplayOptions A way to pass info to draw functions.
Definition: draw_frame.h:818
bool EDA_DRAW_PANEL::GetEnableAutoPan ( void  ) const
inline

Definition at line 150 of file class_drawpanel.h.

References m_enableAutoPan.

Referenced by SCH_EDIT_FRAME::OnPreferencesOptions(), and EDA_DRAW_FRAME::PushPreferences().

150 { return m_enableAutoPan; }
bool m_enableAutoPan
True to enable automatic panning.
bool EDA_DRAW_PANEL::GetEnableMousewheelPan ( void  ) const
inline

Definition at line 142 of file class_drawpanel.h.

References m_enableMousewheelPan.

Referenced by DIALOG_DISPLAY_OPTIONS::initOptDialog(), SCH_EDIT_FRAME::OnPreferencesOptions(), and EDA_DRAW_FRAME::UseGalCanvas().

142 { return m_enableMousewheelPan; }
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
bool EDA_DRAW_PANEL::GetEnableZoomNoCenter ( void  ) const
inline
wxRealPoint EDA_DRAW_PANEL::GetGrid ( )

Definition at line 282 of file draw_panel.cpp.

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

283 {
284  return GetScreen()->GetGridSize();
285 }
const wxRealPoint & GetGridSize() const
Return the grid size of the currently selected grid.
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:188
EDA_DRAW_FRAME * EDA_DRAW_PANEL::GetParent ( void  ) const

Definition at line 175 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(), DeleteItemsInList(), GBR_LAYOUT::Draw(), D_PAD::Draw(), VIA::Draw(), DrawAndSizingBlockOutlines(), DrawAuxiliaryAxis(), DrawBackGround(), DrawCrossHair(), LIB_PIN::drawGraphic(), DrawGrid(), DrawGridAxis(), DrawMovePin(), drawMovingBlock(), DrawMovingBlockOutlines(), DrawMovingItems(), MODULE::DrawOutlinesWhenMoving(), drawPickedItems(), DrawSegment(), EndMouseCapture(), EraseScreen(), ExitSheet(), GetDisplayOptions(), GetScreen(), Move_Segment(), Move_Texte_Pcb(), moveBitmap(), MoveCursor(), MoveCursorToCrossHair(), MoveDimensionText(), MoveFootprint(), moveItem(), moveItemWithMouseCursor(), OnKeyEvent(), OnMouseEvent(), OnMouseLeaving(), OnMouseWheel(), OnPan(), OnRightClick(), OnScroll(), PushTrack(), ReDraw(), RedrawWhileMovingCursor(), Refresh(), resizeSheetWithMouseCursor(), 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().

176 {
177  wxWindow* mom = wxScrolledWindow::GetParent();
178  return (EDA_DRAW_FRAME*) mom;
179 }
Class EDA_DRAW_FRAME is the base class for create windows for drawing purpose.
Definition: draw_frame.h:53
bool EDA_DRAW_PANEL::GetPrintMirrored ( ) const
inline

Definition at line 162 of file class_drawpanel.h.

References m_PrintIsMirrored.

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

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

Definition at line 188 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(), DeleteItemsInList(), 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(), SCH_COMPONENT::Draw(), LIB_PART::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().

189 {
190  EDA_DRAW_FRAME* parentFrame = GetParent();
191 
192  return parentFrame->GetScreen();
193 }
Class EDA_DRAW_FRAME is the base class for create windows for drawing purpose.
Definition: draw_frame.h:53
virtual BASE_SCREEN * GetScreen() const
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
Definition: draw_frame.h:309
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
wxPoint EDA_DRAW_PANEL::GetScreenCenterLogicalPosition ( )

Function GetScreenCenterLogicalPosition.

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

Definition at line 339 of file draw_panel.cpp.

References INSTALL_UNBUFFERED_DC.

Referenced by OnMouseWheel(), and EDA_DRAW_FRAME::UseGalCanvas().

340 {
341  wxSize size = GetClientSize() / 2;
342  INSTALL_UNBUFFERED_DC( dc, this );
343 
344  return wxPoint( dc.DeviceToLogicalX( size.x ), dc.DeviceToLogicalY( size.y ) );
345 }
#define INSTALL_UNBUFFERED_DC(name, parent)
double EDA_DRAW_PANEL::GetZoom ( )

Definition at line 270 of file draw_panel.cpp.

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

Referenced by EDA_DRAW_FRAME::UseGalCanvas().

271 {
272  return GetScreen()->GetZoom();
273 }
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:188
bool EDA_DRAW_PANEL::IsMouseCaptured ( ) const
inline

Definition at line 414 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(), LIB_EDIT_FRAME::RedrawActiveWindow(), SCH_EDIT_FRAME::RedrawActiveWindow(), PCB_EDIT_FRAME::RedrawActiveWindow(), EDA_DRAW_FRAME::RefreshCrossHair(), and PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event().

414 { 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 288 of file draw_panel.cpp.

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

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

289 {
290  wxPoint pos;
291  EDA_RECT display_rect;
292 
293  INSTALL_UNBUFFERED_DC( dc, this ); // Refresh the clip box to the entire screen size.
294  SetClipBox( dc );
295 
296  display_rect = m_ClipBox;
297 
298  // Slightly decreased the size of the useful screen area to avoid drawing limits.
299  #define PIXEL_MARGIN 8
300  display_rect.Inflate( -PIXEL_MARGIN );
301 
302  return display_rect.Contains( aPosition );
303 }
#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 354 of file draw_panel.cpp.

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

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

355 {
356  if( GetParent()->IsGalCanvasActive() )
357  return;
358 
359  int x, y, xPpu, yPpu;
360  wxPoint screenPos, drawingPos;
361  wxRect clientRect( wxPoint( 0, 0 ), GetClientSize() );
362 
363  INSTALL_UNBUFFERED_DC( dc, this );
364  screenPos.x = dc.LogicalToDeviceX( aPosition.x );
365  screenPos.y = dc.LogicalToDeviceY( aPosition.y );
366 
367  // Scroll if the requested mouse position cursor is outside the drawing area.
368  if( !clientRect.Contains( screenPos ) )
369  {
370  GetViewStart( &x, &y );
371  GetScrollPixelsPerUnit( &xPpu, &yPpu );
372  CalcUnscrolledPosition( screenPos.x, screenPos.y, &drawingPos.x, &drawingPos.y );
373 
374  wxLogTrace( KICAD_TRACE_COORDS,
375  wxT( "MoveCursor() initial screen position(%d, %d) " ) \
376  wxT( "rectangle(%d, %d, %d, %d) view(%d, %d)" ),
377  screenPos.x, screenPos.y, clientRect.x, clientRect.y,
378  clientRect.width, clientRect.height, x, y );
379 
380  if( screenPos.y < clientRect.GetTop() )
381  y -= m_scrollIncrementY * yPpu;
382  else if( screenPos.y > clientRect.GetBottom() )
383  y += m_scrollIncrementY * yPpu;
384  else if( clientRect.GetRight() < screenPos.x )
385  x += m_scrollIncrementX * xPpu;
386  else
387  x -= m_scrollIncrementX * xPpu;
388 
389  Scroll( x, y );
390  CalcScrolledPosition( drawingPos.x, drawingPos.y, &screenPos.x, &screenPos.y );
391 
392  wxLogTrace( KICAD_TRACE_COORDS,
393  wxT( "MoveCursor() scrolled screen position(%d, %d) view(%d, %d)" ),
394  screenPos.x, screenPos.y, x, y );
395  }
396 
397  WarpPointer( screenPos.x, screenPos.y );
398 }
int m_scrollIncrementX
X axis scroll increment in pixels per unit.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
#define INSTALL_UNBUFFERED_DC(name, parent)
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
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 348 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(), PCB_BASE_FRAME::CursorGoto(), 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(), 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(), LIB_EDIT_FRAME::OnCreateNewPartFromExisting(), 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().

349 {
350  MoveCursor( GetParent()->GetCrossHairPosition() );
351 }
void MoveCursor(const wxPoint &aPosition)
Function MoveCursor moves the mouse pointer to aPosition in logical (drawing) units.
Definition: draw_panel.cpp:354
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
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 401 of file draw_panel.cpp.

References m_canStartBlock.

402 {
403  m_canStartBlock = -1; // Block Command can't start
404  event.Skip();
405 }
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 1340 of file draw_panel.cpp.

1341 {
1342  event.Skip();
1343 }
void EDA_DRAW_PANEL::OnEraseBackground ( wxEraseEvent &  event)
inline

Definition at line 206 of file class_drawpanel.h.

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

Definition at line 1345 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.

1346 {
1347  int localkey;
1348  wxPoint pos;
1349 
1350  localkey = event.GetKeyCode();
1351 
1352  switch( localkey )
1353  {
1354  default:
1355  break;
1356 
1357  case WXK_ESCAPE:
1358  m_abortRequest = true;
1359 
1360  if( IsMouseCaptured() )
1361  EndMouseCapture();
1362  else
1364  break;
1365  }
1366 
1367  /* Normalize keys code to easily handle keys from Ctrl+A to Ctrl+Z
1368  * They have an ascii code from 1 to 27 remapped
1369  * to GR_KB_CTRL + 'A' to GR_KB_CTRL + 'Z'
1370  */
1371  if( event.ControlDown() && localkey >= WXK_CONTROL_A && localkey <= WXK_CONTROL_Z )
1372  localkey += 'A' - 1;
1373 
1374  /* Disallow shift for keys that have two keycodes on them (e.g. number and
1375  * punctuation keys) leaving only the "letter keys" of A-Z.
1376  * Then, you can have, e.g. Ctrl-5 and Ctrl-% (GB layout)
1377  * and Ctrl-( and Ctrl-5 (FR layout).
1378  * Otherwise, you'd have to have to say Ctrl-Shift-5 on a FR layout
1379  */
1380  bool keyIsLetter = ( localkey >= 'A' && localkey <= 'Z' ) ||
1381  ( localkey >= 'a' && localkey <= 'z' );
1382 
1383  if( event.ShiftDown() && ( keyIsLetter || localkey > 256 ) )
1384  localkey |= GR_KB_SHIFT;
1385 
1386  if( event.ControlDown() )
1387  localkey |= GR_KB_CTRL;
1388 
1389  if( event.AltDown() )
1390  localkey |= GR_KB_ALT;
1391 
1392  INSTALL_UNBUFFERED_DC( DC, this );
1393 
1394  // Some key commands use the current mouse position: refresh it.
1395  pos = wxGetMousePosition() - GetScreenPosition();
1396 
1397  // Compute the cursor position in drawing units. Also known as logical units to wxDC.
1398  pos = wxPoint( DC.DeviceToLogicalX( pos.x ), DC.DeviceToLogicalY( pos.y ) );
1399 
1400  GetParent()->SetMousePosition( pos );
1401 
1402  if( !GetParent()->GeneralControl( &DC, pos, localkey ) )
1403  event.Skip();
1404 }
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:175
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 905 of file draw_panel.cpp.

References m_cursorLevel.

906 {
907  // This is an ugly hack that fixes some cross hair display bugs when the mouse leaves the
908  // canvas area during middle button mouse panning.
909  if( m_cursorLevel != 0 )
910  m_cursorLevel = 0;
911 
912  aEvent.Skip();
913 }
int m_cursorLevel
Index for cursor redraw in XOR mode.
void EDA_DRAW_PANEL::OnMouseEvent ( wxMouseEvent &  event)

Definition at line 1070 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(), 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_ZOOM_SELECTION, INSTALL_UNBUFFERED_DC, BASE_SCREEN::IsBlockActive(), IsMouseCaptured(), KiROUND(), BASE_SCREEN::m_BlockLocate, m_canStartBlock, m_currentCursor, m_CursorStartPos, 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(), scale, EDA_DRAW_FRAME::SetMousePosition(), EDA_RECT::SetOrigin(), STATE_BLOCK_END, STATE_BLOCK_MOVE, STATE_NO_BLOCK, wxPoint::x, and wxPoint::y.

1071 {
1072  int localbutt = 0;
1073  BASE_SCREEN* screen = GetScreen();
1074 
1075  if( !screen )
1076  return;
1077 
1078  /* Adjust value to filter mouse displacement before consider the drag
1079  * mouse is really a drag command, not just a movement while click
1080  */
1081 #define MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND 5
1082 
1083  if( event.Leaving() )
1084  m_canStartBlock = -1;
1085 
1086  if( !IsMouseCaptured() ) // No mouse capture in progress.
1087  m_requestAutoPan = false;
1088 
1089  if( GetParent()->IsActive() )
1090  SetFocus();
1091  else
1092  return;
1093 
1094  if( !event.IsButton() && !event.Moving() && !event.Dragging() )
1095  return;
1096 
1097  if( event.RightDown() )
1098  {
1099  OnRightClick( event );
1100  return;
1101  }
1102 
1103  if( m_ignoreMouseEvents )
1104  return;
1105 
1106  if( event.LeftDown() )
1107  localbutt = GR_M_LEFT_DOWN;
1108 
1109  if( event.ButtonDClick( 1 ) )
1110  localbutt = GR_M_LEFT_DOWN | GR_M_DCLICK;
1111 
1112  if( event.MiddleDown() )
1113  localbutt = GR_M_MIDDLE_DOWN;
1114 
1115  INSTALL_UNBUFFERED_DC( DC, this );
1116  DC.SetBackground( *wxBLACK_BRUSH );
1117 
1118  // Compute the cursor position in drawing (logical) units.
1119  GetParent()->SetMousePosition( event.GetLogicalPosition( DC ) );
1120 
1121  int kbstat = 0;
1122 
1123  if( event.ShiftDown() )
1124  kbstat |= GR_KB_SHIFT;
1125 
1126  if( event.ControlDown() )
1127  kbstat |= GR_KB_CTRL;
1128 
1129  if( event.AltDown() )
1130  kbstat |= GR_KB_ALT;
1131 
1132  // Calling Double Click and Click functions :
1133  if( localbutt == (int) ( GR_M_LEFT_DOWN | GR_M_DCLICK ) )
1134  {
1135  GetParent()->OnLeftDClick( &DC, GetParent()->RefPos( true ) );
1136 
1137  // inhibit a response to the mouse left button release,
1138  // because we have a double click, and we do not want a new
1139  // OnLeftClick command at end of this Double Click
1141  }
1142  else if( event.LeftUp() )
1143  {
1144  // A block command is in progress: a left up is the end of block
1145  // or this is the end of a double click, already seen
1146  // Note also m_ignoreNextLeftButtonRelease can be set by
1147  // the call to OnLeftClick(), so do not change it after calling OnLeftClick
1148  bool ignoreEvt = m_ignoreNextLeftButtonRelease;
1150 
1151  if( screen->m_BlockLocate.GetState() == STATE_NO_BLOCK && !ignoreEvt )
1152  GetParent()->OnLeftClick( &DC, GetParent()->RefPos( true ) );
1153 
1154  }
1155  else if( !event.LeftIsDown() )
1156  {
1157  /* be sure there is a response to a left button release command
1158  * even when a LeftUp event is not seen. This happens when a
1159  * double click opens a dialog box, and the release mouse button
1160  * is made when the dialog box is opened.
1161  */
1163  }
1164 
1165  if( event.ButtonDown( wxMOUSE_BTN_MIDDLE ) )
1166  {
1168  m_PanStartEventPosition = event.GetPosition();
1169 
1170  INSTALL_UNBUFFERED_DC( dc, this );
1171  CrossHairOff( &dc );
1172  SetCursor( wxCURSOR_SIZING );
1173  }
1174 
1175  if( event.ButtonUp( wxMOUSE_BTN_MIDDLE ) )
1176  {
1177  INSTALL_UNBUFFERED_DC( dc, this );
1178  CrossHairOn( &dc );
1179  SetCursor( (wxStockCursor) m_currentCursor );
1180  }
1181 
1182  if( event.MiddleIsDown() )
1183  {
1184  wxPoint currentPosition = event.GetPosition();
1185 
1186  double scale = GetParent()->GetScreen()->GetScalingFactor();
1187  int x = m_PanStartCenter.x +
1188  KiROUND( (double) ( m_PanStartEventPosition.x - currentPosition.x ) / scale );
1189  int y = m_PanStartCenter.y +
1190  KiROUND( (double) ( m_PanStartEventPosition.y - currentPosition.y ) / scale );
1191 
1192  GetParent()->RedrawScreen( wxPoint( x, y ), false );
1193  }
1194 
1195  // Calling the general function on mouse changes (and pseudo key commands)
1196  GetParent()->GeneralControl( &DC, event.GetLogicalPosition( DC ), 0 );
1197 
1198  /*******************************/
1199  /* Control of block commands : */
1200  /*******************************/
1201 
1202  // Command block can't start if mouse is dragging a new panel
1203  static EDA_DRAW_PANEL* lastPanel;
1204  if( lastPanel != this )
1205  {
1206  m_minDragEventCount = 0;
1207  m_canStartBlock = -1;
1208  }
1209 
1210  /* A new command block can start after a release buttons
1211  * and if the drag is enough
1212  * This is to avoid a false start block when a dialog box is dismissed,
1213  * or when changing panels in hierarchy navigation
1214  * or when clicking while and moving mouse
1215  */
1216  if( !event.LeftIsDown() && !event.MiddleIsDown() )
1217  {
1218  m_minDragEventCount = 0;
1219  m_canStartBlock = 0;
1220 
1221  /* Remember the last cursor position when a drag mouse starts
1222  * this is the last position ** before ** clicking a button
1223  * this is useful to start a block command from the point where the
1224  * mouse was clicked first
1225  * (a filter creates a delay for the real block command start, and
1226  * we must remember this point)
1227  */
1229  }
1230 
1231  if( m_enableBlockCommands && !(localbutt & GR_M_DCLICK) )
1232  {
1233  if( !screen->IsBlockActive() )
1234  {
1236  }
1237 
1238  if( event.LeftDown() )
1239  {
1240  if( screen->m_BlockLocate.GetState() == STATE_BLOCK_MOVE )
1241  {
1242  m_requestAutoPan = false;
1243  GetParent()->HandleBlockPlace( &DC );
1245  }
1246  }
1247  else if( ( m_canStartBlock >= 0 ) && event.LeftIsDown() && !IsMouseCaptured() )
1248  {
1249  // Mouse is dragging: if no block in progress, start a block command.
1250  if( screen->m_BlockLocate.GetState() == STATE_NO_BLOCK )
1251  {
1252  // Start a block command
1253  int cmd_type = kbstat;
1254 
1255  // A block command is started if the drag is enough. A small
1256  // drag is ignored (it is certainly a little mouse move when
1257  // clicking) not really a drag mouse
1260  else
1261  {
1262  auto cmd = (GetParent()->GetToolId() == ID_ZOOM_SELECTION) ? BLOCK_ZOOM : 0;
1263 
1264  if( !GetParent()->HandleBlockBegin( &DC, cmd_type, m_CursorStartPos, cmd ) )
1265  {
1266  // should not occur: error
1268  wxT( "EDA_DRAW_PANEL::OnMouseEvent() Block Error" ) );
1269  }
1270  else
1271  {
1272  m_requestAutoPan = true;
1273  SetCursor( wxCURSOR_SIZING );
1274  }
1275  }
1276  }
1277  }
1278 
1279  if( event.ButtonUp( wxMOUSE_BTN_LEFT ) )
1280  {
1281  /* Release the mouse button: end of block.
1282  * The command can finish (DELETE) or have a next command (MOVE,
1283  * COPY). However the block command is canceled if the block
1284  * size is small because a block command filtering is already
1285  * made, this case happens, but only when the on grid cursor has
1286  * not moved.
1287  */
1288  #define BLOCK_MINSIZE_LIMIT 1
1289  bool BlockIsSmall =
1291  && ( std::abs( screen->m_BlockLocate.GetHeight() ) < BLOCK_MINSIZE_LIMIT );
1292 
1293  if( (screen->m_BlockLocate.GetState() != STATE_NO_BLOCK) && BlockIsSmall )
1294  {
1296  {
1297  m_endMouseCaptureCallback( this, &DC );
1298  m_requestAutoPan = false;
1299  }
1300 
1301  SetCursor( (wxStockCursor) m_currentCursor );
1302  }
1303  else if( screen->m_BlockLocate.GetState() == STATE_BLOCK_END )
1304  {
1305  m_requestAutoPan = false;
1306  GetParent()->HandleBlockEnd( &DC );
1307  SetCursor( (wxStockCursor) m_currentCursor );
1308  if( screen->m_BlockLocate.GetState() == STATE_BLOCK_MOVE )
1309  {
1310  m_requestAutoPan = true;
1311  SetCursor( wxCURSOR_HAND );
1312  }
1313  }
1314  }
1315  }
1316 
1317  // End of block command on a double click
1318  // To avoid an unwanted block move command if the mouse is moved while double clicking
1319  if( localbutt == (int) ( GR_M_LEFT_DOWN | GR_M_DCLICK ) )
1320  {
1321  if( !screen->IsBlockActive() && IsMouseCaptured() )
1322  {
1323  m_endMouseCaptureCallback( this, &DC );
1324  }
1325  }
1326 
1327 #if 0
1328  wxString msg_debug;
1329  msg_debug.Printf( " block state %d, cmd %d",
1330  screen->m_BlockLocate.GetState(),
1331  screen->m_BlockLocate.GetCommand() );
1332  GetParent()->PrintMsg( msg_debug );
1333 #endif
1334 
1335  lastPanel = this;
1336 }
#define GR_M_DCLICK
Definition: gr_basic.h:81
void PrintMsg(const wxString &text)
Definition: basicframe.cpp:382
int m_canStartBlock
useful to avoid false start block in certain cases (like switch from a sheet to an other sheet >= 0 (...
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
#define GR_M_MIDDLE_DOWN
Definition: gr_basic.h:80
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
virtual void HandleBlockPlace(wxDC *DC)
Function HandleBlockPlace( ) Called after HandleBlockEnd, when a block command needs to be executed a...
Definition: draw_frame.cpp:639
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)
Function HandleBlockBegin initializes the block command including the command type, initial position, and other variables.
Definition: draw_frame.cpp:804
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:309
#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:175
#define MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND
void CrossHairOff(wxDC *DC)
Definition: draw_panel.cpp:253
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:644
wxPoint m_PanStartCenter
Initial scroll center position when pan started.
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:78
void CrossHairOn(wxDC *DC)
Definition: draw_panel.cpp:260
const int scale
void DisplayToolMsg(const wxString &msg)
Definition: draw_frame.cpp:497
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:406
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:188
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:870
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:523
virtual void OnLeftDClick(wxDC *DC, const wxPoint &MousePos)
Definition: draw_frame.cpp:492
#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 916 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.

917 {
918  if( m_mouseCaptureCallback == NULL ) // No command in progress.
919  m_requestAutoPan = false;
920 
922  return;
923 
924  // Auto pan when mouse has left the client window
925  // Ensure the cross_hair position is updated,
926  // because it will be used to center the screen.
927  // We use a position inside the client window
928  wxRect area( wxPoint( 0, 0 ), GetClientSize() );
929  wxPoint cross_hair_pos = event.GetPosition();
930 
931  // Certain window managers (e.g. awesome wm) incorrectly trigger "on leave" event,
932  // therefore test if the cursor has really left the panel area
933  if( !area.Contains( cross_hair_pos ) )
934  {
935  INSTALL_UNBUFFERED_DC( dc, this );
936  cross_hair_pos.x = dc.DeviceToLogicalX( cross_hair_pos.x );
937  cross_hair_pos.y = dc.DeviceToLogicalY( cross_hair_pos.y );
938 
939  GetParent()->SetCrossHairPosition( cross_hair_pos );
940 
941  wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_POPUP_ZOOM_CENTER );
942  cmd.SetEventObject( this );
943  GetEventHandler()->ProcessEvent( cmd );
944  }
945 
946  event.Skip();
947 }
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:175
#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 950 of file draw_panel.cpp.

References GetParent(), GetScreenCenterLogicalPosition(), 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, KICAD_TRACE_COORDS, m_enableMousewheelPan, m_enableZoomNoCenter, m_ignoreMouseEvents, EDA_DRAW_FRAME::SetCrossHairPosition(), EDA_DRAW_FRAME::SetScrollCenterPosition(), wxPoint::x, and wxPoint::y.

951 {
952  if( m_ignoreMouseEvents )
953  return;
954 
955  wxRect rect = wxRect( wxPoint( 0, 0 ), GetClientSize() );
956 
957  // Ignore scroll events if the cursor is outside the drawing area.
958  if( event.GetWheelRotation() == 0 || !GetParent()->IsEnabled()
959  || !rect.Contains( event.GetPosition() ) )
960  {
961  wxLogTrace( KICAD_TRACE_COORDS,
962  wxT( "OnMouseWheel() position(%d, %d) rectangle(%d, %d, %d, %d)" ),
963  event.GetPosition().x, event.GetPosition().y,
964  rect.x, rect.y, rect.width, rect.height );
965  event.Skip();
966  return;
967  }
968 
969  INSTALL_UNBUFFERED_DC( dc, this );
970  GetParent()->SetCrossHairPosition( event.GetLogicalPosition( dc ) );
971 
972  wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
973  cmd.SetEventObject( this );
974 
975  bool offCenterReq = event.ControlDown() && event.ShiftDown();
976  offCenterReq = offCenterReq || m_enableZoomNoCenter;
977 
978  int axis = event.GetWheelAxis();
979  int wheelRotation = event.GetWheelRotation();
980 
982  {
983  // MousewheelPAN + Ctrl = zooming
984  if( event.ControlDown() && !event.ShiftDown() )
985  {
986  if( wheelRotation > 0 )
987  cmd.SetId( ID_POPUP_ZOOM_IN );
988  else if( wheelRotation < 0)
989  cmd.SetId( ID_POPUP_ZOOM_OUT );
990  }
991  // MousewheelPAN + Shift = horizontal scrolling
992  else if( event.ShiftDown() && !event.ControlDown() )
993  {
994  if( wheelRotation > 0 )
995  cmd.SetId( ID_PAN_LEFT );
996  else if( wheelRotation < 0)
997  cmd.SetId( ID_PAN_RIGHT );
998  }
999  // Without modifiers MousewheelPAN - just pan
1000  else
1001  {
1002  wxPoint newStart = GetViewStart();
1003  if( axis == wxMOUSE_WHEEL_HORIZONTAL )
1004  newStart.x += wheelRotation;
1005  else
1006  newStart.y -= wheelRotation;
1007 
1009  GetParent()->SetScrollCenterPosition( center );
1010  Scroll( newStart );
1011  }
1012  }
1013  else if( wheelRotation > 0 )
1014  {
1015  if( event.ShiftDown() && !event.ControlDown() )
1016  cmd.SetId( ID_PAN_UP );
1017  else if( event.ControlDown() && !event.ShiftDown() )
1018  cmd.SetId( ID_PAN_LEFT );
1019  else if( offCenterReq )
1020  cmd.SetId( ID_OFFCENTER_ZOOM_IN );
1021  else
1022  cmd.SetId( ID_POPUP_ZOOM_IN );
1023  }
1024  else if( wheelRotation < 0 )
1025  {
1026  if( event.ShiftDown() && !event.ControlDown() )
1027  cmd.SetId( ID_PAN_DOWN );
1028  else if( event.ControlDown() && !event.ShiftDown() )
1029  cmd.SetId( ID_PAN_RIGHT );
1030  else if( offCenterReq )
1031  cmd.SetId( ID_OFFCENTER_ZOOM_OUT );
1032  else
1033  cmd.SetId( ID_POPUP_ZOOM_OUT );
1034  }
1035 
1036  if( cmd.GetId() )
1037  GetEventHandler()->ProcessEvent( cmd );
1038  event.Skip();
1039 }
wxPoint GetScreenCenterLogicalPosition()
Function GetScreenCenterLogicalPosition.
Definition: draw_panel.cpp:339
bool m_enableZoomNoCenter
True to enable zooming around the crosshair instead of the center.
void SetScrollCenterPosition(const wxPoint &aPoint)
bool m_ignoreMouseEvents
Ignore mouse events when true.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
bool m_enableMousewheelPan
True to enable mousewheel panning by default.
#define INSTALL_UNBUFFERED_DC(name, parent)
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
Definition: id.h:246
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 592 of file draw_panel.cpp.

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

593 {
594  if( GetScreen() == NULL )
595  {
596  event.Skip();
597  return;
598  }
599 
600  INSTALL_PAINTDC( paintDC, this );
601 
602  wxRect region = GetUpdateRegion().GetBox();
603  SetClipBox( paintDC, &region );
604  ReDraw( &paintDC, true );
605 }
#define INSTALL_PAINTDC(name, parent)
void SetClipBox(const EDA_RECT &aRect)
void ReDraw(wxDC *aDC, bool aEraseBackground=true)
Definition: draw_panel.cpp:608
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:188
void EDA_DRAW_PANEL::OnPan ( wxCommandEvent &  event)

Definition at line 1407 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, KICAD_TRACE_COORDS, KiROUND(), m_scrollIncrementX, m_scrollIncrementY, scale, EDA_DRAW_FRAME::SetScrollCenterPosition(), wxPoint::x, and wxPoint::y.

1408 {
1409  int x, y;
1410  int ppux, ppuy;
1411  int unitsX, unitsY;
1412  int maxX, maxY;
1413  int tmpX, tmpY;
1414 
1415  GetViewStart( &x, &y );
1416  GetScrollPixelsPerUnit( &ppux, &ppuy );
1417  GetVirtualSize( &unitsX, &unitsY );
1418  tmpX = x;
1419  tmpY = y;
1420  maxX = unitsX;
1421  maxY = unitsY;
1422  unitsX /= ppux;
1423  unitsY /= ppuy;
1424 
1425  wxLogTrace( KICAD_TRACE_COORDS,
1426  wxT( "Scroll center position before pan: (%d, %d)" ), tmpX, tmpY );
1427 
1428  switch( event.GetId() )
1429  {
1430  case ID_PAN_UP:
1431  y -= m_scrollIncrementY;
1432  break;
1433 
1434  case ID_PAN_DOWN:
1435  y += m_scrollIncrementY;
1436  break;
1437 
1438  case ID_PAN_LEFT:
1439  x -= m_scrollIncrementX;
1440  break;
1441 
1442  case ID_PAN_RIGHT:
1443  x += m_scrollIncrementX;
1444  break;
1445 
1446  default:
1447  wxLogDebug( wxT( "Unknown ID %d in EDA_DRAW_PANEL::OnPan()." ), event.GetId() );
1448  }
1449 
1450  bool updateCenterScrollPos = true;
1451 
1452  if( x < 0 )
1453  {
1454  x = 0;
1455  updateCenterScrollPos = false;
1456  }
1457 
1458  if( y < 0 )
1459  {
1460  y = 0;
1461  updateCenterScrollPos = false;
1462  }
1463 
1464  if( x > maxX )
1465  {
1466  x = maxX;
1467  updateCenterScrollPos = false;
1468  }
1469 
1470  if( y > maxY )
1471  {
1472  y = maxY;
1473  updateCenterScrollPos = false;
1474  }
1475 
1476  // Don't update the scroll position beyond the scroll limits.
1477  if( updateCenterScrollPos )
1478  {
1479  double scale = GetParent()->GetScreen()->GetScalingFactor();
1480 
1482  center.x += KiROUND( (double) ( x - tmpX ) / scale );
1483  center.y += KiROUND( (double) ( y - tmpY ) / scale );
1484  GetParent()->SetScrollCenterPosition( center );
1485 
1486  wxLogTrace( KICAD_TRACE_COORDS,
1487  wxT( "Scroll center position after pan: (%d, %d)" ), center.x, center.y );
1488  }
1489 
1490  Scroll( x/ppux, y/ppuy );
1491 }
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:309
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
const int scale
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
Definition: id.h:246
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 870 of file draw_panel.cpp.

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

Referenced by OnMouseEvent().

871 {
872  wxPoint pos;
873  wxMenu MasterMenu;
874 
875  INSTALL_UNBUFFERED_DC( dc, this );
876 
877  pos = event.GetLogicalPosition( dc );
878 
879  if( !GetParent()->OnRightClick( pos, &MasterMenu ) )
880  return false;
881 
882  GetParent()->AddMenuZoomAndGrid( &MasterMenu );
883 
884  pos = event.GetPosition();
885  m_ignoreMouseEvents = true;
886  PopupMenu( &MasterMenu, pos );
887  // here, we are waiting for popup menu closing.
888  // Among different ways, it can be closed by clicking on the left mouse button.
889  // The expected behavior is to move the mouse cursor to its initial
890  // location, where the right click was made.
891  // However there is a case where the move cursor does not work as expected:
892  // when the user left clicks on the caption frame: the entire window is moved.
893  // Calling wxSafeYield avoid this behavior because it allows the left click
894  // to be proceeded before moving the mouse
895  wxSafeYield();
896 
897  // Move the mouse cursor to its initial position:
899  m_ignoreMouseEvents = false;
900 
901  return true;
902 }
void MoveCursorToCrossHair()
Function MoveCursorToCrossHair warps the cursor to the current cross hair position.
Definition: draw_panel.cpp:348
bool m_ignoreMouseEvents
Ignore mouse events when true.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
#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:870
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 408 of file draw_panel.cpp.

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

409 {
410  int id = event.GetEventType();
411  int x, y;
412  int ppux, ppuy;
413  int csizeX, csizeY;
414  int unitsX, unitsY;
415 
416  GetViewStart( &x, &y );
417  GetScrollPixelsPerUnit( &ppux, &ppuy );
418  GetClientSize( &csizeX, &csizeY );
419  GetVirtualSize( &unitsX, &unitsY );
420 
421  int tmpX = x;
422  int tmpY = y;
423 
424  csizeX /= ppux;
425  csizeY /= ppuy;
426 
427  unitsX /= ppux;
428  unitsY /= ppuy;
429 
430  int dir = event.GetOrientation(); // wxHORIZONTAL or wxVERTICAL
431 
432  // On windows and on wxWidgets >= 2.9.5 and < 3.1,
433  // there is a bug in mousewheel event which always generates 2 scroll events
434  // (should be the case only for the default mousewheel event)
435  // with id = wxEVT_SCROLLWIN_LINEUP or wxEVT_SCROLLWIN_LINEDOWN
436  // so we skip these events.
437  // Note they are here just in case, because they are not actually used
438  // in Kicad
439 #if wxCHECK_VERSION( 3, 1, 0 ) || !wxCHECK_VERSION( 2, 9, 5 ) || ( !defined (__WINDOWS__) && !defined (__WXMAC__) )
440  int maxX = unitsX - csizeX;
441  int maxY = unitsY - csizeY;
442 
443  if( id == wxEVT_SCROLLWIN_LINEUP )
444  {
445  if( dir == wxHORIZONTAL )
446  {
447  x -= m_scrollIncrementX;
448 
449  if( x < 0 )
450  x = 0;
451  }
452  else
453  {
454  y -= m_scrollIncrementY;
455 
456  if( y < 0 )
457  y = 0;
458  }
459  }
460  else if( id == wxEVT_SCROLLWIN_LINEDOWN )
461  {
462  if( dir == wxHORIZONTAL )
463  {
464  x += m_scrollIncrementX;
465  if( x > maxX )
466  x = maxX;
467  }
468  else
469  {
470  y += m_scrollIncrementY;
471 
472  if( y > maxY )
473  y = maxY;
474  }
475  }
476  else
477 #endif
478  if( id == wxEVT_SCROLLWIN_THUMBTRACK )
479  {
480  if( dir == wxHORIZONTAL )
481  x = event.GetPosition();
482  else
483  y = event.GetPosition();
484  }
485  else
486  {
487  event.Skip();
488  return;
489  }
490 
491  wxLogTrace( KICAD_TRACE_COORDS,
492  wxT( "Setting scroll bars ppuX=%d, ppuY=%d, unitsX=%d, unitsY=%d, posX=%d, posY=%d" ),
493  ppux, ppuy, unitsX, unitsY, x, y );
494 
495  double scale = GetParent()->GetScreen()->GetScalingFactor();
496 
498  center.x += KiROUND( (double) ( x - tmpX ) / scale );
499  center.y += KiROUND( (double) ( y - tmpY ) / scale );
500  GetParent()->SetScrollCenterPosition( center );
501 
502  Scroll( x, y );
503  event.Skip();
504 }
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:309
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
const int scale
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
int m_scrollIncrementY
Y axis scroll increment in pixels per unit.
void EDA_DRAW_PANEL::OnScrollWin ( wxCommandEvent &  event)
void EDA_DRAW_PANEL::ReDraw ( wxDC *  aDC,
bool  aEraseBackground = true 
)

Definition at line 608 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(), KICAD_TRACE_COORDS, m_ClipBox, EDA_DRAW_FRAME::RedrawActiveWindow(), and WHITE.

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

609 {
610  BASE_SCREEN* Screen = GetScreen();
611 
612  if( Screen == NULL )
613  return;
614 
615  COLOR4D bgColor = GetParent()->GetDrawBgColor();
616 
617  // TODO(JE): Is this correct?
618  if( bgColor.GetBrightness() > 0.5 )
619  {
620  g_XorMode = GR_NXOR;
622  }
623  else
624  {
625  g_XorMode = GR_XOR;
627  }
628 
629  GRResetPenAndBrush( DC );
630 
631  DC->SetBackground( wxBrush( bgColor.ToColour() ) );
632  DC->SetBackgroundMode( wxSOLID );
633 
634  if( erasebg )
635  EraseScreen( DC );
636 
637  GetParent()->RedrawActiveWindow( DC, erasebg );
638 
639  // Verfies that the clipping is working correctly. If these two sets of numbers are
640  // not the same or really close. The clipping algorithms are broken.
641  wxLogTrace( KICAD_TRACE_COORDS,
642  wxT( "Clip box: (%d, %d, %d, %d), Draw extents (%d, %d, %d, %d)" ),
644  DC->MinX(), DC->MinY(), DC->MaxX(), DC->MaxY() );
645 }
GR_DRAWMODE g_XorMode
Definition: gr_basic.cpp:51
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:196
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:286
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:254
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
int GetBottom() const
int GetRight() const
virtual void RedrawActiveWindow(wxDC *DC, bool EraseBg)=0
int GetX() const
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:188
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
Definition: colors.h:49
int GetY() const
Definition: colors.h:45
void EraseScreen(wxDC *DC)
Definition: draw_panel.cpp:554
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

Definition at line 326 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::AppendOneEEProject(), 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(), LIB_EDIT_FRAME::CreateNewLibraryPart(), PCB_EDIT_FRAME::Delete_Module(), PCB_EDIT_FRAME::Delete_OldZone_Fill(), SCH_EDIT_FRAME::DeleteAnnotation(), LIB_EDIT_FRAME::deleteItem(), SCH_EDIT_FRAME::DeleteItemAtCrossHair(), LIB_EDIT_FRAME::DeleteOnePart(), 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::EditSheetPin(), PCB_EDIT_FRAME::End_Move_Zone_Corner_Or_Outlines(), LIB_EDIT_FRAME::EndDrawGraphicItem(), SCH_EDIT_FRAME::EndSegment(), GERBVIEW_FRAME::Erase_Current_DrawLayer(), PL_EDITOR_FRAME::Files_io(), GERBVIEW_FRAME::Files_io(), PCB_EDIT_FRAME::Files_io_from_id(), LEGACY_ARRAY_CREATOR::finalise(), PCB_EDIT_FRAME::FlipTextePcb(), 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(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), SCH_EDIT_FRAME::InstallConfigFrame(), GERBVIEW_FRAME::InstallGerberOptionsDialog(), PCB_EDIT_FRAME::InstallModuleOptionsFrame(), SCH_EDIT_FRAME::KiwayMailIn(), LIB_EDIT_FRAME::LoadOneSymbol(), SCH_EDIT_FRAME::MirrorImage(), SCH_EDIT_FRAME::MirrorSheet(), PCB_EDIT_FRAME::moveExact(), moveItem(), PL_EDITOR_FRAME::MoveItem(), PROPERTIES_FRAME::OnAcceptPrms(), 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(), 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(), 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::ResetTextSize(), 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::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(), and DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::UpdateObjectSettings().

327 {
328  if( GetParent()->IsGalCanvasActive() )
329  {
331  }
332  else
333  {
334  wxScrolledWindow::Refresh( eraseBackground, rect );
335  }
336 }
void Refresh()
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:803
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 306 of file draw_panel.cpp.

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

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().

307 {
308  INSTALL_UNBUFFERED_DC( dc, this );
309 
310  wxRect rect = aRect;
311 
312  rect.x = dc.LogicalToDeviceX( rect.x );
313  rect.y = dc.LogicalToDeviceY( rect.y );
314  rect.width = dc.LogicalToDeviceXRel( rect.width );
315  rect.height = dc.LogicalToDeviceYRel( rect.height );
316 
317  wxLogTrace( KICAD_TRACE_COORDS,
318  wxT( "Refresh area: drawing (%d, %d, %d, %d), device (%d, %d, %d, %d)" ),
319  aRect.GetX(), aRect.GetY(), aRect.GetWidth(), aRect.GetHeight(),
320  rect.x, rect.y, rect.width, rect.height );
321 
322  RefreshRect( rect, aEraseBackground );
323 }
int GetHeight() const
#define INSTALL_UNBUFFERED_DC(name, parent)
int GetX() const
int GetWidth() const
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
int GetY() const
void EDA_DRAW_PANEL::SetCanStartBlock ( int  aStartBlock)
inline

Definition at line 165 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().

165 { 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 136 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().

136 { 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 507 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(), KICAD_TRACE_COORDS, 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.

508 {
509  wxRect clipBox;
510 
511  // Use the entire visible device area if no clip area was defined.
512  if( aRect == NULL )
513  {
514  BASE_SCREEN* Screen = GetScreen();
515 
516  if( !Screen )
517  return;
518 
519  Screen->m_StartVisu = CalcUnscrolledPosition( wxPoint( 0, 0 ) );
520  clipBox.SetSize( GetClientSize() );
521 
522  int scrollX, scrollY;
523 
524  double scalar = Screen->GetScalingFactor();
525  scrollX = KiROUND( Screen->GetGridSize().x * scalar );
526  scrollY = KiROUND( Screen->GetGridSize().y * scalar );
527 
528  m_scrollIncrementX = std::max( GetClientSize().x / 8, scrollX );
529  m_scrollIncrementY = std::max( GetClientSize().y / 8, scrollY );
530  Screen->m_ScrollbarPos.x = GetScrollPos( wxHORIZONTAL );
531  Screen->m_ScrollbarPos.y = GetScrollPos( wxVERTICAL );
532  }
533  else
534  {
535  clipBox = *aRect;
536  }
537 
538  // Pad clip box in device units.
539  clipBox.Inflate( CLIP_BOX_PADDING );
540 
541  // Convert from device units to drawing units.
542  m_ClipBox.SetOrigin( wxPoint( aDC.DeviceToLogicalX( clipBox.x ),
543  aDC.DeviceToLogicalY( clipBox.y ) ) );
544  m_ClipBox.SetSize( wxSize( aDC.DeviceToLogicalXRel( clipBox.width ),
545  aDC.DeviceToLogicalYRel( clipBox.height ) ) );
546 
547  wxLogTrace( KICAD_TRACE_COORDS,
548  wxT( "Device clip box=(%d, %d, %d, %d), Logical clip box=(%d, %d, %d, %d)" ),
549  clipBox.x, clipBox.y, clipBox.width, clipBox.height,
551 }
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:48
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:188
int GetWidth() const
#define KICAD_TRACE_COORDS
Trace mask used to enable or disable the trace output of coordinates during drawing functions...
Definition: draw_panel.cpp:73
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 440 of file class_drawpanel.h.

Referenced by EDA_DRAW_FRAME::SetToolID().

441  {
442  m_currentCursor = aCursor;
443  SetCursor( (wxStockCursor) m_currentCursor );
444  }
int m_currentCursor
Current mouse cursor shape id.
void EDA_DRAW_PANEL::SetEnableAutoPan ( bool  aEnable)
inline

Definition at line 152 of file class_drawpanel.h.

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

152 { m_enableAutoPan = aEnable; }
bool m_enableAutoPan
True to enable automatic panning.
void EDA_DRAW_PANEL::SetEnableBlockCommands ( bool  aEnable)
inline

Definition at line 160 of file class_drawpanel.h.

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

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

Definition at line 648 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(), and SCH_EDIT_FRAME::OnPreferencesOptions().

649 {
650  m_enableMousewheelPan = aEnable;
651 
652  if( GetParent()->IsGalCanvasActive() )
654 }
virtual void EnableMousewheelPan(bool aEnable)
Function EnableMousewheelPan() Enables or disables mousewheel panning.
EDA_DRAW_FRAME * GetParent() const
Definition: draw_panel.cpp:175
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:803
void EDA_DRAW_PANEL::SetEnableZoomNoCenter ( bool  aEnable)

Definition at line 657 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().

658 {
659  m_enableZoomNoCenter = aEnable;
660 
661  if( GetParent()->IsGalCanvasActive() )
663 }
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:175
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:803
void EDA_DRAW_PANEL::SetGrid ( const wxRealPoint &  size)
void EDA_DRAW_PANEL::SetIgnoreLeftButtonReleaseEvent ( bool  aIgnore)
inline

Definition at line 158 of file class_drawpanel.h.

Referenced by EDA_DRAW_FRAME::SkipNextLeftButtonReleaseEvent().

158 { 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 384 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().

386  {
387  m_mouseCaptureCallback = aMouseCaptureCallback;
388  m_endMouseCaptureCallback = aEndMouseCaptureCallback;
389  }
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 163 of file class_drawpanel.h.

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

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

Definition at line 276 of file draw_panel.cpp.

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

Referenced by EDA_DRAW_FRAME::UseGalCanvas().

277 {
278  GetScreen()->SetZoom( zoom );
279 }
bool SetZoom(double iu_per_du)
Function SetZoom adjusts the current zoom factor.
BASE_SCREEN * GetScreen()
Definition: draw_panel.cpp:188
wxPoint EDA_DRAW_PANEL::ToDeviceXY ( const wxPoint pos)

Function ToDeviceXY transforms logical to device coordinates.

Definition at line 196 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().

197 {
198  wxPoint ret;
199  INSTALL_UNBUFFERED_DC( dc, this );
200  ret.x = dc.LogicalToDeviceX( pos.x );
201  ret.y = dc.LogicalToDeviceY( pos.y );
202  return ret;
203 }
#define INSTALL_UNBUFFERED_DC(name, parent)
wxPoint EDA_DRAW_PANEL::ToLogicalXY ( const wxPoint pos)

Function ToLogicalXY transforms device to logical coordinates.

Definition at line 206 of file draw_panel.cpp.

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

Referenced by EDA_DRAW_FRAME::RedrawScreen2().

207 {
208  wxPoint ret;
209  INSTALL_UNBUFFERED_DC( dc, this );
210  ret.x = dc.DeviceToLogicalX( pos.x );
211  ret.y = dc.DeviceToLogicalY( pos.y );
212  return ret;
213 }
#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 73 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 114 of file class_drawpanel.h.

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

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 71 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().

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().

bool EDA_DRAW_PANEL::m_enableAutoPan
private

True to enable automatic panning.

Definition at line 78 of file class_drawpanel.h.

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

bool EDA_DRAW_PANEL::m_enableBlockCommands
private

True enables block commands.

Definition at line 91 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 76 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 75 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 109 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 82 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 89 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 99 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 106 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 103 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 80 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: