| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #include "Win32/CmOSCursorImpl.h"
- #include "CmApplication.h"
- #include "CmRenderWindow.h"
- namespace CamelotEngine
- {
- Int2 OSCursor::getPosition()
- {
- POINT screenPos;
- GetCursorPos(&screenPos);
- RenderWindowPtr primaryWindow = gApplication().getPrimaryRenderWindow();
- HWND hwnd;
- primaryWindow->getCustomAttribute_internal("WINDOW", &hwnd);
- ScreenToClient(hwnd, &screenPos);
- return Int2(screenPos.x, screenPos.y);
- }
- void OSCursor::setPosition(const Int2& pos)
- {
- POINT screenPos;
- // Convert client coordinates to screen coordinates
- screenPos.x = pos.x;
- screenPos.y = pos.y;
- RenderWindowPtr primaryWindow = gApplication().getPrimaryRenderWindow();
- HWND hwnd;
- primaryWindow->getCustomAttribute_internal("WINDOW", &hwnd);
- ClientToScreen(hwnd, &screenPos);
- SetCursorPos(screenPos.x, screenPos.y);
- }
- void OSCursor::hide()
- {
- RECT clipWindowRect;
- ShowCursor( FALSE );
- RenderWindowPtr primaryWindow = gApplication().getPrimaryRenderWindow();
- HWND hwnd;
- primaryWindow->getCustomAttribute_internal("WINDOW", &hwnd);
- // Clip cursor to the window
- if( GetWindowRect(hwnd, &clipWindowRect))
- {
- ClipCursor(&clipWindowRect);
- }
- // Capture cursor to user window
- SetCapture(hwnd);
- }
- void OSCursor::show()
- {
- // Un-capture cursor
- ReleaseCapture();
- // Release the cursor from the window
- ClipCursor(NULL);
- ShowCursor(TRUE);
- }
- }
|