Support scrollbar controls in GAL canvas
This commit is contained in:
parent
33cc7b3f99
commit
49a3e7ec2d
|
@ -63,6 +63,14 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxScrolledCanvas* aParentPanel
|
||||||
wxMouseEventHandler( WX_VIEW_CONTROLS::onLeave ), NULL, this );
|
wxMouseEventHandler( WX_VIEW_CONTROLS::onLeave ), NULL, this );
|
||||||
m_parentPanel->Connect( wxEVT_SCROLLWIN_THUMBTRACK,
|
m_parentPanel->Connect( wxEVT_SCROLLWIN_THUMBTRACK,
|
||||||
wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
|
wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
|
||||||
|
m_parentPanel->Connect( wxEVT_SCROLLWIN_LINEUP,
|
||||||
|
wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
|
||||||
|
m_parentPanel->Connect( wxEVT_SCROLLWIN_LINEDOWN,
|
||||||
|
wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
|
||||||
|
m_parentPanel->Connect( wxEVT_SCROLLWIN_PAGEUP,
|
||||||
|
wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
|
||||||
|
m_parentPanel->Connect( wxEVT_SCROLLWIN_PAGEDOWN,
|
||||||
|
wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
|
||||||
|
|
||||||
m_panTimer.SetOwner( this );
|
m_panTimer.SetOwner( this );
|
||||||
this->Connect( wxEVT_TIMER,
|
this->Connect( wxEVT_TIMER,
|
||||||
|
@ -335,15 +343,52 @@ void WX_VIEW_CONTROLS::onTimer( wxTimerEvent& aEvent )
|
||||||
|
|
||||||
void WX_VIEW_CONTROLS::onScroll( wxScrollWinEvent& aEvent )
|
void WX_VIEW_CONTROLS::onScroll( wxScrollWinEvent& aEvent )
|
||||||
{
|
{
|
||||||
VECTOR2D center = m_view->GetCenter();
|
const double linePanDelta = 0.05;
|
||||||
const BOX2I& boundary = m_view->GetBoundary();
|
const double pagePanDelta = 0.5;
|
||||||
|
|
||||||
if( aEvent.GetOrientation() == wxHORIZONTAL )
|
int type = aEvent.GetEventType();
|
||||||
center.x = boundary.GetLeft() + aEvent.GetPosition() / m_scrollScale.x;
|
int dir = aEvent.GetOrientation();
|
||||||
else if( aEvent.GetOrientation() == wxVERTICAL )
|
|
||||||
center.y = boundary.GetTop() + aEvent.GetPosition() / m_scrollScale.y;
|
if( type == wxEVT_SCROLLWIN_THUMBTRACK )
|
||||||
|
{
|
||||||
|
VECTOR2D center = m_view->GetCenter();
|
||||||
|
const BOX2I& boundary = m_view->GetBoundary();
|
||||||
|
|
||||||
|
if( dir == wxHORIZONTAL )
|
||||||
|
center.x = boundary.GetLeft() + aEvent.GetPosition() / m_scrollScale.x;
|
||||||
|
else
|
||||||
|
center.y = boundary.GetTop() + aEvent.GetPosition() / m_scrollScale.y;
|
||||||
|
|
||||||
|
m_view->SetCenter( center );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double dist = 0;
|
||||||
|
|
||||||
|
if( type == wxEVT_SCROLLWIN_PAGEUP )
|
||||||
|
dist = pagePanDelta;
|
||||||
|
else if( type == wxEVT_SCROLLWIN_PAGEDOWN )
|
||||||
|
dist = -pagePanDelta;
|
||||||
|
else if( type == wxEVT_SCROLLWIN_LINEUP )
|
||||||
|
dist = linePanDelta;
|
||||||
|
else if( type == wxEVT_SCROLLWIN_LINEDOWN )
|
||||||
|
dist = -linePanDelta;
|
||||||
|
|
||||||
|
VECTOR2D scroll = m_view->ToWorld( m_view->GetScreenPixelSize(), false ) * dist;
|
||||||
|
|
||||||
|
double scrollX = 0.0;
|
||||||
|
double scrollY = 0.0;
|
||||||
|
|
||||||
|
if ( dir == wxHORIZONTAL )
|
||||||
|
scrollX = -scroll.x;
|
||||||
|
else
|
||||||
|
scrollY = -scroll.y;
|
||||||
|
|
||||||
|
VECTOR2D delta( scrollX, scrollY );
|
||||||
|
|
||||||
|
m_view->SetCenter( m_view->GetCenter() + delta );
|
||||||
|
}
|
||||||
|
|
||||||
m_view->SetCenter( center );
|
|
||||||
m_parentPanel->Refresh();
|
m_parentPanel->Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue