Added icon widget
This commit is contained in:
@ -53,6 +53,7 @@ set(headers
|
|||||||
src/visibleinterface.h
|
src/visibleinterface.h
|
||||||
src/widgets/centeredlabel.h
|
src/widgets/centeredlabel.h
|
||||||
src/widgets/graph.h
|
src/widgets/graph.h
|
||||||
|
src/widgets/iconwidget.h
|
||||||
src/widgets/label.h
|
src/widgets/label.h
|
||||||
src/widgets/progressbar.h
|
src/widgets/progressbar.h
|
||||||
src/widgets/reverseprogressbar.h
|
src/widgets/reverseprogressbar.h
|
||||||
@ -88,6 +89,7 @@ set(sources
|
|||||||
src/icons/checked_grey.cpp
|
src/icons/checked_grey.cpp
|
||||||
src/icons/unchecked_grey.cpp
|
src/icons/unchecked_grey.cpp
|
||||||
src/widgets/centeredlabel.cpp
|
src/widgets/centeredlabel.cpp
|
||||||
|
src/widgets/iconwidget.cpp
|
||||||
src/widgets/label.cpp
|
src/widgets/label.cpp
|
||||||
src/widgets/progressbar.cpp
|
src/widgets/progressbar.cpp
|
||||||
src/widgets/reverseprogressbar.cpp
|
src/widgets/reverseprogressbar.cpp
|
||||||
|
68
src/widgets/iconwidget.cpp
Normal file
68
src/widgets/iconwidget.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include "iconwidget.h"
|
||||||
|
|
||||||
|
namespace espgui {
|
||||||
|
void IconWidget::start(TftInterface &tft)
|
||||||
|
{
|
||||||
|
m_lastIcon = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IconWidget::start(TftInterface &tft, const int32_t iconWidth, const int32_t iconHeight, const uint16_t *icon)
|
||||||
|
{
|
||||||
|
if (m_iconWidth != iconWidth || m_iconHeight != iconHeight)
|
||||||
|
{
|
||||||
|
ESP_LOGE(TAG, "Icon size mismatch: %dx%d vs %ldx%ld", m_iconWidth, m_iconHeight, iconWidth, iconHeight);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_lastIcon = icon;
|
||||||
|
|
||||||
|
if (icon)
|
||||||
|
tft.pushImage(m_x, m_y, m_iconWidth, m_iconHeight, icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IconWidget::redraw(TftInterface &tft, const int32_t iconWidth, const int32_t iconHeight, const uint16_t *icon, uint16_t bgcolor, bool forceRedraw)
|
||||||
|
{
|
||||||
|
if (m_iconWidth != iconWidth || m_iconHeight != iconHeight)
|
||||||
|
{
|
||||||
|
ESP_LOGE(TAG, "Icon size mismatch: %dx%d vs %ldx%ld", m_iconWidth, m_iconHeight, iconWidth, iconHeight);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (forceRedraw || m_lastIcon != icon)
|
||||||
|
{
|
||||||
|
if (icon)
|
||||||
|
tft.pushImage(m_x, m_y, m_iconWidth, m_iconHeight, icon);
|
||||||
|
else if (m_lastIcon)
|
||||||
|
tft.fillRect(m_x, m_y, m_iconWidth, m_iconHeight, bgcolor);
|
||||||
|
|
||||||
|
m_lastIcon = icon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IconWidget::redraw(TftInterface &tft, const int32_t iconWidth, const int32_t iconHeight, const uint16_t *icon, bool forceRedraw)
|
||||||
|
{
|
||||||
|
redraw(tft, iconWidth, iconHeight, icon, m_bgcolor, forceRedraw);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IconWidget::clear(TftInterface &tft, uint16_t bgcolor)
|
||||||
|
{
|
||||||
|
if (m_lastIcon)
|
||||||
|
tft.fillRect(m_x, m_y, m_iconWidth, m_iconHeight, bgcolor);
|
||||||
|
|
||||||
|
m_lastIcon = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IconWidget::clear(TftInterface &tft)
|
||||||
|
{
|
||||||
|
clear(tft, m_bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
IconWidget::IconWidget(int x, int y, int iconWidth, int iconHeight, uint16_t bgcolor):
|
||||||
|
m_x{x},
|
||||||
|
m_y{y},
|
||||||
|
m_iconWidth{iconWidth},
|
||||||
|
m_iconHeight{iconHeight},
|
||||||
|
m_bgcolor{bgcolor},
|
||||||
|
m_lastIcon{nullptr}
|
||||||
|
{}
|
||||||
|
} // namespace espgui
|
45
src/widgets/iconwidget.h
Normal file
45
src/widgets/iconwidget.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// esp-idf includes
|
||||||
|
#include <esp_log.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "icon.h"
|
||||||
|
#include "tftcolors.h"
|
||||||
|
#include "tftinterface.h"
|
||||||
|
|
||||||
|
namespace espgui {
|
||||||
|
|
||||||
|
class IconWidget
|
||||||
|
{
|
||||||
|
static constexpr const char * const TAG = "IconWidget";
|
||||||
|
public:
|
||||||
|
IconWidget(int x, int y, int iconWidth, int iconHeight, uint16_t bgcolor = espgui::TFT_BLACK);
|
||||||
|
|
||||||
|
void start(TftInterface &tft);
|
||||||
|
|
||||||
|
void start(TftInterface &tft, int32_t iconWidth, int32_t iconHeight, const uint16_t *icon);
|
||||||
|
|
||||||
|
void redraw(TftInterface &tft, int32_t iconWidth, int32_t iconHeight, const uint16_t *icon, uint16_t bgcolor, bool forceRedraw = false);
|
||||||
|
|
||||||
|
void redraw(TftInterface &tft, int32_t iconWidth, int32_t iconHeight, const uint16_t *icon, bool forceRedraw = false);
|
||||||
|
|
||||||
|
void clear(espgui::TftInterface &tft, uint16_t bgcolor);
|
||||||
|
|
||||||
|
void clear(espgui::TftInterface &tft);
|
||||||
|
|
||||||
|
int x() const { return m_x; }
|
||||||
|
|
||||||
|
int y() const { return m_y; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const int m_x;
|
||||||
|
const int m_y;
|
||||||
|
const int m_iconWidth;
|
||||||
|
const int m_iconHeight;
|
||||||
|
|
||||||
|
uint16_t m_bgcolor;
|
||||||
|
|
||||||
|
const uint16_t *m_lastIcon;
|
||||||
|
};
|
||||||
|
}
|
Reference in New Issue
Block a user