Fixed: #1174 Mac - Alpha Build - Mouse Behavior

This commit is contained in:
rti 2010-12-12 03:58:14 +01:00
parent dab1bec1aa
commit 3d3f1abb9c
2 changed files with 35 additions and 0 deletions

View file

@ -246,6 +246,25 @@ bool CCocoaEventEmitter::processMessage(NSEvent* event, CEventServer* server)
mousePos.x /= (float)viewRect.size.width; mousePos.x /= (float)viewRect.size.width;
mousePos.y /= (float)viewRect.size.height; mousePos.y /= (float)viewRect.size.height;
// if the mouse event was placed outside the view, don't tell NeL :)
if((mousePos.x < 0.0 || mousePos.x > 1.0 ||
mousePos.y < 0.0 || mousePos.y > 1.0) &&
event.type != NSKeyDown && event.type != NSKeyUp)
{
return false;
}
// first event about mouse movement after setting to emulateRawMode
if(_setToEmulateRawMode &&
(event.type == NSMouseMoved ||
event.type == NSLeftMouseDragged ||
event.type == NSRightMouseDragged))
{
// do not report because it reflects wrapping pointer to 0.5/0.5
_setToEmulateRawMode = false;
return false;
}
// convert the modifiers for nel to pass them with the events // convert the modifiers for nel to pass them with the events
NLMISC::TKeyButton modifiers = NLMISC::TKeyButton modifiers =
modifierFlagsToNelKeyButton([event modifierFlags]); modifierFlagsToNelKeyButton([event modifierFlags]);
@ -399,6 +418,12 @@ bool CCocoaEventEmitter::processMessage(NSEvent* event, CEventServer* server)
} }
} }
if(_emulateRawMode && _driver && (event.type == NSMouseMoved ||
event.type == NSLeftMouseDragged || event.type == NSRightMouseDragged))
{
_driver->setMousePos(0.5, 0.5);
}
return true; return true;
} }
@ -453,6 +478,14 @@ void CCocoaEventEmitter::submitEvents(CEventServer& server, bool /* allWins */)
void CCocoaEventEmitter::emulateMouseRawMode(bool enable) void CCocoaEventEmitter::emulateMouseRawMode(bool enable)
{ {
_emulateRawMode = enable; _emulateRawMode = enable;
if(_emulateRawMode)
{
_setToEmulateRawMode = true;
if(_driver)
_driver->setMousePos(0.5, 0.5);
}
} }
} }

View file

@ -33,6 +33,7 @@ namespace NLMISC
class CCocoaEventEmitter : public IEventEmitter class CCocoaEventEmitter : public IEventEmitter
{ {
bool _emulateRawMode; bool _emulateRawMode;
bool _setToEmulateRawMode;
NL3D::IDriver* _driver; NL3D::IDriver* _driver;
CocoaOpenGLView* _glView; CocoaOpenGLView* _glView;
@ -42,6 +43,7 @@ class CCocoaEventEmitter : public IEventEmitter
public: public:
CCocoaEventEmitter() : CCocoaEventEmitter() :
_emulateRawMode(false), _emulateRawMode(false),
_setToEmulateRawMode(false),
_driver(NULL), _driver(NULL),
_glView(nil), _glView(nil),
_server(NULL) { } _server(NULL) { }