1074 {
1075 if (blendType == LINEARBLEND_NOWRAP) {
1076 index =
map8(index, 0, 239);
1077
1078 }
1079
1080
1082 fl::u8 lo4 = index & 0x0F;
1083
1084
1085 const CHSV *entry = &(pal[0]) + hi4;
1086
1087 fl::u8 hue1 = entry->hue;
1088 fl::u8 sat1 = entry->sat;
1089 fl::u8 val1 = entry->val;
1090
1092
1094
1095 if (hi4 == 15) {
1096 entry = &(pal[0]);
1097 } else {
1098 ++entry;
1099 }
1100
1103
1104 fl::u8 hue2 = entry->hue;
1105 fl::u8 sat2 = entry->sat;
1106 fl::u8 val2 = entry->val;
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119 if (sat1 == 0 || val1 == 0) {
1120 hue1 = hue2;
1121 }
1122
1123
1124
1125 if (sat2 == 0 || val2 == 0) {
1126 hue2 = hue1;
1127 }
1128
1129 sat1 = scale8_LEAVING_R1_DIRTY(sat1, f1);
1130 val1 = scale8_LEAVING_R1_DIRTY(val1, f1);
1131
1132 sat2 = scale8_LEAVING_R1_DIRTY(sat2, f2);
1133 val2 = scale8_LEAVING_R1_DIRTY(val2, f2);
1134
1135
1136
1137
1138 sat1 += sat2;
1139 val1 += val2;
1140
1142 if (deltaHue & 0x80) {
1143
1144 hue1 -= scale8(256 - deltaHue, f2);
1145 } else {
1146
1147 hue1 += scale8(deltaHue, f2);
1148 }
1149
1150 cleanup_R1();
1151 }
1152
1155 }
1156
1157 return CHSV(hue1, sat1, val1);
1158}
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
CRGB blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2) FL_NO_EXCEPT
LIB8STATIC fl::u8 map8(fl::u8 in, fl::u8 rangeStart, fl::u8 rangeEnd) FL_NO_EXCEPT
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) FL_NO_EXCEPT
Helper function to divide a number by 16, aka four logical shift right (LSR)'s.