refactor resetSegments to work properly
add boundsOnly
This commit is contained in:
@@ -731,7 +731,7 @@ class WS2812FX { // 96 bytes
|
||||
setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t grouping = 1, uint8_t spacing = 0, uint16_t offset = UINT16_MAX, uint16_t startY=0, uint16_t stopY=1),
|
||||
setMainSegmentId(uint8_t n),
|
||||
restartRuntime(),
|
||||
resetSegments(),
|
||||
resetSegments(bool boundsOnly = false), //WLEDMM add boundsOnly
|
||||
makeAutoSegments(bool forceReset = false),
|
||||
fixInvalidSegments(),
|
||||
setPixelColor(int n, uint32_t c),
|
||||
|
||||
@@ -68,7 +68,7 @@ void WS2812FX::setUpMatrix(bool reset) {
|
||||
Segment::maxHeight = 1;
|
||||
panels = 0;
|
||||
panel.clear(); // release memory allocated by panels
|
||||
resetSegments();
|
||||
resetSegments(true); //WLEDMM bounds only
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -131,13 +131,7 @@ void WS2812FX::setUpMatrix(bool reset) {
|
||||
Segment::maxWidth = _length;
|
||||
Segment::maxHeight = 1;
|
||||
}
|
||||
if (reset) //resetSegments(); //WLEDMM: only if reset, and only update width and height, keep the fx in place
|
||||
for (segment &seg : _segments) {
|
||||
seg.start = 0;
|
||||
seg.stop = Segment::maxWidth;
|
||||
seg.startY = 0;
|
||||
seg.stopY = Segment::maxHeight;
|
||||
}
|
||||
//WLEDMM: no resetSegments here, only do it in set.cpp/handleSettingsSet
|
||||
}
|
||||
#else
|
||||
isMatrix = false; // no matter what config says
|
||||
|
||||
@@ -1740,15 +1740,30 @@ void WS2812FX::restartRuntime() {
|
||||
for (segment &seg : _segments) seg.markForReset();
|
||||
}
|
||||
|
||||
void WS2812FX::resetSegments() {
|
||||
_segments.clear(); // destructs all Segment as part of clearing
|
||||
#ifndef WLED_DISABLE_2D
|
||||
segment seg = isMatrix ? Segment(0, Segment::maxWidth, 0, Segment::maxHeight) : Segment(0, _length);
|
||||
#else
|
||||
segment seg = Segment(0, _length);
|
||||
#endif
|
||||
_segments.push_back(seg);
|
||||
_mainSegment = 0;
|
||||
void WS2812FX::resetSegments(bool boundsOnly) { //WLEDMM add boundsonly
|
||||
if (!boundsOnly) {
|
||||
_segments.clear(); // destructs all Segment as part of clearing
|
||||
#ifndef WLED_DISABLE_2D
|
||||
segment seg = isMatrix ? Segment(0, Segment::maxWidth, 0, Segment::maxHeight) : Segment(0, _length);
|
||||
#else
|
||||
segment seg = Segment(0, _length);
|
||||
#endif
|
||||
_segments.push_back(seg);
|
||||
_mainSegment = 0;
|
||||
} else { //WLEDMM boundsonly
|
||||
for (segment &seg : _segments) {
|
||||
#ifndef WLED_DISABLE_2D
|
||||
seg.start = 0;
|
||||
seg.stop = Segment::maxWidth;
|
||||
seg.startY = 0;
|
||||
seg.stopY = Segment::maxHeight;
|
||||
#else
|
||||
seg.start = 0;
|
||||
seg.stop = _length;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void WS2812FX::makeAutoSegments(bool forceReset) {
|
||||
|
||||
@@ -714,6 +714,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
||||
Segment::maxHeight = 1;
|
||||
}
|
||||
strip.setUpMatrix(); // will check limits
|
||||
strip.resetSegments(true); //WLEDMM reset segments, boundsOnly!!
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
// version code in format yymmddb (b = daily build)
|
||||
#define VERSION 2302120
|
||||
#define VERSION 2302130
|
||||
|
||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||
//#define WLED_USE_MY_CONFIG
|
||||
@@ -681,7 +681,7 @@ WLED_GLOBAL BusManager busses _INIT(BusManager());
|
||||
WLED_GLOBAL WS2812FX strip _INIT(WS2812FX());
|
||||
WLED_GLOBAL BusConfig* busConfigs[WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES] _INIT({nullptr}); //temporary, to remember values from network callback until after
|
||||
WLED_GLOBAL bool doInitBusses _INIT(false);
|
||||
WLED_GLOBAL bool loadLedmap _INIT(false);
|
||||
WLED_GLOBAL bool loadLedmap _INIT(false); //WLEDMM use as bool and use loadedLedmap for Nr
|
||||
WLED_GLOBAL uint8_t loadedLedmap _INIT(0); //WLEDMM default 0
|
||||
WLED_GLOBAL uint16_t ledMaps _INIT(0); // bitfield representation of available ledmaps
|
||||
|
||||
|
||||
Reference in New Issue
Block a user