Implemented support for float x and y mouse positions, and normalization of
mouse coords in osgGA::GUIEventAdapter, and ported osgGA camera manaipulators to use the new normalized values. Moved osgProducer across to tracking the window dimensions and ensure that the internals values in osgProducer::EventAdapter are kept consistent. Moved the warp pointer in Viewer across to using KeyboardMouse::positionPointer().
This commit is contained in:
@@ -7,15 +7,12 @@ unsigned int EventAdapter::_s_accumulatedButtonMask = 0;
|
||||
|
||||
int EventAdapter::_s_button = 0;
|
||||
int EventAdapter::_s_modKeyMask = 0;
|
||||
int EventAdapter::_s_Xmin = 0;
|
||||
int EventAdapter::_s_Xmax = 1280;
|
||||
int EventAdapter::_s_Ymin = 0;
|
||||
int EventAdapter::_s_Ymax = 1024;
|
||||
int EventAdapter::_s_mx = 0;
|
||||
int EventAdapter::_s_my = 0;
|
||||
|
||||
EventAdapter::KeySymbolMap EventAdapter::s_keySymbolMap;
|
||||
bool EventAdapter::s_keySymbolMapInitialized = false;
|
||||
float EventAdapter::_s_Xmin = 0;
|
||||
float EventAdapter::_s_Xmax = 1280;
|
||||
float EventAdapter::_s_Ymin = 0;
|
||||
float EventAdapter::_s_Ymax = 1024;
|
||||
float EventAdapter::_s_mx = 0;
|
||||
float EventAdapter::_s_my = 0;
|
||||
|
||||
static float s_xOffset=1.0f;
|
||||
static float s_xScale=0.5f;
|
||||
@@ -53,7 +50,7 @@ void EventAdapter::copyStaticVariables()
|
||||
}
|
||||
|
||||
|
||||
void EventAdapter::setWindowSize(int Xmin, int Ymin, int Xmax, int Ymax)
|
||||
void EventAdapter::setWindowSize(float Xmin, float Ymin, float Xmax, float Ymax)
|
||||
{
|
||||
_s_Xmin = Xmin;
|
||||
_s_Xmax = Xmax;
|
||||
@@ -68,7 +65,7 @@ void EventAdapter::setButtonMask(unsigned int buttonMask)
|
||||
}
|
||||
|
||||
|
||||
void EventAdapter::adaptResize(double time, int Xmin, int Ymin, int Xmax, int Ymax)
|
||||
void EventAdapter::adaptResize(double time, float Xmin, float Ymin, float Xmax, float Ymax)
|
||||
{
|
||||
setWindowSize(Xmin,Ymin,Xmax,Ymax);
|
||||
_eventType = RESIZE;
|
||||
@@ -102,8 +99,8 @@ void EventAdapter::adaptButtonPress(double time,float x, float y, unsigned int b
|
||||
break;
|
||||
}
|
||||
|
||||
_s_mx = (int)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
|
||||
_s_my = (int)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
|
||||
_s_mx = (float)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
|
||||
_s_my = (float)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
@@ -134,8 +131,8 @@ void EventAdapter::adaptButtonRelease(double time,float x, float y, unsigned int
|
||||
break;
|
||||
}
|
||||
|
||||
_s_mx = (int)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
|
||||
_s_my = (int)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
|
||||
_s_mx = (float)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
|
||||
_s_my = (float)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
@@ -149,8 +146,8 @@ void EventAdapter::adaptMouseMotion(double time, float x, float y)
|
||||
MOVE;
|
||||
|
||||
_time = time;
|
||||
_s_mx = (int)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
|
||||
_s_my = (int)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
|
||||
_s_mx = (float)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
|
||||
_s_my = (float)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
|
||||
copyStaticVariables();
|
||||
|
||||
}
|
||||
@@ -161,7 +158,7 @@ void EventAdapter::adaptKeyPress( double time, Producer::KeySymbol key)
|
||||
{
|
||||
_eventType = KEYDOWN;
|
||||
_time = time;
|
||||
_key = adaptKeySymbol(key);
|
||||
_key = key;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
@@ -171,7 +168,7 @@ void EventAdapter::adaptKeyRelease( double time, Producer::KeySymbol key)
|
||||
// we won't handle this correctly right now.. GUIEventAdapter isn't up to it
|
||||
_eventType = KEYUP;
|
||||
_time = time;
|
||||
_key = adaptKeySymbol(key);
|
||||
_key = key;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
@@ -186,142 +183,3 @@ void EventAdapter::adaptFrame(double time)
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
bool EventAdapter::initKeySymbolMap()
|
||||
{
|
||||
#ifdef WIN32
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
/*
|
||||
// not mapped yet as I can't see an
|
||||
// obvious mapping to X11/osgGA::GUIEventAdapter::KeySymbol.
|
||||
s_keySymbolMap[VK_CAPITAL] = ;
|
||||
s_keySymbolMap[VK_CONVERT] = ;
|
||||
s_keySymbolMap[VK_NONCONVERT] = ;
|
||||
s_keySymbolMap[VK_ACCEPT] = ;
|
||||
s_keySymbolMap[VK_SNAPSHOT] = ;
|
||||
|
||||
s_keySymbolMap[VK_LWIN] = ;
|
||||
s_keySymbolMap[VK_RWIN] = ;
|
||||
s_keySymbolMap[VK_APPS] = ;
|
||||
|
||||
s_keySymbolMap[VK_ATTN] = ;
|
||||
s_keySymbolMap[VK_CRSEL] = ;
|
||||
s_keySymbolMap[VK_EXSEL] = ;
|
||||
s_keySymbolMap[VK_EREOF] = ;
|
||||
s_keySymbolMap[VK_PLAY] = ;
|
||||
s_keySymbolMap[VK_ZOOM] = ;
|
||||
s_keySymbolMap[VK_NONAME] = ;
|
||||
s_keySymbolMap[VK_PA1] = ;
|
||||
*/
|
||||
|
||||
// mapped to osgGA::GUIEventAdapter::KeySymbol
|
||||
s_keySymbolMap[VK_CANCEL] = KEY_Cancel;
|
||||
|
||||
s_keySymbolMap[VK_BACK] = KEY_BackSpace;
|
||||
s_keySymbolMap[VK_TAB] = KEY_Tab;
|
||||
|
||||
s_keySymbolMap[VK_CLEAR] = KEY_Clear;
|
||||
s_keySymbolMap[VK_RETURN] = KEY_Return;
|
||||
|
||||
s_keySymbolMap[VK_SHIFT] = KEY_Shift_Lock;
|
||||
s_keySymbolMap[VK_CONTROL] = KEY_Control_L;
|
||||
s_keySymbolMap[VK_MENU] = KEY_Menu;
|
||||
s_keySymbolMap[VK_PAUSE ] = KEY_Pause;
|
||||
|
||||
s_keySymbolMap[VK_ESCAPE] = KEY_Escape;
|
||||
|
||||
s_keySymbolMap[VK_MODECHANGE] = KEY_Mode_switch;
|
||||
|
||||
s_keySymbolMap[VK_SPACE] = KEY_Space;
|
||||
s_keySymbolMap[VK_PRIOR] = KEY_Prior;
|
||||
s_keySymbolMap[VK_NEXT] = KEY_Next;
|
||||
s_keySymbolMap[VK_END] = KEY_End;
|
||||
s_keySymbolMap[VK_HOME] = KEY_Home;
|
||||
s_keySymbolMap[VK_LEFT] = KEY_Left;
|
||||
s_keySymbolMap[VK_UP] = KEY_Up;
|
||||
s_keySymbolMap[VK_RIGHT] = KEY_Right;
|
||||
s_keySymbolMap[VK_DOWN] = KEY_Down;
|
||||
s_keySymbolMap[VK_SELECT] = KEY_Select;
|
||||
s_keySymbolMap[VK_PRINT] = KEY_Print;
|
||||
s_keySymbolMap[VK_EXECUTE] = KEY_Execute;
|
||||
s_keySymbolMap[VK_INSERT] = KEY_Insert;
|
||||
s_keySymbolMap[VK_DELETE] = KEY_Delete;
|
||||
s_keySymbolMap[VK_HELP] = KEY_Help;
|
||||
|
||||
s_keySymbolMap[VK_NUMPAD0] = KEY_KP_0;
|
||||
s_keySymbolMap[VK_NUMPAD1] = KEY_KP_1;
|
||||
s_keySymbolMap[VK_NUMPAD2] = KEY_KP_2;
|
||||
s_keySymbolMap[VK_NUMPAD3] = KEY_KP_3;
|
||||
s_keySymbolMap[VK_NUMPAD4] = KEY_KP_4;
|
||||
s_keySymbolMap[VK_NUMPAD5] = KEY_KP_5;
|
||||
s_keySymbolMap[VK_NUMPAD6] = KEY_KP_6;
|
||||
s_keySymbolMap[VK_NUMPAD7] = KEY_KP_7;
|
||||
s_keySymbolMap[VK_NUMPAD8] = KEY_KP_8;
|
||||
s_keySymbolMap[VK_NUMPAD9] = KEY_KP_9;
|
||||
s_keySymbolMap[VK_MULTIPLY] = KEY_KP_Multiply;
|
||||
s_keySymbolMap[VK_ADD] = KEY_KP_Add;
|
||||
s_keySymbolMap[VK_SEPARATOR] = KEY_KP_Separator;
|
||||
s_keySymbolMap[VK_SUBTRACT] = KEY_KP_Subtract;
|
||||
s_keySymbolMap[VK_DECIMAL] = KEY_KP_Decimal;
|
||||
s_keySymbolMap[VK_DIVIDE] = KEY_KP_Divide;
|
||||
s_keySymbolMap[VK_F1] = KEY_F1;
|
||||
s_keySymbolMap[VK_F2] = KEY_F2;
|
||||
s_keySymbolMap[VK_F3] = KEY_F3;
|
||||
s_keySymbolMap[VK_F4] = KEY_F4;
|
||||
s_keySymbolMap[VK_F5] = KEY_F5;
|
||||
s_keySymbolMap[VK_F6] = KEY_F6;
|
||||
s_keySymbolMap[VK_F7] = KEY_F7;
|
||||
s_keySymbolMap[VK_F8] = KEY_F8;
|
||||
s_keySymbolMap[VK_F9] = KEY_F9;
|
||||
s_keySymbolMap[VK_F10] = KEY_F10;
|
||||
s_keySymbolMap[VK_F11] = KEY_F11;
|
||||
s_keySymbolMap[VK_F12] = KEY_F12;
|
||||
s_keySymbolMap[VK_F13] = KEY_F13;
|
||||
s_keySymbolMap[VK_F14] = KEY_F14;
|
||||
s_keySymbolMap[VK_F15] = KEY_F15;
|
||||
s_keySymbolMap[VK_F16] = KEY_F16;
|
||||
s_keySymbolMap[VK_F17] = KEY_F17;
|
||||
s_keySymbolMap[VK_F18] = KEY_F18;
|
||||
s_keySymbolMap[VK_F19] = KEY_F19;
|
||||
s_keySymbolMap[VK_F20] = KEY_F20;
|
||||
s_keySymbolMap[VK_F21] = KEY_F21;
|
||||
s_keySymbolMap[VK_F22] = KEY_F22;
|
||||
s_keySymbolMap[VK_F23] = KEY_F23;
|
||||
s_keySymbolMap[VK_F24] = KEY_F24;
|
||||
|
||||
s_keySymbolMap[VK_NUMLOCK] = KEY_Num_Lock;
|
||||
s_keySymbolMap[VK_SCROLL] = KEY_Scroll_Lock;
|
||||
|
||||
s_keySymbolMap[VK_LSHIFT] = KEY_Shift_L;
|
||||
s_keySymbolMap[VK_RSHIFT] = KEY_Shift_R;
|
||||
s_keySymbolMap[VK_LCONTROL] = KEY_Control_L;
|
||||
s_keySymbolMap[VK_RCONTROL] = KEY_Control_R;
|
||||
s_keySymbolMap[VK_LMENU] = KEY_Menu;
|
||||
s_keySymbolMap[VK_RMENU] = KEY_Menu;
|
||||
s_keySymbolMap[VK_OEM_CLEAR] = KEY_Clear;
|
||||
#endif
|
||||
|
||||
|
||||
#else
|
||||
|
||||
// no mapping required for non windows (i.e. X11 based)
|
||||
// since the osgGA::GUIEventAdapter::KeySybol values are
|
||||
// take from X11/keysymdef.h
|
||||
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int EventAdapter::adaptKeySymbol(Producer::KeySymbol key)
|
||||
{
|
||||
if (!s_keySymbolMapInitialized) s_keySymbolMapInitialized = initKeySymbolMap();
|
||||
|
||||
KeySymbolMap::iterator itr = s_keySymbolMap.find(key);
|
||||
if (itr!=s_keySymbolMap.end()) return itr->second;
|
||||
else return key;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user