| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include "X11/CmOSCursorImpl.h"
- // TODO - Not tested and will not work until I properly test it on a unix system!
- namespace CamelotEngine
- {
- OSCursor()
- :mCursorGrabbed(false), mCursorHidden(false)
- {
- mDisplay = XOpenDisplay(0); // TODO - What if there are multiple displays? Need to check for that
- mWindow = XRootWindow(mDisplay, 0);
- mCursor = createNULLCursor(mDisplay, mWindow); // Create invisible cursor
- }
- Int2 OSCursor::getPosition()
- {
- Window returnedWindow;
- int rootX, rootY;
- int winX, winY;
- unsigned int returnedMask;
- XQueryPointer(mDisplay, mWindow, &returnedWindow,
- &returnedWindow, &rootX, &rootY, &winX, &winY,
- &returnedMask)
- return Int2(rootX, rootY);
- }
- void OSCursor::setPosition(const Int2& pos)
- {
- XWarpPointer(mDisplay, None, mWindow, 0,0,0,0, pos.x, pos.y);
- XFlush(mDisplay);
- }
- void OSCursor::hide()
- {
- // Hide cursor
- if(!mCursorHidden)
- {
- XDefineCursor(mDisplay, mWindow, mCursor );
- mCursorHidden = true;
- }
- // Grab cursor to user window
- if(!mCursorGrabbed)
- {
- if( XGrabPointer( mDisplay, mWindow, True,
- ButtonPressMask | ButtonReleaseMask |
- PointerMotionMask, GrabModeAsync, GrabModeAsync,
- mWindow, None, CurrentTime ) ==
- GrabSuccess )
- {
- mCursorGrabbed = true;
- }
- }
- }
- void OSCursor::show()
- {
- // Un-grab cursor (only in windowed mode: in fullscreen mode we still
- // want the mouse grabbed in order to confine the cursor to the window
- // area)
- if(mCursorGrabbed)
- {
- XUngrabPointer(mDisplay, CurrentTime);
- mCursorGrabbed = false;
- }
- // Show cursor
- if(mCursorHidden)
- {
- XUndefineCursor(mDisplay, mWindow);
- mCursorHidden = GL_FALSE;
- }
- }
- }
|