Max Horn 88913c0139 ALL: Remove trailing whitespaces
This tries to make our code a bit more compliant with our code formatting
conventions. For future use, this is the command I used:
  git ls-files "*.cpp" "*.h" | xargs sed -i -e 's/[ \t]*$//'
2011-06-20 00:59:48 +02:00

200 lines
5.5 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef PSP_INPUT_H
#define PSP_INPUT_H
#include "common/scummsys.h"
#include "common/events.h"
#include "backends/platform/psp/pspkeyboard.h"
#include "backends/platform/psp/cursor.h"
#include "backends/platform/psp/image_viewer.h"
#include <pspctrl.h>
enum PspEventType {
PSP_EVENT_NONE = 0,
PSP_EVENT_SHIFT,
PSP_EVENT_SHOW_VIRTUAL_KB,
PSP_EVENT_LBUTTON,
PSP_EVENT_RBUTTON,
PSP_EVENT_MODE_SWITCH,
PSP_EVENT_CHANGE_SPEED,
PSP_EVENT_IMAGE_VIEWER,
PSP_EVENT_IMAGE_VIEWER_SET_BUTTONS,
PSP_EVENT_LAST
};
struct PspEvent {
PspEventType type;
uint32 data;
PspEvent() { clear(); }
void clear() {
type = PSP_EVENT_NONE;
data = 0;
}
bool isEmpty() { return type == PSP_EVENT_NONE; }
};
enum PspPadMode {
PAD_MODE_NORMAL,
PAD_MODE_LOL,
PAD_MODE_LAST
};
enum ShiftMode {
UNSHIFTED = 0,
SHIFTED = 1,
SHIFTED_MODE_LAST
};
class Button {
private:
Common::KeyCode _key;
uint32 _ascii;
uint32 _flag;
PspEvent _pspEventDown; // event when we press
PspEvent _pspEventUp; // event when we release
public:
Button();
void clear();
bool getEvent(Common::Event &event, PspEvent &pspEvent, bool buttonDown);
void setKey(Common::KeyCode key, uint32 ascii = 0, uint32 flag = 0) { _key = key; _ascii = ascii; _flag = flag; }
void setPspEvent(PspEventType typeDown, uint32 dataDown, PspEventType typeUp, uint32 dataUp);
};
class ButtonPad {
public:
enum ButtonType { // must match the buttonMap
BTN_UP_LEFT,
BTN_UP_RIGHT,
BTN_DOWN_RIGHT,
BTN_DOWN_LEFT,
BTN_RIGHT,
BTN_DOWN,
BTN_LEFT,
BTN_UP,
BTN_CROSS,
BTN_CIRCLE,
BTN_TRIANGLE,
BTN_SQUARE,
BTN_LTRIGGER,
BTN_RTRIGGER,
BTN_START,
BTN_SELECT,
BTN_LAST
};
private:
Button _button[BTN_LAST][SHIFTED_MODE_LAST];
uint32 _buttonsChanged[SHIFTED_MODE_LAST]; // normal and shifted
uint32 _prevButtonState;
ShiftMode _shifted;
PspPadMode _padMode;
bool _comboMode; // are we in the middle of combos
bool _combosEnabled; // can we do combos
static const uint32 _buttonMap[]; // maps the buttons to their values
void initButtonsNormalMode();
void initButtonsLolMode();
void modifyButtonsForCombos(SceCtrlData &pad);
public:
ButtonPad();
void initButtons(); // set the buttons to the mode that's selected
void clearButtons(); // empty the buttons of all events
bool getEvent(Common::Event &event, PspEvent &pspEvent, SceCtrlData &pad);
bool getEventFromButtonState(Common::Event &event, PspEvent &pspEvent, uint32 buttonState);
void setShifted(ShiftMode shifted) { _shifted = shifted; }
void setPadMode(PspPadMode mode) { _padMode = mode; }
bool isButtonDown() { return _prevButtonState; }
void enableCombos(bool value) { _combosEnabled = value; }
Button &getButton(ButtonType type, ShiftMode mode) { return _button[type][mode]; }
};
class Nub {
private:
Cursor *_cursor; // to enable changing/getting cursor position
ShiftMode _shifted;
bool _dpadMode;
ButtonPad _buttonPad; // private buttonpad for dpad mode
int32 modifyNubAxisMotion(int32 input);
void translateToDpadState(int dpadX, int dpadY, uint32 &buttonState); // convert nub data to dpad data
public:
Nub() : _shifted(UNSHIFTED), _dpadMode(false) { }
void init() { _buttonPad.initButtons(); }
void setCursor(Cursor *cursor) { _cursor = cursor; }
// setters
void setDpadMode(bool active) { _dpadMode = active; }
void setShifted(ShiftMode shifted) { _shifted = shifted; }
// getters
bool isButtonDown();
bool getEvent(Common::Event &event, PspEvent &pspEvent, SceCtrlData &pad);
ButtonPad &getPad() { return _buttonPad; }
};
class InputHandler {
public:
InputHandler() : _keyboard(0), _cursor(0), _imageViewer(0), _padMode(PAD_MODE_NORMAL),
_lastPadCheckTime(0) {}
// pointer setters
void setKeyboard(PSPKeyboard *keyboard) { _keyboard = keyboard; }
void setCursor(Cursor *cursor) { _cursor = cursor; _nub.setCursor(cursor); }
void setImageViewer(ImageViewer *imageViewer) { _imageViewer = imageViewer; }
void init();
bool getAllInputs(Common::Event &event);
void setImageViewerMode(bool active);
private:
Nub _nub;
ButtonPad _buttonPad;
// Pointers to relevant other classes
PSPKeyboard *_keyboard;
Cursor *_cursor;
ImageViewer *_imageViewer;
PspPadMode _padMode; // whice mode we're in
PspEvent _pendingPspEvent; // an event that can't be handled yet
uint32 _lastPadCheckTime;
static const char *_padModeText[];
bool getEvent(Common::Event &event, SceCtrlData &pad);
bool handlePspEvent(Common::Event &event, PspEvent &pspEvent);
void handleMouseEvent(Common::Event &event, Common::EventType type, const char *string);
void handleShiftEvent(ShiftMode shifted);
void handleModeSwitchEvent();
void setButtonsForImageViewer();
};
#endif /* PSP_INPUT_H */