1073 {
1074 if (blendType == LINEARBLEND_NOWRAP) {
1075 index =
map8(index, 0, 239);
1076
1077 }
1078
1079
1081 fl::u8 lo4 = index & 0x0F;
1082
1083
1084 const CHSV *entry = &(pal[0]) + hi4;
1085
1086 fl::u8 hue1 = entry->hue;
1087 fl::u8 sat1 = entry->sat;
1088 fl::u8 val1 = entry->val;
1089
1091
1093
1094 if (hi4 == 15) {
1095 entry = &(pal[0]);
1096 } else {
1097 ++entry;
1098 }
1099
1102
1103 fl::u8 hue2 = entry->hue;
1104 fl::u8 sat2 = entry->sat;
1105 fl::u8 val2 = entry->val;
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118 if (sat1 == 0 || val1 == 0) {
1119 hue1 = hue2;
1120 }
1121
1122
1123
1124 if (sat2 == 0 || val2 == 0) {
1125 hue2 = hue1;
1126 }
1127
1128 sat1 = scale8_LEAVING_R1_DIRTY(sat1, f1);
1129 val1 = scale8_LEAVING_R1_DIRTY(val1, f1);
1130
1131 sat2 = scale8_LEAVING_R1_DIRTY(sat2, f2);
1132 val2 = scale8_LEAVING_R1_DIRTY(val2, f2);
1133
1134
1135
1136
1137 sat1 += sat2;
1138 val1 += val2;
1139
1141 if (deltaHue & 0x80) {
1142
1143 hue1 -= scale8(256 - deltaHue, f2);
1144 } else {
1145
1146 hue1 += scale8(deltaHue, f2);
1147 }
1148
1149 cleanup_R1();
1150 }
1151
1154 }
1155
1156 return CHSV(hue1, sat1, val1);
1157}
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.