]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - quantum/color.c
Fix enables for Haptic Feedback (#6707)
[qmk_firmware.git] / quantum / color.c
index c49877592eceb255b82cbac6fd77aef7f26c4d1c..847129736d521695153d6ab6a721f6510bdd0077 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-
 #include "color.h"
 #include "led_tables.h"
 #include "progmem.h"
 
-RGB hsv_to_rgb( HSV hsv )
-{
-       RGB rgb;
-       uint8_t region, p, q, t;
-       uint16_t h, s, v, remainder;
+RGB hsv_to_rgb(HSV hsv) {
+    RGB      rgb;
+    uint8_t  region, remainder, p, q, t;
+    uint16_t h, s, v;
 
-       if ( hsv.s == 0 )
-       {
-               rgb.r = hsv.v;
-               rgb.g = hsv.v;
-               rgb.b = hsv.v;
-               return rgb;
-       }
+    if (hsv.s == 0) {
+#ifdef USE_CIE1931_CURVE
+        rgb.r = rgb.g = rgb.b = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
+#else
+        rgb.r = hsv.v;
+        rgb.g = hsv.v;
+        rgb.b = hsv.v;
+#endif
+        return rgb;
+    }
 
-       h = hsv.h;
-       s = hsv.s;
-       v = hsv.v;
+    h = hsv.h;
+    s = hsv.s;
+    v = hsv.v;
 
-       region = h / 43;
-       remainder = (h - (region * 43)) * 6;
+    region    = h * 6 / 255;
+    remainder = (h * 2 - region * 85) * 3;
 
-       p = (v * (255 - s)) >> 8;
-       q = (v * (255 - ((s * remainder) >> 8))) >> 8;
-       t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
+    p = (v * (255 - s)) >> 8;
+    q = (v * (255 - ((s * remainder) >> 8))) >> 8;
+    t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
 
-       switch ( region )
-       {
-               case 0:
-                       rgb.r = v;
-                       rgb.g = t;
-                       rgb.b = p;
-                       break;
-               case 1:
-                       rgb.r = q;
-                       rgb.g = v;
-                       rgb.b = p;
-                       break;
-               case 2:
-                       rgb.r = p;
-                       rgb.g = v;
-                       rgb.b = t;
-                       break;
-               case 3:
-                       rgb.r = p;
-                       rgb.g = q;
-                       rgb.b = v;
-                       break;
-               case 4:
-                       rgb.r = t;
-                       rgb.g = p;
-                       rgb.b = v;
-                       break;
-               default:
-                       rgb.r = v;
-                       rgb.g = p;
-                       rgb.b = q;
-                       break;
-       }
+    switch (region) {
+        case 6:
+        case 0:
+            rgb.r = v;
+            rgb.g = t;
+            rgb.b = p;
+            break;
+        case 1:
+            rgb.r = q;
+            rgb.g = v;
+            rgb.b = p;
+            break;
+        case 2:
+            rgb.r = p;
+            rgb.g = v;
+            rgb.b = t;
+            break;
+        case 3:
+            rgb.r = p;
+            rgb.g = q;
+            rgb.b = v;
+            break;
+        case 4:
+            rgb.r = t;
+            rgb.g = p;
+            rgb.b = v;
+            break;
+        default:
+            rgb.r = v;
+            rgb.g = p;
+            rgb.b = q;
+            break;
+    }
 
 #ifdef USE_CIE1931_CURVE
-       rgb.r = pgm_read_byte( &CIE1931_CURVE[rgb.r] );
-       rgb.g = pgm_read_byte( &CIE1931_CURVE[rgb.g] );
-       rgb.b = pgm_read_byte( &CIE1931_CURVE[rgb.b] );
+    rgb.r = pgm_read_byte(&CIE1931_CURVE[rgb.r]);
+    rgb.g = pgm_read_byte(&CIE1931_CURVE[rgb.g]);
+    rgb.b = pgm_read_byte(&CIE1931_CURVE[rgb.b]);
 #endif
 
-       return rgb;
+    return rgb;
 }
-