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):
|
All (GUI):
|
||||||
|
|
||||||
- Fix crash in wxHTML on mal-formed <area> elements (LukasK).
|
- 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)
|
2.9.5: (released 2013-07-15)
|
||||||
|
@@ -207,9 +207,17 @@ public:
|
|||||||
int WXUNUSED(y) = 0) const
|
int WXUNUSED(y) = 0) const
|
||||||
{ return m_Link; }
|
{ 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;
|
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
|
#if WXWIN_COMPATIBILITY_2_6
|
||||||
// this was replaced by GetMouseCursor, don't use in new code!
|
// this was replaced by GetMouseCursor, don't use in new code!
|
||||||
virtual wxCursor GetCursor() const;
|
virtual wxCursor GetCursor() const;
|
||||||
|
@@ -319,9 +319,25 @@ public:
|
|||||||
|
|
||||||
@param window
|
@param window
|
||||||
interface to the parent HTML window
|
interface to the parent HTML window
|
||||||
|
|
||||||
|
@see GetMouseCursorAt()
|
||||||
*/
|
*/
|
||||||
virtual wxCursor GetMouseCursor(wxHtmlWindowInterface* window) const;
|
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
|
Returns pointer to the next cell in list (see htmlcell.h if you're
|
||||||
interested in details).
|
interested in details).
|
||||||
|
@@ -196,7 +196,17 @@ wxCursor wxHtmlCell::GetCursor() const
|
|||||||
}
|
}
|
||||||
#endif // WXWIN_COMPATIBILITY_2_6
|
#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
|
#if WXWIN_COMPATIBILITY_2_6
|
||||||
// NB: Older versions of wx used GetCursor() virtual method in place of
|
// NB: Older versions of wx used GetCursor() virtual method in place of
|
||||||
@@ -209,7 +219,11 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const
|
|||||||
return cur;
|
return cur;
|
||||||
#endif // WXWIN_COMPATIBILITY_2_6
|
#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);
|
return window->GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor_Link);
|
||||||
}
|
}
|
||||||
|
@@ -206,7 +206,7 @@ void wxHtmlWindowMouseHelper::HandleIdle(wxHtmlCell *rootCell,
|
|||||||
|
|
||||||
wxCursor cur;
|
wxCursor cur;
|
||||||
if (cell)
|
if (cell)
|
||||||
cur = cell->GetMouseCursor(m_interface);
|
cur = cell->GetMouseCursorAt(m_interface, pos);
|
||||||
else
|
else
|
||||||
cur = m_interface->GetHTMLCursor(
|
cur = m_interface->GetHTMLCursor(
|
||||||
wxHtmlWindowInterface::HTMLCursor_Default);
|
wxHtmlWindowInterface::HTMLCursor_Default);
|
||||||
@@ -229,6 +229,11 @@ void wxHtmlWindowMouseHelper::HandleIdle(wxHtmlCell *rootCell,
|
|||||||
{
|
{
|
||||||
if ( cell )
|
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);
|
OnCellMouseHover(cell, pos.x, pos.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user