Fix handling mouse events on scrolled wxHeaderCtrl
Fix confusion with the coordinates kind in FindColumnAtPoint(): it was sometimes passed physical mouse coordinates and sometimes logical ones. Make it clear now that it expects physical coordinates and adjust its code accordingly. Also remove a redundant call to FindColumnAtPoint(). Closes https://github.com/wxWidgets/wxWidgets/pull/889
This commit is contained in:
@@ -169,9 +169,10 @@ int wxHeaderCtrl::GetColEnd(unsigned int idx) const
|
|||||||
return x + GetColumn(idx).GetWidth();
|
return x + GetColumn(idx).GetWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int wxHeaderCtrl::FindColumnAtPoint(int x, bool *onSeparator) const
|
unsigned int wxHeaderCtrl::FindColumnAtPoint(int xPhysical, bool *onSeparator) const
|
||||||
{
|
{
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
int xLogical = xPhysical - m_scrollOffset;
|
||||||
const unsigned count = GetColumnCount();
|
const unsigned count = GetColumnCount();
|
||||||
for ( unsigned n = 0; n < count; n++ )
|
for ( unsigned n = 0; n < count; n++ )
|
||||||
{
|
{
|
||||||
@@ -186,7 +187,7 @@ unsigned int wxHeaderCtrl::FindColumnAtPoint(int x, bool *onSeparator) const
|
|||||||
// line separating it from the next column
|
// line separating it from the next column
|
||||||
//
|
//
|
||||||
// TODO: don't hardcode sensitivity
|
// TODO: don't hardcode sensitivity
|
||||||
if ( col.IsResizeable() && abs(x - pos) < 8 )
|
if ( col.IsResizeable() && abs(xLogical - pos) < 8 )
|
||||||
{
|
{
|
||||||
if ( onSeparator )
|
if ( onSeparator )
|
||||||
*onSeparator = true;
|
*onSeparator = true;
|
||||||
@@ -194,7 +195,7 @@ unsigned int wxHeaderCtrl::FindColumnAtPoint(int x, bool *onSeparator) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// inside this column?
|
// inside this column?
|
||||||
if ( x < pos )
|
if ( xLogical < pos )
|
||||||
{
|
{
|
||||||
if ( onSeparator )
|
if ( onSeparator )
|
||||||
*onSeparator = false;
|
*onSeparator = false;
|
||||||
@@ -427,7 +428,7 @@ bool wxHeaderCtrl::EndReordering(int xPhysical)
|
|||||||
event.SetEventObject(this);
|
event.SetEventObject(this);
|
||||||
event.SetColumn(colOld);
|
event.SetColumn(colOld);
|
||||||
|
|
||||||
const unsigned pos = GetColumnPos(FindColumnAtPoint(xPhysical));
|
const unsigned pos = GetColumnPos(colNew);
|
||||||
event.SetNewOrder(pos);
|
event.SetNewOrder(pos);
|
||||||
|
|
||||||
if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
|
if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
|
||||||
@@ -595,7 +596,6 @@ void wxHeaderCtrl::OnMouse(wxMouseEvent& mevent)
|
|||||||
|
|
||||||
// account for the control displacement
|
// account for the control displacement
|
||||||
const int xPhysical = mevent.GetX();
|
const int xPhysical = mevent.GetX();
|
||||||
const int xLogical = xPhysical - m_scrollOffset;
|
|
||||||
|
|
||||||
// first deal with the [continuation of any] dragging operations in
|
// first deal with the [continuation of any] dragging operations in
|
||||||
// progress
|
// progress
|
||||||
@@ -630,7 +630,7 @@ void wxHeaderCtrl::OnMouse(wxMouseEvent& mevent)
|
|||||||
bool onSeparator;
|
bool onSeparator;
|
||||||
const unsigned col = mevent.Leaving()
|
const unsigned col = mevent.Leaving()
|
||||||
? (onSeparator = false, COL_NONE)
|
? (onSeparator = false, COL_NONE)
|
||||||
: FindColumnAtPoint(xLogical, &onSeparator);
|
: FindColumnAtPoint(xPhysical, &onSeparator);
|
||||||
|
|
||||||
|
|
||||||
// update the highlighted column if it changed
|
// update the highlighted column if it changed
|
||||||
|
Reference in New Issue
Block a user