summaryrefslogtreecommitdiffstats
path: root/src/device-manager.cpp
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2008-03-22 21:40:30 +0000
committerjoncruz <joncruz@users.sourceforge.net>2008-03-22 21:40:30 +0000
commitb2183c7d51f6735ea67c5d8c319a05f26f883442 (patch)
tree900d04bccecf44a0ad00b972eaba7af32565a9b7 /src/device-manager.cpp
parentchanges to use RegisteredTransformedPoint as widget for LPE point. not complete (diff)
downloadinkscape-b2183c7d51f6735ea67c5d8c319a05f26f883442.tar.gz
inkscape-b2183c7d51f6735ea67c5d8c319a05f26f883442.zip
Tracking of live axes
(bzr r5172)
Diffstat (limited to 'src/device-manager.cpp')
-rw-r--r--src/device-manager.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/device-manager.cpp b/src/device-manager.cpp
index 9cf4583c6..dcf86edb7 100644
--- a/src/device-manager.cpp
+++ b/src/device-manager.cpp
@@ -50,6 +50,8 @@ public:
virtual gint getNumKeys() const {return device->num_keys;}
virtual Glib::ustring getLink() const {return link;}
virtual void setLink( Glib::ustring const& link ) {this->link = link;}
+ virtual gint getLiveAxes() const {return liveAxes;}
+ virtual void setLiveAxes(gint axes) {liveAxes = axes;}
virtual gint getLiveButtons() const {return liveButtons;}
virtual void setLiveButtons(gint buttons) {liveButtons = buttons;}
@@ -66,6 +68,7 @@ private:
Glib::ustring name;
Gdk::InputSource source;
Glib::ustring link;
+ guint liveAxes;
guint liveButtons;
};
@@ -94,6 +97,7 @@ InputDeviceImpl::InputDeviceImpl(GdkDevice* device)
name(device->name ? device->name : ""),
source(static_cast<Gdk::InputSource>(device->source)),
link(),
+ liveAxes(0),
liveButtons(0)
{
switch ( source ) {
@@ -127,15 +131,18 @@ public:
DeviceManagerImpl();
virtual std::list<InputDevice const *> getDevices();
virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalDeviceChanged();
+ virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalAxesChanged();
virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalButtonsChanged();
virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalLinkChanged();
+ virtual void addAxis(Glib::ustring const & id, gint axis);
virtual void addButton(Glib::ustring const & id, gint button);
virtual void setLinkedTo(Glib::ustring const & id, Glib::ustring const& link);
protected:
std::list<InputDeviceImpl*> devices;
sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalDeviceChangedPriv;
+ sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalAxesChangedPriv;
sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalButtonsChangedPriv;
sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalLinkChangedPriv;
};
@@ -179,6 +186,11 @@ sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalD
return signalDeviceChangedPriv;
}
+sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalAxesChanged()
+{
+ return signalAxesChangedPriv;
+}
+
sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalButtonsChanged()
{
return signalButtonsChangedPriv;
@@ -189,6 +201,23 @@ sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalL
return signalLinkChangedPriv;
}
+void DeviceManagerImpl::addAxis(Glib::ustring const & id, gint axis)
+{
+ if ( axis >= 0 && axis < static_cast<gint>(bitVals.size()) ) {
+ std::list<InputDeviceImpl*>::iterator it = std::find_if(devices.begin(), devices.end(), IdMatcher(id));
+ if ( it != devices.end() ) {
+ gint mask = bitVals[axis];
+ if ( (mask & (*it)->getLiveAxes()) == 0 ) {
+ (*it)->setLiveAxes((*it)->getLiveAxes() | mask);
+
+ // Only signal if a new axis was added
+ (*it)->reference();
+ signalAxesChangedPriv.emit(Glib::RefPtr<InputDevice>(*it));
+ }
+ }
+ }
+}
+
void DeviceManagerImpl::addButton(Glib::ustring const & id, gint button)
{
if ( button >= 0 && button < static_cast<gint>(bitVals.size()) ) {
@@ -206,7 +235,6 @@ void DeviceManagerImpl::addButton(Glib::ustring const & id, gint button)
}
}
-
void DeviceManagerImpl::setLinkedTo(Glib::ustring const & id, Glib::ustring const& link)
{
std::list<InputDeviceImpl*>::iterator it = std::find_if(devices.begin(), devices.end(), IdMatcher(id));