Push joystick events to the GUI. Not tested yet.

This commit is contained in:
simon.kagstrom 2010-02-21 15:58:28 +00:00
parent 7a35a744ec
commit d2e0208510
5 changed files with 48 additions and 5 deletions

View File

@ -829,14 +829,22 @@ uint8 C64::poll_joystick_hats(int port)
Uint8 v = SDL_JoystickGetHat (js, i); Uint8 v = SDL_JoystickGetHat (js, i);
/* FIXME! This is the wrong way for the Wii */ /* FIXME! This is the wrong way for the Wii */
if (v & SDL_HAT_UP) if (v & SDL_HAT_UP) {
out &= 0xfe; out &= 0xfe;
if (v & SDL_HAT_DOWN) Gui::gui->pushEvent(KEY_UP);
}
if (v & SDL_HAT_DOWN) {
out &= 0xfd; out &= 0xfd;
if (v & SDL_HAT_LEFT) Gui::gui->pushEvent(KEY_DOWN);
}
if (v & SDL_HAT_LEFT) {
out &= 0xfb; out &= 0xfb;
if (v & SDL_HAT_RIGHT) Gui::gui->pushEvent(KEY_LEFT);
}
if (v & SDL_HAT_RIGHT) {
out &= 0xf7; out &= 0xf7;
Gui::gui->pushEvent(KEY_RIGHT);
}
} }
return out; return out;
@ -858,9 +866,16 @@ uint8 C64::poll_joystick_buttons(int port)
if (kc == JOY_NONE) if (kc == JOY_NONE)
continue; continue;
if (cur != old) if (cur != old) {
TheDisplay->UpdateKeyMatrix(kc, !cur, TheDisplay->UpdateKeyMatrix(kc, !cur,
TheCIA1->KeyMatrix, TheCIA1->RevMatrix, &out); TheCIA1->KeyMatrix, TheCIA1->RevMatrix, &out);
if (kc == JOY_FIRE)
Gui::gui->pushEvent(KEY_SELECT);
else if (kc == JOY_ENTER_MENU)
Gui::gui->activate();
else
Gui::gui->pushEvent(KEY_ESCAPE);
}
} }
return out; return out;

View File

@ -326,6 +326,25 @@ void Gui::exitMenu()
this->saveGameInfo(); this->saveGameInfo();
} }
void Gui::pushEvent(event_t ev)
{
GuiView *cur_view = this->peekView();
if (!this->is_active || !cur_view)
{
if (this->kbd)
this->kbd->pushEvent(ev);
return;
}
if (this->dlg)
this->dlg->pushEvent(ev);
else if (this->kbd)
this->kbd->pushEvent(ev);
else
cur_view->pushEvent(ev);
}
void Gui::pushEvent(SDL_Event *ev) void Gui::pushEvent(SDL_Event *ev)
{ {
GuiView *cur_view = this->peekView(); GuiView *cur_view = this->peekView();

View File

@ -43,6 +43,8 @@ public:
void runLogic(void); void runLogic(void);
void pushEvent(event_t ev);
void pushEvent(SDL_Event *ev); void pushEvent(SDL_Event *ev);
void draw(SDL_Surface *where); void draw(SDL_Surface *where);

View File

@ -420,6 +420,11 @@ void VirtualKeyboard::updateTheme()
this->setFont(Gui::gui->small_font); this->setFont(Gui::gui->small_font);
} }
void VirtualKeyboard::pushEvent(event_t ev)
{
Widget::pushEvent(ev);
}
void VirtualKeyboard::pushEvent(SDL_Event *ev) void VirtualKeyboard::pushEvent(SDL_Event *ev)
{ {
switch(ev->type) switch(ev->type)

View File

@ -71,6 +71,8 @@ public:
void draw(SDL_Surface *where, int x, int y, int w, int h); void draw(SDL_Surface *where, int x, int y, int w, int h);
void pushEvent(event_t ev);
void pushEvent(SDL_Event *ev); void pushEvent(SDL_Event *ev);
const char *getString(); const char *getString();