1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
#ifndef MOUSEHANDLER_H
#define MOUSEHANDLER_H
// MouseHandler.h: interface for the CMouseHandler class.
//
//////////////////////////////////////////////////////////////////////
#include <string>
#include <vector>
#include <map>
#include "MouseCursor.h"
static const int NUM_BUTTONS = 10;
class CInputReceiver;
class CCameraController;
class CMouseHandler
{
public:
void SetCursor(const std::string& cmdName);
bool hardwareCursor;
void UpdateHwCursor(); //calls SDL_ShowCursor, used for ingame hwcursor enabling
void UpdateCursors();
void HideMouse();
void ShowMouse();
void ToggleState(); // lock+hide (used by fps camera and middle click scrolling)
void WarpMouse(int x, int y);
void Draw(); // draw mousebox (selection box)
void MouseRelease(int x,int y,int button);
void MousePress(int x,int y,int button);
void MouseMove(int x,int y);
void MouseWheel(float delta);
CMouseHandler();
virtual ~CMouseHandler();
int lastx;
int lasty;
bool hide;
bool hwHide;
bool locked;
bool invertMouse;
float doubleClickTime;
float scrollWheelSpeed;
struct ButtonPressEvt {
bool pressed;
bool chorded;
int x;
int y;
float3 camPos;
float3 dir;
float time;
float lastRelease;
int movement;
};
ButtonPressEvt buttons[NUM_BUTTONS + 1]; /* One-bottomed. */
int activeButton;
float3 dir;
int soundMultiselID;
float cursorScale;
void DrawCursor(void);
std::string GetCurrentTooltip(void);
std::string cursorText; //current cursor name
CMouseCursor *currentCursor;
std::map<std::string, CMouseCursor*> cursorFileMap;
std::map<std::string, CMouseCursor*> cursorCommandMap;
bool AssignMouseCursor(const std::string& cmdName,
const std::string& fileName,
CMouseCursor::HotSpot hotSpot,
bool overwrite);
bool ReplaceMouseCursor(const std::string& oldName,
const std::string& newName,
CMouseCursor::HotSpot hotSpot);
void SafeDeleteCursor(CMouseCursor* cursor);
protected:
void LoadCursors();
public:
void EmptyMsgQueUpdate(void);
/* Stores if the mouse was locked or not before going into direct control,
so we can restore it when we return to normal. */
bool wasLocked;
};
extern CMouseHandler* mouse;
#endif /* MOUSEHANDLER_H */
|