From Erik Johnson, "There is an issue on win32 if the application hides the cursor using GraphicsWindowWin32::useCursor(false). The cursor has a habit of re-showing itself.
To reproduce, on win32: -Run osgViewer in a windowed mode, with the cursor off, as such: osgViewer::Viewer::Windows windows; viewer.getWindows(windows); for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr != windows.end(); ++itr) { (*itr)->useCursor( false ); } -Quickly move the cursor into the window (cursor it should be hidden) -Resize the window by dragging the border (notice the cursor changes to "resize" cursor) -Move the cursor back to the inside of the window (notice the cursor is not hidden anymore) The attached SVN patch will set the cursor to a "NoCursor" during useCursor(false). This correctly stores the no cursor state, so it can be rejuvenated after a future cursor change. This patch also fixes a couple instances where a hidden cursor should show itself, like when it's on the title bar, or the window close button."
This commit is contained in:
parent
8059c4a745
commit
7ca071192e
@ -2057,6 +2057,10 @@ void GraphicsWindowWin32::setWindowName( const std::string & name )
|
||||
void GraphicsWindowWin32::useCursor( bool cursorOn )
|
||||
{
|
||||
_traits->useCursor = cursorOn;
|
||||
if (_traits->useCursor == false)
|
||||
{
|
||||
setCursor(NoCursor);
|
||||
}
|
||||
}
|
||||
|
||||
void GraphicsWindowWin32::setCursor( MouseCursor mouseCursor )
|
||||
@ -2074,7 +2078,7 @@ void GraphicsWindowWin32::setCursorImpl( MouseCursor mouseCursor )
|
||||
if (newCursor == _currentCursor) return;
|
||||
|
||||
_currentCursor = newCursor;
|
||||
_traits->useCursor = (_currentCursor != NULL);
|
||||
_traits->useCursor = (_currentCursor != NULL) && (_mouseCursor != NoCursor);
|
||||
|
||||
if (_mouseCursor != InheritCursor)
|
||||
::SetCursor(_currentCursor);
|
||||
@ -2490,6 +2494,15 @@ LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, W
|
||||
case HTGROWBOX:
|
||||
setCursorImpl(BottomRightCorner);
|
||||
break;
|
||||
case HTSYSMENU:
|
||||
case HTCAPTION:
|
||||
case HTMAXBUTTON:
|
||||
case HTMINBUTTON:
|
||||
case HTCLOSE:
|
||||
case HTHELP:
|
||||
setCursorImpl(LeftArrowCursor);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (_traits->useCursor && _appMouseCursor != InheritCursor)
|
||||
setCursorImpl(_appMouseCursor);
|
||||
|
Loading…
Reference in New Issue
Block a user