diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index a4cb9c486..cdb8952fe 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -1297,7 +1297,11 @@ void WS2812FX::restartRuntime() { void WS2812FX::resetSegments() { _segments.clear(); // destructs all Segment as part of clearing + #ifndef WLED_DISABLE_2D segment seg = isMatrix ? Segment(0, matrixWidth, 0, matrixHeight) : Segment(0, _length); + #else + segment seg = Segment(0, _length); + #endif _segments.push_back(seg); _mainSegment = 0; /* diff --git a/wled00/json.cpp b/wled00/json.cpp index 1eeebe70b..352b17d90 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -187,6 +187,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) && elem[F("c2")].isNull() && elem[F("c3")].isNull() ) { + int16_t sOpt; + uint8_t tmp = 255; // compatibility mode begin char buf[5]; // dummy buffer for (int i=0; i<5; i++) { @@ -200,21 +202,32 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) } extractModeSlider(fx, i, buf, 4, var); } - extractModeSlider(fx, 255, buf, 4, &seg.palette); + extractModeSlider(fx, 255, buf, 4, &tmp); + if (tmp < strip.getPaletteCount() + strip.customPalettes.size()) { + if (tmp != seg.palette) { + if (strip.paletteBlend && !seg.transitional) seg.startTransition(strip.getTransition()); + seg.palette = tmp; + } + } //end compatibility mode - int16_t sOpt; sOpt = extractModeDefaults(fx, SET_F("sx")); if (sOpt >= 0) seg.speed = sOpt; sOpt = extractModeDefaults(fx, SET_F("ix")); if (sOpt >= 0) seg.intensity = sOpt; sOpt = extractModeDefaults(fx, SET_F("c1")); if (sOpt >= 0) seg.custom1 = sOpt; sOpt = extractModeDefaults(fx, SET_F("c2")); if (sOpt >= 0) seg.custom2 = sOpt; sOpt = extractModeDefaults(fx, SET_F("c3")); if (sOpt >= 0) seg.custom3 = sOpt; - sOpt = extractModeDefaults(fx, "pal"); if (sOpt >= 0 && sOpt < strip.getPaletteCount()) seg.palette = sOpt; sOpt = extractModeDefaults(fx, SET_F("mp12")); if (sOpt >= 0) seg.map1D2D = sOpt & 0x03; sOpt = extractModeDefaults(fx, SET_F("ssim")); if (sOpt >= 0) seg.soundSim = sOpt & 0x07; sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) seg.reverse = (bool)sOpt; // setOption(SEG_OPTION_REVERSED, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("mi")); if (sOpt >= 0) seg.mirror = (bool)sOpt; // setOption(SEG_OPTION_MIRROR, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("rY")); if (sOpt >= 0) seg.reverse_y = (bool)sOpt; // setOption(SEG_OPTION_REVERSED_Y, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("mY")); if (sOpt >= 0) seg.mirror_y = (bool)sOpt; // setOption(SEG_OPTION_MIRROR_Y, (bool)sOpt); // NOTE: setting this option is a risky business + sOpt = extractModeDefaults(fx, "pal"); + if (sOpt >= 0 && sOpt < strip.getPaletteCount() + strip.customPalettes.size()) { + if (sOpt != seg.palette) { + if (strip.paletteBlend && !seg.transitional) seg.startTransition(strip.getTransition()); + seg.palette = sOpt; + } + } } } } @@ -225,7 +238,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) uint8_t pal = seg.palette; if (getVal(elem["pal"], &pal, 1, strip.getPaletteCount())) { if (pal != seg.palette) { - if (strip.paletteBlend) seg.startTransition(strip.getTransition()); + if (strip.paletteBlend && !seg.transitional) seg.startTransition(strip.getTransition()); seg.palette = pal; } }