Set mouse cursor correctly over image map links in wxHTML.
The cursor didn't change to a link one when the mouse was over link areas in an image map. Fix this by generalizing wxHtmlCell::GetMouseCursor() into GetMouseCursorAt(). Closes #15350. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74570 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -563,6 +563,7 @@ Major new features in this release
|
||||
All (GUI):
|
||||
|
||||
- Fix crash in wxHTML on mal-formed <area> elements (LukasK).
|
||||
- Set correct cursor when the mouse is over image map links in wxHTML (LukasK).
|
||||
|
||||
|
||||
2.9.5: (released 2013-07-15)
|
||||
|
@@ -207,9 +207,17 @@ public:
|
||||
int WXUNUSED(y) = 0) const
|
||||
{ return m_Link; }
|
||||
|
||||
// Returns cursor to be used when mouse is over the cell:
|
||||
// Returns cursor to be used when mouse is over the cell, can be
|
||||
// overridden by the derived classes to use a different cursor whenever the
|
||||
// mouse is over this cell.
|
||||
virtual wxCursor GetMouseCursor(wxHtmlWindowInterface *window) const;
|
||||
|
||||
// Returns cursor to be used when mouse is over the given point, can be
|
||||
// overridden if the cursor should change depending on where exactly inside
|
||||
// the cell the mouse is.
|
||||
virtual wxCursor GetMouseCursorAt(wxHtmlWindowInterface *window,
|
||||
const wxPoint& relPos) const;
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_6
|
||||
// this was replaced by GetMouseCursor, don't use in new code!
|
||||
virtual wxCursor GetCursor() const;
|
||||
|
@@ -319,9 +319,25 @@ public:
|
||||
|
||||
@param window
|
||||
interface to the parent HTML window
|
||||
|
||||
@see GetMouseCursorAt()
|
||||
*/
|
||||
virtual wxCursor GetMouseCursor(wxHtmlWindowInterface* window) const;
|
||||
|
||||
/**
|
||||
Returns cursor to show when mouse pointer is over the specified point.
|
||||
|
||||
This function should be overridden instead of GetMouseCursorAt() if
|
||||
the cursor should depend on the exact position of the mouse in the
|
||||
window.
|
||||
|
||||
@param window
|
||||
interface to the parent HTML window
|
||||
|
||||
@since 3.0
|
||||
*/
|
||||
virtual wxCursor GetMouseCursorAt(wxHtmlWindowInterface* window) const;
|
||||
|
||||
/**
|
||||
Returns pointer to the next cell in list (see htmlcell.h if you're
|
||||
interested in details).
|
||||
|
@@ -196,7 +196,17 @@ wxCursor wxHtmlCell::GetCursor() const
|
||||
}
|
||||
#endif // WXWIN_COMPATIBILITY_2_6
|
||||
|
||||
wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const
|
||||
wxCursor
|
||||
wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface* WXUNUSED(window)) const
|
||||
{
|
||||
// This is never called directly, only from GetMouseCursorAt() and we
|
||||
// return an invalid cursor by default to let it delegate to the window.
|
||||
return wxNullCursor;
|
||||
}
|
||||
|
||||
wxCursor
|
||||
wxHtmlCell::GetMouseCursorAt(wxHtmlWindowInterface *window,
|
||||
const wxPoint& relPos) const
|
||||
{
|
||||
#if WXWIN_COMPATIBILITY_2_6
|
||||
// NB: Older versions of wx used GetCursor() virtual method in place of
|
||||
@@ -209,7 +219,11 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const
|
||||
return cur;
|
||||
#endif // WXWIN_COMPATIBILITY_2_6
|
||||
|
||||
if ( GetLink() )
|
||||
const wxCursor curCell = GetMouseCursor(window);
|
||||
if ( curCell.IsOk() )
|
||||
return curCell;
|
||||
|
||||
if ( GetLink(relPos.x, relPos.y) )
|
||||
{
|
||||
return window->GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor_Link);
|
||||
}
|
||||
|
@@ -206,7 +206,7 @@ void wxHtmlWindowMouseHelper::HandleIdle(wxHtmlCell *rootCell,
|
||||
|
||||
wxCursor cur;
|
||||
if (cell)
|
||||
cur = cell->GetMouseCursor(m_interface);
|
||||
cur = cell->GetMouseCursorAt(m_interface, pos);
|
||||
else
|
||||
cur = m_interface->GetHTMLCursor(
|
||||
wxHtmlWindowInterface::HTMLCursor_Default);
|
||||
@@ -229,6 +229,11 @@ void wxHtmlWindowMouseHelper::HandleIdle(wxHtmlCell *rootCell,
|
||||
{
|
||||
if ( cell )
|
||||
{
|
||||
// A single cell can have different cursors for different positions,
|
||||
// so update cursor for this case as well.
|
||||
wxCursor cur = cell->GetMouseCursorAt(m_interface, pos);
|
||||
m_interface->GetHTMLWindow()->SetCursor(cur);
|
||||
|
||||
OnCellMouseHover(cell, pos.x, pos.y);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user