g13gui/g13d/stick.h

75 lines
1.4 KiB
C++

#ifndef STICK_H
#define STICK_H
#include "action.h"
#include "bounds.h"
#include "coord.h"
namespace G13 {
class Stick;
typedef Coord<int> StickCoord;
typedef Bounds<int> StickBounds;
typedef Coord<double> ZoneCoord;
typedef Bounds<double> ZoneBounds;
class StickZone : public Actionable<Stick> {
public:
StickZone(Stick &, const std::string &name, const ZoneBounds &,
ActionPtr = 0);
bool operator==(const StickZone &other) const {
return _name == other._name;
}
void dump(std::ostream &) const;
void parse_key(unsigned char *byte, Device *g13);
void test(const ZoneCoord &loc);
void set_bounds(const ZoneBounds &bounds) {
_bounds = bounds;
}
protected:
bool _active;
ZoneBounds _bounds;
};
typedef boost::shared_ptr<StickZone> StickZonePtr;
class Stick {
public:
Stick(Device &keypad);
void parse_joystick(unsigned char *buf);
void set_mode(stick_mode_t);
StickZone *zone(const std::string &, bool create = false);
void remove_zone(const StickZone &zone);
const std::vector<StickZone> &zones() const {
return _zones;
}
void dump(std::ostream &) const;
protected:
void _recalc_calibrated();
Device &_keypad;
std::vector<StickZone> _zones;
StickBounds _bounds;
StickCoord _center_pos;
StickCoord _north_pos;
StickCoord _current_pos;
stick_mode_t _stick_mode;
};
} // namespace G13
#endif // STICK_H