FTXUI/src/ftxui/dom/gauge.cpp

40 lines
912 B
C++
Raw Normal View History

#include "ftxui/dom/node.hpp"
#include "ftxui/dom/elements.hpp"
2018-09-20 03:52:25 +08:00
namespace ftxui {
using namespace ftxui;
2018-09-20 03:52:25 +08:00
2018-09-22 15:49:43 +08:00
static wchar_t charset[] = L" ▏▎▍▌▋▊▉█";
2018-09-20 03:52:25 +08:00
class Gauge : public Node {
public:
Gauge(float progress) : progress_(progress) {}
2018-09-22 15:49:43 +08:00
~Gauge() override {}
2018-09-20 03:52:25 +08:00
void ComputeRequirement() override {
requirement_.flex.x = 1;
requirement_.min.y = 1;
}
void Render(Screen& screen) override {
2019-01-20 05:06:05 +08:00
float y = box_.y_min;
float limit = box_.x_min + progress_ * (box_.x_max - box_.x_min + 1);
2018-09-22 15:49:43 +08:00
int limit_int = limit;
2019-01-20 05:06:05 +08:00
int x = box_.x_min;
2018-09-22 15:49:43 +08:00
while (x < limit_int)
screen.at(x++, y) = charset[9];
screen.at(x++, y) = charset[int(9*(limit-limit_int))];
2019-01-20 05:06:05 +08:00
while (x <= box_.x_max)
2018-09-22 15:49:43 +08:00
screen.at(x++, y) = charset[0];
2018-09-20 03:52:25 +08:00
}
private:
float progress_;
};
std::unique_ptr<Node> gauge(float progress) {
return std::make_unique<Gauge>(progress);
}
}; // namespace ftxui