diff --git a/main/displays/menus/debugmenu.cpp b/main/displays/menus/debugmenu.cpp index e12639d..96def16 100644 --- a/main/displays/menus/debugmenu.cpp +++ b/main/displays/menus/debugmenu.cpp @@ -19,6 +19,7 @@ #include "esptexthelpers.h" #include "accessors/settingsaccessors.h" #include "displays/qrcodedebug.h" +#include "displays/xydebugdisplay.h" #include "displays/menus/taskmanagermenu.h" #ifdef FEATURE_CAN #include "displays/menus/candebugmenu.h" @@ -38,6 +39,7 @@ constexpr char TEXT_TASKMANAGER[] = "Taskmanager"; constexpr char TEXT_CANDEBUG[] = "CAN Debug"; #endif constexpr char TEXT_QRCODE_DEBUG[] = "QR Debug"; +constexpr char TEXT_XY_DEBUG[] = "XY Debug"; constexpr char TEXT_BATTERYDEBUG[] = "Bat Debug Menu"; constexpr char TEXT_TOGGLECLOUDDEBUG[] = "Cloud Debug"; //constexpr char TEXT_FRONTCOMMAND[] = "Front command"; @@ -67,6 +69,7 @@ DebugMenu::DebugMenu() constructMenuItem, PushScreenAction>>(); #endif constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::battery>>>(); if (configs.feature.udpcloud.isEnabled.value()) { diff --git a/main/displays/xydebugdisplay.cpp b/main/displays/xydebugdisplay.cpp new file mode 100644 index 0000000..53d10c9 --- /dev/null +++ b/main/displays/xydebugdisplay.cpp @@ -0,0 +1,77 @@ +#include "xydebugdisplay.h" + +// 3rdparty lib includes +#include +#include +#include + +// local includes +#include "bobbybuttons.h" + +XYDebugDisplay::XYDebugDisplay() : m_labelCoordinates{5, 5} {} + +void XYDebugDisplay::initScreen() +{ + Base::initScreen(); + m_labelCoordinates.start(); +} + +void XYDebugDisplay::redraw() +{ + using namespace espgui; + + Base::redraw(); + m_labelCoordinates.redraw(fmt::format("X: {}, Y: {}", m_current_cursor.x, m_current_cursor.y)); + + if (m_current_cursor.x != m_last_cursor.x || m_current_cursor.y != m_last_cursor.y) + { + tft.fillCircle(m_last_cursor.x, m_last_cursor.y, 2, TFT_BLACK); + tft.fillCircle(m_current_cursor.x, m_current_cursor.y, 2, TFT_WHITE); + + m_last_cursor = m_current_cursor; + } +} + +void XYDebugDisplay::buttonPressed(espgui::Button button) +{ + switch (button) + { + using espgui::Button; + case Button::Left: + case Button::Right: + case Button::Up: + case Button::Down: + espgui::popScreen(); + break; + default:; + } + + switch (BobbyButton(button)) + { + case BobbyButton::Left2: + if (m_current_cursor.x > 0) + { + --m_current_cursor.x; + } + break; + case BobbyButton::Right2: + if (m_current_cursor.x < espgui::tft.width() - 1) + { + ++m_current_cursor.x; + } + break; + case BobbyButton::Up2: + if (m_current_cursor.y > 0) + { + --m_current_cursor.y; + } + break; + case BobbyButton::Down2: + if (m_current_cursor.y < espgui::tft.height() - 1) + { + ++m_current_cursor.y; + } + break; + default:; + } +} diff --git a/main/displays/xydebugdisplay.h b/main/displays/xydebugdisplay.h new file mode 100644 index 0000000..a1d6946 --- /dev/null +++ b/main/displays/xydebugdisplay.h @@ -0,0 +1,29 @@ +#pragma once + +// 3rdparty lib includes +#include + +// local includes +#include "bobbydisplay.h" + +class XYDebugDisplay : public BobbyDisplay +{ + using Base = BobbyDisplay; + +public: + XYDebugDisplay(); + void initScreen() override; + void redraw() override; + + void buttonPressed(espgui::Button button) override; + +private: + typedef struct { + uint8_t x; + uint8_t y; + } cursor_pos_t; + + cursor_pos_t m_current_cursor{0, 0}; + cursor_pos_t m_last_cursor{0, 0}; + espgui::Label m_labelCoordinates; +};