Added logic to NOT trigger camera mousemove if keyboard has a key pressed so you can scroll with keys and still move mouse simultaneously

This commit is contained in:
Mark Vejvoda
2010-03-27 21:32:33 +00:00
parent 02b1cb40e2
commit cda368b96c
5 changed files with 41 additions and 25 deletions

View File

@@ -36,7 +36,7 @@ static int oldX=0,oldY=0;
unsigned int Window::lastMouseEvent = 0; /** for use in mouse hover calculations */
Vec2i Window::mousePos;
MouseState Window::mouseState;
bool Window::isKeyPressedDown = false;
// ========== PUBLIC ==========
@@ -59,6 +59,7 @@ Window::~Window() {
bool Window::handleEvent() {
SDL_Event event;
SDL_GetMouseState(&oldX,&oldY);
while(SDL_PollEvent(&event)) {
try {
//printf("START [%d]\n",event.type);
@@ -69,8 +70,8 @@ bool Window::handleEvent() {
case SDL_MOUSEMOTION:
//printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__);
setLastMouseEvent(Chrono::getCurMillis());
setMousePos(Vec2i(event.button.x, event.button.y));
setLastMouseEvent(Chrono::getCurMillis());
setMousePos(Vec2i(event.button.x, event.button.y));
break;
}
@@ -106,13 +107,14 @@ bool Window::handleEvent() {
setMouseState(mbCenter, event.motion.state & SDL_BUTTON_MMASK);
if(global_window) {
global_window->eventMouseMove(event.motion.x, event.motion.y, &getMouseState()); //&ms);
global_window->eventMouseMove(event.motion.x, event.motion.y, &getMouseState()); //&ms);
}
break;
}
case SDL_KEYDOWN:
//printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__);
Window::isKeyPressedDown = true;
/* handle ALT+Return */
if(event.key.keysym.sym == SDLK_RETURN
&& (event.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) {
@@ -125,6 +127,9 @@ bool Window::handleEvent() {
break;
case SDL_KEYUP:
//printf("In [%s::%s] Line :%d\n",__FILE__,__FUNCTION__,__LINE__);
Window::isKeyPressedDown = false;
if(global_window) {
global_window->eventKeyUp(getKey(event.key.keysym));
}

View File

@@ -1,7 +1,7 @@
// ==============================================================
// This file is part of Glest Shared Library (www.glest.org)
//
// Copyright (C) 2001-2008 Marti<EFBFBD>o Figueroa
// Copyright (C) 2001-2008 Martio Figueroa
//
// You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published
@@ -38,6 +38,7 @@ unsigned int Window::lastMouseEvent = 0; /** for use in mouse hover calculations
static int oldX=0,oldY=0;
Vec2i Window::mousePos;
MouseState Window::mouseState;
bool Window::isKeyPressedDown = false;
// ===================== PUBLIC ========================
@@ -381,6 +382,8 @@ LRESULT CALLBACK Window::eventRouter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
}
case WM_KEYDOWN: {
Window::isKeyPressedDown = true;
eventWindow->eventKeyDown(static_cast<char>(wParam));
break;
@@ -398,7 +401,9 @@ LRESULT CALLBACK Window::eventRouter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
}
case WM_KEYUP: {
Window::isKeyPressedDown = false;
eventWindow->eventKeyUp(static_cast<char>(wParam));
break;