mirror of
https://github.com/wled/WLED.git
synced 2025-04-24 14:57:18 +00:00
Segment width & height fix.
Auto 2D segment.
This commit is contained in:
parent
f0d36fd769
commit
cf189663a7
@ -134,10 +134,8 @@ void IRAM_ATTR WS2812FX::setPixelColorXY(uint16_t x, uint16_t y, byte r, byte g,
|
||||
}
|
||||
uint32_t col = RGBW32(r, g, b, w);
|
||||
|
||||
uint16_t width = _segments[segIdx].virtualWidth(); // segment width in logical pixels
|
||||
uint16_t height = _segments[segIdx].virtualHeight(); // segment height in logical pixels
|
||||
if (_segments[segIdx].options & MIRROR ) width = (width + 1) /2; // divide by 2 if mirror, leave at least a single LED
|
||||
if (_segments[segIdx].options & MIRROR_Y_2D) height = (height + 1) /2; // divide by 2 if mirror, leave at least a single LED
|
||||
uint16_t width = _segments[segIdx].virtualWidth(); // segment width in logical pixels (includes mirror)
|
||||
uint16_t height = _segments[segIdx].virtualHeight(); // segment height in logical pixels (includes mirror)
|
||||
if (_segments[segIdx].options & TRANSPOSED ) { uint16_t t = x; x = y; y = t; } // swap X & Y if segment transposed
|
||||
|
||||
x *= _segments[segIdx].groupLength();
|
||||
@ -157,12 +155,12 @@ void IRAM_ATTR WS2812FX::setPixelColorXY(uint16_t x, uint16_t y, byte r, byte g,
|
||||
busses.setPixelColor(index, col);
|
||||
|
||||
if (_segments[segIdx].options & MIRROR) { //set the corresponding horizontally mirrored pixel
|
||||
index = XY(_segments[segIdx].stop - xX - 1, yY, segIdx);
|
||||
index = XY(_segments[segIdx].width() - xX - 1, yY, segIdx);
|
||||
if (index < customMappingSize) index = customMappingTable[index];
|
||||
busses.setPixelColor(index, col);
|
||||
}
|
||||
if (_segments[segIdx].options & MIRROR_Y_2D) { //set the corresponding vertically mirrored pixel
|
||||
index = XY(xX, _segments[segIdx].stopY - yY - 1, segIdx);
|
||||
index = XY(xX, _segments[segIdx].height() - yY - 1, segIdx);
|
||||
if (index < customMappingSize) index = customMappingTable[index];
|
||||
busses.setPixelColor(index, col);
|
||||
}
|
||||
@ -176,8 +174,6 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y)
|
||||
uint8_t segIdx = _segment_index;
|
||||
uint16_t width = _segments[segIdx].virtualWidth(); // segment width in logical pixels
|
||||
uint16_t height = _segments[segIdx].virtualHeight(); // segment height in logical pixels
|
||||
if (_segments[segIdx].options & MIRROR ) width = (width + 1) /2; // divide by 2 if mirror, leave at least a single LED
|
||||
if (_segments[segIdx].options & MIRROR_Y_2D) height = (height + 1) /2; // divide by 2 if mirror, leave at least a single LED
|
||||
if (_segments[segIdx].options & TRANSPOSED ) { uint16_t t = x; x = y; y = t; } // swap X & Y if segment transposed
|
||||
|
||||
x *= _segments[segIdx].groupLength();
|
||||
|
@ -733,7 +733,18 @@ void WS2812FX::resetSegments() {
|
||||
}
|
||||
|
||||
void WS2812FX::makeAutoSegments(bool forceReset) {
|
||||
if (autoSegments) { //make one segment per bus
|
||||
if (isMatrix) {
|
||||
// only create 1 2D segment
|
||||
uint8_t mainSeg = getMainSegmentId();
|
||||
if (forceReset) {
|
||||
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++) {
|
||||
setSegment(i, 0, 0);
|
||||
}
|
||||
}
|
||||
if (getActiveSegmentsNum() < 2) {
|
||||
setSegment(mainSeg, 0, matrixWidth, 1, 0, 0, 0, matrixHeight);
|
||||
}
|
||||
} else if (autoSegments) { //make one segment per bus
|
||||
uint16_t segStarts[MAX_NUM_SEGMENTS] = {0};
|
||||
uint16_t segStops [MAX_NUM_SEGMENTS] = {0};
|
||||
uint8_t s = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user