try just removing all PLATFORM_WINDOWS conditionals in ipmidi code to see if it will...
[ardour.git] / libs / surfaces / mackie / pot.cc
index 838753bf31a0ef35eb101454105771f63c6aac66..3ac991116f2153aa19982d1c8ecd5232015dca99 100644 (file)
@@ -22,6 +22,7 @@
 #include "surface.h"
 #include "control_group.h"
 
+using namespace ArdourSurface;
 using namespace Mackie;
 
 int const Pot::External = 0x2e; /* specific ID for "vpot" representing external control */
@@ -44,14 +45,23 @@ Pot::set (float val, bool onoff, Mode mode)
 
        // center on if val is "very close" to 0.50
        MIDI::byte msg =  (val > 0.48 && val < 0.58 ? 1 : 0) << 6;
-       
+
        // Pot/LED mode
        msg |=  (mode << 4);
-       
+
+       /*
+        * Even though a width value may be negative, there is
+        * technically still width there, it is just reversed,
+        * so make sure to show it on the LED ring appropriately.
+        */
+       if (val < 0){
+         val = val * -1;
+       }
+
        // val, but only if off hasn't explicitly been set
        if (onoff) {
                if (mode == spread) {
-                       msg |=  (lrintf (val * 6) + 1) & 0x0f; // 0b00001111
+                       msg |=  (lrintf (val * 6)) & 0x0f; // 0b00001111
                } else {
                        msg |=  (lrintf (val * 10.0) + 1) & 0x0f; // 0b00001111
                }
@@ -63,4 +73,4 @@ Pot::set (float val, bool onoff, Mode mode)
        return MidiByteArray (3, 0xb0, 0x20 + id(), msg);
 
 }
-       
+