From e2874d343a58e5f5f94739d864545a9d80c4cd87 Mon Sep 17 00:00:00 2001 From: dscho Date: Thu, 12 Mar 2009 00:07:48 +0000 Subject: Teach SDLvncviewer about scroll wheel events Signed-off-by: Johannes Schindelin --- client_examples/SDLvncviewer.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'client_examples') diff --git a/client_examples/SDLvncviewer.c b/client_examples/SDLvncviewer.c index d905f74..a0fd1d9 100644 --- a/client_examples/SDLvncviewer.c +++ b/client_examples/SDLvncviewer.c @@ -6,6 +6,8 @@ struct { int sdl; int rfb; } buttonMapping[]={ {1, rfbButton1Mask}, {2, rfbButton2Mask}, {3, rfbButton3Mask}, + {4, rfbButton4Mask}, + {5, rfbButton5Mask}, {0,0} }; @@ -357,22 +359,39 @@ static void handleSDLEvent(rfbClient *cl, SDL_Event *e) #endif case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEMOTION: { + case SDL_MOUSEMOTION: + { int x, y, state, i; if (viewOnly) break; - state = SDL_GetMouseState(&x, &y); + if (e->type == SDL_MOUSEMOTION) { + x = e->motion.x; + y = e->motion.y; + state = e->motion.state; + } + else { + x = e->button.x; + y = e->button.y; + state = e->button.button; + for (i = 0; buttonMapping[i].sdl; i++) + if (state == buttonMapping[i].sdl) { + state = buttonMapping[i].rfb; + if (e->type == SDL_MOUSEBUTTONDOWN) + buttonMask |= state; + else + buttonMask &= ~state; + break; + } + } if (sdlPixels) { x = x * cl->width / realWidth; y = y * cl->height / realHeight; } - for (buttonMask = 0, i = 0; buttonMapping[i].sdl; i++) - if (state & SDL_BUTTON(buttonMapping[i].sdl)) - buttonMask |= buttonMapping[i].rfb; - SendPointerEvent(cl, x, y, buttonMask); - break; - } + SendPointerEvent(cl, x, y, buttonMask); + buttonMask &= ~(rfbButton4Mask | rfbButton5Mask); + break; + } case SDL_KEYUP: case SDL_KEYDOWN: if (viewOnly) -- cgit v1.2.3