diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 3cf349ca..427348d8 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -114,8 +114,8 @@ class Animated_Staircase : public Usermod { // We may need to copy mode and colors from segment 0 to make sure // changes are propagated even when the config is changed during a wipe - // segments->mode = mainsegment.mode; - // segments->colors[0] = mainsegment.colors[0]; + // seg.setMode(mainsegment.mode); + // seg.setColor(0, mainsegment.colors[0]); } else { seg.setOption(SEG_OPTION_ON, false); } diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h index 18435ca3..85ed7ff3 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h @@ -531,11 +531,11 @@ public: for (byte i=0; i= 0) speed = sOpt; + sOpt = extractModeDefaults(fx, "ix"); if (sOpt >= 0) intensity = sOpt; + sOpt = extractModeDefaults(fx, "c1"); if (sOpt >= 0) custom1 = sOpt; + sOpt = extractModeDefaults(fx, "c2"); if (sOpt >= 0) custom2 = sOpt; + sOpt = extractModeDefaults(fx, "c3"); if (sOpt >= 0) custom3 = sOpt; + sOpt = extractModeDefaults(fx, "mp12"); if (sOpt >= 0) map1D2D = constrain(sOpt, 0, 7); + sOpt = extractModeDefaults(fx, "ssim"); if (sOpt >= 0) soundSim = constrain(sOpt, 0, 7); + sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) reverse = (bool)sOpt; + sOpt = extractModeDefaults(fx, "mi"); if (sOpt >= 0) mirror = (bool)sOpt; // NOTE: setting this option is a risky business + sOpt = extractModeDefaults(fx, "rY"); if (sOpt >= 0) reverse_y = (bool)sOpt; + sOpt = extractModeDefaults(fx, "mY"); if (sOpt >= 0) mirror_y = (bool)sOpt; // NOTE: setting this option is a risky business + sOpt = extractModeDefaults(fx, "pal"); + if (sOpt >= 0 && (size_t)sOpt < strip.getPaletteCount() + strip.customPalettes.size()) { + if (sOpt != palette) { + palette = sOpt; + } + } + } + } + } +} + +void Segment::setPalette(uint8_t pal) { + if (pal < strip.getPaletteCount()) { + if (pal != palette) { + if (strip.paletteFade) startTransition(strip.getTransition()); + palette = pal; + } + } +} + // 2D matrix uint16_t Segment::virtualWidth() const { uint16_t groupLen = groupLength(); diff --git a/wled00/json.cpp b/wled00/json.cpp index 4b49d104..9f5acdc7 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -174,47 +174,16 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) byte fx = seg.mode; if (getVal(elem["fx"], &fx, 0, strip.getModeCount())) { //load effect ('r' random, '~' inc/dec, 0-255 exact value) if (!presetId && currentPlaylist>=0) unloadPlaylist(); - if (fx != seg.mode) { - seg.startTransition(strip.getTransition()); // set effect transitions - //seg.markForReset(); - seg.mode = fx; - } - } - - // load default values from effect string - if (elem[F("fxdef")]) - { - int16_t sOpt; - sOpt = extractModeDefaults(fx, "sx"); if (sOpt >= 0) seg.speed = sOpt; - sOpt = extractModeDefaults(fx, "ix"); if (sOpt >= 0) seg.intensity = sOpt; - sOpt = extractModeDefaults(fx, "c1"); if (sOpt >= 0) seg.custom1 = sOpt; - sOpt = extractModeDefaults(fx, "c2"); if (sOpt >= 0) seg.custom2 = sOpt; - sOpt = extractModeDefaults(fx, "c3"); if (sOpt >= 0) seg.custom3 = sOpt; - sOpt = extractModeDefaults(fx, "mp12"); if (sOpt >= 0) seg.map1D2D = constrain(sOpt, 0, 7); - sOpt = extractModeDefaults(fx, "ssim"); if (sOpt >= 0) seg.soundSim = constrain(sOpt, 0, 7); - sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) seg.reverse = (bool)sOpt; - sOpt = extractModeDefaults(fx, "mi"); if (sOpt >= 0) seg.mirror = (bool)sOpt; // NOTE: setting this option is a risky business - sOpt = extractModeDefaults(fx, "rY"); if (sOpt >= 0) seg.reverse_y = (bool)sOpt; - sOpt = extractModeDefaults(fx, "mY"); if (sOpt >= 0) seg.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.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition()); - seg.palette = sOpt; - } - } + if (fx != seg.mode) seg.setMode(fx, elem[F("fxdef")]); } //getVal also supports inc/decrementing and random getVal(elem["sx"], &seg.speed); getVal(elem["ix"], &seg.intensity); + uint8_t pal = seg.palette; - if (getVal(elem["pal"], &pal, 1, strip.getPaletteCount())) { - if (pal != seg.palette) { - if (strip.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition()); - seg.palette = pal; - } - } + if (getVal(elem["pal"], &pal, 1, strip.getPaletteCount())) seg.setPalette(pal); + getVal(elem["c1"], &seg.custom1); getVal(elem["c2"], &seg.custom2); uint8_t cust3 = seg.custom3; diff --git a/wled00/set.cpp b/wled00/set.cpp index daaf4271..235f8985 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -888,17 +888,10 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) { Segment& seg = strip.getSegment(i); if (i != selectedSeg && (singleSegment || !seg.isActive() || !seg.isSelected())) continue; // skip non main segments if not applying to all - if (fxModeChanged) { - seg.startTransition(strip.getTransition()); - seg.mode = effectIn; - // TODO: we should load defaults here as well - } + if (fxModeChanged) seg.setMode(effectIn, req.indexOf(F("FXD="))>0); // apply defaults if FXD= is specified if (speedChanged) seg.speed = speedIn; if (intensityChanged) seg.intensity = intensityIn; - if (paletteChanged) { - if (strip.paletteBlend) seg.startTransition(strip.getTransition()); - seg.palette = paletteIn; - } + if (paletteChanged) seg.setPalette(paletteIn); } //set advanced overlay