diff --git a/include/osgViewer/api/Win32/GraphicsWindowWin32 b/include/osgViewer/api/Win32/GraphicsWindowWin32 index 6fd9603fc..d54a18903 100644 --- a/include/osgViewer/api/Win32/GraphicsWindowWin32 +++ b/include/osgViewer/api/Win32/GraphicsWindowWin32 @@ -144,6 +144,8 @@ class OSGVIEWER_EXPORT GraphicsWindowWin32 : public osgViewer::GraphicsWindow void transformMouseXY(float& x, float& y); + void setCursorImpl(MouseCursor cursor); + HCURSOR getOrCreateCursor(MouseCursor mouseShape); HWND _hwnd; diff --git a/src/osgViewer/GraphicsWindowWin32.cpp b/src/osgViewer/GraphicsWindowWin32.cpp index 26bd1ad98..2c63538b9 100644 --- a/src/osgViewer/GraphicsWindowWin32.cpp +++ b/src/osgViewer/GraphicsWindowWin32.cpp @@ -1939,26 +1939,22 @@ void GraphicsWindowWin32::useCursor( bool cursorOn ) } void GraphicsWindowWin32::setCursor( MouseCursor mouseCursor ) +{ + _appMouseCursor = mouseCursor; + setCursorImpl(mouseCursor); +} + +void GraphicsWindowWin32::setCursorImpl( MouseCursor mouseCursor ) { if (_mouseCursor != mouseCursor) { - if (mouseCursor != LeftRightCursor && - mouseCursor != UpDownCursor && - mouseCursor != TopLeftCorner && - mouseCursor != TopRightCorner && - mouseCursor != BottomLeftCorner && - mouseCursor != BottomRightCorner) - { - _appMouseCursor = mouseCursor; - } - _mouseCursor = mouseCursor; HCURSOR newCursor = getOrCreateCursor( mouseCursor); if (newCursor == _currentCursor) return; - + _currentCursor = newCursor; _traits->useCursor = (_currentCursor != NULL); - + if (_mouseCursor != InheritCursor) ::SetCursor(_currentCursor); } @@ -2354,28 +2350,28 @@ LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, W { case HTLEFT: case HTRIGHT: - setCursor(LeftRightCursor); + setCursorImpl(LeftRightCursor); break; case HTTOP: case HTBOTTOM: - setCursor(UpDownCursor); + setCursorImpl(UpDownCursor); break; case HTTOPLEFT: - setCursor(TopLeftCorner); + setCursorImpl(TopLeftCorner); break; case HTTOPRIGHT: - setCursor(TopRightCorner); + setCursorImpl(TopRightCorner); break; case HTBOTTOMLEFT: - setCursor(BottomLeftCorner); + setCursorImpl(BottomLeftCorner); break; case HTBOTTOMRIGHT: case HTGROWBOX: - setCursor(BottomRightCorner); + setCursorImpl(BottomRightCorner); break; default: if (_traits->useCursor && _appMouseCursor != InheritCursor) - setCursor(LeftArrowCursor); + setCursorImpl(_appMouseCursor); break; } return result;