You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

501 lines
17 KiB
C++

#include "cexception.h"
//#include "Null_Audio.h"
//#include "SDL_Audio.h"
//#include "SDL_Clock.h"
#include "csdl_toolkit.h"
//#include "SDL_Video.h"
#define GP2X_BUTTON_UP (0)
#define GP2X_BUTTON_UPLEFT (1)
#define GP2X_BUTTON_LEFT (2)
#define GP2X_BUTTON_DOWNLEFT (3)
#define GP2X_BUTTON_DOWN (4)
#define GP2X_BUTTON_DOWNRIGHT (5)
#define GP2X_BUTTON_RIGHT (6)
#define GP2X_BUTTON_UPRIGHT (7)
#define GP2X_BUTTON_START (8)
#define GP2X_BUTTON_SELECT (9)
#define GP2X_BUTTON_R (10)
#define GP2X_BUTTON_L (11)
#define GP2X_BUTTON_A (12)
#define GP2X_BUTTON_B (13)
#define GP2X_BUTTON_Y (14)
#define GP2X_BUTTON_X (15)
#define GP2X_BUTTON_VOLUP (16)
#define GP2X_BUTTON_VOLDOWN (17)
#define GP2X_BUTTON_CLICK (18)
#define GP2X_AXIS_FACTOR (20000)
#define GP2X_SPEED (3)
// for now assume GP2X mapping ...
const int JOYSTICK_BUTTON_UP = GP2X_BUTTON_UP;
const int JOYSTICK_BUTTON_UPLEFT = GP2X_BUTTON_UPLEFT;
const int JOYSTICK_BUTTON_LEFT = GP2X_BUTTON_LEFT;
const int JOYSTICK_BUTTON_DOWNLEFT = GP2X_BUTTON_DOWNLEFT;
const int JOYSTICK_BUTTON_DOWN = GP2X_BUTTON_DOWN;
const int JOYSTICK_BUTTON_DOWNRIGHT = GP2X_BUTTON_DOWNRIGHT;
const int JOYSTICK_BUTTON_RIGHT = GP2X_BUTTON_RIGHT;
const int JOYSTICK_BUTTON_UPRIGHT = GP2X_BUTTON_UPRIGHT;
const int JOYSTICK_BUTTON_PRIMARY = GP2X_BUTTON_R;
const int JOYSTICK_BUTTON_SECONDARY = GP2X_BUTTON_L;
const int JOYSTICK_BUTTON_TERTIARY = GP2X_BUTTON_CLICK;
const int JOYSTICK_AXIS_FACTOR = GP2X_AXIS_FACTOR;
const int JOYSTICK_SPEED = GP2X_SPEED;
cSDL_Toolkit::cSDL_Toolkit()
: cMediaToolkit()
// , xPos(0)
// , yPos(0)
// , xMove(0)
// , yMove(0)
// , joystick(0)
{
// if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
// {
// throw SDL_Exception(__FILE__, __LINE__, SDL_GetError());
// }
//#if defined(HAVE_LIBSDL_MIXER) && defined(HAVE_LIBSDL_SOUND)
// audio = new SDL_Audio();
//#else
// audio = new Null_Audio();
//#endif
// clock = new SDL_Clock();
// video = new SDL_Video();
// if (SDL_NumJoysticks() > 0)
// {
// joystick = SDL_JoystickOpen(0);
// if (!joystick)
// {
// throw SDL_Exception(__FILE__, __LINE__, SDL_GetError());
// }
// }
}
cSDL_Toolkit::~cSDL_Toolkit()
{
// SDL_WM_GrabInput(SDL_GRAB_OFF);
// if (joystick)
// {
// SDL_JoystickClose(joystick);
// }
// delete audio;
// delete clock;
// delete video;
// SDL_Quit();
}
//void
//SDL_Toolkit::HandleEvent(SDL_Event *event)
//{
// switch (event->type)
// {
// case SDL_KEYDOWN:
// {
// KeyboardEvent kbe((Key)event->key.keysym.sym);
// for (std::list<KeyboardEventListener *>::iterator it = keyboardListeners.begin(); it != keyboardListeners.end(); ++it)
// {
// (*it)->KeyPressed(kbe);
// }
// }
// break;
// case SDL_KEYUP:
// {
// KeyboardEvent kbe((Key)event->key.keysym.sym);
// for (std::list<KeyboardEventListener *>::iterator it = keyboardListeners.begin(); it != keyboardListeners.end(); ++it)
// {
// (*it)->KeyReleased(kbe);
// }
// }
// break;
// case SDL_MOUSEBUTTONDOWN:
// {
// PointerButton pb;
// switch (event->button.button)
// {
// case SDL_BUTTON_LEFT:
// pb = PB_PRIMARY;
// break;
// case SDL_BUTTON_MIDDLE:
// pb = PB_TERTIARY;
// break;
// case SDL_BUTTON_RIGHT:
// pb = PB_SECONDARY;
// break;
// default:
// return;
// }
// xPos = event->button.x / video->GetScaling();
// yPos = event->button.y / video->GetScaling();
// PointerButtonEvent pbe(pb, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonPressed(pbe);
// }
// }
// break;
// case SDL_MOUSEBUTTONUP:
// {
// PointerButton pb;
// switch (event->button.button)
// {
// case SDL_BUTTON_LEFT:
// pb = PB_PRIMARY;
// break;
// case SDL_BUTTON_MIDDLE:
// pb = PB_TERTIARY;
// break;
// case SDL_BUTTON_RIGHT:
// pb = PB_SECONDARY;
// break;
// default:
// return;
// }
// xPos = event->button.x / video->GetScaling();
// yPos = event->button.y / video->GetScaling();
// PointerButtonEvent pbe(pb, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonReleased(pbe);
// }
// }
// break;
// case SDL_MOUSEMOTION:
// {
// xPos = event->button.x / video->GetScaling();
// yPos = event->button.y / video->GetScaling();
// PointerMotionEvent pme(xPos, yPos);
// for (std::list<PointerMotionEventListener *>::iterator it = pointerMotionListeners.begin(); it != pointerMotionListeners.end(); ++it)
// {
// (*it)->PointerMoved(pme);
// }
// }
// break;
// case SDL_JOYAXISMOTION:
// if (event->jaxis.which == 0)
// {
// if (event->jaxis.axis == 0)
// {
// xMove = event->jaxis.value / JOYSTICK_AXIS_FACTOR;
// }
// else if (event->jaxis.axis == 1)
// {
// yMove = event->jaxis.value / JOYSTICK_AXIS_FACTOR;
// }
// }
// break;
// case SDL_JOYBUTTONDOWN:
// if (event->jbutton.which == 0)
// {
// switch (event->jbutton.button)
// {
// case JOYSTICK_BUTTON_UP:
// jsState = JS_UP;
// yMove = -1;
// break;
// case JOYSTICK_BUTTON_UPLEFT:
// jsState = JS_UP_LEFT;
// xMove = -1;
// yMove = -1;
// break;
// case JOYSTICK_BUTTON_LEFT:
// jsState = JS_LEFT;
// xMove = -1;
// break;
// case JOYSTICK_BUTTON_DOWNLEFT:
// jsState = JS_DOWN_LEFT;
// xMove = -1;
// yMove = 1;
// break;
// case JOYSTICK_BUTTON_DOWN:
// jsState = JS_DOWN;
// yMove = 1;
// break;
// case JOYSTICK_BUTTON_DOWNRIGHT:
// jsState = JS_DOWN_RIGHT;
// xMove = 1;
// yMove = 1;
// break;
// case JOYSTICK_BUTTON_RIGHT:
// jsState = JS_RIGHT;
// xMove = 1;
// break;
// case JOYSTICK_BUTTON_UPRIGHT:
// jsState = JS_UP_RIGHT;
// xMove = 1;
// yMove = -1;
// break;
// case JOYSTICK_BUTTON_PRIMARY:
// {
// PointerButtonEvent pbe(PB_PRIMARY, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonPressed(pbe);
// }
// }
// break;
// case JOYSTICK_BUTTON_SECONDARY:
// {
// PointerButtonEvent pbe(PB_SECONDARY, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonPressed(pbe);
// }
// }
// break;
// case JOYSTICK_BUTTON_TERTIARY:
// {
// PointerButtonEvent pbe(PB_TERTIARY, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonPressed(pbe);
// }
// }
// break;
// default:
// break;
// }
// }
// break;
// case SDL_JOYBUTTONUP:
// if (event->jbutton.which == 0)
// {
// switch (event->jbutton.button)
// {
// case JOYSTICK_BUTTON_UP:
// if (jsState == JS_UP)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_UPLEFT:
// if (jsState == JS_UP_LEFT)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_LEFT:
// if (jsState == JS_LEFT)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_DOWNLEFT:
// if (jsState == JS_DOWN_LEFT)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_DOWN:
// if (jsState == JS_DOWN)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_DOWNRIGHT:
// if (jsState == JS_DOWN_RIGHT)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_RIGHT:
// if (jsState == JS_RIGHT)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_UPRIGHT:
// if (jsState == JS_UP_RIGHT)
// {
// jsState = JS_CENTER;
// xMove = 0;
// yMove = 0;
// }
// break;
// case JOYSTICK_BUTTON_PRIMARY:
// {
// PointerButtonEvent pbe(PB_PRIMARY, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonReleased(pbe);
// }
// }
// break;
// case JOYSTICK_BUTTON_SECONDARY:
// {
// PointerButtonEvent pbe(PB_SECONDARY, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonReleased(pbe);
// }
// }
// break;
// case JOYSTICK_BUTTON_TERTIARY:
// {
// PointerButtonEvent pbe(PB_TERTIARY, xPos, yPos);
// for (std::list<PointerButtonEventListener *>::iterator it = pointerButtonListeners.begin(); it != pointerButtonListeners.end(); ++it)
// {
// (*it)->PointerButtonReleased(pbe);
// }
// }
// break;
// default:
// break;
// }
// }
// break;
// case SDL_USEREVENT:
// {
// // timer event
// clock->CancelTimer((unsigned long)event->user.data1);
// TimerEvent te((unsigned long)event->user.data1);
// for (std::list<TimerEventListener *>::iterator it = timerListeners.begin(); it != timerListeners.end(); ++it)
// {
// (*it)->TimerExpired(te);
// }
// }
// break;
// default:
// break;
// }
//}
//void
//SDL_Toolkit::UpdatePointer()
//{
// if (xMove)
// {
// xPos = xPos + xMove * JOYSTICK_SPEED;
// if (xPos < 0)
// {
// xPos = 0;
// }
// else if (xPos > video->GetWidth())
// {
// xPos = video->GetWidth();
// }
// }
// if (yMove)
// {
// yPos = yPos + yMove * JOYSTICK_SPEED;
// if (yPos < 0)
// {
// yPos = 0;
// }
// else if (yPos > video->GetHeight())
// {
// yPos = video->GetHeight();
// }
// }
// if (xMove || yMove)
// {
// PointerMotionEvent pme(xPos, yPos);
// for (std::list<PointerMotionEventListener *>::iterator it = pointerMotionListeners.begin(); it != pointerMotionListeners.end(); ++it)
// {
// (*it)->PointerMoved(pme);
// }
// }
//}
//void
//SDL_Toolkit::PollEvents()
//{
// SDL_Event event;
// while (SDL_PollEvent(&event))
// {
// HandleEvent(&event);
// }
// UpdatePointer();
//}
//void
//SDL_Toolkit::PollEventLoop()
//{
// int currentTicks;
// int previousTicks = SDL_GetTicks();
// eventLoopRunning = true;
// while (eventLoopRunning)
// {
// PollEvents();
// currentTicks = SDL_GetTicks();
// LoopEvent le(currentTicks - previousTicks);
// for (std::list<LoopEventListener *>::iterator it = loopListeners.begin(); it != loopListeners.end(); ++it)
// {
// (*it)->LoopComplete(le);
// }
// previousTicks = currentTicks;
// }
//}
//void
//SDL_Toolkit::WaitEvents()
//{
// SDL_Event event;
// if (SDL_WaitEvent(&event))
// {
// HandleEvent(&event);
// }
// UpdatePointer();
//}
//void
//SDL_Toolkit::WaitEventLoop()
//{
// int currentTicks;
// int previousTicks = SDL_GetTicks();
// eventLoopRunning = true;
// while (eventLoopRunning)
// {
// WaitEvents();
// currentTicks = SDL_GetTicks();
// LoopEvent le(currentTicks - previousTicks);
// for (std::list<LoopEventListener *>::iterator it = loopListeners.begin(); it != loopListeners.end(); ++it)
// {
// (*it)->LoopComplete(le);
// }
// previousTicks = currentTicks;
// }
//}
//void
//SDL_Toolkit::ClearEvents()
//{
// SDL_Event event;
// while (SDL_PollEvent(&event))
// {
// // nothing
// }
//}
//void
//SDL_Toolkit::GetPointerPosition(int *x, int *y)
//{
// SDL_GetMouseState(x, y);
//}
//void
//SDL_Toolkit::SetPointerPosition(int x, int y)
//{
// int scaling = video->GetScaling();
// SDL_WarpMouse(x * scaling, y * scaling);
//}