summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2020-08-05 15:11:06 +1000
committerDrashna Jael're <drashna@live.com>2020-09-30 03:19:05 -0700
commit28947d5f54c22a57f6080332276b5dab29c76546 (patch)
treecda6dac806be93499df21cbfcfb17e6ae99d2971
parent9d4cbcd81e0278786b3663a08d6a736fcbd705bf (diff)
Add support for hsv->rgb conversion without using CIE curve. (#9856)
* Add support for hsv->rgb conversion without using CIE curve. * Modify anavi/macropad8 to disable unicode (was unused), otherwise firmware size is too large.
-rw-r--r--quantum/color.c26
-rw-r--r--quantum/color.h2
2 files changed, 24 insertions, 4 deletions
diff --git a/quantum/color.c b/quantum/color.c
index a5977e8ee2..3cb8a1a2ca 100644
--- a/quantum/color.c
+++ b/quantum/color.c
@@ -18,14 +18,20 @@
#include "led_tables.h"
#include "progmem.h"
-RGB hsv_to_rgb(HSV hsv) {
+RGB hsv_to_rgb_impl(HSV hsv, bool use_cie) {
RGB rgb;
uint8_t region, remainder, p, q, t;
uint16_t h, s, v;
if (hsv.s == 0) {
#ifdef USE_CIE1931_CURVE
- rgb.r = rgb.g = rgb.b = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
+ if (use_cie) {
+ 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;
+ }
#else
rgb.r = hsv.v;
rgb.g = hsv.v;
@@ -37,7 +43,11 @@ RGB hsv_to_rgb(HSV hsv) {
h = hsv.h;
s = hsv.s;
#ifdef USE_CIE1931_CURVE
- v = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
+ if (use_cie) {
+ v = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
+ } else {
+ v = hsv.v;
+ }
#else
v = hsv.v;
#endif
@@ -87,6 +97,16 @@ RGB hsv_to_rgb(HSV hsv) {
}
+RGB hsv_to_rgb(HSV hsv) {
+#ifdef USE_CIE1931_CURVE
+ return hsv_to_rgb_impl(hsv, true);
+#else
+ return hsv_to_rgb_impl(hsv, false);
+#endif
+}
+
+RGB hsv_to_rgb_nocie(HSV hsv) { return hsv_to_rgb_impl(hsv, false); }
+
#ifdef RGBW
# ifndef MIN
# define MIN(a, b) ((a) < (b) ? (a) : (b))
diff --git a/quantum/color.h b/quantum/color.h
index 8fe671b93d..44caa552fa 100644
--- a/quantum/color.h
+++ b/quantum/color.h
@@ -64,7 +64,7 @@ typedef struct PACKED {
#endif
RGB hsv_to_rgb(HSV hsv);
-
+RGB hsv_to_rgb_nocie(HSV hsv);
#ifdef RGBW
void convert_rgb_to_rgbw(LED_TYPE *led);
#endif