kicad/gerbview/controle.cpp

115 lines
2.5 KiB
C++
Raw Normal View History

/****************/
/* controle.cpp */
/****************/
2007-05-06 16:03:28 +00:00
#include "fctsys.h"
#include "common.h"
#include "class_drawpanel.h"
#include "gerbview.h"
2007-05-06 16:03:28 +00:00
GERBER_DRAW_ITEM* WinEDA_GerberFrame::GerberGeneralLocateAndDisplay()
{
2007-10-10 04:45:26 +00:00
return Locate( CURSEUR_OFF_GRILLE );
2007-05-06 16:03:28 +00:00
}
void WinEDA_GerberFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
2007-05-06 16:03:28 +00:00
{
wxRealPoint delta;
2007-10-10 04:45:26 +00:00
wxPoint curpos, oldpos;
int hotkey = 0;
if( GetScreen()->IsRefreshReq() )
{
DrawPanel->Refresh( );
wxSafeYield();
2007-10-10 04:45:26 +00:00
// We must return here, instead of proceeding.
// If we let the cursor move during a refresh request,
// the cursor be displayed in the wrong place
// during delayed repaint events that occur when
// you move the mouse when a message dialog is on
// the screen, and then you dismiss the dialog by
// typing the Enter key.
return;
}
double scalar = GetScreen()->GetScalingFactor();
2007-10-10 04:45:26 +00:00
curpos = DrawPanel->CursorRealPosition( Mouse );
oldpos = GetScreen()->m_Curseur;
delta = GetScreen()->GetGridSize();
delta.x *= scalar;
delta.y *= scalar;
2007-10-10 04:45:26 +00:00
if( delta.x == 0 )
delta.x = 1;
if( delta.y == 0 )
delta.y = 1;
switch( g_KeyPressed )
{
case WXK_NUMPAD8:
2007-10-10 04:45:26 +00:00
case WXK_UP:
Mouse.y -= wxRound(delta.y);
2007-10-10 04:45:26 +00:00
DrawPanel->MouseTo( Mouse );
break;
case WXK_NUMPAD2:
2007-10-10 04:45:26 +00:00
case WXK_DOWN:
Mouse.y += wxRound(delta.y);
2007-10-10 04:45:26 +00:00
DrawPanel->MouseTo( Mouse );
break;
case WXK_NUMPAD4:
2007-10-10 04:45:26 +00:00
case WXK_LEFT:
Mouse.x -= wxRound(delta.x);
2007-10-10 04:45:26 +00:00
DrawPanel->MouseTo( Mouse );
break;
case WXK_NUMPAD6:
2007-10-10 04:45:26 +00:00
case WXK_RIGHT:
Mouse.x += wxRound(delta.x);
2007-10-10 04:45:26 +00:00
DrawPanel->MouseTo( Mouse );
break;
default:
hotkey = g_KeyPressed;
break;
}
GetScreen()->m_Curseur = curpos;
2007-10-10 04:45:26 +00:00
PutOnGrid( &GetScreen()->m_Curseur );
if( oldpos != GetScreen()->m_Curseur )
2007-10-10 04:45:26 +00:00
{
curpos = GetScreen()->m_Curseur;
GetScreen()->m_Curseur = oldpos;
DrawPanel->CursorOff( DC );
2007-05-06 16:03:28 +00:00
2007-10-10 04:45:26 +00:00
GetScreen()->m_Curseur = curpos;
DrawPanel->CursorOn( DC );
2007-05-06 16:03:28 +00:00
2007-10-10 04:45:26 +00:00
if( DrawPanel->ManageCurseur )
{
DrawPanel->ManageCurseur( DrawPanel, DC, TRUE );
}
}
if( hotkey )
{
OnHotKey( DC, hotkey, NULL );
}
if( GetScreen()->IsRefreshReq() )
{
DrawPanel->Refresh( );
wxSafeYield();
2007-10-10 04:45:26 +00:00
}
UpdateStatusBar();
2007-10-10 04:45:26 +00:00
}