992 {
993 if (blendType == LINEARBLEND_NOWRAP) {
994 index =
map8(index, 0, 239);
995
996 }
997
998
1000 fl::u8 lo4 = index & 0x0F;
1001
1002
1003 const CHSV *entry = &(pal[0]) + hi4;
1004
1005 fl::u8 hue1 = entry->hue;
1006 fl::u8 sat1 = entry->sat;
1007 fl::u8 val1 = entry->val;
1008
1010
1012
1013 if (hi4 == 15) {
1014 entry = &(pal[0]);
1015 } else {
1016 ++entry;
1017 }
1018
1021
1022 fl::u8 hue2 = entry->hue;
1023 fl::u8 sat2 = entry->sat;
1024 fl::u8 val2 = entry->val;
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037 if (sat1 == 0 || val1 == 0) {
1038 hue1 = hue2;
1039 }
1040
1041
1042
1043 if (sat2 == 0 || val2 == 0) {
1044 hue2 = hue1;
1045 }
1046
1047 sat1 = scale8_LEAVING_R1_DIRTY(sat1, f1);
1048 val1 = scale8_LEAVING_R1_DIRTY(val1, f1);
1049
1050 sat2 = scale8_LEAVING_R1_DIRTY(sat2, f2);
1051 val2 = scale8_LEAVING_R1_DIRTY(val2, f2);
1052
1053
1054
1055
1056 sat1 += sat2;
1057 val1 += val2;
1058
1060 if (deltaHue & 0x80) {
1061
1062 hue1 -= scale8(256 - deltaHue, f2);
1063 } else {
1064
1065 hue1 += scale8(deltaHue, f2);
1066 }
1067
1068 cleanup_R1();
1069 }
1070
1073 }
1074
1075 return CHSV(hue1, sat1, val1);
1076}
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
CRGB blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2)
LIB8STATIC fl::u8 map8(fl::u8 in, fl::u8 rangeStart, fl::u8 rangeEnd)
Map from one full-range 8-bit value into a narrower range of 8-bit values, possibly a range of hues.
fl::u8 lsrX4(fl::u8 dividend)
Helper function to divide a number by 16, aka four logical shift right (LSR)'s.