Added variable-range types for progress bars
This commit is contained in:
@ -57,6 +57,8 @@ set(headers
|
|||||||
src/widgets/progressbar.h
|
src/widgets/progressbar.h
|
||||||
src/widgets/reverseprogressbar.h
|
src/widgets/reverseprogressbar.h
|
||||||
src/widgets/slider.h
|
src/widgets/slider.h
|
||||||
|
src/widgets/variablerangeprogressbar.h
|
||||||
|
src/widgets/variablerangereverseprogressbar.h
|
||||||
src/widgets/verticalmeter.h
|
src/widgets/verticalmeter.h
|
||||||
src/widgets/vumeter.h
|
src/widgets/vumeter.h
|
||||||
)
|
)
|
||||||
@ -90,6 +92,8 @@ set(sources
|
|||||||
src/widgets/progressbar.cpp
|
src/widgets/progressbar.cpp
|
||||||
src/widgets/reverseprogressbar.cpp
|
src/widgets/reverseprogressbar.cpp
|
||||||
src/widgets/slider.cpp
|
src/widgets/slider.cpp
|
||||||
|
src/widgets/variablerangeprogressbar.cpp
|
||||||
|
src/widgets/variablerangereverseprogressbar.cpp
|
||||||
src/widgets/verticalmeter.cpp
|
src/widgets/verticalmeter.cpp
|
||||||
src/widgets/vumeter.cpp
|
src/widgets/vumeter.cpp
|
||||||
)
|
)
|
||||||
|
33
src/widgets/variablerangeprogressbar.cpp
Normal file
33
src/widgets/variablerangeprogressbar.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "variablerangeprogressbar.h"
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include <cpputils.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "tftinterface.h"
|
||||||
|
#include "tftcolors.h"
|
||||||
|
|
||||||
|
namespace espgui {
|
||||||
|
VariableRangeProgressBar::VariableRangeProgressBar(int x, int y, int width, int height, int min, int max, uint32_t color) :
|
||||||
|
m_x{x}, m_y{y}, m_width{width}, m_height{height}, m_min{min}, m_max{max}, m_color{color}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableRangeProgressBar::start(TftInterface &tft)
|
||||||
|
{
|
||||||
|
m_lastValue = m_x+1;
|
||||||
|
tft.drawRect(m_x, m_y, m_width, m_height, TFT_WHITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableRangeProgressBar::redraw(TftInterface &tft, int value)
|
||||||
|
{
|
||||||
|
value = cpputils::mapValueClamped(value, m_min, m_max, m_x+1, m_x+m_width-1);
|
||||||
|
|
||||||
|
if (value < m_lastValue)
|
||||||
|
tft.fillRect(value, m_y+1, m_lastValue-value, m_height-2, TFT_BLACK);
|
||||||
|
else if (value > m_lastValue)
|
||||||
|
tft.fillRect(m_lastValue, m_y+1, value-m_lastValue, m_height-2, m_color);
|
||||||
|
|
||||||
|
m_lastValue = value;
|
||||||
|
}
|
||||||
|
} // namespace espgui
|
42
src/widgets/variablerangeprogressbar.h
Normal file
42
src/widgets/variablerangeprogressbar.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// system includes
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include <TFT_eSPI.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "tftcolors.h"
|
||||||
|
|
||||||
|
// forward declares
|
||||||
|
namespace espgui { class TftInterface; }
|
||||||
|
|
||||||
|
namespace espgui {
|
||||||
|
class VariableRangeProgressBar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VariableRangeProgressBar(int x, int y, int width, int height, int min, int max, uint32_t color = TFT_YELLOW);
|
||||||
|
|
||||||
|
void start(TftInterface &tft);
|
||||||
|
void redraw(TftInterface &tft, int value);
|
||||||
|
|
||||||
|
void setMin(int min) { m_min = min; }
|
||||||
|
void setMax(int max) { m_max = max; }
|
||||||
|
void setMinMax(int min, int max) { m_min = min; m_max = max; }
|
||||||
|
|
||||||
|
int getMin() const { return m_min; }
|
||||||
|
int getMax() const { return m_max; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const int m_x;
|
||||||
|
const int m_y;
|
||||||
|
const int m_width;
|
||||||
|
const int m_height;
|
||||||
|
int m_min;
|
||||||
|
int m_max;
|
||||||
|
const uint32_t m_color;
|
||||||
|
|
||||||
|
int m_lastValue{};
|
||||||
|
};
|
||||||
|
} // namespace espgui
|
33
src/widgets/variablerangereverseprogressbar.cpp
Normal file
33
src/widgets/variablerangereverseprogressbar.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "variablerangereverseprogressbar.h"
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include <cpputils.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "tftinterface.h"
|
||||||
|
#include "tftcolors.h"
|
||||||
|
|
||||||
|
namespace espgui {
|
||||||
|
VariableRangeReverseProgressBar::VariableRangeReverseProgressBar(int x, int y, int width, int height, int min, int max, uint32_t color) :
|
||||||
|
m_x{x}, m_y{y}, m_width{width}, m_height{height}, m_min{min}, m_max{max}, m_color{color}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableRangeReverseProgressBar::start(TftInterface &tft)
|
||||||
|
{
|
||||||
|
m_lastValue = m_x+m_width-1;
|
||||||
|
tft.drawRect(m_x, m_y, m_width, m_height, TFT_WHITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableRangeReverseProgressBar::redraw(TftInterface &tft, int value)
|
||||||
|
{
|
||||||
|
value = cpputils::mapValueClamped(value, m_min, m_max, m_x+m_width-1, m_x+1);
|
||||||
|
|
||||||
|
if (value < m_lastValue)
|
||||||
|
tft.fillRect(value, m_y+1, m_lastValue-value, m_height-2, m_color);
|
||||||
|
else if (value > m_lastValue)
|
||||||
|
tft.fillRect(m_lastValue, m_y+1, value-m_lastValue, m_height-2, TFT_BLACK);
|
||||||
|
|
||||||
|
m_lastValue = value;
|
||||||
|
}
|
||||||
|
} // namespace espgui
|
42
src/widgets/variablerangereverseprogressbar.h
Normal file
42
src/widgets/variablerangereverseprogressbar.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// system includes
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include <TFT_eSPI.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "tftcolors.h"
|
||||||
|
|
||||||
|
// forward declares
|
||||||
|
namespace espgui { class TftInterface; }
|
||||||
|
|
||||||
|
namespace espgui {
|
||||||
|
class VariableRangeReverseProgressBar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VariableRangeReverseProgressBar(int x, int y, int width, int height, int min, int max, uint32_t color=TFT_YELLOW);
|
||||||
|
|
||||||
|
void start(TftInterface &tft);
|
||||||
|
void redraw(TftInterface &tft, int value);
|
||||||
|
|
||||||
|
void setMin(int min) { m_min = min; }
|
||||||
|
void setMax(int max) { m_max = max; }
|
||||||
|
void setMinMax(int min, int max) { m_min = min; m_max = max; }
|
||||||
|
|
||||||
|
int getMin() const { return m_min; }
|
||||||
|
int getMax() const { return m_max; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const int m_x;
|
||||||
|
const int m_y;
|
||||||
|
const int m_width;
|
||||||
|
const int m_height;
|
||||||
|
int m_min;
|
||||||
|
int m_max;
|
||||||
|
const uint32_t m_color;
|
||||||
|
|
||||||
|
int m_lastValue{};
|
||||||
|
};
|
||||||
|
} // namespace espgui
|
Reference in New Issue
Block a user