pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3066 - in trunk/pingus: data/controller src/input


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3066 - in trunk/pingus: data/controller src/input
Date: Sun, 2 Sep 2007 19:20:57 +0200

Author: grumbel
Date: 2007-09-02 19:20:57 +0200 (Sun, 02 Sep 2007)
New Revision: 3066

Added:
   trunk/pingus/data/controller/usbmouse.scm
Modified:
   trunk/pingus/src/input/usbmouse_driver.cpp
   trunk/pingus/src/input/usbmouse_driver.hpp
Log:
- added scroller support to usbmouse as well as an example config file

Added: trunk/pingus/data/controller/usbmouse.scm
===================================================================
--- trunk/pingus/data/controller/usbmouse.scm   2007-09-02 16:09:13 UTC (rev 
3065)
+++ trunk/pingus/data/controller/usbmouse.scm   2007-09-02 17:20:57 UTC (rev 
3066)
@@ -0,0 +1,33 @@
+(pingus-controller
+ (standard-pointer
+  (usbmouse:pointer (device "/dev/input/mx500")))
+
+ (standard-scroller
+  (usbmouse:scroller (device "/dev/input/marblemouse")))
+
+ (primary-button
+  (usbmouse:button (device "/dev/input/mx500") (button 0)))
+
+ (secondary-button
+  (usbmouse:button (device "/dev/input/mx500") (button 1)))
+
+ (pause-button
+  (usbmouse:button (device "/dev/input/mx500") (button 4)))
+
+ (fast-forward-button
+  (usbmouse:button (device "/dev/input/mx500") (button 3)))
+
+;; (armageddon-button
+;;  (usbmouse:button (device "/dev/input/mx500") (button 4)))
+
+ (escape-button
+  (sdl:keyboard-button (key "escape")))
+
+ (action-up-button
+  (usbmouse:button (device "/dev/input/mx500") (button 6))) 
+
+ (action-down-button
+  (usbmouse:button (device "/dev/input/mx500") (button 5)))
+ )
+
+;; EOF ;;

Modified: trunk/pingus/src/input/usbmouse_driver.cpp
===================================================================
--- trunk/pingus/src/input/usbmouse_driver.cpp  2007-09-02 16:09:13 UTC (rev 
3065)
+++ trunk/pingus/src/input/usbmouse_driver.cpp  2007-09-02 17:20:57 UTC (rev 
3066)
@@ -44,14 +44,15 @@
   std::string device;
   std::vector<bool> buttons;
 
-  std::vector<Pointer*> pointer_bindings;
+  std::vector<Pointer*>  pointer_bindings;
+  std::vector<Scroller*> scroller_bindings;
   std::vector<std::vector<Button*> >  button_bindings;
   
 public: 
   USBMouse(const std::string& device_) 
     : device(device_),
       buttons(5),
-      button_bindings(5)
+      button_bindings(7)
   {
     fd = open(device.c_str (), O_RDWR | O_NONBLOCK);
 
@@ -84,6 +85,11 @@
     pointer_bindings.push_back(p);
   }
 
+  void add_listener(Scroller* s)
+  {
+    scroller_bindings.push_back(s);
+  }
+
   void add_listener(int i, Button* b)
   {
     assert(i >= 0 && i < int(button_bindings.size()));
@@ -121,8 +127,8 @@
             for(std::vector<Pointer*>::iterator i = pointer_bindings.begin(); 
i != pointer_bindings.end(); ++i)
               (*i)->set_pos(mouse_pos);
 
-            // send_ball_move(delta_x, delta_y);
-            // send_pointer_move(mouse_pos);
+            for(std::vector<Scroller*>::iterator i = 
scroller_bindings.begin(); i != scroller_bindings.end(); ++i)
+              (*i)->set_delta(Vector2f(-delta_x, delta_y)); // FIXME: 
Inversion should be configurable
           }
 
         // Scrollwheel move
@@ -133,8 +139,15 @@
             while (delta_z != 0)
               {
                 --delta_z;
-                //send_key_event(CL_MOUSE_WHEEL_DOWN, true);
-                //send_key_event(CL_MOUSE_WHEEL_DOWN, false);
+
+                std::cout << "Wheel Down" << std::endl;
+                for(std::vector<Button*>::iterator j = 
button_bindings[5].begin();
+                    j != button_bindings[5].end(); ++j)
+                  {
+                    (*j)->set_state(BUTTON_PRESSED);
+                    (*j)->set_state(BUTTON_RELEASED);
+                  }
+
               }
           } 
         else if (delta_z < 0)
@@ -142,8 +155,14 @@
             while (delta_z != 0)
               {
                 ++delta_z;
-                //send_key_event(CL_MOUSE_WHEEL_UP, true);
-                //send_key_event(CL_MOUSE_WHEEL_UP, false);
+
+                std::cout << "Wheel Up" << std::endl;
+                for(std::vector<Button*>::iterator j = 
button_bindings[6].begin();
+                    j != button_bindings[6].end(); ++j)
+                  {
+                    (*j)->set_state(BUTTON_PRESSED);
+                    (*j)->set_state(BUTTON_RELEASED);
+                  }
               }
           }
 
@@ -160,6 +179,8 @@
           {
             if (new_state[i] != buttons[i])
               {
+                std::cout << "Button: " << i << std::endl;
+
                 buttons[i] = new_state[i];
 
                 for(std::vector<Button*>::iterator j = 
button_bindings[i].begin();
@@ -265,6 +286,38 @@
     }
 }
 
+Scroller*
+USBMouseDriver::create_scroller(const FileReader& reader, Control* parent)
+{
+  if (reader.get_name() == "usbmouse:scroller")
+    {
+      std::string device;
+      if (reader.read_string("device", device))
+        {
+          USBMouse* mouse = get_mouse(device);
+          if (mouse)
+            {
+              Scroller* scroller = new Scroller(parent);
+              mouse->add_listener(scroller);
+              return scroller;
+            }
+          else
+            {
+              return 0;
+            }
+        }
+      else
+        {
+          std::cout << "USBMouseDriver: 'device' entry is missing" << 
std::endl;
+          return 0;
+        }
+    }
+  else
+    {
+      return 0;
+    }
+}
+
 USBMouse*
 USBMouseDriver::get_mouse(const std::string& device)
 {

Modified: trunk/pingus/src/input/usbmouse_driver.hpp
===================================================================
--- trunk/pingus/src/input/usbmouse_driver.hpp  2007-09-02 16:09:13 UTC (rev 
3065)
+++ trunk/pingus/src/input/usbmouse_driver.hpp  2007-09-02 17:20:57 UTC (rev 
3066)
@@ -47,7 +47,7 @@
   
   Button*   create_button  (const FileReader& reader, Control* parent);
   Axis*     create_axis    (const FileReader& reader, Control* parent) { 
return 0; } 
-  Scroller* create_scroller(const FileReader& reader, Control* parent) { 
return 0; }
+  Scroller* create_scroller(const FileReader& reader, Control* parent);
   Pointer*  create_pointer (const FileReader& reader, Control* parent);
 
 private:





reply via email to

[Prev in Thread] Current Thread [Next in Thread]