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:
Robert Osfield
2003-04-04 19:10:37 +00:00
parent fb49e5a60f
commit 169bf25f77
13 changed files with 150 additions and 259 deletions

View File

@@ -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;
}