diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ESP32-VirtualMatrixPanel-I2S-DMA.h | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h index 0520c70..411e7e9 100644 --- a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h @@ -131,7 +131,7 @@ public: void flipDMABuffer() { display->flipDMABuffer(); } void drawDisplayTest(); - void setRotate(bool rotate); + void setRotate(int rotate); void setPhysicalPanelScanRate(PANEL_SCAN_RATE rate); @@ -155,7 +155,7 @@ private: int16_t dmaResX; // The width of the chain in pixels (as the DMA engine sees it) - bool _rotate = false; + int _rotate = 0; }; // end Class header @@ -172,12 +172,34 @@ inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t &virt_x, int16_t &vir return coords; } + // Do we want to rotate? - if (_rotate) - { + switch (_rotate) { + case 0: //no rotation, do nothing + break; + + case (1): //90 degree rotation + { int16_t temp_x = virt_x; virt_x = virt_y; virt_y = virtualResY - 1 - temp_x; + break; + } + + case (2): //180 rotation + { + virt_x = virtualResX - 1 - virt_x; + virt_y = virtualResY - 1 - virt_y; + break; + } + + case (3): //270 rotation + { + int16_t temp_x = virt_x; + virt_x = virtualResX - 1 - virt_y; + virt_y = temp_x; + break; + } } int row = (virt_y / panelResY); // 0 indexed @@ -404,21 +426,10 @@ inline void VirtualMatrixPanel::fillScreen(CRGB color) } #endif -inline void VirtualMatrixPanel::setRotate(bool rotate) +inline void VirtualMatrixPanel::setRotate(int rotate) { + if(rotate < 4 && rotate >= 0) _rotate = rotate; - -#ifndef NO_GFX - // We don't support rotation by degrees. - if (rotate) - { - setRotation(1); - } - else - { - setRotation(0); - } -#endif } inline void VirtualMatrixPanel::setPhysicalPanelScanRate(PANEL_SCAN_RATE rate) |
