eventSdlKeyDown
Give the real SDL_KEYDOWN to the Window/Program states. This fixes issues with group keys and SDL2.
This commit is contained in:
parent
b83fab237b
commit
dbee447a9a
|
@ -4603,6 +4603,38 @@ bool Game::textInput(std::string text) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool Game::sdlKeyDown(SDL_KeyboardEvent key) {
|
||||
if(this->masterserverMode == true) {
|
||||
return false;
|
||||
}
|
||||
if(gameStarted == false || totalRenderFps <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(chatManager.getEditEnabled() == true) {
|
||||
return false;
|
||||
}
|
||||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||
//group
|
||||
for(int idx = 1; idx <= Selection::maxGroups; idx++) {
|
||||
string keyName = "GroupUnitsKey" + intToStr(idx);
|
||||
|
||||
SDL_Keycode groupHotKey = configKeys.getSDLKey(keyName.c_str());
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keyName [%s] group index = %d, key = [%c] [%d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,keyName.c_str(),idx,groupHotKey,groupHotKey);
|
||||
|
||||
//if(SystemFlags::VERBOSE_MODE_ENABLED) printf("input.keysym.mod = %d groupHotKey = %d key = %d (%d) [%s] isgroup = %d\n",key.keysym.mod,groupHotKey,key.keysym.sym,key.keysym.unicode,keyName.c_str(),isKeyPressed(groupHotKey,key));
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("input.keysym.mod = %d groupHotKey = %d key = (%d) [%s] isgroup = %d\n",key.keysym.mod,groupHotKey,key.keysym.sym,keyName.c_str(),isKeyPressed(groupHotKey,key));
|
||||
//printf(" group key check %d scancode:%d sym:%d groupHotKey=%d \n",idx,key.keysym.scancode,key.keysym.sym,groupHotKey);
|
||||
if(key.keysym.sym==groupHotKey){
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
//printf("IS GROUP KEY %d scancode:%d sym:%d groupHotKey=%d \n",idx,key.keysym.scancode,key.keysym.sym,groupHotKey);
|
||||
gui.groupKey(idx-1);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Game::keyDown(SDL_KeyboardEvent key) {
|
||||
if(this->masterserverMode == true) {
|
||||
return;
|
||||
|
@ -4853,33 +4885,6 @@ void Game::keyDown(SDL_KeyboardEvent key) {
|
|||
popupMenu.setEnabled(!popupMenu.getEnabled());
|
||||
popupMenu.setVisible(popupMenu.getEnabled());
|
||||
}
|
||||
//group
|
||||
else {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,key);
|
||||
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("====== Check ingame custom grouping hotkeys ======\n");
|
||||
//printf("====== Check ingame custom grouping hotkeys ======\n");
|
||||
|
||||
for(int idx = 1; idx <= Selection::maxGroups; idx++) {
|
||||
string keyName = "GroupUnitsKey" + intToStr(idx);
|
||||
//char groupHotKey = configKeys.getCharKey(keyName.c_str());
|
||||
//if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keyName [%s] group index = %d, key = [%c] [%d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,keyName.c_str(),idx,groupHotKey,groupHotKey);
|
||||
|
||||
SDL_Keycode groupHotKey = configKeys.getSDLKey(keyName.c_str());
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keyName [%s] group index = %d, key = [%c] [%d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,keyName.c_str(),idx,groupHotKey,groupHotKey);
|
||||
|
||||
//if(SystemFlags::VERBOSE_MODE_ENABLED) printf("input.keysym.mod = %d groupHotKey = %d key = %d (%d) [%s] isgroup = %d\n",key.keysym.mod,groupHotKey,key.keysym.sym,key.keysym.unicode,keyName.c_str(),isKeyPressed(groupHotKey,key));
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("input.keysym.mod = %d groupHotKey = %d key = (%d) [%s] isgroup = %d\n",key.keysym.mod,groupHotKey,key.keysym.sym,keyName.c_str(),isKeyPressed(groupHotKey,key));
|
||||
//printf("input.keysym.mod = %d groupHotKey = %d key = %d (%d) [%s] isgroup = %d\n",key.keysym.mod,groupHotKey,key.keysym.sym,key.keysym.unicode,keyName.c_str(),isKeyPressed(groupHotKey,key));
|
||||
//printf("IS GROUP KEY %d scancode:%d sym:%d groupHotKey=%d \n",idx,key.keysym.scancode,key.keysym.sym,groupHotKey);
|
||||
if(key.keysym.sym==groupHotKey){
|
||||
//if(isKeyPressed(groupHotKey,key) == true) {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
gui.groupKey(idx-1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//hotkeys
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameCamera.getState() = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,gameCamera.getState());
|
||||
|
|
|
@ -288,7 +288,8 @@ public:
|
|||
|
||||
//event managing
|
||||
virtual bool textInput(std::string text);
|
||||
virtual void keyDown(SDL_KeyboardEvent key);
|
||||
virtual bool sdlKeyDown(SDL_KeyboardEvent key);
|
||||
virtual void keyDown(SDL_KeyboardEvent key);
|
||||
virtual void keyUp(SDL_KeyboardEvent key);
|
||||
virtual void keyPress(SDL_KeyboardEvent c);
|
||||
virtual void mouseDownLeft(int x, int y);
|
||||
|
|
|
@ -349,7 +349,7 @@ void Gui::mouseDoubleClickLeftGraphics(int x, int y){
|
|||
void Gui::groupKey(int groupIndex) {
|
||||
if(isKeyDown(vkControl)){
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] groupIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,groupIndex);
|
||||
selection.assignGroup(groupIndex,isKeyDown(vkShift));
|
||||
selection.assignGroup(groupIndex,!isKeyDown(vkShift));
|
||||
}
|
||||
else{
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] groupIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,groupIndex);
|
||||
|
|
|
@ -1129,6 +1129,13 @@ bool MainWindow::eventTextInput(std::string text) {
|
|||
return result;
|
||||
}
|
||||
|
||||
bool MainWindow::eventSdlKeyDown(SDL_KeyboardEvent key) {
|
||||
if(program == NULL) {
|
||||
throw megaglest_runtime_error("In [MainWindow::eventKeyDown] ERROR, program == NULL!");
|
||||
}
|
||||
return program->sdlKeyDown(key);
|
||||
}
|
||||
|
||||
void MainWindow::eventKeyDown(SDL_KeyboardEvent key) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key.keysym.sym);
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ public:
|
|||
virtual void eventMouseDoubleClick(int x, int y, MouseButton mouseButton);
|
||||
virtual void eventMouseMove(int x, int y, const MouseState *mouseState);
|
||||
virtual bool eventTextInput(std::string text);
|
||||
virtual bool eventSdlKeyDown(SDL_KeyboardEvent key);
|
||||
virtual void eventKeyDown(SDL_KeyboardEvent key);
|
||||
virtual void eventMouseWheel(int x, int y, int zDelta);
|
||||
virtual void eventKeyUp(SDL_KeyboardEvent key);
|
||||
|
|
|
@ -329,6 +329,11 @@ bool Program::textInput(std::string text) {
|
|||
return programState->textInput(text);
|
||||
}
|
||||
|
||||
bool Program::sdlKeyDown(SDL_KeyboardEvent key) {
|
||||
//delegate event
|
||||
return programState->sdlKeyDown(key);
|
||||
}
|
||||
|
||||
void Program::keyDown(SDL_KeyboardEvent key) {
|
||||
if(msgBox.getEnabled()) {
|
||||
//SDL_keysym keystate = Window::getKeystate();
|
||||
|
|
|
@ -96,6 +96,7 @@ public:
|
|||
virtual void mouseMove(int x, int y, const MouseState *mouseState);
|
||||
virtual bool textInput(std::string text){ return false; };
|
||||
virtual void keyDown(SDL_KeyboardEvent key){};
|
||||
virtual bool sdlKeyDown(SDL_KeyboardEvent key){ return false; };
|
||||
virtual void keyUp(SDL_KeyboardEvent key){};
|
||||
virtual void keyPress(SDL_KeyboardEvent c){};
|
||||
virtual void setStartXY(int X,int Y) { startX=X; startY=Y; }
|
||||
|
@ -195,6 +196,7 @@ public:
|
|||
//main
|
||||
bool textInput(std::string text);
|
||||
void keyDown(SDL_KeyboardEvent key);
|
||||
bool sdlKeyDown(SDL_KeyboardEvent key);
|
||||
void keyUp(SDL_KeyboardEvent key);
|
||||
void keyPress(SDL_KeyboardEvent c);
|
||||
|
||||
|
|
|
@ -205,6 +205,7 @@ protected:
|
|||
virtual void eventKeyUp(SDL_KeyboardEvent key) {}
|
||||
virtual void eventKeyPress(SDL_KeyboardEvent c) {}
|
||||
virtual bool eventTextInput(std::string text) { return false; }
|
||||
virtual bool eventSdlKeyDown(SDL_KeyboardEvent key) { return false; }
|
||||
virtual void eventResize() {};
|
||||
virtual void eventPaint() {}
|
||||
virtual void eventTimer(int timerId) {}
|
||||
|
|
|
@ -285,7 +285,7 @@ bool Window::handleEvent() {
|
|||
|
||||
{
|
||||
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] =================================== START OF SDL SDL_KEYDOWN ================================\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] =================================== START OF SDL SDL_TEXTINPUT ================================\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
|
||||
codeLocation = "i";
|
||||
Window::isKeyPressedDown = true;
|
||||
|
@ -316,21 +316,15 @@ bool Window::handleEvent() {
|
|||
}
|
||||
#endif
|
||||
if(global_window) {
|
||||
//char key = getKey(event.key.keysym,true);
|
||||
//key = tolower(key);
|
||||
//if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("******************* key [%d]\n",key);
|
||||
|
||||
//event.key.keysym.mod = SDL_GetModState();
|
||||
if(global_window->eventTextInput(event.text.text) == false) {
|
||||
event.key.keysym.sym = event.text.text[0];
|
||||
global_window->eventKeyDown(event.key);
|
||||
global_window->eventKeyPress(event.key);
|
||||
}
|
||||
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] =================================== END OF SDL SDL_KEYDOWN ================================\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] =================================== END OF SDL SDL_TEXTINPUT ================================\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -343,13 +337,14 @@ bool Window::handleEvent() {
|
|||
//printf("In SDL_KEYDOWN\n");
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] =================================== START OF SDL SDL_KEYDOWN ================================\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
|
||||
// if(SDL_GetModState() == 0 && event.key.keysym.sym != SDLK_BACKSPACE) {
|
||||
// printf("In SDL_KEYDOWN key SKIP\n");
|
||||
// break;
|
||||
// }
|
||||
bool keyDownConsumed=false;
|
||||
if(global_window) {
|
||||
keyDownConsumed=global_window->eventSdlKeyDown(event.key);
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
// Stop unprintable characters (ctrl+, alt+ and escape),
|
||||
// also prevent ` and/or ~ appearing in console every time it's toggled.
|
||||
|
||||
SDL_Keymod mod = SDL_GetModState();
|
||||
if (!isUnprintableChar(event.key.keysym,mod)) {
|
||||
//printf("In SDL_KEYDOWN key SKIP [%d]\n",event.key.keysym.sym);
|
||||
|
@ -389,8 +384,10 @@ bool Window::handleEvent() {
|
|||
//if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("******************* key [%d]\n",key);
|
||||
|
||||
//event.key.keysym.mod = SDL_GetModState();
|
||||
global_window->eventKeyDown(event.key);
|
||||
global_window->eventKeyPress(event.key);
|
||||
if(!keyDownConsumed){
|
||||
global_window->eventKeyDown(event.key);
|
||||
global_window->eventKeyPress(event.key);
|
||||
}
|
||||
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue