Fix setting wxBK_HITTEST_xxx flags in wxNotebook::HitTest

The state represented by TCHT_ONITEM Win API flag is not a superposition
TCHT_ONITEMICON and TCHT_ONITLABEL states but it represents a separate state.
The fact that binary value of TCHT_ONITEM is bitwise-OR operation on
TCHT_ONITEMICON and TCHT_ONITEMLABEL doesn't matter here. The same applies to
wxBK_HITTEST_xxx flags where state represented by wxBK_HITTEST_ONITEM is not a
superposition of wxBK_HITTEST_ONICON and wxBK_HITTEST_ONLABEL.

Add note to wxBookCtrl::HitTest documentation that wxBK_HITTEST_ONICON,
wxBK_HITTEST_ONLABEL, wxBK_HITTEST_ONITEM are mutually exclusive bits.

See https://github.com/wxWidgets/wxWidgets/pull/159
This commit is contained in:
Artur Wieczorek
2016-01-30 19:09:33 +01:00
committed by Vadim Zeitlin
parent a016e6b896
commit 1237e932ad
3 changed files with 12 additions and 7 deletions

View File

@@ -38,7 +38,7 @@ enum
wxBK_HITTEST_NOWHERE = 1, // not on tab wxBK_HITTEST_NOWHERE = 1, // not on tab
wxBK_HITTEST_ONICON = 2, // on icon wxBK_HITTEST_ONICON = 2, // on icon
wxBK_HITTEST_ONLABEL = 4, // on label wxBK_HITTEST_ONLABEL = 4, // on label
wxBK_HITTEST_ONITEM = wxBK_HITTEST_ONICON | wxBK_HITTEST_ONLABEL, wxBK_HITTEST_ONITEM = 16, // on tab control but not on its icon or label
wxBK_HITTEST_ONPAGE = 8 // not on tab control, but over the selected page wxBK_HITTEST_ONPAGE = 8 // not on tab control, but over the selected page
}; };

View File

@@ -8,6 +8,8 @@
/** /**
Bit flags returned by wxBookCtrl::HitTest(). Bit flags returned by wxBookCtrl::HitTest().
Only one of wxBK_HITTEST_ONICON, wxBK_HITTEST_ONLABEL, wxBK_HITTEST_ONITEM
bits is set if point is over a tab.
Notice that wxOSX currently only returns wxBK_HITTEST_ONLABEL or Notice that wxOSX currently only returns wxBK_HITTEST_ONLABEL or
wxBK_HITTEST_NOWHERE and never the other values, so you should only test wxBK_HITTEST_NOWHERE and never the other values, so you should only test
for these two in the code that should be portable under OS X. for these two in the code that should be portable under OS X.
@@ -24,7 +26,7 @@ enum
wxBK_HITTEST_ONLABEL = 4, wxBK_HITTEST_ONLABEL = 4,
/// The point if over a tab item but not over its icon or label. /// The point if over a tab item but not over its icon or label.
wxBK_HITTEST_ONITEM = wxBK_HITTEST_ONICON | wxBK_HITTEST_ONLABEL, wxBK_HITTEST_ONITEM = 16,
/// The point is over the page area. /// The point is over the page area.
wxBK_HITTEST_ONPAGE = 8 wxBK_HITTEST_ONPAGE = 8

View File

@@ -750,15 +750,18 @@ int wxNotebook::HitTest(const wxPoint& pt, long *flags) const
*flags = 0; *flags = 0;
if ((hitTestInfo.flags & TCHT_NOWHERE) == TCHT_NOWHERE) if ((hitTestInfo.flags & TCHT_NOWHERE) == TCHT_NOWHERE)
{
wxASSERT( item == wxNOT_FOUND );
*flags |= wxBK_HITTEST_NOWHERE; *flags |= wxBK_HITTEST_NOWHERE;
if ((hitTestInfo.flags & TCHT_ONITEM) == TCHT_ONITEM) if ( GetPageSize().Contains(pt) )
*flags |= wxBK_HITTEST_ONPAGE;
}
else if ((hitTestInfo.flags & TCHT_ONITEM) == TCHT_ONITEM)
*flags |= wxBK_HITTEST_ONITEM; *flags |= wxBK_HITTEST_ONITEM;
if ((hitTestInfo.flags & TCHT_ONITEMICON) == TCHT_ONITEMICON) else if ((hitTestInfo.flags & TCHT_ONITEMICON) == TCHT_ONITEMICON)
*flags |= wxBK_HITTEST_ONICON; *flags |= wxBK_HITTEST_ONICON;
if ((hitTestInfo.flags & TCHT_ONITEMLABEL) == TCHT_ONITEMLABEL) else if ((hitTestInfo.flags & TCHT_ONITEMLABEL) == TCHT_ONITEMLABEL)
*flags |= wxBK_HITTEST_ONLABEL; *flags |= wxBK_HITTEST_ONLABEL;
if ( item == wxNOT_FOUND && GetPageSize().Contains(pt) )
*flags |= wxBK_HITTEST_ONPAGE;
} }
return item; return item;