From André Garneau, "

* Setup proper pixel format for ATI boards (removal of WGL_SWAP_METHOD_ARB specification from the requested pixel format since unsupported by the ATI driver)

    * Fix to create sample OpenGL window on the proper display device. This is the temporary window used to choose the desired pixel format. In the previous version, this window was always created on the primary display device, even though it had potentially different pixel formats compared to the target display device containing the window to be created.

    * Implementation of WindowingSystemInterface::setScreenResolution() method

    * Implementation of WindowingSystemInterface::setScreenRefreshRate() method

    * Implementation of GraphicsWindow::requestWarpPointer() method

    * Implementation of GraphicsWindow::useCursor() method and associated trait support. This can be used in two ways; first, when the graphics trait requested indicates that no cursor should be present, a new cursor-less window class is used to create the window. When a cursor-enabled window creation is requested, another window class is used. After creation of a window, it is also possible to toggle the cursor state by using the GraphicsWindow::useCursor method.

    * The way the mouse behaves is now compatible with the behaviour seen on X11; i.e. when pressing a mouse button, the window where the pointer is located will capture the mouse input and release it only after the button has been released. This results in all mouse movement events being dispatched to the window where the button was pressed initially until it is released. This improves the interaction with graphics windows.



    * Preparation work has been done to support the ability of moving a window from one screen to another screen and recreating its rendering context when this happens. This has been tested with a mix of NVIDIA and ATI cards and works properly. For the moment being, this feature is commented out due to changes in the core OSG libraries that have been done but need to be submitted later this week for approval by Robert.



Upcoming features



    * Support for moving windows from one screen to another screen seamlessly



    * Ability to set the window (i.e. the application itself creates the rendering window and passes it to the GraphicsWindowWin32 class)



    * Other miscellaneous items"

---------------------------------------------------
This commit is contained in:
Robert Osfield 2007-01-24 10:02:04 +00:00
parent 2fc6dd1942
commit 056ce866b0
3 changed files with 481 additions and 193 deletions

View File

@ -69,6 +69,12 @@ class GraphicsWindowWin32 : public osgViewer::GraphicsWindow
/** Get focus on if the pointer is in this window.*/ /** Get focus on if the pointer is in this window.*/
virtual void grabFocusIfPointerInWindow(); virtual void grabFocusIfPointerInWindow();
/** Override from GUIActionAdapter.*/
virtual void requestWarpPointer(float x,float y);
/** Switch on/off the cursor.*/
virtual void useCursor(bool /*cursorOn*/);
/** Handle a native (Win32) windowing event as received from the system */ /** Handle a native (Win32) windowing event as received from the system */
virtual LRESULT handleNativeWindowingEvent( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual LRESULT handleNativeWindowingEvent( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
@ -80,6 +86,7 @@ class GraphicsWindowWin32 : public osgViewer::GraphicsWindow
HWND createWindow(); HWND createWindow();
void destroyWindow( bool deleteNativeWindow = true ); void destroyWindow( bool deleteNativeWindow = true );
void recreateWindow();
bool determineWindowPositionAndStyle( bool decorated, int& x, int& y, unsigned int& w, unsigned int& h, unsigned int& style, unsigned int& extendedStyle ); bool determineWindowPositionAndStyle( bool decorated, int& x, int& y, unsigned int& w, unsigned int& h, unsigned int& style, unsigned int& extendedStyle );
@ -89,25 +96,29 @@ class GraphicsWindowWin32 : public osgViewer::GraphicsWindow
void transformMouseXY(float& x, float& y); void transformMouseXY(float& x, float& y);
int getScreenNumberContainingWindow( int& _screenOriginX, int& _screenOriginY );
HWND _hwnd; HWND _hwnd;
HDC _hdc; HDC _hdc;
HGLRC _hglrc; HGLRC _hglrc;
double _timeOfLastCheckEvents; double _timeOfLastCheckEvents;
int _screenOriginX; int _screenOriginX;
int _screenOriginY; int _screenOriginY;
unsigned int _screenWidth; unsigned int _screenWidth;
unsigned int _screenHeight; unsigned int _screenHeight;
int _windowOriginXToRealize; int _windowOriginXToRealize;
int _windowOriginYToRealize; int _windowOriginYToRealize;
unsigned int _windowWidthToRealize; unsigned int _windowWidthToRealize;
unsigned int _windowHeightToRealize; unsigned int _windowHeightToRealize;
bool _initialized; bool _initialized;
bool _valid; bool _valid;
bool _realized; bool _realized;
bool _recreateWindow;
bool _destroying; bool _destroying;
}; };

View File

@ -20,7 +20,7 @@
namespace osgViewer { namespace osgViewer {
class StatsHandler : public osgGA::GUIEventHandler class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler
{ {
public: public:

File diff suppressed because it is too large Load Diff