TCOD_mouse_t TCOD_mouse_get_status() { TCOD_mouse_t ms; int charWidth, charHeight; int wheel, mb1, mb2, mb3, fsx, fsy; _bah_libtcod_TCODMouse__Status(&ms.x, &ms.y, &ms.dx, &ms.dy, &mb1, &mb2, &mb3, &wheel, &fsx, &fsy); ms.lbutton = (mb1) ? true : false; ms.rbutton = (mb2) ? true : false; ms.mbutton = (mb3) ? true : false; ms.wheel_up = (wheel > 0) ? 1 : 0; ms.wheel_down = (wheel < 0) ? 1 : 0; // FIXME : implement this properly.... ms.lbutton_pressed = false; ms.rbutton_pressed = false; ms.mbutton_pressed = false; TCOD_sys_get_char_size(&charWidth,&charHeight); ms.cx = (ms.x - fsx) / charWidth; ms.cy = (ms.y - fsy) / charHeight; ms.dcx = ms.dx / charWidth; ms.dcy = ms.dy / charHeight; return ms; }
TCOD_mouse_t TCOD_mouse_get_status() { TCOD_mouse_t ms; int charWidth, charHeight; static bool lbut=false; static bool rbut=false; static bool mbut=false; Uint8 buttons; SDL_PumpEvents(); buttons = SDL_GetMouseState(&ms.x,&ms.y); SDL_GetRelativeMouseState(&ms.dx,&ms.dy); ms.lbutton = (buttons & SDL_BUTTON(SDL_BUTTON_LEFT)) ? 1 : 0; ms.lbutton_pressed=false; if (ms.lbutton) lbut=true; else if( lbut ) { lbut=false; ms.lbutton_pressed=true; } if ( mouse_force_bl ) { ms.lbutton_pressed=true; mouse_force_bl=false; } ms.rbutton = (buttons & SDL_BUTTON(SDL_BUTTON_RIGHT)) ? 1 : 0; ms.rbutton_pressed=false; if (ms.rbutton) rbut=true; else if( rbut ) { rbut=false; ms.rbutton_pressed=true; } if ( mouse_force_br ) { ms.rbutton_pressed=true; mouse_force_br=false; } ms.mbutton = (buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE)) ? 1 : 0; ms.mbutton_pressed=false; if (ms.mbutton) mbut=true; else if( mbut ) { mbut=false; ms.mbutton_pressed=true; } if ( mouse_force_bm ) { ms.mbutton_pressed=true; mouse_force_bm=false; } ms.wheel_up = (buttons & SDL_BUTTON(SDL_BUTTON_WHEELUP)) ? 1 : 0; ms.wheel_down = (buttons & SDL_BUTTON(SDL_BUTTON_WHEELDOWN)) ? 1 : 0; TCOD_sys_get_char_size(&charWidth,&charHeight); ms.cx = (ms.x - fullscreen_offsetx) / charWidth; ms.cy = (ms.y - fullscreen_offsety) / charHeight; ms.dcx = ms.dx / charWidth; ms.dcy = ms.dy / charHeight; return ms; }
static boolean processSpecialKeystrokes(TCOD_key_t k, boolean text) { if (k.vk == TCODK_PRINTSCREEN) { // screenshot TCOD_sys_save_screenshot(NULL); return true; } else if ( (k.vk == TCODK_F12) || ((k.lalt || k.ralt) && (k.vk == TCODK_ENTER || k.vk == TCODK_KPENTER) )) { if (!isFullScreen) { int font_w, font_h; TCOD_sys_get_char_size(&font_w, &font_h); if (desktop_width < font_w * COLS || desktop_height < font_h * ROWS) { // refuse to go full screen if the font is too big return true; } } isFullScreen = !isFullScreen; TCOD_console_set_fullscreen(isFullScreen); return true; } /* } else if ((k.vk == TCODK_PAGEUP || ((!text) && k.vk == TCODK_CHAR && (k.c == '=' || k.c == '+'))) && brogueFontSize < 13) { if (isFullScreen) { TCOD_console_set_fullscreen(0); isFullScreen = 0; } brogueFontSize++; TCOD_console_delete(NULL); initWithFont(brogueFontSize); TCOD_console_flush(); return true; } else if ((k.vk == TCODK_PAGEDOWN || ((!text) && k.vk == TCODK_CHAR && k.c == '-')) && brogueFontSize > 1) { if (isFullScreen) { TCOD_console_set_fullscreen(0); isFullScreen = 0; } brogueFontSize--; TCOD_console_delete(NULL); initWithFont(brogueFontSize); TCOD_console_flush(); return true; } */ return false; }
/* mouse stuff */ TCOD_mouse_t TCOD_mouse_get_status() { static int oldMouseX=-1,oldMouseY=-1; TCOD_mouse_t ms; int charWidth, charHeight; static bool lbut=false; static bool rbut=false; static bool mbut=false; if (!input) { if ( !renderWindow ) return ms; input=sfRenderWindow_GetInput(renderWindow); } ms.lbutton = sfInput_IsMouseButtonDown(input,sfButtonLeft); ms.lbutton_pressed=false; if (ms.lbutton) lbut=true; else if( lbut ) { lbut=false; ms.lbutton_pressed=true; } ms.rbutton = sfInput_IsMouseButtonDown(input,sfButtonRight); ms.rbutton_pressed=false; if (ms.rbutton) rbut=true; else if( rbut ) { rbut=false; ms.rbutton_pressed=true; } ms.mbutton = sfInput_IsMouseButtonDown(input,sfButtonMiddle); ms.mbutton_pressed=false; if (ms.mbutton) mbut=true; else if( mbut ) { mbut=false; ms.mbutton_pressed=true; } ms.x = (int) sfInput_GetMouseX(input); ms.y = (int) sfInput_GetMouseY(input); if ( oldMouseX != -1 ) { ms.dx=ms.x - oldMouseX; ms.dy=ms.y - oldMouseY; } else { ms.dx=0; ms.dy=0; } oldMouseX=ms.x; oldMouseY=ms.y; TCOD_sys_get_char_size(&charWidth,&charHeight); ms.cx = ms.x / charWidth; ms.cy = ms.y / charHeight; ms.dcx = ms.dx / charWidth; ms.dcy = ms.dy / charHeight; return ms; }
void TCODSystem::getCharSize(int *w, int *h) { TCOD_sys_get_char_size(w,h); }
static TCOD_event_t TCOD_sys_handle_event(SDL_Event *ev,TCOD_event_t eventMask, TCOD_key_t *key, TCOD_mouse_t *mouse) { TCOD_event_t retMask=0; switch(ev->type) { case SDL_KEYDOWN : { TCOD_key_t tmpKey=TCOD_sys_SDLtoTCOD(ev,TCOD_KEY_PRESSED); if ( (TCOD_EVENT_KEY_PRESS & eventMask) != 0) { retMask|=TCOD_EVENT_KEY_PRESS; if ( key ) *key = tmpKey; return retMask; } } break; case SDL_KEYUP : { TCOD_key_t tmpKey=TCOD_sys_SDLtoTCOD(ev,TCOD_KEY_RELEASED); if ( (TCOD_EVENT_KEY_RELEASE & eventMask) != 0) { retMask|=TCOD_EVENT_KEY_RELEASE; if ( key ) *key = tmpKey; return retMask; } } break; case SDL_MOUSEMOTION : if ( (TCOD_EVENT_MOUSE_MOVE & eventMask) != 0) { SDL_MouseMotionEvent *mme=&ev->motion; int charWidth, charHeight; /*SDL_GetMouseState(&mouse->x,&mouse->y);*/ /*SDL_GetRelativeMouseState(&mouse->dx,&mouse->dy);*/ retMask|=TCOD_EVENT_MOUSE_MOVE; mouse->dx += mme->xrel; mouse->dy += mme->yrel; mouse->x=mme->x; mouse->y=mme->y; TCOD_sys_get_char_size(&charWidth,&charHeight); mouse->cx = (mouse->x - TCOD_ctx.fullscreen_offsetx) / charWidth; mouse->cy = (mouse->y - TCOD_ctx.fullscreen_offsety) / charHeight; mouse->dcx = mouse->dx / charWidth; mouse->dcy = mouse->dy / charHeight; return retMask; } break; case SDL_MOUSEBUTTONDOWN : if ( (TCOD_EVENT_MOUSE_PRESS & eventMask) != 0) { SDL_MouseButtonEvent *mev=&ev->button; retMask|=TCOD_EVENT_MOUSE_PRESS; switch (mev->button) { case SDL_BUTTON_LEFT : mouse->lbutton=mousebl=true; break; case SDL_BUTTON_MIDDLE : mouse->mbutton=mousebm=true; break; case SDL_BUTTON_RIGHT : mouse->rbutton=mousebr=true; break; case SDL_BUTTON_WHEELUP : mouse->wheel_up=true; break; case SDL_BUTTON_WHEELDOWN : mouse->wheel_down=true;break; } return retMask; } break; case SDL_MOUSEBUTTONUP : if ( (TCOD_EVENT_MOUSE_RELEASE & eventMask) != 0) { SDL_MouseButtonEvent *mev=&ev->button; retMask|=TCOD_EVENT_MOUSE_RELEASE; switch (mev->button) { case SDL_BUTTON_LEFT : if (mousebl) mouse->lbutton_pressed = mouse_force_bl=true; mouse->lbutton = mousebl=false; break; case SDL_BUTTON_MIDDLE : if (mousebm) mouse->mbutton_pressed = mouse_force_bm=true; mouse->mbutton = mousebm=false; break; case SDL_BUTTON_RIGHT : if (mousebr) mouse->rbutton_pressed = mouse_force_br=true; mouse->rbutton = mousebr=false; break; } return retMask; } break; case SDL_QUIT : TCOD_console_set_window_closed(); break; case SDL_VIDEOEXPOSE : TCOD_sys_console_to_bitmap(screen,TCOD_console_get_width(NULL),TCOD_console_get_height(NULL),consoleBuffer,prevConsoleBuffer); break; default : break; } return retMask; }